docs: add production waste-output list design.

Capture the agreed read-only P01 list under Production Management (sibling to cleanroom garment), querying step outputs of type FQW without a new business table.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
zlwuandCursor committed 2026-08-18 10:45:23 +08:00
1 parent 304469f6fa
commit af337562ae
1 file changed
+158
@@ -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/废弃物类型时列表为空,属预期。