# 功能测试流程文档 > **累积追加模式**:每次完成功能迁移后,将新功能的测试内容追加至本文档末尾。 > 测试人员按章节执行,通过项打 ✅,未通过项记录具体问题。 --- ## 测试环境配置 | 配置项 | 要求 | |--------|------| | 浏览器 | Chrome 最新版、Edge 最新版 | | 屏幕分辨率 | ≥ 1920×1080 | | 后端服务 | 测试环境 API 正常运行 | | 测试账号 | 具有系统管理员权限(含用户管理、角色管理菜单权限) | | 语言 | 先测中文,再切换到英文验证 i18n | --- ## 测试前置条件 1. 后端 API 服务已启动并正常运行 2. 前端项目 `pnpm dev` 正常启动,可访问登录页 3. 使用管理员账号登录系统 4. 侧边栏菜单 **系统设置 → 用户管理** 下可见 **角色** 和 **用户** 两个子菜单 --- --- # 一、角色管理功能测试 > **迁移日期**:2026-05-28 > **对应页面**:`src/views/system-administration/user-management/role/index.vue` > **API 文件**:`src/api/system-administration/role.js` > **路由路径**:`/system_settings/user_management/role` ## 1.1 页面加载与数据展示 ### TC-ROLE-001:角色列表正常加载 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 登录系统 2. 点击菜单「系统设置 → 用户管理 → 角色」 | | **预期结果** | 页面正常加载,显示角色列表表格,包含序号、角色名称、状态、描述、操作列;底部分页组件显示总条数 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-ROLE-002:状态列显示正确 | 项目 | 内容 | |------|------| | **测试步骤** | 查看角色列表中各行的状态列 | | **预期结果** | 状态为 1 时显示绿色 ✅ 图标 + "启用" 文字;状态为 0 时显示灰色 ❌ 图标 + "禁用" 文字 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-ROLE-003:搜索功能 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 在角色名称输入框输入关键字 2. 选择状态下拉为"启用" 3. 点击「查询」按钮 | | **预期结果** | 表格数据按搜索条件过滤,仅显示匹配的角色 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-ROLE-004:重置搜索 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 输入搜索条件并查询 2. 点击「重置」按钮 | | **预期结果** | 搜索条件清空,表格恢复显示全部数据 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-ROLE-005:分页功能 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 切换每页显示条数 2. 点击下一页/上一页 3. 输入页码跳转 | | **预期结果** | 分页切换正常,表格数据按分页加载,总条数正确显示 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ## 1.2 新增角色 ### TC-ROLE-006:打开新增弹框 | 项目 | 内容 | |------|------| | **测试步骤** | 点击表格上方工具栏「新增」按钮 | | **预期结果** | 弹出新增角色弹框,标题显示"新增角色",表单为空(名称、描述为空,状态默认"启用") | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-ROLE-007:新增表单校验 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 打开新增弹框 2. 不填写任何内容直接点击「确定」 | | **预期结果** | 角色名称输入框下方显示红色校验提示"请输入角色名称" | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-ROLE-008:新增角色成功 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 打开新增弹框 2. 输入角色名称(如"测试角色001")3. 输入描述 4. 选择状态为"启用" 5. 点击「确定」 | | **预期结果** | 弹框关闭,提示"操作成功",表格刷新并显示新增的角色 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-ROLE-009:取消新增 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 打开新增弹框 2. 填写部分内容 3. 点击「取消」按钮 | | **预期结果** | 弹框关闭,表格数据不变 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ## 1.3 编辑角色 ### TC-ROLE-010:打开编辑弹框 | 项目 | 内容 | |------|------| | **测试步骤** | 点击非系统角色(非超级管理员等)行操作列的「编辑」按钮 | | **预期结果** | 弹出编辑角色弹框,标题显示"编辑角色",表单回填该角色的名称、描述、状态 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-ROLE-011:编辑角色成功 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 打开编辑弹框 2. 修改角色名称 3. 点击「确定」 | | **预期结果** | 弹框关闭,提示"操作成功",表格数据更新 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ## 1.4 删除角色 ### TC-ROLE-012:删除角色确认 | 项目 | 内容 | |------|------| | **测试步骤** | 点击非系统角色行操作列的「删除」按钮 | | **预期结果** | 弹出确认提示框,内容为"确定要删除该角色吗?",有「确定」和「取消」按钮 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-ROLE-013:删除角色成功 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 点击删除按钮 2. 在确认框中点击「确定」 | | **预期结果** | 提示"操作成功",该角色从列表中消失,分页总数减 1 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-ROLE-014:取消删除 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 点击删除按钮 2. 在确认框中点击「取消」 | | **预期结果** | 确认框关闭,角色数据不变 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ## 1.5 启用/禁用角色 ### TC-ROLE-015:启用角色 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 勾选一个或多个状态为"禁用"的非系统角色 2. 点击工具栏「启用」按钮 | | **预期结果** | 所选角色状态变为"启用" | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-ROLE-016:禁用角色 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 勾选一个或多个状态为"启用"的非系统角色 2. 点击工具栏「禁用」按钮 | | **预期结果** | 所选角色状态变为"禁用" | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-ROLE-017:未选中时点击启用/禁用 | 项目 | 内容 | |------|------| | **测试步骤** | 不勾选任何行,直接点击工具栏「启用」或「禁用」按钮 | | **预期结果** | 提示"请先勾选要操作的数据" | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ## 1.6 系统角色保护 ### TC-ROLE-018:系统角色不可勾选 | 项目 | 内容 | |------|------| | **测试步骤** | 尝试勾选 system=1 的系统角色(如超级管理员) | | **预期结果** | 复选框不可勾选(灰色禁用状态) | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-ROLE-019:系统角色不显示编辑/删除/分配权限按钮 | 项目 | 内容 | |------|------| | **测试步骤** | 查看系统角色(system=1)行操作列 | | **预期结果** | 操作列不显示「编辑」「分配权限」「删除」按钮 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ## 1.7 权限分配抽屉 ### TC-ROLE-020:打开权限分配抽屉 | 项目 | 内容 | |------|------| | **测试步骤** | 点击非系统角色行操作列的「分配权限」按钮 | | **预期结果** | 从右侧滑出抽屉面板,标题显示"分配权限",内含加载中的菜单树,底部有「取消」「确定」按钮 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-ROLE-021:权限树正确加载 | 项目 | 内容 | |------|------| | **测试步骤** | 等待权限树加载完成 | | **预期结果** | 显示完整菜单树(含多层级),该角色已拥有的权限节点处于勾选状态 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-ROLE-022:勾选/取消权限节点 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 勾选一个未勾选的菜单节点 2. 取消一个已勾选的菜单节点 | | **预期结果** | 勾选状态正常切换,父子节点独立勾选(check-strictly 模式) | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-ROLE-023:保存权限分配 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 修改权限勾选 2. 点击抽屉底部「确定」按钮 | | **预期结果** | 提交成功提示"操作成功",抽屉关闭,表格刷新 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-ROLE-024:取消权限分配 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 修改权限勾选 2. 点击抽屉底部「取消」按钮 | | **预期结果** | 抽屉关闭,勾选修改不生效 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | --- --- # 二、用户管理功能测试 > **迁移日期**:2026-05-28 > **对应页面**:`src/views/system-administration/user-management/user/index.vue` > **API 文件**:`src/api/system-administration/user.js` > **路由路径**:`/system_settings/user_management/user` ## 2.1 页面加载与数据展示 ### TC-USER-001:用户列表正常加载 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 登录系统 2. 点击菜单「系统设置 → 用户管理 → 用户」 | | **预期结果** | 页面正常加载,显示用户列表表格,包含序号、账号、姓名、出入证编号、状态、用户组、上次登录IP、上次登录时间、操作列;底部分页组件显示总条数 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-USER-002:状态列显示正确 | 项目 | 内容 | |------|------| | **测试步骤** | 查看用户列表中各行的状态列 | | **预期结果** | 状态为 1 时显示绿色 ✅ 图标 + "启用" 文字;状态为 0 时显示灰色 ❌ 图标 + "禁用" 文字 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-USER-003:搜索功能—按账号 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 在账号输入框输入关键字 2. 点击「查询」 | | **预期结果** | 表格数据按账号关键字过滤 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-USER-004:搜索功能—按姓名 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 在姓名输入框输入关键字 2. 点击「查询」 | | **预期结果** | 表格数据按姓名关键字过滤 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-USER-005:搜索功能—组合条件 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 同时输入账号和姓名关键字 2. 点击「查询」 | | **预期结果** | 表格数据按两个条件同时过滤(AND 逻辑) | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-USER-006:重置搜索 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 输入搜索条件并查询 2. 点击「重置」按钮 | | **预期结果** | 搜索条件清空,表格恢复显示全部数据 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-USER-007:分页功能 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 切换每页显示条数(10/25/50/100)2. 点击下一页/上一页 3. 输入页码跳转 | | **预期结果** | 分页切换正常,表格数据按分页加载,总条数正确显示 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ## 2.2 新增用户 ### TC-USER-008:打开新增弹框 | 项目 | 内容 | |------|------| | **测试步骤** | 点击表格上方工具栏「新增」按钮 | | **预期结果** | 弹出新增用户弹框,标题显示"新增用户",表单包含:账号、密码、确认密码、用户组(下拉)、姓名、出入证编号、状态(默认"启用") | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-USER-009:新增表单校验—必填项 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 打开新增弹框 2. 不填写任何内容直接点击「确定」 | | **预期结果** | 账号、密码、确认密码、用户组字段下方分别显示红色校验提示 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-USER-010:新增表单校验—账号长度 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 打开新增弹框 2. 输入账号为 2 个字符(如"ab")3. 点击「确定」 | | **预期结果** | 账号字段下方提示"长度在 3 到 20 个字符" | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-USER-011:新增表单校验—密码长度 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 打开新增弹框 2. 输入密码为 5 个字符 3. 点击「确定」 | | **预期结果** | 密码字段下方提示"长度在 6 到 64 个字符" | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-USER-012:新增表单校验—两次密码不一致 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 打开新增弹框 2. 密码输入"123456",确认密码输入"654321" 3. 填写其他必填项 4. 点击「确定」 | | **预期结果** | 提示"两次输入的密码不一致",弹框不关闭 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-USER-013:新增用户成功 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 打开新增弹框 2. 输入账号(如"testuser001")3. 输入密码和确认密码 4. 选择用户组 5. 输入姓名 6. 选择状态为"启用" 7. 点击「确定」 | | **预期结果** | 弹框关闭,提示"操作成功",表格刷新并显示新增的用户 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-USER-014:取消新增 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 打开新增弹框 2. 填写部分内容 3. 点击「取消」按钮 | | **预期结果** | 弹框关闭,表格数据不变 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ## 2.3 编辑用户 ### TC-USER-015:打开编辑弹框 | 项目 | 内容 | |------|------| | **测试步骤** | 点击任意用户行操作列的「编辑」按钮 | | **预期结果** | 弹出编辑用户弹框,标题显示"编辑用户",表单回填该用户的账号、用户组、姓名、出入证编号、状态;密码和确认密码字段不显示 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-USER-016:编辑用户成功 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 打开编辑弹框 2. 修改用户组 3. 修改姓名 4. 点击「确定」 | | **预期结果** | 弹框关闭,提示"操作成功",表格数据更新 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ## 2.4 删除用户 ### TC-USER-017:删除其他用户确认 | 项目 | 内容 | |------|------| | **测试步骤** | 点击非当前登录用户行操作列的「删除」按钮 | | **预期结果** | 弹出确认提示框"确定要删除该用户吗?",有「确定」和「取消」按钮 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-USER-018:删除用户成功 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 点击非当前用户的删除按钮 2. 在确认框中点击「确定」 | | **预期结果** | 提示"操作成功",该用户从列表中消失 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-USER-019:不能删除自己 | 项目 | 内容 | |------|------| | **测试步骤** | 找到当前登录用户所在行,点击「删除」按钮 | | **预期结果** | 提示"不能删除自己的账号",不弹出确认框 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ## 2.5 批量删除 ### TC-USER-020:批量删除—正常 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 勾选多个非当前用户的用户行 2. 点击工具栏「批量删除」按钮 3. 确认框中点击「确定」 | | **预期结果** | 提示"操作成功",勾选的用户从列表中消失 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-USER-021:批量删除—包含自己 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 勾选自己 + 其他用户 2. 点击工具栏「批量删除」按钮 | | **预期结果** | 自己的账号自动从勾选列表中排除,仅删除其他用户 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-USER-022:批量删除—未勾选 | 项目 | 内容 | |------|------| | **测试步骤** | 不勾选任何行,直接点击「批量删除」按钮 | | **预期结果** | 提示"请先勾选要操作的数据" | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ## 2.6 启用/禁用用户 ### TC-USER-023:启用用户 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 勾选一个或多个状态为"禁用"的其他用户 2. 点击工具栏「启用」按钮 3. 确认框中点击「确定」 | | **预期结果** | 所选用户状态变为"启用" | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-USER-024:禁用用户 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 勾选一个或多个状态为"启用"的其他用户 2. 点击工具栏「禁用」按钮 3. 确认框中点击「确定」 | | **预期结果** | 所选用户状态变为"禁用" | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-USER-025:不能禁用自己 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 勾选自己的账号 2. 点击工具栏「禁用」按钮 | | **预期结果** | 提示"不能操作自己的账号",操作不执行 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-USER-026:未勾选时点击启用/禁用 | 项目 | 内容 | |------|------| | **测试步骤** | 不勾选任何行,直接点击「启用」或「禁用」按钮 | | **预期结果** | 提示"请先勾选要操作的数据" | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ## 2.7 重置密码 ### TC-USER-027:重置密码确认 | 项目 | 内容 | |------|------| | **测试步骤** | 点击任意用户行操作列的「重置密码」按钮 | | **预期结果** | 弹出确认提示框"确定要重置该用户密码吗?" | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-USER-028:重置密码成功 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 点击「重置密码」按钮 2. 在确认框中点击「确定」 | | **预期结果** | 提示"操作成功",该用户密码被重置 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-USER-029:取消重置密码 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 点击「重置密码」按钮 2. 在确认框中点击「取消」 | | **预期结果** | 确认框关闭,密码不变 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ## 2.8 用户组下拉数据 ### TC-USER-030:新增时用户组下拉有数据 | 项目 | 内容 | |------|------| | **测试步骤** | 打开新增用户弹框,点击用户组下拉框 | | **预期结果** | 下拉框显示所有角色列表(从角色管理页创建的角色应全部出现) | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-USER-031:编辑时用户组下拉有数据 | 项目 | 内容 | |------|------| | **测试步骤** | 打开编辑用户弹框,点击用户组下拉框 | | **预期结果** | 下拉框显示所有角色列表,当前用户所属角色为选中状态 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ## 2.9 多语言切换 ### TC-USER-032:切换到英文 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 切换到英文语言 2. 查看用户管理页面 | | **预期结果** | 所有标签、按钮、表头、弹框标题均切换为英文显示 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-USER-033:英文下操作正常 | 项目 | 内容 | |------|------| | **测试步骤** | 在英文界面下执行:查询、新增、编辑、删除操作 | | **预期结果** | 所有功能正常运行,提示信息为英文 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | --- # 三、菜单配置功能测试 > **迁移日期**:2026-05-29 > **对应页面**:`src/views/system-administration/menu-management/menu-configuration/index.vue` > **API 文件**:`src/api/system-administration/menu-configuration.js` > **路由路径**:`/system_settings/menu_configuration/menu` > **页面结构**:左侧树形菜单 + 右侧表单卡片 + 顶部筛选栏 ## 3.1 页面加载与树形展示 ### TC-MENU-001:菜单配置页面正常加载 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 登录系统 2. 点击菜单「系统设置 → 菜单管理 → 菜单配置」 | | **预期结果** | 页面正常加载,左侧显示后台菜单树形结构(含文件夹/文档图标和菜单名称),右侧默认显示表单卡片(标题为"新增菜单") | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-MENU-002:树节点图标正确显示 | 项目 | 内容 | |------|------| | **测试步骤** | 查看左侧树形结构的各级节点图标 | | **预期结果** | 有子节点的菜单展开时显示「打开的文件夹」图标,收起时显示「关闭的文件夹」图标;叶子节点显示「文档」图标;如果菜单配置了 FontAwesome 图标,则显示对应图标 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-MENU-003:点击树节点加载表单 | 项目 | 内容 | |------|------| | **测试步骤** | 点击左侧树形结构中任意菜单节点 | | **预期结果** | 右侧表单卡片标题变为"编辑菜单",表单回填该菜单的所有信息(上级菜单、名称、别名、图标、排序、导航开关、链接类型、打开方式、URL、参数、备注) | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-MENU-004:禁用菜单节点差异化显示 | 项目 | 内容 | |------|------| | **测试步骤** | 找到状态为"禁用"的菜单节点(如有),查看其显示样式 | | **预期结果** | 禁用的菜单节点文字颜色为灰色,并带有删除线样式(`text-decoration: line-through`),与其他正常节点明显区分 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ## 3.2 模块切换筛选 ### TC-MENU-005:切换到 PDA 模块 | 项目 | 内容 | |------|------| | **测试步骤** | 在顶部筛选栏,点击「PDA」单选按钮 | | **预期结果** | 树形结构自动刷新,切换到 PDA 模块的菜单数据(与后台模块菜单不同) | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-MENU-006:按状态筛选 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 在状态下拉框选择"启用" 2. 点击「查询」按钮 | | **预期结果** | 树形结构仅显示状态为启用的菜单节点 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-MENU-007:按导航属性筛选 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 在导航属性下拉框选择"可见" 2. 点击「查询」按钮 | | **预期结果** | 树形结构仅显示导航属性为可见的菜单节点 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-MENU-008:按菜单深度筛选 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 设置菜单深度为 1 2. 点击「查询」按钮 | | **预期结果** | 树形结构仅显示深度为 1(一级菜单)的节点 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-MENU-009:重置搜索条件 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 设置多个筛选条件并查询 2. 点击「重置」按钮 | | **预期结果** | 筛选条件恢复默认(模块=后台,其他清空),树形结构恢复加载全部后台菜单数据 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ## 3.3 树的展开/收起/过滤 ### TC-MENU-010:一键展开所有节点 | 项目 | 内容 | |------|------| | **测试步骤** | 点击工具栏「展开」按钮 | | **预期结果** | 树形结构所有节点全部展开,显示完整的层级结构 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-MENU-011:一键收起所有节点 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 先点击「展开」使所有节点展开 2. 再点击「收起」按钮 | | **预期结果** | 所有子节点收起,仅显示一级根节点 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-MENU-012:过滤树节点 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 在过滤输入框输入某个菜单名称的关键字(如"用户")2. 观察树形结构变化 | | **预期结果** | 树形结构仅显示名称包含关键字的节点及其父/子路径节点 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-MENU-013:清除过滤 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 输入过滤关键字使树节点被过滤 2. 清除过滤输入框内容(点击清空按钮或手动删除) | | **预期结果** | 树形结构恢复显示所有菜单节点 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ## 3.4 新增菜单(顶层) ### TC-MENU-014:新增顶层菜单—点击按钮 | 项目 | 内容 | |------|------| | **测试步骤** | 点击工具栏「新增顶层菜单」按钮 | | **预期结果** | 右侧表单标题变为"新增菜单",表单所有字段清空为默认值,上级菜单为空(顶层) | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-MENU-015:新增顶层菜单—成功 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 点击「新增顶层菜单」2. 填写名称(如"测试菜单")3. 选择图标 4. 设置排序号 5. 设置导航开关 6. 点击「确定」 | | **预期结果** | 提示"操作成功",左侧树形结构根级新增该菜单节点,表单恢复为新增状态 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-MENU-016:新增顶层菜单—名称必填校验 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 点击「新增顶层菜单」2. 不填写名称,点击「确定」 | | **预期结果** | 名称字段下方提示"名称不能为空",表单不提交 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-MENU-017:新增顶层菜单—名称长度校验 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 点击「新增顶层菜单」2. 名称输入超过 32 个字符 3. 点击「确定」 | | **预期结果** | 名称字段下方提示"长度不能大于 32 个字符" | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ## 3.5 新增子菜单 ### TC-MENU-018:新增子菜单—通过行按钮 | 项目 | 内容 | |------|------| | **测试步骤** | 将鼠标悬停到某个树节点上,点击出现的「新增」按钮 | | **预期结果** | 右侧表单标题变为"新增菜单",上级菜单自动设置为当前悬停的节点,表单其他字段为空 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-MENU-019:新增子菜单—成功 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 悬停到某个树节点上点击「新增」2. 填写名称 3. 选择链接类型为"模块" 4. 填写 URL 5. 点击「确定」 | | **预期结果** | 提示"操作成功",左侧树形结构中该节点下出现新增的子菜单节点,表单恢复为新增状态 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-MENU-020:上级菜单级联选择器搜索 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 点击「新增顶层菜单」2. 在上级菜单级联选择器中输入关键字搜索(如"首页") | | **预期结果** | 级联选择器按关键字过滤,可从中选择任意节点作为上级菜单 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ## 3.6 编辑菜单 ### TC-MENU-021:编辑菜单—修改基本信息 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 点击树中某个菜单节点加载编辑表单 2. 修改名称、别名 3. 修改排序号 4. 点击「修改」按钮 | | **预期结果** | 提示"操作成功",树中该节点的名称和排序立即更新 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-MENU-022:编辑菜单—切换链接类型 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 点击树中某个模块菜单节点 2. 切换链接类型为"外链" 3. 输入外部 URL 4. 点击「修改」 | | **预期结果** | 提示"操作成功",菜单链接类型和外链 URL 保存成功 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-MENU-023:编辑菜单—设置导航属性 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 点击树中某个菜单节点 2. 切换导航开关(开启→关闭 或 关闭→开启)3. 点击「修改」 | | **预期结果** | 提示"操作成功",导航属性更新(在侧边栏菜单渲染时相应生效) | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-MENU-024:编辑菜单—修改打开方式 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 点击树中某个外链菜单 2. 切换打开方式为"新窗口" 3. 点击「修改」 | | **预期结果** | 提示"操作成功",打开方式更新为在新标签页打开 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ## 3.7 删除菜单 ### TC-MENU-025:删除菜单—确认弹框 | 项目 | 内容 | |------|------| | **测试步骤** | 鼠标悬停到某个菜单节点上,点击出现的「删除」按钮 | | **预期结果** | 弹出确认提示框"确定要执行该操作吗?",有「确定」和「取消」按钮 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-MENU-026:删除菜单—成功 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 悬停到叶子菜单节点上点击「删除」2. 在确认框中点击「确定」 | | **预期结果** | 提示"操作成功",该菜单节点从树中消失 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-MENU-027:删除菜单—取消 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 点击「删除」按钮 2. 在确认框中点击「取消」 | | **预期结果** | 确认框关闭,菜单节点未被删除 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ## 3.8 启用/禁用菜单 ### TC-MENU-028:禁用菜单—确认弹框 | 项目 | 内容 | |------|------| | **测试步骤** | 鼠标悬停到某个状态为启用的菜单节点上,点击出现的「禁用」按钮 | | **预期结果** | 弹出确认提示框"状态的切换会影响上下级菜单,是否确认操作?" | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-MENU-029:禁用菜单—成功 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 点击启用菜单的「禁用」按钮 2. 在确认框中点击「确定」 | | **预期结果** | 提示"操作成功",树刷新后该节点显示为灰色+删除线的禁用样式 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-MENU-030:启用菜单—成功 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 点击禁用菜单的「启用」按钮 2. 在确认框中点击「确定」 | | **预期结果** | 提示"操作成功",树刷新后该节点恢复正常显示样式 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ## 3.9 拖拽排序 ### TC-MENU-031:拖拽调整同级顺序 | 项目 | 内容 | |------|------| | **测试步骤** | 在同级菜单中,拖拽某个节点到另一个同级节点的上方或下方 | | **预期结果** | 松手后触发排序 API,同级节点的排序号自动更新,页面刷新后顺序保持 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-MENU-032:拖拽移动到其他父级 | 项目 | 内容 | |------|------| | **测试步骤** | 拖拽某个菜单节点到另一个非同级父节点内部 | | **预期结果** | 菜单移动到新父级下,页面刷新后位置保持 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ## 3.10 表单校验 ### TC-MENU-033:别名长度校验 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 新增或编辑菜单 2. 别名输入超过 16 个字符 3. 点击提交 | | **预期结果** | 别名字段下方提示"长度不能大于 16 个字符" | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-MENU-034:URL 长度校验 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 新增外链菜单 2. URL 输入超过 255 个字符 3. 点击提交 | | **预期结果** | URL 字段下方提示"长度不能大于 255 个字符" | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-MENU-035:排序号数字校验 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 新增或编辑菜单 2. 排序号输入非数字字符 3. 点击提交 | | **预期结果** | 排序号字段下方提示"必须为数字值" | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ## 3.11 多语言切换 ### TC-MENU-036:切换到英文 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 切换到英文语言 2. 查看菜单配置页面 | | **预期结果** | 所有标签、按钮、表单字段名、提示信息均切换为英文显示 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-MENU-037:英文下操作正常 | 项目 | 内容 | |------|------| | **测试步骤** | 在英文界面下执行:切换模块、新增顶层菜单、新增子菜单、编辑菜单、删除菜单、启用/禁用、拖拽排序 | | **预期结果** | 所有功能正常运行,提示信息为英文 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | --- # 四、接口日志功能测试 > **迁移日期**:2026-05-29 > **对应页面**:`src/views/system-administration/system-utilities/api-logs/index.vue` > **API 文件**:`src/api/system-administration/api-logs.js` > **路由路径**:`/system_settings/system_assistant/interface_log` > **页面结构**:顶部搜索区域 + 数据表格 + 查看响应弹框组件 ## 4.1 页面加载与数据展示 ### TC-API-001:接口日志页面正常加载 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 登录系统 2. 点击菜单「系统设置 → 系统工具 → 接口日志」 | | **预期结果** | 页面正常加载,显示接口日志列表表格,包含 ID、IP、请求方法、响应状态、响应时长、工序编码、托盘号、电池条码、批次号、进程ID、创建日期、操作列;底部分页组件显示总条数 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-API-002:响应状态列显示正确 | 项目 | 内容 | |------|------| | **测试步骤** | 查看接口日志列表中各行的响应状态列 | | **预期结果** | 状态为 0 时显示绿色 ✅ 图标 + "成功"文字;状态非 0 时显示红色 ❌ 图标 + "失败"文字 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-API-003:表格列完整显示 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 观察表格列头 2. 横向滚动查看所有列 | | **预期结果** | 表格包含以下列:ID、IP、请求方法、响应状态、响应时长(毫秒)、工序编码、托盘号、电池条码、批次号、进程ID、创建日期、操作(共 12 列),操作列固定在右侧 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ## 4.2 搜索筛选 ### TC-API-004:按 IP 搜索 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 在 IP 输入框输入已知 IP 地址 2. 点击「查询」按钮 | | **预期结果** | 表格仅显示该 IP 来源的接口日志 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-API-005:按接口名称搜索 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 在接口名称输入框输入关键字 2. 点击「查询」按钮 | | **预期结果** | 表格按接口名称过滤,仅显示匹配的记录 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-API-006:按状态筛选 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 在状态下拉框选择"成功" 2. 点击「查询」按钮 | | **预期结果** | 表格仅显示响应状态为成功的日志记录 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-API-007:按批次搜索 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 在批次输入框输入已知批次号 2. 点击「查询」按钮 | | **预期结果** | 表格仅显示该批次的日志记录 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-API-008:按时间范围筛选 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 在创建时间选择器中设置一个时间范围 2. 点击「查询」按钮 | | **预期结果** | 表格仅显示该时间范围内的日志记录 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-API-009:组合搜索 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 同时设置多个搜索条件(如 IP + 状态 + 时间范围)2. 点击「查询」按钮 | | **预期结果** | 表格按照所有条件的交集进行过滤显示 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-API-010:重置搜索条件 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 设置多个搜索条件并查询 2. 点击「重置」按钮 | | **预期结果** | 所有搜索条件清空,表格恢复显示全部数据(第一页) | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ## 4.3 分页功能 ### TC-API-011:分页切换 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 切换每页显示条数(10 → 20 → 50)2. 点击下一页/上一页 | | **预期结果** | 分页切换正常,表格数据按分页加载,总条数正确显示 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ## 4.4 查看响应 ### TC-API-012:打开查看响应弹框 | 项目 | 内容 | |------|------| | **测试步骤** | 点击任一接口日志行操作列的「查看响应」按钮 | | **预期结果** | 弹出"响应"弹框,显示两段内容:请求体和响应内容,均为 JSON 树形结构展示 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-API-013:复制请求内容 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 打开查看响应弹框 2. 点击「复制请求内容」按钮 | | **预期结果** | 请求体的 JSON 内容被复制到剪贴板,提示"操作成功" | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-API-014:复制响应内容 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 打开查看响应弹框 2. 点击「复制响应内容」按钮 | | **预期结果** | 响应内容的 JSON 被复制到剪贴板,提示"操作成功" | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-API-015:关闭响应弹框 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 打开查看响应弹框 2. 点击弹框右上角 X 按钮或弹框遮罩层 | | **预期结果** | 弹框关闭 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-API-016:响应弹框 JSON 树形展开/折叠 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 打开查看响应弹框 2. 点击请求体或响应内容 JSON 树中的展开/折叠箭头 | | **预期结果** | JSON 节点可正常展开/折叠,嵌套数据层级清晰可见 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-API-017:切换不同行的响应数据 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 点击第 1 行「查看响应」→ 记下内容后关闭 2. 点击第 3 行「查看响应」 | | **预期结果** | 每次打开的弹框显示对应行的请求体和响应内容,数据不混淆 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ## 4.5 多语言切换 ### TC-API-018:切换到英文 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 切换到英文语言 2. 查看接口日志页面 | | **预期结果** | 所有标签、按钮、表头、弹框标题均切换为英文显示;状态列显示 "Success" / "Failure" | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-API-019:英文下搜索功能正常 | 项目 | 内容 | |------|------| | **测试步骤** | 在英文界面下执行:按 IP 搜索、按状态筛选、查看响应、复制请求/响应内容 | | **预期结果** | 所有功能正常运行,提示信息为英文 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-API-020:英文下查看响应弹框正常 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 切换到英文 2. 点击「View Response」打开弹框 | | **预期结果** | 弹框标题为 "Response",分隔标题为 "Request Body" / "Response Body",按钮文字为 "Copy Request" / "Copy Response" | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | --- # 五、操作日志功能测试 > **迁移日期**:2026-05-29 > **对应页面**:`src/views/system-administration/system-utilities/operation-logs/index.vue` > **API 文件**:`src/api/system-administration/operation-logs.js` > **路由路径**:`/system_settings/system_assistant/operate_log` > **页面结构**:折叠式搜索区 + 数据表格 + 查看响应弹框(复用) ## 5.1 页面加载与数据展示 ### TC-OPL-001:操作日志页面正常加载 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 登录系统 2. 点击菜单「系统设置 → 系统工具 → 操作日志」 | | **预期结果** | 页面正常加载,显示操作日志列表表格,包含 ID、操作人、IP、状态、操作动作名称、操作动作编码、请求路径、批次、托盘号、创建日期、操作列;底部显示分页组件和总条数 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-OPL-002:响应状态列显示正确 | 项目 | 内容 | |------|------| | **测试步骤** | 查看操作日志列表中各行的状态列 | | **预期结果** | 状态为 0 时显示绿色 ✅ + "成功"文字;状态非 0 时显示红色 ❌ + "失败"文字 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-OPL-003:表格列完整显示 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 观察表格列头 2. 横向滚动查看所有列 | | **预期结果** | 表格包含以下列:ID、操作人、IP、状态、操作动作名称、操作动作编码、请求路径、批次、托盘号、创建日期、操作(共 11 列),操作列固定在右侧 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ## 5.2 搜索筛选 ### TC-OPL-004:按 IP 搜索 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 在 IP 输入框输入已知 IP 地址 2. 点击「查询」按钮 | | **预期结果** | 表格仅显示该 IP 来源的操作日志 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-OPL-005:按操作人搜索 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 在操作人下拉框选择一个用户 2. 点击「查询」按钮 | | **预期结果** | 表格仅显示该操作人的日志;下拉框支持输入关键字搜索过滤 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-OPL-006:展开更多搜索条件 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 点击「展开更多」按钮 2. 观察搜索区 | | **预期结果** | 搜索区展开显示额外条件:批次、托盘号、创建时间(时间范围选择器);按钮变为「收起」图标向上 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-OPL-007:折叠搜索条件 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 先展开搜索区 2. 点击「收起」按钮 | | **预期结果** | 额外搜索条件隐藏,搜索区恢复为单行;按钮变回「展开更多」图标向下 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-OPL-008:组合搜索 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 同时设置多个搜索条件(如 IP + 操作人 + 时间范围)2. 点击「查询」按钮 | | **预期结果** | 表格按照所有条件的交集进行过滤显示 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-OPL-009:重置搜索条件 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 设置搜索条件并查询 2. 点击「重置」按钮 | | **预期结果** | 所有搜索条件清空,下拉框恢复默认,表格恢复显示全部数据(第一页) | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ## 5.3 分页功能 ### TC-OPL-010:分页切换 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 切换每页显示条数(10 → 20 → 50)2. 点击下一页/上一页 | | **预期结果** | 分页切换正常,表格数据按分页加载,总条数正确显示 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ## 5.4 查看响应 ### TC-OPL-011:打开查看响应弹框 | 项目 | 内容 | |------|------| | **测试步骤** | 点击任一操作日志行操作列的「查看响应」按钮 | | **预期结果** | 弹出"响应"弹框,显示两段 JSON 树形结构:请求体和响应内容 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-OPL-012:复制请求内容 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 打开查看响应弹框 2. 点击「复制请求内容」按钮 | | **预期结果** | 请求体的 JSON 被复制到剪贴板,提示"操作成功" | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-OPL-013:复制响应内容 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 打开查看响应弹框 2. 点击「复制响应内容」按钮 | | **预期结果** | 响应内容的 JSON 被复制到剪贴板,提示"操作成功" | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-OPL-014:关闭响应弹框 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 打开查看响应弹框 2. 点击弹框右上角 X 或遮罩层 | | **预期结果** | 弹框关闭 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ## 5.5 多语言切换 ### TC-OPL-015:切换到英文 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 切换到英文语言 2. 查看操作日志页面 | | **预期结果** | 所有标签、按钮、表头、弹框均切换为英文;状态列显示 "Success" / "Failure" | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-OPL-016:英文下搜索功能正常 | 项目 | 内容 | |------|------| | **测试步骤** | 在英文界面下执行:按 IP 搜索、按操作人筛选、展开/收起搜索区 | | **预期结果** | 所有功能正常运行,提示信息为英文;操作人下拉框显示英文用户名 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-OPL-017:英文下查看响应弹框正常 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 切换到英文 2. 点击「View Response」打开弹框 | | **预期结果** | 弹框标题 "Response",分隔标题 "Request Body" / "Response Content",按钮 "Copy Request Content" / "Copy Response Content" | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-OPL-018:表格无选中框 | 项目 | 内容 | |------|------| | **测试步骤** | 查看操作日志表格的左侧 | | **预期结果** | 表格左侧无复选框选中列(只读页面,无需批量操作) | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | --- # 六、问题帮助功能测试 > **迁移日期**:2026-05-29 > **对应页面**:`src/views/system-administration/system-utilities/problem-help/index.vue` > **API 文件**:`src/api/system-administration/problem-help.js` > **路由路径**:`/system_settings/system_assistant/problem_help` > **页面结构**:搜索区 + 左侧树形菜单 + 右侧 Markdown 预览 + 分类弹框 + 文档编辑抽屉 ## 6.1 页面加载与数据展示 ### TC-PHP-001:问题帮助页面正常加载 | 项目 | 内容 | |------|------| | **测试前置条件** | 系统中已存在问题帮助的分类目录和文档数据 | | **测试步骤** | 1. 登录系统 2. 点击菜单「系统设置 → 系统工具 → 问题帮助」 | | **预期结果** | 页面正常加载,左侧显示树形分类菜单,右侧显示空白提示"请从左侧菜单选择文档查看" | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-PHP-002:树形菜单展示完整 | 项目 | 内容 | |------|------| | **测试步骤** | 观察左侧树形菜单 | | **预期结果** | 菜单以树形层级结构展示所有分类目录和文档节点;md 类型文档显示文件夹图标 📁,file 类型文档显示文件图标 📄 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-PHP-003:点击文档查看内容 | 项目 | 内容 | |------|------| | **测试前置条件** | 树形菜单中存在 md 类型的文档 | | **测试步骤** | 1. 展开树形菜单的分类目录 2. 点击一个 md 文档节点 | | **预期结果** | 右侧区域显示 Markdown 渲染后的文档内容,包含标题、提交人、创建时间信息 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-PHP-004:树菜单展开/折叠 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 点击一个分类目录展开其子节点 2. 点击另一个分类目录 | | **预期结果** | 树形菜单支持唯一展开(展开新分类时旧分类自动收起),子节点列表正常显示 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ## 6.2 搜索功能 ### TC-PHP-005:搜索文档 | 项目 | 内容 | |------|------| | **测试前置条件** | 系统中存在包含搜索关键字的文档 | | **测试步骤** | 1. 在顶部搜索框输入文档标题关键字 2. 点击搜索按钮或按 Enter | | **预期结果** | 如果查找结果存在数据,左侧树形菜单上方出现搜索结果卡片区域,显示匹配的文档标题和描述;如果没有匹配数据,无结果展示 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-PHP-006:清除搜索结果 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 执行搜索出现结果后 2. 点击搜索输入框的清除按钮 | | **预期结果** | 搜索结果区域消失,恢复显示树形菜单 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-PHP-007:搜索空内容 | 项目 | 内容 | |------|------| | **测试步骤** | 不输入任何内容,直接点击搜索按钮 | | **预期结果** | 搜索结果区域清空 / 不出现搜索结果 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ## 6.3 分类目录管理 ### TC-PHP-008:新增分类目录 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 点击搜索框旁的「新增目录」按钮 2. 在弹框中填写分类名称 3. 选择上级菜单(可选)4. 选择查看权限角色 5. 设置序号 6. 点击「确定」 | | **预期结果** | 提示"添加成功",弹框关闭,树形菜单中显示新分类 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-PHP-009:编辑分类目录 | 项目 | 内容 | |------|------| | **测试前置条件** | 先在树形菜单上选中一个分类目录 | | **测试步骤** | 1. 点击树形菜单中的一个分类节点使其被选中 2. 点击左侧工具栏的「编辑」按钮 3. 修改分类名称 4. 点击「修改」 | | **预期结果** | 提示"修改成功",弹框关闭,树形菜单中的分类名称更新 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-PHP-010:删除分类目录 | 项目 | 内容 | |------|------| | **测试前置条件** | 先在树形菜单上选中一个分类目录 | | **测试步骤** | 1. 点击分类节点使其选中 2. 点击「删除」按钮 3. 确认删除弹框 | | **预期结果** | 删除确认弹框出现,确认后提示"删除成功",树形菜单刷新 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-PHP-011:未选中分类时编辑/删除提示 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 不选中任何树节点 2. 直接点击「编辑」或「删除」按钮 | | **预期结果** | 弹出提示"请先选择需要编辑的目录"或"请先选择需要删除的目录" | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-PHP-012:取消删除操作 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 选中分类后点击「删除」2. 在确认弹框中点击「取消」 | | **预期结果** | 删除操作取消,分类不丢失 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ## 6.4 文档管理 ### TC-PHP-013:新增文档 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 点击左侧工具栏「新增文档」2. 在抽屉中填写标题、描述 3. 选择上级分类菜单 4. 选择权限角色 5. 设置序号 6. 在 Markdown 编辑器中输入内容 7. 点击「新增」 | | **预期结果** | 提示"新增成功",抽屉关闭,树形菜单中显示新文档 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-PHP-014:编辑文档 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 在树形菜单中找到 md 文档节点 2. 点击文档右侧的「编辑」按钮 | | **预期结果** | 打开编辑抽屉,回填该文档的标题、描述、分类、内容等数据 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-PHP-015:删除文档 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 在树形菜单中文档节点右侧点击「删除」2. 确认删除 | | **预期结果** | 弹出确认框,确认后提示"删除成功",树形菜单刷新 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-PHP-016:编辑抽屉关闭确认 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 打开新增文档抽屉并填写部分内容 2. 直接点击抽屉遮罩层或右上角 X 关闭 | | **预期结果** | 弹出"确认关闭?"确认框,确认后抽屉关闭,表单重置 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-PHP-017:文档表单验证 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 打开新增文档抽屉 2. 不填写标题直接点击「新增」 | | **预期结果** | 表单验证提示"请输入标题"和"请输入描述",阻止提交 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ## 6.5 多语言切换 ### TC-PHP-018:切换到英文 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 切换到英文语言 2. 查看问题帮助页面 | | **预期结果** | 所有标签、按钮、弹框标题均切换为英文;工具栏显示 "Add Directory"、"Add Document"、"Edit"、"Delete" | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-PHP-019:英文下搜索功能正常 | 项目 | 内容 | |------|------| | **测试步骤** | 在英文界面下执行:搜索文档、查看搜索结果、清除搜索 | | **预期结果** | 所有功能正常运行,提示信息为英文 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-PHP-020:英文下分类弹框正常 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 切换到英文 2. 点击「Add Directory」打开分类弹框 | | **预期结果** | 弹框标题为 "Add Category" 或 "Edit Category",表单字段标签为英文,底部按钮为 "Confirm" / "Cancel" | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | ### TC-PHP-021:英文下Markdown编辑器正常 | 项目 | 内容 | |------|------| | **测试步骤** | 1. 切换到英文 2. 点击「Add Document」打开编辑器抽屉 | | **预期结果** | 抽屉标题和表单标签为英文;验证提示信息为英文 | | **实际结果** | | | **测试状态** | ⬜ 通过 / ⬜ 未通过 | | **问题描述** | | --- ## 测试结果汇总 | 功能模块 | 测试用例数 | 通过 | 未通过 | 通过率 | |----------|-----------|------|--------|--------| | 角色管理 | 24 | | | | | 用户管理 | 33 | | | | | 菜单配置 | 37 | | | | | 接口日志 | 20 | | | | | 操作日志 | 18 | | | | | 问题帮助 | 21 | | | | | **合计** | **153** | | | | --- > **版本记录**: > - v1.0 (2026-05-28):初始版本,包含角色管理功能(24 条用例) > - v1.1 (2026-05-28):追加用户管理功能(33 条用例) > - v1.2 (2026-05-29):追加菜单配置功能(37 条用例) > - v1.3 (2026-05-29):追加接口日志功能(20 条用例) > - v1.4 (2026-05-29):追加操作日志功能(18 条用例) > - v1.5 (2026-05-29):追加问题帮助功能(21 条用例)