feat(production-master-data): 新增生产主数据模块下物料与工序相关功能
Some checks failed
Release pipeline / publish (push) Has been cancelled
Release pipeline / Always run job (push) Has been cancelled

1. 新增物料单位、物料类别、物料信息管理的API与页面
2. 新增工序单元管理的API、页面与弹窗组件
3. 新增可选参数管理组件与相关API
4. 补充对应国际化多语言配置
5. 新增生产主数据模块路由配置
6. 新增计量单位功能测试流程文档
This commit is contained in:
sheng
2026-06-02 11:25:26 +08:00
parent 99b9bc8a5b
commit a0192d9567
17 changed files with 3460 additions and 1 deletions

View File

@@ -0,0 +1,359 @@
# MES-UI 迁移功能测试流程文档(累积追加版)
> 本文档用于记录每次 MES-UI 迁移完成后的功能测试流程。
> 采用**累积追加**模式:每次完成新功能迁移,将对应测试内容追加到本文件末尾,并在「目录」中补充章节索引。
> 测试人员按章节顺序执行用例,每完成一项需在「[ ]」中改为「[x]」并填写实际结果;对未通过项在「问题记录」区域详细描述。
>
> **测试结果约定**
> - ✅ 通过Pass
> - ❌ 失败Fail
> - ⚠️ 阻塞Block依赖其他功能未通过
>
> **填写示例**
> - `[x] 1.1 列表正常加载 ✅ 实际10 条记录,分页正常`
> - `[ ] 1.2 编码为空校验 ❌ 实际:未拦截空值,提示词缺失`
---
## 目录
- [一、测试环境与通用前置条件](#一测试环境与通用前置条件)
- [二、物料类别列表Material Category](#二物料类别列表material-category)
- [三、物料信息管理Material Master](#三物料信息管理material-master)
---
## 一、测试环境与通用前置条件
> 所有功能测试前,请先确认以下环境和基础数据准备就绪。
### 1.1 测试环境
| 项目 | 要求 |
|------|------|
| 操作系统 | Windows 10 / 11 或 macOS |
| 浏览器 | Chrome ≥ 100推荐、Edge ≥ 100 |
| Node.js | ≥ 16.0(用于本地构建) |
| MES-UI 仓库 | `d:\code\mes\mes-ui`,已安装依赖 `pnpm install` |
| 后端服务 | Webman 后台已启动(地址、端口按部署环境),数据库表 `material_category` 已存在 |
| 启动命令 | `pnpm dev``npm run serve`,默认 `http://localhost:8080` |
| 登录账号 | 具备「生产配置」菜单权限的账号,建议使用 `admin` 角色 |
| 网络 | 能正常访问后端 API |
### 1.2 通用前置条件
1. 已完成 `pnpm install`,依赖安装无错误。
2. `pnpm dev` 启动成功,浏览器可访问 `http://localhost:8080`
3. 使用具有「生产配置 / 物料模型 / 物料类别列表」访问权限的账号登录。
4. 后端数据库中 `material_category` 表至少有 1 条数据,用于列表展示和编辑。
5. 中英文语言切换正常:在右上角下拉框切换「中文 / English」所有标签翻译均能显示。
6. 浏览器 DevTools 的 Network 面板可见请求 URL 类似 `production_configuration/matetial_model/matetial_category/list?...`(迁移后保持旧 URL
### 1.3 测试结果总览(按功能)
| 功能 | 章节 | 用例数 | 通过 | 失败 | 阻塞 | 测试人 / 日期 |
|------|------|:----:|:----:|:----:|:----:|---------------|
| 物料类别列表 | 二 | 22 | | | | |
| 物料信息管理 | 三 | 30 | | | | |
---
## 二、物料类别列表Material Category
### 2.1 功能概述
- **一级模块**生产配置Production Master Data
- **二级模块**物料模型Material Model
- **三级模块**物料类别列表Material Category
- **功能说明**:用于维护物料类别(区分原材料和半成品),支持编码、名称、备注、创建时间等字段的增删改查
- **菜单路径**:生产配置 → 物料模型 → 物料类别列表
- **路由地址**`/production_configuration/matetial_model/matetial_category`(迁移阶段沿用旧 URL
- **涉及文件**
- 页面:[src/views/production-master-data/material-model/material-category/index.vue](file:///d:/code/mes/mes-ui/src/views/production-master-data/material-model/material-category/index.vue)
- API[src/api/production-master-data/material-category.js](file:///d:/code/mes/mes-ui/src/api/production-master-data/material-category.js)
- 路由:[src/router/modules/production-master-data.js](file:///d:/code/mes/mes-ui/src/router/modules/production-master-data.js)
- i18n`src/locales/zh-chs.json` & `en.json`key 前缀 `page.production_master_data.material_model.material_category.*`
### 2.2 字段说明
| 字段 | 类型 | 必填 | 长度限制 | 说明 |
|------|------|:----:|---------|------|
| 序号 | 数字 | — | — | 表格自增序号,由 `useTableColumns` 自动生成 |
| 物料类别编码 | 字符串 | ✅ | 1~45 | 唯一标识 |
| 物料类别名称 | 字符串 | ✅ | 1~45 | 类别中文名 |
| 备注 | 字符串 | ❌ | — | 多行文本 |
| 创建时间 | 日期 | — | — | 后端自动填充 |
| 操作 | — | — | — | 行内「编辑」「删除」按钮 |
### 2.3 前置条件
1. 已登录具备「生产配置 / 物料模型 / 物料类别列表」权限的账号。
2. 后端 `material_category` 表存在;若为空,可通过本测试用例的「新增」步骤补足。
3. 浏览器地址栏输入 `/production_configuration/matetial_model/matetial_category` 可直接访问。
4. 当前页面右上角语言切换为「中文」切换为「English」后再次验证关键标签。
### 2.4 测试用例
#### 2.4.1 列表与搜索
| # | 操作步骤 | 预期结果 | 实际结果 | 通过 |
|---|---------|---------|---------|:----:|
| 1.1 | 打开「物料类别列表」页面 | 表格自动加载,列表正常显示;表头依次为:序号 / 物料类别编码 / 物料类别名称 / 备注 / 创建时间 / 操作 | | ☐ |
| 1.2 | 在「物料类别编码」输入框输入已存在的关键字,点击「查询」 | 列表仅显示编码模糊匹配的数据,页码回到 1URL 不暴露搜索值 | | ☐ |
| 1.3 | 在「物料类别名称」输入框输入已存在的关键字,点击「查询」 | 列表仅显示名称模糊匹配的数据 | | ☐ |
| 1.4 | 同时输入编码 + 名称后点击「查询」 | 列表为 AND 条件过滤结果 | | ☐ |
| 1.5 | 在搜索框内按 `Enter` 键 | 触发查询,效果与点击「查询」一致 | | ☐ |
| 1.6 | 点击「重置」按钮 | 搜索框清空,列表恢复初始数据,页码回到 1 | | ☐ |
| 1.7 | 翻到第 2 页,点击「重置」 | 页码回到 1列表刷新 | | ☐ |
| 1.8 | 列表行数超过 1 页时,切换「每页显示条数」 | 列表按新分页重新加载URL / 请求参数同步变化 | | ☐ |
| 1.9 | 切换右上角语言为「English」 | 表头列名翻译正确No. / Category Code / Category Name / Remark / Create Time / Actions | | ☐ |
| 1.10 | 后端返回空数据 | 表格区域显示空数据占位,分页总数为 0 | | ☐ |
#### 2.4.2 新增物料类别
| # | 操作步骤 | 预期结果 | 实际结果 | 通过 |
|---|---------|---------|---------|:----:|
| 2.1 | 点击工具栏「新增」按钮 | 弹出「新增物料类别」对话框,含编码 / 名称 / 备注三个表单项,编码默认聚焦 | | ☐ |
| 2.2 | 编码留空,名称输入「测试类别 A」备注输入「原材料」点击「确定」 | 弹框内编码字段红色错误提示「请输入物料类别编码」;不会提交成功 | | ☐ |
| 2.3 | 编码输入「TEST_001」名称留空点击「确定」 | 名称字段红色错误提示「请输入物料类别名称」 | | ☐ |
| 2.4 | 编码输入 46 个字符(如 46 个 `a`),名称输入「测试类别 A」点击「确定」 | 编码字段提示「长度在 1 到 45 个字符」 | | ☐ |
| 2.5 | 名称输入 46 个字符编码输入「TEST_002」点击「确定」 | 名称字段提示「长度在 1 到 45 个字符」 | | ☐ |
| 2.6 | 编码输入已存在的编码(如数据库现存 `RAW_001`),名称输入「重复测试」,点击「确定」 | 提交失败,弹出后端返回的错误提示(如「编码已存在」);列表不刷新 | | ☐ |
| 2.7 | 编码输入「TEST_001」名称输入「测试类别 A」备注输入「用于半成品分类」点击「确定」 | 提交成功,弹框关闭,顶部提示「操作成功」;列表新增一行 | | ☐ |
| 2.8 | 在弹框中点击「取消」 | 弹框关闭,不提交任何数据 | | ☐ |
| 2.9 | 打开新增弹框后点击右上角 × 关闭 | 弹框关闭,再次打开时表单已重置 | | ☐ |
| 2.10 | 重复 2.7 步骤的编码「TEST_001」再次提交 | 后端返回「编码已存在」或类似错误,不重复创建 | | ☐ |
#### 2.4.3 编辑物料类别
| # | 操作步骤 | 预期结果 | 实际结果 | 通过 |
|---|---------|---------|---------|:----:|
| 3.1 | 在列表中找到「测试类别 A」2.7 创建),点击行内「编辑」 | 弹出「编辑物料类别」对话框,编码 / 名称 / 备注自动回填 | | ☐ |
| 3.2 | 将名称修改为「测试类别 A1」备注改为「原材料-已更新」,点击「确定」 | 提交成功,弹框关闭,提示「操作成功」;列表行名称 / 备注同步更新 | | ☐ |
| 3.3 | 编辑时清空编码并保存 | 编码字段必填提示「请输入物料类别编码」 | | ☐ |
| 3.4 | 编辑时清空名称并保存 | 名称字段必填提示「请输入物料类别名称」 | | ☐ |
| 3.5 | 编辑时将编码修改为与另一行相同的值(如 `RAW_001`),点击「确定」 | 后端返回「编码已存在」错误 | | ☐ |
| 3.6 | 编辑弹框打开后点击「取消」 | 数据不保存,列表无变化 | | ☐ |
| 3.7 | 编辑后重新打开编辑弹框 | 表单仍展示上一次保存后的数据 | | ☐ |
| 3.8 | 编辑成功后检查「创建时间」字段 | 创建时间未变化(仅首次新增时赋值) | | ☐ |
#### 2.4.4 删除物料类别
| # | 操作步骤 | 预期结果 | 实际结果 | 通过 |
|---|---------|---------|---------|:----:|
| 4.1 | 在列表中找到「测试类别 A1」点击行内「删除」 | 弹出确认框「确定要执行该操作吗?」,标题为「提示」 | | ☐ |
| 4.2 | 在确认框中点击「取消」 | 删除取消,列表无变化 | | ☐ |
| 4.3 | 在确认框中点击「确定」 | 确认框关闭,顶部提示「操作成功」;该行从列表中消失 | | ☐ |
| 4.4 | 在仅剩 1 条数据的列表上点击「删除」并确认 | 删除成功后,列表变为空,分页回到第 1 页 | | ☐ |
| 4.5 | 尝试删除仍被「物料信息」引用的物料类别 | 后端返回「存在引用,无法删除」或类似错误 | | ☐ |
| 4.6 | 删除操作期间切换「每页显示条数」 | 删除后页码自动修正,避免出现空页 | | ☐ |
#### 2.4.5 权限与异常场景
| # | 操作步骤 | 预期结果 | 实际结果 | 通过 |
|---|---------|---------|---------|:----:|
| 5.1 | 使用无「新增」权限的账号登录 | 工具栏「新增」按钮不显示或不可点击 | | ☐ |
| 5.2 | 使用无「编辑」权限的账号登录 | 行内「编辑」按钮不显示 | | ☐ |
| 5.3 | 使用无「删除」权限的账号登录 | 行内「删除」按钮不显示 | | ☐ |
| 5.4 | 断网后刷新页面 | 表格显示加载失败或空态DevTools Network 显示请求失败 | | ☐ |
| 5.5 | 后端返回 500 错误(如临时停服) | 顶部红色错误提示(如「操作失败」),不卡死页面 | | ☐ |
| 5.6 | 同时打开两个浏览器标签页,在 A 标签新增数据后B 标签刷新列表 | B 标签列表应能看到 A 标签新增的数据 | | ☐ |
#### 2.4.6 国际化与界面
| # | 操作步骤 | 预期结果 | 实际结果 | 通过 |
|---|---------|---------|---------|:----:|
| 6.1 | 中文状态下打开新增弹框 | 弹框标题、字段标签、按钮文字均为中文 | | ☐ |
| 6.2 | 切换为「English」后再次打开新增弹框 | 弹框标题「Add Material Category」按钮「Confirm / Cancel」 | | ☐ |
| 6.3 | 中文状态下点击删除,确认弹框标题为「提示」 | 确认框标题与按钮文字中文显示 | | ☐ |
| 6.4 | 英文状态下点击删除确认弹框标题为「Tip」 | 确认框英文显示 | | ☐ |
| 6.5 | 列表右上角「帮助」按钮(? 图标) | 鼠标悬停或点击显示「物料类别用于区分原材料和半成品」 | | ☐ |
| 6.6 | 备注字段为空时点击保存 | 提交成功,列表中备注列空白(无 `null` / `undefined` 文本) | | ☐ |
### 2.5 接口契约(用于前后端联调核对)
| 方法 | URL | 旧 method 名 | 入参关键 key | 备注 |
|------|-----|-------------|-------------|------|
| GET | `production_configuration/matetial_model/matetial_category/list` | `production_configuration_matetial_model_matetial_category_list` | `code / name / page_no / page_size` | 列表查询 |
| GET | `…/all` | `…_all` | — | 全部类别(下拉框用,可选) |
| POST | `…/create` | `…_create` | `code / name / remark` | 新增 |
| PUT | `…/edit` | `…_edit` | `id / code / name / remark` | 编辑(`id` 为行主键) |
| DELETE | `…/delete` | `…_delete` | `id: [rowId]` | 删除,参数名 `id` 数组(与旧项目保持一致) |
### 2.6 问题记录
> 测试人员发现问题时填写。每条问题一行,格式:`[编号] [用例编号] [现象] [复现步骤] [期望] [截图/日志] [负责人] [处理状态]`。
| 编号 | 用例 | 现象 | 复现步骤 | 期望 | 截图/日志 | 负责人 | 状态 |
|:---:|:---:|------|---------|------|----------|:----:|:----:|
| | | | | | | | |
### 2.7 备注
- 本页面沿用旧 URL 与后台 method 名,待后台数据库路由表统一更新后统一修改。
- 涉及 `confirmMixin` / `useTableColumns` / `useTableButtons` / `i18nMixin` 等公共 Composable如其他页面出现类似问题先确认是否在迁移组件时有遗漏。
- 若新增 / 编辑成功后接口返回结构变化(`res.data` 包裹层调整),需要同步更新 `fetchData` 的解析逻辑。
---
## 三、物料信息管理Material Master
### 3.1 功能概述
- **一级模块**生产配置Production Master Data
- **二级模块**物料模型Material Model
- **三级模块**物料信息管理Material Master
- **功能说明**:用于维护物料主数据,包括物料编码、名称、所属物料类别、单位、备注等,支持新增、编辑、删除、批量删除、按编码/名称/类别检索。
- **菜单路径**:生产配置 → 物料模型 → 物料信息管理
- **路由地址**`/production_configuration/matetial_model/matetial_management`(迁移阶段沿用旧 URL
- **涉及文件**
- 页面:[src/views/production-master-data/material-model/material-master/index.vue](file:///d:/code/mes/mes-ui/src/views/production-master-data/material-model/material-master/index.vue)
- API[src/api/production-master-data/material-master.js](file:///d:/code/mes/mes-ui/src/api/production-master-data/material-master.js)
- 路由:[src/router/modules/production-master-data.js](file:///d:/code/mes/mes-ui/src/router/modules/production-master-data.js)
- i18n`src/locales/zh-chs.json` & `en.json`key 前缀 `page.production_master_data.material_model.material_master.*`
### 3.2 字段说明
| 字段 | 类型 | 必填 | 长度限制 | 说明 |
|------|------|:----:|---------|------|
| 序号 | 数字 | — | — | 表格自增序号 |
| 物料编码 | 字符串 | ✅ | 1~100 | 唯一标识 |
| 物料名称 | 字符串 | ✅ | 1~100 | 物料中文名 |
| 物料类别 | 下拉 | ✅ | — | 来源于物料类别下拉(依赖「物料类别列表」已迁移) |
| 单位 | 输入/下拉 | ❌ | — | 当前版本以文本框占位;待「计量单位」模块迁移后接入下拉数据源 |
| 备注 | 字符串 | ❌ | — | 多行文本,超过 20 字符鼠标悬停展示全量 |
| 创建人 | 字符串 | — | — | 后端返回 |
| 创建时间 | 日期 | — | — | 后端自动填充 |
| 操作 | — | — | — | 行内「编辑」「删除」按钮 |
### 3.3 前置条件
1. 已登录具备「生产配置 / 物料模型 / 物料信息管理」权限的账号。
2. 已完成「物料类别列表」迁移,「物料类别」下拉数据正常加载(用于新增/编辑时的类别选择)。
3. 后端 `material` 表存在;若为空,可通过本测试用例的「新增」步骤补足。
4. 浏览器地址栏输入 `/production_configuration/matetial_model/matetial_management` 可直接访问。
5. 当前页面右上角语言切换为「中文」切换为「English」后再次验证关键标签。
### 3.4 测试用例
#### 3.4.1 列表与搜索
| # | 操作步骤 | 预期结果 | 实际结果 | 通过 |
|---|---------|---------|---------|:----:|
| 1.1 | 打开「物料信息管理」页面 | 表格自动加载,列表正常显示;表头依次为:序号 / 物料编码 / 物料名称 / 物料类别 / 单位 / 备注 / 创建人 / 创建时间 / 操作 | | ☐ |
| 1.2 | 物料类别下拉可正常展开,选项来源于物料类别数据 | 下拉选项与「物料类别列表」一致,支持搜索过滤 | | ☐ |
| 1.3 | 在「物料编码」输入框输入已存在的关键字,点击「查询」 | 列表仅显示编码模糊匹配的数据,页码回到 1 | | ☐ |
| 1.4 | 在「物料名称」输入框输入已存在的关键字,点击「查询」 | 列表仅显示名称模糊匹配的数据 | | ☐ |
| 1.5 | 在「物料类别」下拉中选择某一项,点击「查询」 | 列表仅显示该类别下的物料 | | ☐ |
| 1.6 | 同时输入编码 + 名称 + 类别后点击「查询」 | 列表为 AND 条件过滤结果 | | ☐ |
| 1.7 | 在搜索框内按 `Enter` 键 | 触发查询,效果与点击「查询」一致 | | ☐ |
| 1.8 | 点击「重置」按钮 | 搜索框清空,列表恢复初始数据,页码回到 1 | | ☐ |
| 1.9 | 翻到第 2 页,点击「重置」 | 页码回到 1列表刷新 | | ☐ |
| 1.10 | 列表行数超过 1 页时,切换「每页显示条数」 | 列表按新分页重新加载,请求参数 `page_size` 同步变化 | | ☐ |
| 1.11 | 切换右上角语言为「English」 | 表头列名翻译正确No. / Material Code / Material Name / Category / Unit / Remark / Created By / Created At / Action | | ☐ |
| 1.12 | 备注长度 > 20 字符时,鼠标悬停单元格 | 弹层显示完整备注内容 | | ☐ |
| 1.13 | 备注长度 <= 20 字符时 | 单元格直接展示文本,不显示弹层 | | ☐ |
| 1.14 | 后端返回空数据 | 表格区域显示空数据占位,分页总数为 0 | | ☐ |
#### 3.4.2 新增物料信息
| # | 操作步骤 | 预期结果 | 实际结果 | 通过 |
|---|---------|---------|---------|:----:|
| 2.1 | 点击工具栏「新增」按钮 | 弹出「新增物料信息」对话框,依次为:物料编码 / 物料名称 / 物料类别 / 单位 / 备注 | | ☐ |
| 2.2 | 编码留空,名称输入「测试物料 A」类别下拉选择「原材料」点击「确定」 | 编码字段红色错误提示「请输入物料编码」 | | ☐ |
| 2.3 | 编码输入「MAT_001」名称留空点击「确定」 | 名称字段红色错误提示「请输入物料名称」 | | ☐ |
| 2.4 | 编码、名称都填写,类别留空,点击「确定」 | 类别字段红色错误提示「请选择物料类别」 | | ☐ |
| 2.5 | 编码输入 101 个字符(如 101 个 `a`),名称输入「测试物料 A」点击「确定」 | 编码字段提示「长度在 1 到 100 个字符」 | | ☐ |
| 2.6 | 名称输入 101 个字符编码输入「MAT_002」点击「确定」 | 名称字段提示「长度在 1 到 100 个字符」 | | ☐ |
| 2.7 | 编码输入已存在的编码,名称输入「重复测试」,点击「确定」 | 提交失败,弹出后端返回的错误提示(如「编码已存在」);列表不刷新 | | ☐ |
| 2.8 | 编码输入「MAT_001」名称输入「测试物料 A」类别选择「原材料」单位输入「个」备注输入「用于产线领料」点击「确定」 | 提交成功,弹框关闭,顶部提示「操作成功」;列表新增一行且所有字段正确展示 | | ☐ |
| 2.9 | 在弹框中点击「取消」 | 弹框关闭,不提交任何数据 | | ☐ |
| 2.10 | 打开新增弹框后点击右上角 × 关闭,再次点击「新增」 | 弹框再次打开时表单已重置 | | ☐ |
| 2.11 | 重复 2.8 步骤的编码「MAT_001」再次提交 | 后端返回「编码已存在」或类似错误,不重复创建 | | ☐ |
#### 3.4.3 编辑物料信息
| # | 操作步骤 | 预期结果 | 实际结果 | 通过 |
|---|---------|---------|---------|:----:|
| 3.1 | 在列表中找到「MAT_001」2.8 创建),点击行内「编辑」 | 弹出「编辑物料信息」对话框,编码 / 名称 / 类别 / 单位 / 备注自动回填 | | ☐ |
| 3.2 | 将名称修改为「测试物料 A1」类别改为「半成品」单位改为「箱」备注改为「用于产线补料」点击「确定」 | 提交成功,弹框关闭,提示「操作成功」;列表行各字段同步更新 | | ☐ |
| 3.3 | 编辑时清空编码并保存 | 编码字段必填提示「请输入物料编码」 | | ☐ |
| 3.4 | 编辑时清空名称并保存 | 名称字段必填提示「请输入物料名称」 | | ☐ |
| 3.5 | 编辑时清空类别并保存 | 类别字段必填提示「请选择物料类别」 | | ☐ |
| 3.6 | 编辑时将编码修改为与另一行相同的值,点击「确定」 | 后端返回「编码已存在」错误 | | ☐ |
| 3.7 | 编辑弹框打开后点击「取消」 | 数据不保存,列表无变化 | | ☐ |
| 3.8 | 编辑后重新打开编辑弹框 | 表单仍展示上一次保存后的数据 | | ☐ |
| 3.9 | 编辑成功后检查「创建时间」字段 | 创建时间未变化(仅首次新增时赋值) | | ☐ |
| 3.10 | 编辑时清空备注并保存 | 提交成功,列表中备注列空白(无 `null` / `undefined` 文本) | | ☐ |
#### 3.4.4 删除与批量删除
| # | 操作步骤 | 预期结果 | 实际结果 | 通过 |
|---|---------|---------|---------|:----:|
| 4.1 | 在列表中找到「MAT_001」点击行内「删除」 | 弹出确认框「确定要执行该操作吗?」,标题为「提示」 | | ☐ |
| 4.2 | 在确认框中点击「取消」 | 删除取消,列表无变化 | | ☐ |
| 4.3 | 在确认框中点击「确定」 | 确认框关闭,顶部提示「操作成功」;该行从列表中消失 | | ☐ |
| 4.4 | 在仅剩 1 条数据的列表上点击「删除」并确认 | 删除成功后,列表变为空,分页回到第 1 页 | | ☐ |
| 4.5 | 不勾选任何数据,直接点击工具栏「批量删除」 | 顶部红色错误提示「请先选择要删除的数据」 | | ☐ |
| 4.6 | 勾选 3 条数据,点击「批量删除」,确认框标题与按钮中文显示 | 弹出确认框「确定要删除所选物料吗?」 | | ☐ |
| 4.7 | 在 4.6 弹出的确认框中点击「确定」 | 3 条数据全部删除,顶部提示「操作成功」;列表刷新 | | ☐ |
| 4.8 | 尝试删除被其他业务(如 BOM引用的物料 | 后端返回「存在引用,无法删除」或类似错误 | | ☐ |
| 4.9 | 删除操作期间切换「每页显示条数」 | 删除后页码自动修正,避免出现空页 | | ☐ |
#### 3.4.5 权限与异常场景
| # | 操作步骤 | 预期结果 | 实际结果 | 通过 |
|---|---------|---------|---------|:----:|
| 5.1 | 使用无「新增」权限的账号登录 | 工具栏「新增」按钮不显示或不可点击 | | ☐ |
| 5.2 | 使用无「编辑」权限的账号登录 | 行内「编辑」按钮不显示 | | ☐ |
| 5.3 | 使用无「删除」权限的账号登录 | 行内「删除」按钮不显示 | | ☐ |
| 5.4 | 使用无「批量删除」权限的账号登录 | 工具栏「批量删除」按钮不显示或不可点击 | | ☐ |
| 5.5 | 断网后刷新页面 | 表格显示加载失败或空态DevTools Network 显示请求失败 | | ☐ |
| 5.6 | 后端返回 500 错误(如临时停服) | 顶部红色错误提示(如「操作失败」),不卡死页面 | | ☐ |
| 5.7 | 物料类别下拉数据加载失败时进入新增弹框 | 类别下拉为空,但仍可正常打开弹框 | | ☐ |
| 5.8 | 同时打开两个浏览器标签页,在 A 标签新增数据后B 标签刷新列表 | B 标签列表应能看到 A 标签新增的数据 | | ☐ |
#### 3.4.6 国际化与界面
| # | 操作步骤 | 预期结果 | 实际结果 | 通过 |
|---|---------|---------|---------|:----:|
| 6.1 | 中文状态下打开新增弹框 | 弹框标题、字段标签、按钮文字均为中文 | | ☐ |
| 6.2 | 切换为「English」后再次打开新增弹框 | 弹框标题「Add Material」按钮「Confirm / Cancel」 | | ☐ |
| 6.3 | 中文状态下点击删除,确认弹框标题为「提示」 | 确认框标题与按钮文字中文显示 | | ☐ |
| 6.4 | 英文状态下点击删除确认弹框标题为「Tip」 | 确认框英文显示 | | ☐ |
| 6.5 | 列表右上角「帮助」按钮(? 图标) | 鼠标悬停或点击显示「物料信息用于维护物料编码、名称、规格等属性」 | | ☐ |
| 6.6 | 中文状态下批量删除无选中数据 | 错误提示「请先选择要删除的数据」 | | ☐ |
| 6.7 | 英文状态下批量删除无选中数据 | 错误提示「Please select data first」 | | ☐ |
### 3.5 接口契约(用于前后端联调核对)
| 方法 | URL | 旧 method 名 | 入参关键 key | 备注 |
|------|-----|-------------|-------------|------|
| GET | `production_configuration/matetial_model/matetial_management/list` | `production_configuration_matetial_model_matetial_management_list` | `code / name / bom_source_category_id / page_no / page_size` | 列表查询 |
| GET | `…/all` | `…_all` | — | 全部物料(下拉框用,可选) |
| POST | `…/create` | `…_create` | `code / name / bom_source_category_id / unit_id / remark` | 新增 |
| PUT | `…/edit` | `…_edit` | `id / code / name / bom_source_category_id / unit_id / remark` | 编辑(`id` 为行主键) |
| DELETE | `…/delete` | `…_delete` | `id: [rowId]` | 单条删除,参数名 `id` 数组(与旧项目保持一致) |
| DELETE | `…/batch_delete` | `…_batch_delete` | `id: [id1, id2, …]` | 批量删除 |
| POST | `…/get_import_template` | `…_get_import_template` | — | 导入模板下载(响应 `blob`),本版本预留 |
| POST | `…/matetial_data_import` | `…_matetial_data_import` | `import_data: JSON.stringify([...])` | 物料数据导入,本版本预留 |
| POST | `…/matetial_data_export_task` | `…_matetial_data_export_task` | — | 物料数据导出任务创建,本版本预留 |
> 说明:本版本优先实现列表 / 新增 / 编辑 / 删除 / 批量删除五大核心功能;导入 / 导出Excel 模板下载、批量导入、导出任务)保留 API 方法和钩子位置,待后续迭代中补齐弹框 UI。
### 3.6 问题记录
> 测试人员发现问题时填写。每条问题一行,格式:`[编号] [用例编号] [现象] [复现步骤] [期望] [截图/日志] [负责人] [处理状态]`。
| 编号 | 用例 | 现象 | 复现步骤 | 期望 | 截图/日志 | 负责人 | 状态 |
|:---:|:---:|------|---------|------|----------|:----:|:----:|
| | | | | | | | |
### 3.7 备注
- 本页面沿用旧 URL 与后台 method 名,待后台数据库路由表统一更新后统一修改。
- 「物料类别」下拉数据由 `getMaterialCategoryAll` 提供,依赖「物料类别列表」功能已迁移完成;如该下拉为空,请先检查该模块是否正常运行。
- 「单位」字段在当前版本以文本框占位,依赖「计量单位」模块迁移后接入下拉数据源(与 BOM 等联动),测试时需在「备注」中注明该功能尚未启用。
- 涉及 `confirmMixin` / `useTableColumns` / `useTableButtons` / `i18nMixin` 等公共 Composable如其他页面出现类似问题先确认是否在迁移组件时有遗漏。
- 备注长度 > 20 字符时使用 `el-popover` 悬停展示全量内容;该交互与旧项目保持一致。
- 若新增 / 编辑成功后接口返回结构变化(`res.data` 包裹层调整),需要同步更新 `fetchData` 的解析逻辑。