# 功能测试流程文档

> **累积追加模式**：每次完成功能迁移后，将新功能的测试内容追加至本文档末尾。  
> 测试人员按章节执行，通过项打 ✅，未通过项记录具体问题。

---

## 测试环境配置

| 配置项 | 要求 |
|--------|------|
| 浏览器 | 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** | | | |

---

---
---

# 七、产品列表功能测试

> **迁移日期**：2026-06-01  
> **对应页面**：`src/views/production-master-data/product-management/product-list/index.vue`  
> **API 文件**：`src/api/production-master-data/product-management.js`  
> **路由路径**：`/production_configuration/product_management/product_list`  
> **页面结构**：搜索区（产品代号搜索）+ 数据表格 + 新增/编辑弹框

## 7.1 页面加载与数据展示

### TC-PROD-001：产品列表页面正常加载

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 登录系统 2. 点击菜单「生产配置 → 产品管理 → 产品列表」 |
| **预期结果** | 页面正常加载，显示产品列表表格，包含序号、产品代号、产品名称、备注、操作列；底部分页组件显示总条数 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PROD-002：表格列完整显示

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 观察表格列头 2. 横向滚动查看所有列 |
| **预期结果** | 表格包含以下列：序号、产品代号、产品名称、备注、操作（共 5 列），操作列固定在右侧 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PROD-003：空数据状态展示

| 项目 | 内容 |
|------|------|
| **测试前置条件** | 确保数据库中没有产品数据（或清空搜索条件后无匹配数据） |
| **测试步骤** | 1. 在搜索框中输入一个不存在产品代号 2. 点击「查询」 |
| **预期结果** | 表格显示空状态提示（如"暂无数据"），分页显示总数为 0 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PROD-004：表格序号正确递增

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 加载产品列表 2. 观察序号列 |
| **预期结果** | 序号从 1 开始递增，翻页后序号接续正确 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

## 7.2 搜索与分页

### TC-PROD-005：按产品代号搜索

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 在产品代号输入框中输入已知存在的产品代号（如"P001"）2. 点击「查询」按钮 |
| **预期结果** | 表格仅显示产品代号匹配的记录 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PROD-006：模糊搜索产品代号

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 在产品代号输入框中输入部分关键字（如"P"）2. 点击「查询」按钮 |
| **预期结果** | 表格显示所有产品代号包含关键字的记录 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PROD-007：搜索无匹配结果

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 在产品代号输入框中输入不存在的代号（如"ZZZ999"）2. 点击「查询」按钮 |
| **预期结果** | 表格显示空状态，分页总数显示为 0 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PROD-008：回车键触发搜索

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 在产品代号输入框中输入关键字 2. 按键盘 Enter 键 |
| **预期结果** | 触发表格搜索，效果与点击「查询」按钮一致 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PROD-009：重置搜索条件

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 输入搜索条件并查询 2. 点击「重置」按钮 |
| **预期结果** | 搜索输入框内容清空，表格恢复显示全部数据（回到第一页） |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PROD-010：输入框清空按钮

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 在产品代号输入框输入内容 2. 点击输入框右侧的清空（×）图标 |
| **预期结果** | 输入框内容被清空 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PROD-011：分页切换—切换每页条数

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 点击分页组件的每页条数下拉框 2. 依次切换为 10、25、50、100 |
| **预期结果** | 每种条数下表格显示正确数量的数据，总页数相应变化 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PROD-012：分页切换—翻页

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 点击分页组件的「下一页」按钮 2. 点击「上一页」按钮 3. 直接输入页码跳转（如跳到第 3 页） |
| **预期结果** | 页码切换后表格数据显示对应页的数据，当前页码高亮正确 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

## 7.3 新增产品

### TC-PROD-013：打开新增弹框

| 项目 | 内容 |
|------|------|
| **测试步骤** | 点击表格上方工具栏「新增」按钮 |
| **预期结果** | 弹出新增产品弹框，标题显示"新增产品"，表单字段为空：产品代号（输入框）、产品名称（输入框）、备注（多行文本域） |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PROD-014：新增产品成功

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 打开新增弹框 2. 输入产品代号（如"P-TEST-001"）3. 输入产品名称（如"测试产品001"）4. 输入备注（如"用于测试"）5. 点击「确定」 |
| **预期结果** | 弹框关闭，提示"操作成功"，表格刷新并显示新增的产品 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PROD-015：新增产品—仅填写必填项

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 打开新增弹框 2. 必填：产品代号和产品名称 3. 备注留空 4. 点击「确定」 |
| **预期结果** | 弹框关闭，提示"操作成功"，备注字段在表格中显示为空 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PROD-016：取消新增

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 打开新增弹框 2. 填写部分内容 3. 点击「取消」按钮或弹框右上角 X |
| **预期结果** | 弹框关闭，表格数据不变 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PROD-017：连续新增

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 新增产品 A 成功后 2. 再次点击「新增」按钮 3. 新增产品 B |
| **预期结果** | 弹框表单每次打开时均为空状态，上次填写的内容不残留；两次新增均成功 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

## 7.4 编辑产品

### TC-PROD-018：打开编辑弹框

| 项目 | 内容 |
|------|------|
| **测试步骤** | 点击产品列表中任一产品行操作列的「编辑」按钮 |
| **预期结果** | 弹出编辑产品弹框，标题显示"编辑产品"，表单回填该产品的产品代号、产品名称、备注 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PROD-019：编辑产品—修改产品名称

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 打开编辑弹框 2. 修改产品名称（如改为"测试产品-已修改"）3. 点击「确定」 |
| **预期结果** | 弹框关闭，提示"操作成功"，表格中该行产品名称更新 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PROD-020：编辑产品—修改备注

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 打开编辑弹框 2. 修改备注内容 3. 点击「确定」 |
| **预期结果** | 弹框关闭，提示"操作成功"，备注更新 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PROD-021：编辑产品—产品代号不可修改（如适用）

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 打开编辑弹框 2. 查看产品代号输入框 |
| **预期结果** | 产品代号字段显示为禁用状态（灰色不可编辑），仅产品名称和备注可修改 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PROD-022：取消编辑

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 打开编辑弹框 2. 修改内容 3. 点击「取消」按钮 |
| **预期结果** | 弹框关闭，原数据不变 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

## 7.5 删除产品

### TC-PROD-023：删除产品确认弹框

| 项目 | 内容 |
|------|------|
| **测试步骤** | 点击产品列表中任一产品行操作列的「删除」按钮 |
| **预期结果** | 弹出确认提示框，内容为"确定要执行该操作吗?"，有「确定」和「取消」按钮 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PROD-024：删除产品成功

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 点击产品行的「删除」按钮 2. 在确认框中点击「确定」 |
| **预期结果** | 提示"操作成功"，该产品从列表中消失，分页总数减 1 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PROD-025：取消删除

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 点击「删除」按钮 2. 在确认框中点击「取消」 |
| **预期结果** | 确认框关闭，产品数据保持不变 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PROD-026：删除最后一页唯一数据后的分页处理

| 项目 | 内容 |
|------|------|
| **测试前置条件** | 存在数据，且最后一页只有一条记录 |
| **测试步骤** | 1. 翻到最后一页 2. 删除该页唯一的产品 |
| **预期结果** | 提示"操作成功"，自动跳转到前一页，分页总数减 1 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

## 7.6 表单校验

### TC-PROD-027：新增表单校验—产品代号必填

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 打开新增弹框 2. 不填写产品代号 3. 填写产品名称 4. 点击「确定」 |
| **预期结果** | 产品代号输入框下方显示红色校验提示"请输入产品代号"，弹框不关闭 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PROD-028：新增表单校验—产品名称必填

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 打开新增弹框 2. 填写产品代号 3. 不填写产品名称 4. 点击「确定」 |
| **预期结果** | 产品名称输入框下方显示红色校验提示"请输入产品名称"，弹框不关闭 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PROD-029：新增表单校验—产品代号长度上限

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 打开新增弹框 2. 在产品代号输入框中输入超过 100 个字符的字符串 3. 点击「确定」 |
| **预期结果** | 产品代号输入框下方显示红色校验提示"长度在 1 到 100 个字符" |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PROD-030：新增表单校验—产品名称长度上限

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 打开新增弹框 2. 在产品名称输入框中输入超过 100 个字符的字符串 3. 点击「确定」 |
| **预期结果** | 产品名称输入框下方显示红色校验提示"长度在 1 到 100 个字符" |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PROD-031：新增表单校验—中文字符正常输入

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 打开新增弹框 2. 产品名称输入中文字符 3. 点击「确定」 |
| **预期结果** | 表单正常提交，中文内容正确保存 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PROD-032：编辑表单校验—修改后清空必填项

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 打开已存在产品的编辑弹框 2. 清空产品名称 3. 点击「确定」 |
| **预期结果** | 产品名称输入框下方显示红色校验提示"请输入产品名称" |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

## 7.7 多语言切换

### TC-PROD-033：切换到英文—页面标签

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 切换到英文语言 2. 点击菜单进入产品列表页面 |
| **预期结果** | 搜索区标签显示"Product Code"、"Search"、"Reset"；表格列头显示"No."、"Product Code"、"Product Name"、"Remark"、"Actions"；工具栏按钮显示"Add" |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PROD-034：切换到英文—弹框标签

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 切换到英文 2. 点击新增按钮 3. 查看弹框 |
| **预期结果** | 弹框标题为"Add Product"；表单标签为"Product Code"、"Product Name"、"Remark"；底部按钮为"Confirm"、"Cancel" |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PROD-035：切换到英文—编辑弹框

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 切换到英文 2. 点击某行的编辑按钮 |
| **预期结果** | 弹框标题为"Edit Product"，表单回填正确，所有标签为英文 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PROD-036：切换到英文—提示信息

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 切换到英文 2. 执行新增/编辑/删除操作 |
| **预期结果** | 操作成功提示为"Operation succeeded"；删除确认框内容为"Are you sure to delete?"；校验提示为英文 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PROD-037：英文下所有操作功能正常

| 项目 | 内容 |
|------|------|
| **测试步骤** | 在英文界面下执行：搜索、新增产品、编辑产品、删除产品、分页切换 |
| **预期结果** | 所有功能正常运行，交互逻辑与中文界面一致 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

---
---

# 八、工艺流程类别功能测试

> **迁移日期**：2026-06-01  
> **对应页面**：`src/views/production-master-data/process-model/process-category/index.vue`  
> **API 文件**：`src/api/production-master-data/process-category.js`  
> **路由路径**：`/production_configuration/technology_model/technology_flow_category`  
> **页面结构**：搜索区（编码+名称搜索）+ 数据表格 + 新增/编辑弹框

## 8.1 页面加载与数据展示

### TC-PCAT-001：工艺流程类别页面正常加载

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 登录系统 2. 点击菜单「生产配置 → 工艺模型 → 工艺流程类别」 |
| **预期结果** | 页面正常加载，显示工艺流程类别列表表格，包含序号、流程类别编码、流程类别名称、备注、操作列；底部分页组件显示总条数 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PCAT-002：表格列完整显示

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 观察表格列头 2. 横向滚动查看所有列 |
| **预期结果** | 表格包含以下列：序号、流程类别编码、流程类别名称、备注、操作（共 5 列），操作列固定在右侧 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PCAT-003：空数据状态展示

| 项目 | 内容 |
|------|------|
| **测试前置条件** | 确保数据库中没有工艺流程类别数据（或清空搜索条件后无匹配数据） |
| **测试步骤** | 1. 在搜索框中输入一个不存在的编码 2. 点击「查询」 |
| **预期结果** | 表格显示空状态提示（如"暂无数据"），分页显示总数为 0 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PCAT-004：表格序号正确递增

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 加载工艺流程类别列表 2. 观察序号列 3. 翻页后观察序号 |
| **预期结果** | 序号从 1 开始递增，翻页后序号接续正确 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

## 8.2 搜索与分页

### TC-PCAT-005：按流程类别编码搜索

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 在流程类别编码输入框中输入已知存在的编码 2. 点击「查询」按钮 |
| **预期结果** | 表格仅显示编码匹配的记录 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PCAT-006：按流程类别名称搜索

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 在流程类别名称输入框中输入已知存在的名称 2. 点击「查询」按钮 |
| **预期结果** | 表格仅显示名称匹配的记录 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PCAT-007：组合搜索（编码+名称）

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 同时输入流程类别编码和名称关键字 2. 点击「查询」按钮 |
| **预期结果** | 表格按照两个条件同时过滤（AND 逻辑），显示匹配的记录 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PCAT-008：回车键触发搜索

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 在编码或名称输入框中输入关键字 2. 按键盘 Enter 键 |
| **预期结果** | 触发表格搜索，效果与点击「查询」按钮一致 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PCAT-009：重置搜索条件

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 输入搜索条件并查询 2. 点击「重置」按钮 |
| **预期结果** | 搜索输入框内容清空，表格恢复显示全部数据（回到第一页） |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PCAT-010：输入框清空按钮

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 在编码输入框输入内容 2. 点击输入框右侧的清空（×）图标 |
| **预期结果** | 输入框内容被清空 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PCAT-011：分页切换—每页条数

| 项目 | 内容 |
|------|------|
| **测试步骤** | 点击分页组件的每页条数下拉框，依次切换为 10、25、50、100 |
| **预期结果** | 每种条数下表格显示正确数量的数据，总页数相应变化 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PCAT-012：分页切换—翻页

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 点击分页组件的「下一页」按钮 2. 点击「上一页」按钮 3. 直接输入页码跳转（如跳到第 3 页） |
| **预期结果** | 页码切换后表格数据显示对应页的数据，当前页码高亮正确 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

## 8.3 新增工艺流程类别

### TC-PCAT-013：打开新增弹框

| 项目 | 内容 |
|------|------|
| **测试步骤** | 点击表格上方工具栏「新增」按钮 |
| **预期结果** | 弹出新增工艺流程类别弹框，标题显示"新增工艺流程类别"，表单字段为空：流程类别编码（输入框）、流程类别名称（输入框）、备注（多行文本域） |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PCAT-014：新增工艺流程类别成功

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 打开新增弹框 2. 输入流程类别编码（如"PC-001"）3. 输入流程类别名称（如"测试流程类别001"）4. 输入备注（如"用于测试"）5. 点击「确定」 |
| **预期结果** | 弹框关闭，提示"操作成功"，表格刷新并显示新增的流程类别 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PCAT-015：新增工艺流程类别—仅填写必填项

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 打开新增弹框 2. 填写编流程类别码和名称 3. 备注留空 4. 点击「确定」 |
| **预期结果** | 弹框关闭，提示"操作成功"，备注字段在表格中显示为空 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PCAT-016：取消新增

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 打开新增弹框 2. 填写部分内容 3. 点击「取消」按钮或弹框右上角 X |
| **预期结果** | 弹框关闭，表格数据不变 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PCAT-017：连续新增

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 新增流程类别 A 成功后 2. 再次点击「新增」按钮 3. 新增流程类别 B |
| **预期结果** | 弹框表单每次打开时均为空状态，上次填写的内容不残留；两次新增均成功 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

## 8.4 编辑工艺流程类别

### TC-PCAT-018：打开编辑弹框

| 项目 | 内容 |
|------|------|
| **测试步骤** | 点击工艺流程类别列表中任一类别行操作列的「编辑」按钮 |
| **预期结果** | 弹出编辑工艺流程类别弹框，标题显示"编辑工艺流程类别"，表单回填该流程类别的编码、名称、备注 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PCAT-019：编辑工艺流程类别—修改名称

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 打开编辑弹框 2. 修改流程类别名称（如改为"测试流程类别-已修改"）3. 点击「确定」 |
| **预期结果** | 弹框关闭，提示"操作成功"，表格中该行名称更新 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PCAT-020：编辑工艺流程类别—修改备注

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 打开编辑弹框 2. 修改备注内容 3. 点击「确定」 |
| **预期结果** | 弹框关闭，提示"操作成功"，备注更新 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PCAT-021：取消编辑

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 打开编辑弹框 2. 修改内容 3. 点击「取消」按钮 |
| **预期结果** | 弹框关闭，原数据不变 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

## 8.5 删除工艺流程类别

### TC-PCAT-022：删除确认弹框

| 项目 | 内容 |
|------|------|
| **测试步骤** | 点击工艺流程类别列表中任一类别行操作列的「删除」按钮 |
| **预期结果** | 弹出确认提示框，内容为"确定要执行该操作吗?"，有「确定」和「取消」按钮 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PCAT-023：删除工艺流程类别成功

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 点击类别行的「删除」按钮 2. 在确认框中点击「确定」 |
| **预期结果** | 提示"操作成功"，该工艺流程类别从列表中消失，分页总数减 1 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PCAT-024：取消删除

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 点击「删除」按钮 2. 在确认框中点击「取消」 |
| **预期结果** | 确认框关闭，工艺流程类别数据保持不变 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PCAT-025：删除最后一页唯一数据后的分页处理

| 项目 | 内容 |
|------|------|
| **测试前置条件** | 存在数据，且最后一页只有一条记录 |
| **测试步骤** | 1. 翻到最后一页 2. 删除该页唯一的工艺流程类别 |
| **预期结果** | 提示"操作成功"，自动跳转到前一页，分页总数减 1 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

## 8.6 表单校验

### TC-PCAT-026：新增表单校验—编码必填

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 打开新增弹框 2. 不填写流程类别编码 3. 填写流程类别名称 4. 点击「确定」 |
| **预期结果** | 编码输入框下方显示红色校验提示"请输入流程类别编码"，弹框不关闭 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PCAT-027：新增表单校验—名称必填

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 打开新增弹框 2. 填写流程类别编码 3. 不填写流程类别名称 4. 点击「确定」 |
| **预期结果** | 名称输入框下方显示红色校验提示"请输入流程类别名称"，弹框不关闭 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PCAT-028：新增表单校验—编码长度上限

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 打开新增弹框 2. 在编码输入框中输入超过 100 个字符的字符串 3. 点击「确定」 |
| **预期结果** | 编码输入框下方显示红色校验提示"长度在 1 到 100 个字符" |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PCAT-029：新增表单校验—名称长度上限

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 打开新增弹框 2. 在名称输入框中输入超过 100 个字符的字符串 3. 点击「确定」 |
| **预期结果** | 名称输入框下方显示红色校验提示"长度在 1 到 100 个字符" |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PCAT-030：新增表单校验—中文字符正常输入

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 打开新增弹框 2. 流程类别名称输入中文字符 3. 点击「确定」 |
| **预期结果** | 表单正常提交，中文内容正确保存 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PCAT-031：编辑表单校验—修改后清空必填项

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 打开已存在流程类别的编辑弹框 2. 清空流程类别名称 3. 点击「确定」 |
| **预期结果** | 名称输入框下方显示红色校验提示"请输入流程类别名称" |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

## 8.7 多语言切换

### TC-PCAT-032：切换到英文—页面标签

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 切换到英文语言 2. 点击菜单进入工艺流程类别页面 |
| **预期结果** | 搜索区标签显示"Category Code"、"Category Name"、"Search"、"Reset"；表格列头显示"No."、"Category Code"、"Category Name"、"Remark"、"Actions"；工具栏按钮显示"Add" |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PCAT-033：切换到英文—新增弹框标签

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 切换到英文 2. 点击新增按钮 3. 查看弹框 |
| **预期结果** | 弹框标题为"Add Process Category"；表单标签为"Category Code"、"Category Name"、"Remark"；底部按钮为"Confirm"、"Cancel" |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PCAT-034：切换到英文—编辑弹框标签

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 切换到英文 2. 点击某行的编辑按钮 |
| **预期结果** | 弹框标题为"Edit Process Category"，表单回填正确，所有标签为英文 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PCAT-035：切换到英文—提示信息

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 切换到英文 2. 执行新增/编辑/删除操作 |
| **预期结果** | 操作成功提示为"Operation succeeded"；删除确认框内容为"Are you sure to delete?"；校验提示为英文 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PCAT-036：英文下所有操作功能正常

| 项目 | 内容 |
|------|------|
| **测试步骤** | 在英文界面下执行：搜索、新增流程类别、编辑流程类别、删除流程类别、分页切换 |
| **预期结果** | 所有功能正常运行，交互逻辑与中文界面一致 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

---
---

# 九、产线设置功能测试

> **迁移日期**：2026-06-01  
> **对应页面**：`src/views/production-master-data/factory-model/production-line/index.vue`  
> **API 文件**：`src/api/production-master-data/production-line.js`  
> **路由路径**：`/production_configuration/factory_model/factory_line`  
> **页面结构**：搜索区（产线编码 + 产线名称 + 所区下拉 + 查询/重置按钮）+ 数据表格 + 新增/编辑弹框（含所区下拉选择）

## 9.1 页面加载与数据展示

### TC-PL-001：产线设置页面正常加载

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 登录系统 2. 点击菜单「生产配置 → 工厂模型 → 产线设置」 |
| **预期结果** | 页面正常加载，显示产线列表表格，包含序号、产线编码、产线名称、所属所区、备注、操作列；搜索区包含产线编码输入框、产线名称输入框、所区下拉选择器；底部有分页组件显示总条数 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PL-002：表格列完整显示

| 项目 | 内容 |
|------|------|
| **测试步骤** | 查看产线列表表格的列头 |
| **预期结果** | 表格列依次为：序号、产线编码、产线名称、所属所区、备注、操作。各列宽度合理，内容不重叠 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PL-003：工具栏按钮显示

| 项目 | 内容 |
|------|------|
| **测试步骤** | 查看表格上方的工具栏 |
| **预期结果** | 工具栏左侧显示「新 增」按钮，带加号图标，类型为蓝色主按钮；右侧显示帮助按钮 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PL-004：行内操作按钮显示

| 项目 | 内容 |
|------|------|
| **测试步骤** | 查看表格每行的操作列 |
| **预期结果** | 每行操作列显示「编 辑」按钮（带编辑图标）和「删 除」按钮（红色危险按钮，带删除图标） |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

## 9.2 查询与搜索

### TC-PL-005：按产线编码搜索

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 在「产线编码」输入框输入一个已知的产线编码 2. 点击「查询」按钮或按 Enter 键 |
| **预期结果** | 表格数据按产线编码模糊匹配过滤，仅显示匹配的产线记录；分页回到第 1 页 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PL-006：按产线名称搜索

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 在「产线名称」输入框输入关键字 2. 点击「查询」按钮 |
| **预期结果** | 表格数据按产线名称模糊匹配过滤，仅显示匹配的产线记录 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PL-007：按所区下拉筛选

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 点击搜索区「所区」下拉框 2. 选择一个具体所区 3. 点击「查询」按钮 |
| **预期结果** | 下拉框显示所有已存在的所区选项；选择某个所区后查询，表格仅显示属于该所区的产线记录 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PL-008：组合条件搜索

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 输入产线编码关键字 2. 同时选择一个所区 3. 点击「查询」按钮 |
| **预期结果** | 表格数据按多个条件 AND 逻辑过滤，显示同时满足所有条件的记录 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PL-009：重置搜索条件

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 输入搜索条件并查询 2. 点击「重置」按钮 |
| **预期结果** | 产线编码、产线名称输入框清空，所区下拉恢复为空；表格恢复显示全部数据；分页回到第 1 页 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PL-010：空关键字搜索

| 项目 | 内容 |
|------|------|
| **测试步骤** | 不输入任何条件直接点击「查询」按钮 |
| **预期结果** | 显示全部产线数据，无过滤效果 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

## 9.3 分页功能

### TC-PL-011：分页切换

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 切换每页显示条数（10/20/50/100） 2. 点击下一页/上一页 3. 输入页码直接跳转 |
| **预期结果** | 分页切换正常，表格数据按分页正确加载；总条数显示正确；切换每页条数后当前页重置为第 1 页 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

## 9.4 新增产线

### TC-PL-012：打开新增弹框

| 项目 | 内容 |
|------|------|
| **测试步骤** | 点击表格上方工具栏「新 增」按钮 |
| **预期结果** | 弹出新增产线弹框，标题显示"新增产线"；表单包含 4 个字段：产线编码（输入框）、产线名称（输入框）、所区（下拉选择器）、备注（文本域）；所有字段为空；底部有「确定」和「取消」按钮 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PL-013：所区下拉框正常加载选项

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 打开新增弹框 2. 点击「所区」下拉选择器 |
| **预期结果** | 下拉框正常显示所有已存在的所区列表选项，选项格式为"所区名称"；支持 filterable 筛选 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PL-014：新增产线—正常提交

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 打开新增弹框 2. 输入产线编码（如"PL-001"） 3. 输入产线名称（如"测试产线"） 4. 选择一个所区 5. 输入备注（可选） 6. 点击「确定」按钮 |
| **预期结果** | 弹框关闭，显示"操作成功"提示消息；表格自动刷新，新增的产线出现在列表中 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PL-015：新增产线—表单验证（必填项为空）

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 打开新增弹框 2. 不填写任何内容直接点击「确定」按钮 |
| **预期结果** | 产线编码字段提示"请输入产线编码"；产线名称字段提示"请输入产线名称"；所区字段提示"请选择所区"；表单阻止提交 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PL-016：新增产线—编码/名称超长验证

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 打开新增弹框 2. 在产线编码输入框输入 101 个字符 3. 在产线名称输入框输入 101 个字符 4. 选择所区 5. 点击「确定」按钮 |
| **预期结果** | 提示"长度在 1 到 100 个字符"，表单阻止提交 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PL-017：新增产线—取消操作

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 打开新增弹框 2. 填写部分内容 3. 点击「取消」按钮 |
| **预期结果** | 弹框关闭，表格数据不变；再次打开新增弹框时表单已重置为空 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

## 9.5 编辑产线

### TC-PL-018：打开编辑弹框并数据回填

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 在表格中找到一条产线记录 2. 点击该行的「编 辑」按钮 |
| **预期结果** | 弹出编辑产线弹框，标题显示"编辑产线"；表单自动回填该产线的编码、名称、所区、备注数据 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PL-019：编辑产线—修改名称后提交

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 编辑一条产线 2. 修改产线名称为新值 3. 点击「确定」按钮 |
| **预期结果** | 弹框关闭，显示"操作成功"提示；表格自动刷新，该行显示更新后的产线名称 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PL-020：编辑产线—修改所属所区后提交

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 编辑一条产线 2. 切换选择另一个所区 3. 点击「确定」按钮 |
| **预期结果** | 弹框关闭，操作成功；表格刷新后该行的「所属所区」列显示更新后的所区名称 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PL-021：编辑产线—验证必填项

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 编辑一条产线 2. 清空产线编码或产线名称 3. 清空所区选择 4. 点击「确定」按钮 |
| **预期结果** | 对应字段出现必填验证提示，表单阻止提交 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

## 9.6 删除产线

### TC-PL-022：删除产线—确认删除

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 在表格中找到一条产线记录 2. 点击该行的「删 除」按钮 3. 在弹出的确认框中点击「确定」 |
| **预期结果** | 弹出确认框，标题为"提示"，内容为"确定要执行该操作吗?"；点击确定后显示"操作成功"提示；表格自动刷新，该产线不再出现在列表中；分页正确调整 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PL-023：删除产线—取消删除

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 点击某条产线记录的「删 除」按钮 2. 在弹出的确认框中点击「取消」 |
| **预期结果** | 确认框关闭，该产线记录仍然保留在表格中，数据不变 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

## 9.7 多语言切换

### TC-PL-024：切换到英文—页面标签

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 切换到英文语言 2. 查看产线设置页面 |
| **预期结果** | 所有标签、按钮、表头均切换为英文：搜索区标签 "Production Line Code" / "Production Line Name" / "Plant Area"；表格列头 "No." / "Production Line Code" / "Production Line Name" / "Plant Area" / "Remark" / "Actions"；工具栏 "Add"；行按钮 "Edit" / "Delete" |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PL-025：切换到英文—弹框标题与表单

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 切换到英文 2. 点击「Add」按钮打开新增弹框 3. 查看弹框内容 |
| **预期结果** | 弹框标题为 "Add Production Line"；表单字段标签为英文；底部按钮为 "Confirm" / "Cancel"；所区下拉 placeholder 为 "Please select plant area" |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PL-026：切换到英文—提示信息

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 切换到英文 2. 执行新增/编辑/删除操作 |
| **预期结果** | 操作成功提示为 "Operation succeeded"；删除确认框内容为 "Are you sure to delete?"，按钮为 "Confirm" / "Cancel"；校验提示为英文（如 "Please enter production line code"） |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PL-027：英文下所有核心功能正常

| 项目 | 内容 |
|------|------|
| **测试步骤** | 在英文界面下执行完整操作流程：按编码搜索 → 按所区筛选 → 新增产线 → 编辑产线 → 删除产线 → 分页切换 |
| **预期结果** | 所有功能正常运行，交互逻辑与中文界面一致，无 i18n key 缺失导致的未翻译文本 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

## 9.8 边界与异常场景

### TC-PL-028：搜索关键词无匹配结果

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 在产线编码输入框输入一个不存在的编码（如"ZZZZZZZ"） 2. 点击「查询」按钮 |
| **预期结果** | 表格显示空数据，分页显示总条数为 0；页面无报错 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PL-029：新增产线—编码重复

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 新增一条产线，编码与已有产线编码完全相同 2. 点击「确定」按钮 |
| **预期结果** | 后端返回编码重复错误，前端以错误提示形式展示；弹框不关闭，允许用户修改后重新提交 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-PL-030：删除后分页自动调整

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 翻到最后一页 2. 如果该页只有 1 条数据，将其删除 |
| **预期结果** | 删除成功后自动跳转到上一页（当前页页码正确调整），不会停留在空页面 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

---

## 测试结果汇总

| 功能模块 | 测试用例数 | 通过 | 未通过 | 通过率 |
|----------|-----------|------|--------|--------|
| 角色管理 | 24 | | | |
| 用户管理 | 33 | | | |
| 菜单配置 | 37 | | | |
| 接口日志 | 20 | | | |
| 操作日志 | 18 | | | |
| 问题帮助 | 21 | | | |
| 产品列表 | 37 | | | |
| 工艺流程类别 | 36 | | | |
| 产线设置 | 30 | | | |
| 工序单元 | 36 | | | |
| **合计** | **292** | | | |

---

# 十、工序单元功能测试

> **迁移日期**：2026-06-01  
> **对应页面**：`src/views/production-master-data/process-model/process-step/index.vue`  
> **API 文件**：`src/api/production-master-data/process-step.js`  
> **路由路径**：`/production_configuration/technology_model/technology_flow_workingsubclass`  
> **页面结构**：搜索区（工序单元编码 + 工序单元名称 + 查询/重置按钮）+ 数据表格 + 新增/编辑弹框（含设备类别下拉选择）

## 10.1 页面加载与数据展示

### TC-STEP-001：工序单元页面正常加载

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 登录系统 2. 点击菜单「生产配置 → 工艺模型 → 工序单元」 |
| **预期结果** | 页面正常加载，显示工序单元列表表格，包含序号、工序单元编码、工序单元名称、设备类别、备注、操作列；底部分页组件显示总条数 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-STEP-002：表格列完整显示

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 观察表格列头 2. 横向滚动查看所有列 |
| **预期结果** | 表格包含以下列：序号、工序单元编码、工序单元名称、设备类别、备注、操作（共 6 列），操作列固定在右侧 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-STEP-003：空数据状态展示

| 项目 | 内容 |
|------|------|
| **测试前置条件** | 确保数据库中没有工序单元数据（或清空搜索条件后无匹配数据） |
| **测试步骤** | 1. 在搜索框中输入一个不存在的工序单元编码 2. 点击「查询」 |
| **预期结果** | 表格显示空状态提示（如"暂无数据"），分页显示总数为 0 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-STEP-004：表格序号正确递增

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 加载工序单元列表 2. 观察序号列 |
| **预期结果** | 序号从 1 开始递增，翻页后序号接续正确 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

## 10.2 搜索与分页

### TC-STEP-005：按工序单元编码搜索

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 在工序单元编码输入框中输入已知存在的编码 2. 点击「查询」按钮 |
| **预期结果** | 表格仅显示编码匹配的记录 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-STEP-006：按工序单元名称搜索

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 在工序单元名称输入框中输入已知存在的名称 2. 点击「查询」按钮 |
| **预期结果** | 表格仅显示名称匹配的记录 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-STEP-007：组合搜索

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 同时填写工序单元编码和名称搜索条件 2. 点击「查询」按钮 |
| **预期结果** | 表格显示同时满足编码和名称条件的记录 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-STEP-008：重置搜索条件

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 输入搜索条件并查询 2. 点击「重置」按钮 |
| **预期结果** | 搜索条件清空，表格恢复显示全部数据 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-STEP-009：分页功能

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 切换每页显示条数 2. 点击下一页/上一页 3. 输入页码跳转 |
| **预期结果** | 分页切换正常，表格数据按分页加载，总条数正确显示 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

## 10.3 新增工序单元

### TC-STEP-010：打开新增弹框

| 项目 | 内容 |
|------|------|
| **测试步骤** | 点击表格上方工具栏「新增」按钮 |
| **预期结果** | 弹出新增工序单元弹框，标题显示"新增工序单元"，表单字段为空：工序单元编码（输入框）、工序单元名称（输入框）、设备类别（下拉选择）、备注（多行文本域） |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-STEP-011：新增工序单元成功

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 打开新增弹框 2. 输入工序单元编码（如"PS-001"）3. 输入工序单元名称（如"测试工序单元001"）4. 选择设备类别 5. 输入备注（如"用于测试"）6. 点击「确定」 |
| **预期结果** | 弹框关闭，提示"操作成功"，表格刷新并显示新增的工序单元 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-STEP-012：新增工序单元—仅填写必填项

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 打开新增弹框 2. 填写编码、名称，选择设备类别 3. 备注留空 4. 点击「确定」 |
| **预期结果** | 弹框关闭，提示"操作成功"，备注字段在表格中显示为空 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-STEP-013：新增工序单元—设备类别下拉选择

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 打开新增弹框 2. 点击设备类别下拉框 |
| **预期结果** | 下拉列表显示所有设备类别选项，可搜索过滤 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-STEP-014：取消新增

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 打开新增弹框 2. 填写部分内容 3. 点击「取消」按钮或弹框右上角 X |
| **预期结果** | 弹框关闭，表格数据不变 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-STEP-015：连续新增

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 新增工序单元 A 成功后 2. 再次点击「新增」按钮 3. 新增工序单元 B |
| **预期结果** | 弹框表单每次打开时均为空状态，上次填写的内容不残留；两次新增均成功 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

## 10.4 编辑工序单元

### TC-STEP-016：打开编辑弹框

| 项目 | 内容 |
|------|------|
| **测试步骤** | 点击工序单元列表中任一工序单元行操作列的「编辑」按钮 |
| **预期结果** | 弹出编辑工序单元弹框，标题显示"编辑工序单元"，表单回填该工序单元的编码、名称、设备类别、备注 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-STEP-017：编辑工序单元—修改名称

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 打开编辑弹框 2. 修改工序单元名称（如改为"测试工序单元-已修改"）3. 点击「确定」 |
| **预期结果** | 弹框关闭，提示"操作成功"，表格中该行名称更新 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-STEP-018：编辑工序单元—修改设备类别

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 打开编辑弹框 2. 切换选择另一个设备类别 3. 点击「确定」 |
| **预期结果** | 弹框关闭，提示"操作成功"，表格中该行设备类别列更新 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-STEP-019：编辑工序单元—工序单元编码不可修改

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 打开编辑弹框 2. 查看工序单元编码输入框 |
| **预期结果** | 工序单元编码字段显示为禁用状态（灰色不可编辑） |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-STEP-020：取消编辑

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 打开编辑弹框 2. 修改内容 3. 点击「取消」按钮 |
| **预期结果** | 弹框关闭，原数据不变 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

## 10.5 删除工序单元

### TC-STEP-021：删除确认弹框

| 项目 | 内容 |
|------|------|
| **测试步骤** | 点击工序单元列表中任一工序单元行操作列的「删除」按钮 |
| **预期结果** | 弹出确认提示框，内容为"确定要执行该操作吗?"，有「确定」和「取消」按钮 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-STEP-022：删除工序单元成功

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 点击工序单元行的「删除」按钮 2. 在确认框中点击「确定」 |
| **预期结果** | 提示"操作成功"，该工序单元从列表中消失，分页总数减 1 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-STEP-023：取消删除

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 点击「删除」按钮 2. 在确认框中点击「取消」 |
| **预期结果** | 确认框关闭，工序单元数据保持不变 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-STEP-024：删除最后一页唯一数据后的分页处理

| 项目 | 内容 |
|------|------|
| **测试前置条件** | 存在数据，且最后一页只有一条记录 |
| **测试步骤** | 1. 翻到最后一页 2. 删除该页唯一的工序单元 |
| **预期结果** | 提示"操作成功"，自动跳转到前一页，分页总数减 1 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

## 10.6 表单校验

### TC-STEP-025：新增表单校验—编码必填

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 打开新增弹框 2. 不填写工序单元编码 3. 填写其他必填项 4. 点击「确定」 |
| **预期结果** | 编码输入框下方显示红色校验提示，弹框不关闭 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-STEP-026：新增表单校验—名称必填

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 打开新增弹框 2. 填写编码 3. 不填写工序单元名称 4. 选择设备类别 5. 点击「确定」 |
| **预期结果** | 名称输入框下方显示红色校验提示，弹框不关闭 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-STEP-027：新增表单校验—设备类别必填

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 打开新增弹框 2. 填写编码和名称 3. 不选择设备类别 4. 点击「确定」 |
| **预期结果** | 设备类别下方显示红色校验提示"请选择设备类别"，弹框不关闭 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-STEP-028：新增表单校验—编码长度上限

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 打开新增弹框 2. 在编码输入框中输入超过 100 个字符 3. 点击「确定」 |
| **预期结果** | 编码输入框下方显示红色校验提示"长度在 1 到 100 个字符" |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-STEP-029：新增表单校验—中文字符正常输入

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 打开新增弹框 2. 工序单元名称输入中文字符 3. 点击「确定」 |
| **预期结果** | 表单正常提交，中文内容正确保存 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-STEP-030：编辑表单校验—清空必填项

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 打开已存在工序单元的编辑弹框 2. 清空工序单元名称 3. 点击「确定」 |
| **预期结果** | 名称输入框下方显示红色校验提示 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

## 10.7 多语言切换

### TC-STEP-031：切换到英文—页面标签

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 切换到英文语言 2. 点击菜单进入工序单元页面 |
| **预期结果** | 搜索区标签显示"Process Unit Code"、"Process Unit Name"、"Search"、"Reset"；表格列头显示"No."、"Process Unit Code"、"Process Unit Name"、"Device Category"、"Remark"、"Actions"；工具栏按钮显示"Add" |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-STEP-032：切换到英文—新增弹框标签

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 切换到英文 2. 点击新增按钮 3. 查看弹框 |
| **预期结果** | 弹框标题为"Add Process Unit"；表单标签为"Process Unit Code"、"Process Unit Name"、"Device Category"、"Remark"；底部按钮为"Confirm"、"Cancel" |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-STEP-033：切换到英文—编辑弹框标签

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 切换到英文 2. 点击某行的编辑按钮 |
| **预期结果** | 弹框标题为"Edit Process Unit"，表单回填正确，所有标签为英文 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-STEP-034：切换到英文—提示信息

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 切换到英文 2. 执行新增/编辑/删除操作 |
| **预期结果** | 操作成功提示为"Operation succeeded"；删除确认框内容为"Proceed with this action?"；校验提示为英文 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-STEP-035：切换到英文—设备类别下拉

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 切换到英文 2. 打开新增弹框 3. 点击设备类别下拉框 |
| **预期结果** | 下拉 placeholder 为"Please select device category" |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-STEP-036：英文下所有操作功能正常

| 项目 | 内容 |
|------|------|
| **测试步骤** | 在英文界面下执行：搜索、新增工序单元、编辑工序单元、删除工序单元、分页切换 |
| **预期结果** | 所有功能正常运行，交互逻辑与中文界面一致 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-STEP-037：预设设定值按钮权限控制

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 登录系统 2. 进入工序单元页面 3. 查看某行数据的操作列 |
| **预期结果** | 操作列显示：编辑（黄色）、预设设定值（橙色）、预设结果参数（绿色）、删除（红色）四个按钮 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-STEP-038：打开预设设定值弹框

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 进入工序单元页面 2. 点击某行的"预设设定值"按钮 |
| **预期结果** | 弹出"预设设定值"对话框，标题正确，显示配置区域占位符和提示信息 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-STEP-039：预设设定值弹框关闭

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 打开预设设定值弹框 2. 点击取消按钮 |
| **预期结果** | 弹框关闭，无错误 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-STEP-040：预设设定值提交

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 打开预设设定值弹框 2. 点击确定按钮 |
| **预期结果** | 显示"操作成功"提示，弹框关闭 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-STEP-041：预设结果参数按钮存在

| 项目 | 内容 |
|------|------|
| **测试步骤** | 进入工序单元页面，查看操作列按钮 |
| **预期结果** | 显示"预设结果参数"按钮（绿色图标） |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-STEP-042：打开预设结果参数弹框

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 进入工序单元页面 2. 点击某行的"预设结果参数"按钮 |
| **预期结果** | 弹出"预设结果参数"对话框，显示可选参数列表表格（名称、参数、类别、备注、是否唯一、是否上传） |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-STEP-043：预设结果参数搜索功能

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 打开预设结果参数弹框 2. 输入名称和参数进行搜索 |
| **预期结果** | 点击查询按钮后，表格数据根据搜索条件过滤 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-STEP-044：新增可选参数

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 打开预设结果参数弹框 2. 点击"新增一行"按钮 3. 填写参数信息 4. 点击确定 |
| **预期结果** | 新增成功，列表刷新显示新数据，弹出成功提示 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-STEP-045：编辑可选参数

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 打开预设结果参数弹框 2. 点击某行的编辑图标 3. 修改信息 4. 点击确定 |
| **预期结果** | 编辑成功，列表刷新显示更新后的数据 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-STEP-046：删除可选参数

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 打开预设结果参数弹框 2. 点击某行的删除图标 3. 确认删除 |
| **预期结果** | 删除成功，列表刷新，该数据不再显示 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-STEP-047：预设结果参数分页

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 打开预设结果参数弹框 2. 当数据较多时切换分页 |
| **预期结果** | 分页切换正常，显示正确的页码和总条数 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-STEP-048：预设结果参数关闭

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 打开预设结果参数弹框 2. 点击关闭按钮 |
| **预期结果** | 弹框正常关闭 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-STEP-049：预设结果参数导入功能入口

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 打开预设结果参数弹框 2. 点击"导入"按钮 |
| **预期结果** | 显示"导入功能开发中"提示 |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

### TC-STEP-050：预设结果参数英文界面

| 项目 | 内容 |
|------|------|
| **测试步骤** | 1. 切换到英文 2. 打开预设结果参数弹框 |
| **预期结果** | 弹框标题显示"Preset Result Parameters"，表格列头显示英文（Name、Parameter、Category等） |
| **实际结果** | |
| **测试状态** | ⬜ 通过 / ⬜ 未通过 |
| **问题描述** | |

---

## 测试结果汇总

| 功能模块 | 测试用例数 | 通过 | 未通过 | 通过率 |
|----------|-----------|------|--------|--------|
| 角色管理 | 24 | | | |
| 用户管理 | 33 | | | |
| 菜单配置 | 37 | | | |
| 接口日志 | 20 | | | |
| 操作日志 | 18 | | | |
| 问题帮助 | 21 | | | |
| 产品列表 | 37 | | | |
| 工艺流程类别 | 36 | | | |
| 产线设置 | 30 | | | |
| 工序单元 | 50 | | | |
| **合计** | **306** | | | |

---

> **版本记录**：
> - 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 条用例）
> - v1.6 (2026-06-01)：追加产品列表功能（37 条用例）
> - v1.7 (2026-06-01)：追加工艺流程类别功能（36 条用例）
> - v1.8 (2026-06-01)：追加产线设置功能（30 条用例）
> - v1.9 (2026-06-01)：追加工序单元功能（36 条用例）
> - v1.10 (2026-06-01)：追加工序单元预设设定值和预设结果参数功能（14 条用例）
