feat(production-master-data): 新增工艺流程管理完整模块
Some checks failed
Release pipeline / publish (push) Has been cancelled
Release pipeline / Always run job (push) Has been cancelled

- 添加工艺流程、流程卡工序的全套CRUD及复制接口
- 新增工艺流程列表页与流程卡详情页的路由和页面组件
- 补充产品、工序分类、工序子类的全量查询接口
- 优化弹窗表单组件,支持字段禁用与focus/blur/change事件回调
- 修复工序单元页面的国际化调用和权限配置问题
- 补充中英文多语言国际化文案
- 新增该模块的功能测试文档
This commit is contained in:
sheng
2026-06-04 17:07:15 +08:00
parent b6c362d906
commit 3f546564cc
15 changed files with 2071 additions and 36 deletions

View File

@@ -0,0 +1,580 @@
# 功能测试文档 — 工艺流程 (Process Routing)
> 模块路径:生产配置 → 工艺模型 → **工艺流程**
> 路由:`/production_configuration/technology_model/technology_flow`
> API BASE`production_configuration/technology_model/technology_flow/`
> i18n 前缀:`page.production_master_data.process_model.process_routing`
> 文档版本v1.0
> 适用代码版本:基于 [process-routing/index.vue](file:///d:/code/mes/mes-ui/src/views/production-master-data/process-model/process-routing/index.vue)
> 测试目标:验证工艺流程页面的列表、查询、新增、编辑、删除、流程卡管理入口等核心操作
---
## 0. 文档使用说明
- 测试人员按顺序执行 **T-XX** 编号的测试用例
- 每个用例的 **预期结果** 描述必须与实际界面/接口响应一致才可标记为通过
- 失败的用例在 **问题描述** 列填写具体错误信息、截图编号、操作环境
- 所有"实际结果"必须如实记录,禁止空填或留白
- 整体测试结论位于文末 **测试总结**
---
## 1. 测试环境配置要求
| 项目 | 要求 |
| --- | --- |
| 操作系统 | Windows 10 / 11 64-bit |
| Node.js | **18.16.0**(与项目 `.node-version` / `package.json#engines` 一致) |
| 包管理器 | **pnpm 10.33.0**(与 `package.json#packageManager` 一致) |
| 浏览器 | Chrome 100+ / Edge 100+ |
| 后端服务 | Webman 后端已启动且数据库已初始化 |
| 数据库 | 工艺流程、流程类别、产品、权限等基础数据已存在 |
| 启动命令 | `pnpm install``pnpm dev`,访问 `http://localhost:8080` |
| 测试账号 | 具备「生产配置-工艺模型-工艺流程」读写权限的账号 |
| 浏览器语言 | 中英文均需验证(默认以中文为准) |
---
## 2. 测试前置条件
1. 已使用具备 `production_configuration/technology_model/technology_flow` 下 create / edit / delete 权限的账号登录
2. **流程类别** 至少存在 1 条数据(否则新增时的「流程类别」下拉为空)
3. **产品列表** 至少存在 1 条数据(否则新增时的「关联产品」下拉为空)
4. 浏览器开发者工具 Network 面板可正常观察接口请求
5. 已确认 `src/locales/zh-chs.json``src/locales/en.json` 中存在 `page.production_master_data.process_model.process_routing` 节点
---
## 3. 测试用例
### 3.1 列表与查询
#### T-01页面正常加载
- **操作步骤**
1. 登录系统
2. 进入「生产配置 → 工艺模型 → 工艺流程」
- **预期结果**
- URL 跳转到 `/production_configuration/technology_model/technology_flow`
- 页面顶部展示搜索区(编码、名称、查询、重置)
- 下方展示表格列:序号 / 工艺流程编码 / 工艺流程名称 / 流程类别 / 关联产品 / 版本 / 状态 / 备注 / 操作
- 工具栏右上角显示帮助按钮,鼠标悬停提示「工艺流程用于设置生产工艺流程并管理流程卡…」
- 控制台无报错
- **实际结果**__________
- **测试状态**:☐ 通过 ☐ 失败
- **问题描述**__________
#### T-02默认分页加载列表
- **操作步骤**
1. 访问工艺流程页面
- **预期结果**
- 列表自动加载(无需手动点击查询)
- 加载时表格显示 loading 遮罩
- 加载完成显示数据行(如有数据)
- 分页组件显示「共 X 条」并按 10 条/页 显示
- 发起请求 `GET production_configuration/technology_model/technology_flow/list?method=production_master_data_process_model_process_routing_list&page_no=1&page_size=10&code=&name=`
- **实际结果**__________
- **测试状态**:☐ 通过 ☐ 失败
- **问题描述**__________
#### T-03按编码精确搜索
- **操作步骤**
1. 在「工艺流程编码」输入框输入已存在的完整编码
2. 点击「查询」按钮
- **预期结果**
- 列表仅展示编码完全匹配的数据行
- 列表刷新到第 1 页
- 接口请求参数 `code=<已输入值>`
- **实际结果**__________
- **测试状态**:☐ 通过 ☐ 失败
- **问题描述**__________
#### T-04按名称模糊搜索
- **操作步骤**
1. 在「工艺流程名称」输入框输入名称片段
2. 点击「查询」按钮
- **预期结果**
- 列表仅展示名称包含该片段的数据行
- 接口请求参数 `name=<已输入值>`
- **实际结果**__________
- **测试状态**:☐ 通过 ☐ 失败
- **问题描述**__________
#### T-05按回车键触发查询
- **操作步骤**
1. 在「工艺流程编码」或「工艺流程名称」输入框聚焦
2. 输入关键字后按键盘 `Enter`
- **预期结果**
- 等同于点击「查询」按钮,触发列表刷新
- **实际结果**__________
- **测试状态**:☐ 通过 ☐ 失败
- **问题描述**__________
#### T-06重置搜索条件
- **操作步骤**
1. 在搜索框输入任意条件并点击「查询」
2. 点击「重置」按钮
- **预期结果**
- 两个搜索输入框被清空
- 列表自动以空条件重新加载
- 页码回到第 1 页
- **实际结果**__________
- **测试状态**:☐ 通过 ☐ 失败
- **问题描述**__________
#### T-07分页切换
- **操作步骤**
1. 准备超过 10 条工艺流程数据
2. 在分页器中切换到第 2 页或修改每页条数
- **预期结果**
- 列表按新页码 / 每页条数重新加载
- 接口请求参数 `page_no` / `page_size` 与界面一致
- 分页总数保持正确
- **实际结果**__________
- **测试状态**:☐ 通过 ☐ 失败
- **问题描述**__________
#### T-08空数据展示
- **操作步骤**
1. 在没有任何工艺流程数据时访问页面,或筛选一个不存在的数据
- **预期结果**
- 表格区域显示 Element UI 空数据占位(无红色错误)
- 分页器显示「共 0 条」
- 不会弹出错误提示
- **实际结果**__________
- **测试状态**:☐ 通过 ☐ 失败
- **问题描述**__________
#### T-09i18n 中文切换
- **操作步骤**
1. 在用户设置中切换语言到「简体中文」
2. 访问工艺流程页面
- **预期结果**
- 所有表头、按钮、提示文本为中文("工艺流程编码"、"新增"、"删除"等)
- **实际结果**__________
- **测试状态**:☐ 通过 ☐ 失败
- **问题描述**__________
#### T-10i18n 英文切换
- **操作步骤**
1. 切换语言到「English」
2. 访问工艺流程页面
- **预期结果**
- 所有表头、按钮、提示文本为英文("Routing Code"、"Add"、"Delete" 等)
- 切换瞬间不需要刷新页面即生效
- **实际结果**__________
- **测试状态**:☐ 通过 ☐ 失败
- **问题描述**__________
---
### 3.2 新增
#### T-11打开新增弹窗
- **操作步骤**
1. 点击工具栏的「新增」按钮
- **预期结果**
- 弹出标题为「新增工艺流程」的对话框(宽 40%
- 表单为空且编码字段可编辑
- 默认值:版本 = `1.0`、状态 = 启用
- **实际结果**__________
- **测试状态**:☐ 通过 ☐ 失败
- **问题描述**__________
#### T-12新增必填校验 — 编码
- **操作步骤**
1. 打开新增弹窗
2. 编码留空,其它字段填写完整
3. 点击「确定」
- **预期结果**
- 编码输入框下方红色提示「请输入工艺流程编码」
- 接口未发起,弹窗保持打开
- **实际结果**__________
- **测试状态**:☐ 通过 ☐ 失败
- **问题描述**__________
#### T-13新增必填校验 — 名称
- **操作步骤**
1. 打开新增弹窗
2. 名称留空,其它字段填写完整
3. 点击「确定」
- **预期结果**
- 名称输入框下方红色提示「请输入工艺流程名称」
- **实际结果**__________
- **测试状态**:☐ 通过 ☐ 失败
- **问题描述**__________
#### T-14新增必填校验 — 流程类别
- **操作步骤**
1. 打开新增弹窗
2. 不选择「流程类别」
3. 点击「确定」
- **预期结果**
- 流程类别下拉框下方红色提示「请选择流程类别」
- **实际结果**__________
- **测试状态**:☐ 通过 ☐ 失败
- **问题描述**__________
#### T-15新增必填校验 — 版本
- **操作步骤**
1. 打开新增弹窗
2. 清空「版本」(默认 `1.0`
3. 点击「确定」
- **预期结果**
- 版本输入框下方红色提示「请输入版本号」
- **实际结果**__________
- **测试状态**:☐ 通过 ☐ 失败
- **问题描述**__________
#### T-16新增字段长度校验
- **操作步骤**
1. 打开新增弹窗
2. 在「编码」输入超过 100 个字符
3. 点击「确定」
- **预期结果**
- 编码输入框下方红色提示「长度在 1 到 100 个字符」
- **实际结果**__________
- **测试状态**:☐ 通过 ☐ 失败
- **问题描述**__________
#### T-17新增成功
- **操作步骤**
1. 打开新增弹窗
2. 填写完整有效数据:编码、名称、流程类别、关联产品、版本、状态、备注
3. 点击「确定」
- **预期结果**
- 接口请求 `POST production_configuration/technology_model/technology_flow/create` 状态码 200`code=0`
- 页面弹出绿色提示「操作成功」
- 弹窗自动关闭
- 列表自动刷新,新数据展示在表格中
- 页码回到第 1 页
- **实际结果**__________
- **测试状态**:☐ 通过 ☐ 失败
- **问题描述**__________
#### T-18新增重复编码
- **操作步骤**
1. 准备一个已存在的编码
2. 在新增弹窗中输入相同编码
3. 点击「确定」
- **预期结果**
- 后端返回业务错误
- 页面弹出红色错误提示(如「编码已存在」)
- 弹窗保持打开,用户可修改后重试
- **实际结果**__________
- **测试状态**:☐ 通过 ☐ 失败
- **问题描述**__________
#### T-19取消新增
- **操作步骤**
1. 打开新增弹窗,填写部分数据
2. 点击「取消」按钮或右上角 X
- **预期结果**
- 弹窗关闭
- 不发起任何接口请求
- 再次打开新增弹窗,表单恢复为空(默认值除外)
- **实际结果**__________
- **测试状态**:☐ 通过 ☐ 失败
- **问题描述**__________
#### T-20新增提交中重复点击防护
- **操作步骤**
1. 打开新增弹窗,填写有效数据
2. 连续快速点击「确定」两次
- **预期结果**
- 第一次点击后按钮进入 loading 状态,禁用重复提交
- 接口仅被调用 1 次
- **实际结果**__________
- **测试状态**:☐ 通过 ☐ 失败
- **问题描述**__________
---
### 3.3 编辑
#### T-21打开编辑弹窗
- **操作步骤**
1. 在列表中点击某行的「编辑」按钮
- **预期结果**
- 弹出标题为「编辑工艺流程」的对话框
- 表单自动回填该行数据
- 「编码」字段为禁用状态(不可编辑)
- **实际结果**__________
- **测试状态**:☐ 通过 ☐ 失败
- **问题描述**__________
#### T-22编辑必填校验
- **操作步骤**
1. 打开编辑弹窗
2. 清空「名称」
3. 点击「确定」
- **预期结果**
- 名称输入框下方红色提示「请输入工艺流程名称」
- **实际结果**__________
- **测试状态**:☐ 通过 ☐ 失败
- **问题描述**__________
#### T-23编辑成功
- **操作步骤**
1. 打开编辑弹窗
2. 修改名称、流程类别、版本、状态、备注等字段
3. 点击「确定」
- **预期结果**
- 接口请求 `PUT production_configuration/technology_model/technology_flow/edit` 状态码 200`code=0`
- 页面弹出绿色提示「操作成功」
- 弹窗关闭
- 列表自动刷新,目标行显示新值
- **实际结果**__________
- **测试状态**:☐ 通过 ☐ 失败
- **问题描述**__________
#### T-24编辑时编码不可修改
- **操作步骤**
1. 打开编辑弹窗
2. 尝试修改「编码」字段
- **预期结果**
- 编码字段处于禁用状态,无法输入
- **实际结果**__________
- **测试状态**:☐ 通过 ☐ 失败
- **问题描述**__________
#### T-25取消编辑
- **操作步骤**
1. 打开编辑弹窗,修改若干字段
2. 点击「取消」按钮
- **预期结果**
- 弹窗关闭
- 不发起任何接口请求
- 列表数据保持原样
- **实际结果**__________
- **测试状态**:☐ 通过 ☐ 失败
- **问题描述**__________
---
### 3.4 删除
#### T-26删除二次确认弹窗
- **操作步骤**
1. 点击某行的「删除」按钮
- **预期结果**
- 弹出警告提示「确定要删除该工艺流程吗?」
- 提示框有「确定」与「取消」两个按钮
- 列表中的该行仍存在
- **实际结果**__________
- **测试状态**:☐ 通过 ☐ 失败
- **问题描述**__________
#### T-27删除 — 取消
- **操作步骤**
1. 点击「删除」按钮
2. 在确认弹窗中点击「取消」
- **预期结果**
- 弹窗关闭
- 不发起删除接口
- 数据行保持原样
- **实际结果**__________
- **测试状态**:☐ 通过 ☐ 失败
- **问题描述**__________
#### T-28删除成功
- **操作步骤**
1. 点击「删除」按钮
2. 在确认弹窗中点击「确定」
- **预期结果**
- 接口请求 `DELETE production_configuration/technology_model/technology_flow/delete` 状态码 200`code=0`
- 页面弹出绿色提示「操作成功」
- 列表自动刷新,目标行消失
- 删除当前页最后一行时,自动跳转到合理页码
- **实际结果**__________
- **测试状态**:☐ 通过 ☐ 失败
- **问题描述**__________
#### T-29删除 — 关联数据拒绝
- **操作步骤**
1. 准备一条已被产品、批次或其它模块引用的工艺流程
2. 尝试删除
- **预期结果**
- 后端返回业务错误
- 页面弹出红色错误提示(如「该工艺流程已被引用,不可删除」)
- 列表数据保持原样
- **实际结果**__________
- **测试状态**:☐ 通过 ☐ 失败
- **问题描述**__________
---
### 3.5 流程卡管理入口
#### T-30流程卡管理按钮存在
- **操作步骤**
1. 在列表中查看任意一行的操作列
- **预期结果**
- 操作列包含「编辑」、「流程卡管理」、「删除」3 个按钮
- 「流程卡管理」按钮为黄色文字 + `el-icon-tickets` 图标
- **实际结果**__________
- **测试状态**:☐ 通过 ☐ 失败
- **问题描述**__________
#### T-31点击流程卡管理
- **操作步骤**
1. 点击某行的「流程卡管理」按钮
- **预期结果**
- 当前阶段:弹出信息提示「流程卡管理: <工艺流程名称>」(占位实现)
- 后续阶段:应打开独立的流程卡管理抽屉 / 弹窗
- 不影响列表状态
- **实际结果**__________
- **测试状态**:☐ 通过 ☐ 失败
- **问题描述**__________
---
### 3.6 权限控制
#### T-32无「新增」权限
- **操作步骤**
1. 使用无 `/production_configuration/technology_model/technology_flow/create` 权限的账号登录
2. 访问工艺流程页面
- **预期结果**
- 工具栏不显示「新增」按钮
- 列表正常加载
- **实际结果**__________
- **测试状态**:☐ 通过 ☐ 失败
- **问题描述**__________
#### T-33无「编辑」权限
- **操作步骤**
1. 使用无 `…/edit` 权限的账号登录
2. 访问工艺流程页面
- **预期结果**
- 行内「编辑」按钮不显示
- 「新增」与「删除」按钮仍可正常显示(按权限配置)
- **实际结果**__________
- **测试状态**:☐ 通过 ☐ 失败
- **问题描述**__________
#### T-34无「删除」权限
- **操作步骤**
1. 使用无 `…/delete` 权限的账号登录
2. 访问工艺流程页面
- **预期结果**
- 行内「删除」按钮不显示
- **实际结果**__________
- **测试状态**:☐ 通过 ☐ 失败
- **问题描述**__________
#### T-35未登录访问
- **操作步骤**
1. 退出登录后,直接在地址栏访问 `/production_configuration/technology_model/technology_flow`
- **预期结果**
- 自动跳转到登录页
- 不会出现 404 或白屏
- **实际结果**__________
- **测试状态**:☐ 通过 ☐ 失败
- **问题描述**__________
---
### 3.7 错误处理
#### T-36网络异常
- **操作步骤**
1. 在浏览器开发者工具 Network 面板中离线Offline
2. 刷新工艺流程页面
- **预期结果**
- 页面顶部红色错误提示(如「请求超时」或「网络异常」)
- loading 状态关闭
- 表格维持之前的数据或显示空数据
- **实际结果**__________
- **测试状态**:☐ 通过 ☐ 失败
- **问题描述**__________
#### T-37后端 500 错误
- **操作步骤**
1. 模拟后端列表接口返回 500
2. 刷新工艺流程页面
- **预期结果**
- 拦截器统一弹出红色错误提示
- 表格显示空数据
- 控制台无未捕获异常
- **实际结果**__________
- **测试状态**:☐ 通过 ☐ 失败
- **问题描述**__________
#### T-38参数缺失
- **操作步骤**
1. 模拟后端创建接口缺参返回 `code=500`
2. 在新增弹窗点击「确定」
- **预期结果**
- 拦截器弹出后端返回的错误信息
- 弹窗不关闭
- 表单数据保持原样
- **实际结果**__________
- **测试状态**:☐ 通过 ☐ 失败
- **问题描述**__________
---
## 4. 测试总结
| 维度 | 统计 |
| --- | --- |
| 用例总数 | 38 |
| 通过数 | __________ |
| 失败数 | __________ |
| 阻塞数 | __________ |
| 跳过数 | __________ |
| 整体结论 | ☐ 通过 ☐ 有条件通过 ☐ 不通过 |
### 4.1 遗留问题清单
| 编号 | 用例编号 | 严重程度 | 描述 | 负责人 | 计划修复日期 |
| --- | --- | --- | --- | --- | --- |
| 1 | | | | | |
| 2 | | | | | |
| 3 | | | | | |
### 4.2 测试执行信息
- **测试执行人**__________
- **测试起止时间**__________
- **测试环境版本**Node `18.16.0` / pnpm `10.33.0` / 浏览器 `__________`
- **后端版本 / 提交**__________
- **测试账号**__________
---
## 5. 附录
### 5.1 关键文件
| 类型 | 路径 |
| --- | --- |
| 主页面 | [process-routing/index.vue](file:///d:/code/mes/mes-ui/src/views/production-master-data/process-model/process-routing/index.vue) |
| API 文件 | [process-routing.js](file:///d:/code/mes/mes-ui/src/api/production-master-data/process-routing.js) |
| 路由模块 | [production-master-data.js](file:///d:/code/mes/mes-ui/src/router/modules/production-master-data.js) |
| 中文语言包 | [zh-chs.json#process_routing](file:///d:/code/mes/mes-ui/src/locales/zh-chs.json) |
| 英文语言包 | [en.json#process_routing](file:///d:/code/mes/mes-ui/src/locales/en.json) |
### 5.2 关键接口
| 操作 | Method | URL |
| --- | --- | --- |
| 查询列表 | GET | `production_configuration/technology_model/technology_flow/list` |
| 新增 | POST | `production_configuration/technology_model/technology_flow/create` |
| 编辑 | PUT | `production_configuration/technology_model/technology_flow/edit` |
| 删除 | DELETE | `production_configuration/technology_model/technology_flow/delete` |
公共参数:`method=production_master_data_process_model_process_routing_<action>``platform=background`
### 5.3 字段说明
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| code | string | 是 | 工艺流程编码,唯一,创建后不可修改 |
| name | string | 是 | 工艺流程名称 |
| category_id | int | 是 | 流程类别 ID关联工艺流程类别 |
| product_id | int | 否 | 关联产品 ID关联产品列表 |
| version | string | 是 | 版本号,默认 `1.0` |
| status | int | 是 | 1=启用0=禁用 |
| remark | string | 否 | 备注 |