diff --git a/docs/superpowers/specs/2026-08-18-production-waste-output-list-design.md b/docs/superpowers/specs/2026-08-18-production-waste-output-list-design.md new file mode 100644 index 00000000..8e1c8f11 --- /dev/null +++ b/docs/superpowers/specs/2026-08-18-production-waste-output-list-design.md @@ -0,0 +1,158 @@ +# 生产废弃物管理(只读汇总列表)— 设计文档 + +> 日期:2026-08-18 +> 状态:已确认 +> 范围:web-admin【生产管理】下新菜单【废弃物管理】+ 后端分页列表 API + +--- + +## 1. 背景 + +生产任务执行时,工艺步骤右侧「产出物」可登记类型为「有效物」或「废弃物」的行。业务需要在独立页面统一查看所有任务步骤中已登记的**废弃物**,便于日常核对;本期不做处置流程,也不在本页增删改。 + +## 2. 已确认规则 + +| 项 | 约定 | +|----|------| +| 菜单位置 | 【生产管理】下,与【洁净服管理】**同级**、紧挨洁净服 | +| 页面能力 | **只读**汇总列表;本页不新增/编辑/删除 | +| 数据纳入 | 产出类型为废弃物即列出;**名称、条码可为空**也展示 | +| 筛选 | 关键字(产出名称 / 条码模糊)+ 登记时间范围 | +| 实现路径 | **方案 1**:现查现列,不新建业务表;多表 JOIN 分页查询 | + +## 3. 非目标 + +- 本页对废弃物的增删改 +- 独立「处置状态 / 出库」等新字段或新表 +- 工艺库 / 工艺路线模板中的废弃物配置行(只展示任务步骤真实登记的 `biz_production_task_step_output`) +- 改变任务执行页产出物录入交互 + +## 4. 数据来源 + +``` +biz_production_task_step_output + ├─ output_type_id → biz_output_type + ├─ step_id → biz_production_task_step + │ └─ task_id → biz_production_task + │ └─ work_order_id → biz_production_work_order + └─ create_time(列表「登记时间」) +``` + +**废弃物类型判定(按租户,不写死 UUID):** + +1. 优先:`biz_output_type.type_code = 'FQW'` 且 `del_flag=0` +2. 兜底:`type_name = '废弃物'` 且 `del_flag=0` +3. 若租户无此类主数据,列表为空(需在「工艺基础信息」维护产出类型) + +种子参考(zkxw 租户):`type_code=FQW` / `type_name=废弃物`;有效物为 `YXW`,**不得**出现在本列表。 + +**与洁净服「废弃」无关:** 洁净服 `garment_status=yfq` 是服装状态,不进入本列表。 + +## 5. 后端 + +### 5.1 API + +`GET /web/admin/production-waste-outputs`(挂在现有 production 路由模块,具体 path 以落地为准,语义一致即可) + +| 参数 | 说明 | +|------|------| +| `page` / `pageSize` | 分页 | +| `keyword` | 可选;模糊匹配 `output_name`、`output_barcode` | +| `createTimeStart` / `createTimeEnd` | 可选;按产出行 `create_time` | + +### 5.2 查询约束 + +- 当前用户 `tenant_no` 隔离;产出 / 类型 / 步骤 / 任务 / 工单均排除 `del_flag=1` +- 应用与生产工单/任务列表一致的 **数据权限**(`apply_data_scope`) +- 默认排序:`biz_production_task_step_output.create_time DESC` +- **无**写接口(本期) + +### 5.3 列表行字段(camelCase) + +| 字段 | 说明 | +|------|------| +| `id` | 产出行 id | +| `outputName` | 产出名称 | +| `outputBarcode` | 条码 | +| `remark` | 备注 | +| `createTime` | 登记时间 | +| `stepId` | 步骤 id | +| `processName` | 工序/步骤名称 | +| `taskId` | 任务 id | +| `taskNo` | 任务号 | +| `workOrderId` | 工单 id | +| `workOrderNo` | 工单号 | +| `sampleCode` | 样本编码(临时工单可空) | +| `labStorageCode` | 可选;若 enrich 成本低可顺带返回,列表列可不展示 | + +## 6. 前端 + +### 6.1 模式与路由 + +- **UI 模式**:P01 标准列表(只读,无新增/编辑弹窗) +- **参考页**:`/#/demo/unit`;同组视觉对齐 `production/cleanroom-garment` +- **Hash**:`/#/production-group/production/waste-output` +- **面板标题**:`废弃物列表`(写入 `App.vue` `panelTitleBarTextRules`) + +### 6.2 筛选 + +- 关键字:产出名称、条码 +- 登记时间:起止,对应 `createTimeStart` / `createTimeEnd` + +### 6.3 表格列 + +| 列 | 展示 | +|----|------| +| 产出名称 | 空 → `—` | +| 条码 | 空 → `—` | +| 工序/步骤 | `processName` | +| 任务号 | `taskNo` | +| 工单号 | `workOrderNo` | +| 样本编码 | `sampleCode`,空 → `—` | +| 备注 | `remark` | +| 登记时间 | `createTime` | +| 操作 | 「查看」:打开该任务【任务执行】弹窗(只读);无 `taskId` 或任务不可用时禁用/提示 | + +### 6.4 工具栏与空态 + +- 无「新增」、无批量删除等写操作 +- 空态文案:`暂无废弃物登记` + +### 6.5 权限 + +- 菜单码:`production:waste-output:list` +- 仅列表访问;不配置本页 create/update/delete 按钮权限 + +## 7. 菜单落地 + +| 项 | 值 | +|----|-----| +| 父菜单 | 生产管理 `PRM00000000000000000000000000001` | +| 建议 menu id | `95300000000000000000000000000001`(避开 950/952 等已用段) | +| path | `waste-output` | +| menuCode | `production:waste-output:list` | +| 排序 | `order_num` 紧挨洁净服(略大于洁净服) | +| SQL | `docs/sql/` 下幂等 INSERT + 角色授权脚本 | +| 前端路由 | `web-admin/src/router/modules/sqxp.ts` | +| 菜单镜像 | `backend/app/api/menu.py`(若工程仍维护静态镜像则同步) | + +## 8. 建议改动文件 + +| 层 | 内容 | +|----|------| +| SQL | `docs/sql/alter_sys_menu_add_production_waste_output.sql`(或同等命名) | +| Backend | production 相关 `crud` 列表函数、`api` 路由、必要时 schema | +| Frontend | API 模块、`views/production/waste-output/index.vue`、`sqxp.ts`、`App.vue` 标题规则 | +| 图谱 | 实现后按仓库约定更新 frontend/backend graphify | + +## 9. 验收 + +1. 任务执行中登记废弃物后,本页刷新可见对应行(含空名称/空条码)。 +2. 关键字、登记时间筛选与分页正确;租户隔离正确;有效物不出现。 +3. 「查看」可打开对应任务执行(只读);任务不可用时有合理提示。 +4. 菜单出现在生产管理下、紧挨洁净服;无权限用户不可见。 + +## 10. 风险与说明 + +- 列表依赖多表 JOIN;数据量在生产任务产出量级下可接受。若后续要做处置状态,再评估冗余表(原方案 2),本期不做。 +- 租户未配置 FQW/废弃物类型时列表为空,属预期。