# 功能测试流程文档 ——【计量单位】

> 本文档为【计量单位】功能迁移后的独立测试文档。测试人员请按以下流程逐步执行，对通过的用例在"通过"列打勾（`[x]`），未通过的用例在"问题记录"列描述具体现象（包括错误截图编号、操作步骤、实际/预期差异等）。

| 项目名称 | MES-UI（生产主数据 → 物料模型 → 计量单位） |
| --- | --- |
| 文档版本 | v1.0 |
| 适用版本 | mes-ui 本次迁移版本 |
| 编写日期 | 2026-06-02 |
| 测试入口 | 菜单：生产主数据 → 物料模型 → 计量单位 |
| 关联文件 | [`src/views/production-master-data/material-model/material-unit/index.vue`](file:///d:/code/mes/mes-ui/src/views/production-master-data/material-model/material-unit/index.vue) [`src/api/production-master-data/material-unit.js`](file:///d:/code/mes/mes-ui/src/api/production-master-data/material-unit.js) [`src/router/modules/production-master-data.js`](file:///d:/code/mes/mes-ui/src/router/modules/production-master-data.js) |

---

## 一、测试环境配置要求

| 项 | 要求 |
| --- | --- |
| 后台环境 | Webman + 已部署 `production_configuration/matetial_model/unit` 路由接口；数据库中存在 `unit` 数据表 |
| 前端环境 | `npm run serve` 启动 mes-ui 工程；浏览器推荐 Chrome 110+ |
| 登录账号 | 拥有 `生产主数据 / 计量单位` 菜单访问权限，且分配以下权限点：<br>· `…/unit/create`（新增）<br>· `…/unit/edit`（编辑）<br>· `…/unit/delete`（删除） |
| 网络要求 | 前后端网络互通；浏览器可访问 `VUE_APP_API` 域名 |
| 数据准备 | 至少 1 条已存在的单位数据；至少 1 个物料已引用本表（用于验证删除联动提示） |
| 浏览器工具 | 打开 DevTools（F12）→ Network 与 Console，方便抓取接口与异常 |

---

## 二、测试前置条件

1. 已成功登录系统，且侧边栏显示 **生产主数据 → 物料模型 → 计量单位** 菜单。
2. 浏览器语言分别切换为「简体中文 / English」时，界面文字均能正确翻译，无 `key is not defined` / 英文缺失等情况。
3. 列表默认展示接口 `production_configuration/matetial_model/unit/list` 返回的记录。
4. 浏览器缩放比例为 100%；分辨率建议 1440×900 及以上。
5. DevTools 关闭缓存（Network → Disable cache），避免旧 JS 资源影响测试。

---

## 三、测试用例

> **字段说明（数据库与表单共用）**：
> - 编码 `code`：必填，长度 1~100，文本
> - 名称 `name`：必填，长度 1~100，文本
> - 备注 `remark`：选填，文本域（多行）
> - 列表展示字段：序号 / 编码 / 名称 / 备注 / 创建时间 / 操作

### 3.1 列表与搜索

| 用例编号 | 操作步骤 | 预期结果 | 实际结果 | 通过 | 问题记录 |
| --- | --- | --- | --- | --- | --- |
| 3.1.1 | 进入"计量单位"菜单 | 列表正常加载，无报错；表头依次为：序号、单位编码、单位名称、备注、创建时间、操作 |  | [ ] |  |
| 3.1.2 | 在"单位编码"输入框输入关键字 → 点击「查询」 | 列表仅展示编码包含该关键字的记录 |  | [ ] |  |
| 3.1.3 | 在"单位名称"输入框输入关键字 → 点击「查询」 | 列表仅展示名称包含该关键字的记录 |  | [ ] |  |
| 3.1.4 | 编码 + 名称同时输入关键字 → 点击「查询」 | 列表为两条件 AND 过滤结果 |  | [ ] |  |
| 3.1.5 | 输入查询条件后点击「重置」 | 输入框清空，列表恢复为全量数据 |  | [ ] |  |
| 3.1.6 | 在搜索输入框按回车键 | 等同于点击「查询」，触发列表刷新 |  | [ ] |  |
| 3.1.7 | 列表分页：跳转到第 2 页 / 修改每页条数 | 列表请求参数 `page_no` / `page_size` 正确变化，数据正常刷新 |  | [ ] |  |
| 3.1.8 | 列表为空时（无数据） | 显示空状态占位（如"暂无数据"），不报错 |  | [ ] |  |
| 3.1.9 | 列表加载中 | 表格区域显示 loading 遮罩 |  | [ ] |  |
| 3.1.10 | 切换浏览器语言为 English 后刷新 | 表头、操作按钮、占位文字均显示英文 |  | [ ] |  |

### 3.2 新增

| 用例编号 | 操作步骤 | 预期结果 | 实际结果 | 通过 | 问题记录 |
| --- | --- | --- | --- | --- | --- |
| 3.2.1 | 点击工具栏「新增」按钮 | 弹出标题为「新增单位」的对话框，显示空表单 |  | [ ] |  |
| 3.2.2 | 不填任何字段，点击「确定」 | 触发表单校验：「单位编码」「单位名称」下方红字提示必填 |  | [ ] |  |
| 3.2.3 | 仅填写编码（不填名称），点击「确定」 | 仅名称字段提示必填 |  | [ ] |  |
| 3.2.4 | 输入 101 字符的编码，点击「确定」 | 提示「长度在 1 到 100 个字符」 |  | [ ] |  |
| 3.2.5 | 正常填写：编码 `PCS`、名称 `个`、备注 `基本计数单位` → 点击「确定」 | 弹出"操作成功"提示，对话框自动关闭，列表自动刷新并出现该条记录 |  | [ ] |  |
| 3.2.6 | 必填项后存在前后空格时点击「确定」 | 提交数据带空格（视业务策略决定是否 trim），列表正常展示 |  | [ ] |  |
| 3.2.7 | 新增弹框点击「取消」 | 对话框关闭，未提交任何数据 |  | [ ] |  |
| 3.2.8 | 新增弹框点击右上角 × | 对话框关闭，未提交任何数据 |  | [ ] |  |
| 3.2.9 | 在无 `unit/create` 权限的账号下访问 | 工具栏不显示「新增」按钮 |  | [ ] |  |
| 3.2.10 | 后端返回 `code 已存在` 错误 | 页面提示后端错误信息（如 `code 重复`），不崩溃 |  | [ ] |  |

### 3.3 编辑

| 用例编号 | 操作步骤 | 预期结果 | 实际结果 | 通过 | 问题记录 |
| --- | --- | --- | --- | --- | --- |
| 3.3.1 | 在列表行点击「编辑」 | 弹出标题为「编辑单位」的对话框，且表单字段回显当前行数据 |  | [ ] |  |
| 3.3.2 | 清空编码，点击「确定」 | 提示编码必填 |  | [ ] |  |
| 3.3.3 | 修改名称为新值，备注保留为空，点击「确定」 | 提示操作成功，列表对应行的名称更新 |  | [ ] |  |
| 3.3.4 | 修改编码（与已有数据重复），点击「确定」 | 后端返回重复提示，页面友好显示 |  | [ ] |  |
| 3.3.5 | 编辑过程中点击「取消」 | 对话框关闭，原数据未发生变化 |  | [ ] |  |
| 3.3.6 | 无 `unit/edit` 权限的账号 | 行内不显示「编辑」按钮 |  | [ ] |  |
| 3.3.7 | 同时打开两个浏览器标签 A、B，均进入编辑 | B 保存后 A 再次保存时数据为 B 已提交后的最新值（避免脏写） |  | [ ] |  |

### 3.4 删除

| 用例编号 | 操作步骤 | 预期结果 | 实际结果 | 通过 | 问题记录 |
| --- | --- | --- | --- | --- | --- |
| 3.4.1 | 在列表行点击「删除」 | 弹出确认框，提示「确定要执行该操作吗?」 |  | [ ] |  |
| 3.4.2 | 确认框点击「取消」 | 关闭确认框，未删除 |  | [ ] |  |
| 3.4.3 | 确认框点击「确定」 | 提示操作成功，列表自动移除该记录 |  | [ ] |  |
| 3.4.4 | 删除被物料引用的单位 | 后端返回业务级提示，页面正确展示且不崩溃 |  | [ ] |  |
| 3.4.5 | 删除最后一页唯一一条记录后 | 列表自动回退到上一页（或显示空状态），无空白页 |  | [ ] |  |
| 3.4.6 | 无 `unit/delete` 权限的账号 | 行内不显示「删除」按钮 |  | [ ] |  |
| 3.4.7 | 网络断开时点击「删除」 | 提示网络异常，未误删数据 |  | [ ] |  |

### 3.5 权限与国际化

| 用例编号 | 操作步骤 | 预期结果 | 实际结果 | 通过 | 问题记录 |
| --- | --- | --- | --- | --- | --- |
| 3.5.1 | 切换为仅有「查询」权限的账号 | 仅能查看列表与查询，无新增/编辑/删除按钮 |  | [ ] |  |
| 3.5.2 | 切换语言为 English，刷新页面 | 表头、按钮、弹框标题、提示语全部为英文 |  | [ ] |  |
| 3.5.3 | 在中文下打开新增 → 切换为英文 | 弹框标题、表单 label 立即切换为英文（无需关闭弹框） |  | [ ] |  |
| 3.5.4 | 切换语言后，校验提示（如"长度在 1 到 100 个字符"） | 同步显示对应语言 |  | [ ] |  |

### 3.6 异常与边界

| 用例编号 | 操作步骤 | 预期结果 | 实际结果 | 通过 | 问题记录 |
| --- | --- | --- | --- | --- | --- |
| 3.6.1 | 后端返回 500 错误 | 列表显示空状态或错误提示，不白屏 |  | [ ] |  |
| 3.6.2 | 后端返回字段缺失 | 缺失字段列显示为空，不抛 JS 异常 |  | [ ] |  |
| 3.6.3 | 备注字段输入 5000 字符 | 提交成功，列表中可滚动展示（可截断） |  | [ ] |  |
| 3.6.4 | 在表单输入过程中按 ESC | 弹框关闭，表单状态重置 |  | [ ] |  |
| 3.6.5 | 列表行内操作按钮溢出 | 操作列固定在右侧且可滚动查看 |  | [ ] |  |
| 3.6.6 | DevTools Console 检查 | 全程无 `Vue warn`、未捕获 Promise 异常、key 缺失警告 |  | [ ] |  |

---

## 四、测试结果汇总

| 用例总数 | 通过 | 失败 | 阻塞 | 通过率 |
| --- | --- | --- | --- | --- |
|  |  |  |  |  |

---

## 五、问题记录区

| 编号 | 用例编号 | 复现步骤 | 实际结果 | 严重程度 | 处理人 | 状态 | 备注 |
| --- | --- | --- | --- | --- | --- | --- | --- |
| 1 |  |  |  |  |  |  |  |
| 2 |  |  |  |  |  |  |  |
| 3 |  |  |  |  |  |  |  |

---

## 六、测试结论

| 项目 | 结论 |
| --- | --- |
| 功能完整性 | ☐ 满足 ☐ 部分缺失 ☐ 不满足 |
| 性能表现 | ☐ 良好 ☐ 一般 ☐ 差 |
| 权限控制 | ☐ 正确 ☐ 存在漏洞 |
| 国际化 | ☐ 完整 ☐ 部分缺失 ☐ 缺失 |
| 是否可发布 | ☐ 是 ☐ 否（请说明阻塞问题） |

测试人员签字：__________________  日期：__________

---
*本测试流程文档为【计量单位】功能迁移版本专用，请独立归档保存。*
