日期: 2026-08-17
状态: 待实现
界面模式: 与质检侧相同(P27 衍生只读看板 + 双分区)
参考: docs/superpowers/specs/2026-06-23-pre-transit-sample-design.md、web-admin/src/views/quality-inspection/pre-transit-sample/
生产部门需要查看与质检相同的「预产及在途样本」看板。为便于后续两部门界面独立扩充,不复用质检页面组件,而是在【生产管理】下提供完整代码副本,并使用独立权限码;数据查询初期仍共用现有后端接口。
| 项 | 决策 |
|---|---|
| 前端页面 | 完整复制到 views/production/pre-transit-sample/,与质检目录互不引用 |
| 权限码 | 独立:production:preTransitSample:list(质检仍为 biz:preTransitSample:list) |
| 后端业务 API | 共用现有 GET /web/admin/pre-transit-samples/in-transit 与 …/pre-delivery |
| 菜单标题 | 「预产及在途样本」(与质检同名) |
| 菜单位置 | 【生产管理】下,位于【库位管理】上方 |
| 角色授权 | 迁移脚本自动授予「已有生产管理(PRM)下任一有效菜单」的角色 |
| 前端 API 模块 | 共用 web-admin/src/api/pre-transit-sample.ts(不复制) |
| 本期非目标 | 不改列表规则/字段;不新增生产专用查询 API;不改变质检页行为 |
┌─────────────────────┐ ┌─────────────────────┐
│ 质检管理 │ │ 生产管理 │
│ pre-transit-sample │ │ pre-transit-sample │
│ (独立 Vue 副本) │ │ (独立 Vue 副本) │
│ menuCode: │ │ menuCode: │
│ biz:preTransit… │ │ production:pre… │
└─────────┬───────────┘ └─────────┬───────────┘
│ │
└─────────────┬─────────────┘
▼
web-admin api/pre-transit-sample.ts
▼
GET /web/admin/pre-transit-samples/*
(同一 CRUD/Service;鉴权 OR 两权限码)
| 动作 | 路径 |
|---|---|
| 新建(自质检复制) | web-admin/src/views/production/pre-transit-sample/index.vue |
| 新建(自质检复制) | web-admin/src/views/production/pre-transit-sample/PreTransitProtocolCardList.vue |
| 修改 | web-admin/src/router/modules/sqxp.ts |
| 不改(共用) | web-admin/src/api/pre-transit-sample.ts |
| 不改 | web-admin/src/views/quality-inspection/pre-transit-sample/** |
复制后仅调整:文件头注释(标注「生产管理」)、本地组件相对 import;功能与交互保持与质检侧一致。
在 ProductionManage(path: production)的 children 中,于 ProductionStorageFacility(库位管理)之前插入:
| 项 | 值 |
|---|---|
| id | 95200000000000000000000000000001(C 菜单;与 SQL 一致;避开已占用的 950… / 951… 段) |
| name | ProductionPreTransitSample |
| path | pre-transit-sample |
| 完整 Hash | /#/production-group/production/pre-transit-sample |
| component | /production/pre-transit-sample/index |
| title | 预产及在途样本 |
| keepAlive | true |
| menuCode | production:preTransitSample:list |
与质检页相同:双分区(在途 / 预产)、筛选、分页、仅「查看」、协议/捐赠查看弹窗。本期不做差异化。
若 App.vue 的 panelTitleBarTextRules 已按标题文案「预产及在途样本」注册竖条,生产页同标题可复用,无需新增规则。
不新增 Service / CRUD;继续使用 app/crud/pre_transit_sample.py。
文件:backend/app/api/pre_transit_sample.py
将两处:
Depends(require_menu_code("biz:preTransitSample:list"))
改为:
Depends(require_any_menu_code(
"biz:preTransitSample:list",
"production:preTransitSample:list",
))
说明:当前 menu_guard 对 menuCode 校验为放行(仅要求运营端登录);仍应改为 OR,以便日后恢复严格校验时,仅持有生产权限码的用户可调共用 API。
不新增生产专用 path。
| 项 | 值 |
|---|---|
| C 菜单 id | 95200000000000000000000000000001 |
| F 按钮 id | 95200000000000000000000000000002 |
| parent_id | PRM00000000000000000000000000001(生产管理) |
| menu_name | 预产及在途样本 |
| path | pre-transit-sample |
| component | /production/pre-transit-sample/index |
| perms(C/F) | production:preTransitSample:list |
| order_num(C) | 0(库位管理当前为 1,故置于其上方) |
| F 按钮 menu_name | 预产及在途查询 |
| remark | 生产看板:在途样本与预产协议(协议单维度只读;与质检页代码独立) |
新建:docs/sql/alter_sys_menu_add_production_pre_transit_sample.sql
内容要求:
PRM000…(生产管理)已授权(缺则补;符合「选子必带祖先」约定):
sys_role.del_flag = 0 且租户匹配;sys_role_menu,其 menu_id 对应的 sys_menu 满足 parent_id = 'PRM00000000000000000000000000001' 且 del_flag = 0(即已有【生产管理】下任一子菜单)。TOP000…0002(目标角色通常已有;若侧栏仍不可见再人工补)。UPPER(MD5(CONCAT(role_id, '|', menu_id)));软删记录先恢复再插入。docs/sql/zkxw.sql 中对应 sys_menu 行;授权明细可由迁移脚本在环境执行,基线以菜单种子为主。待同步到生产的sql脚本(若团队仍用该文件跟踪待上线 SQL)。/#/production-group/production/pre-transit-sample 可打开,列表数据与质检侧一致(同租户、同筛选)。production:preTransitSample:list、未拥有质检权限码的角色:可见生产侧菜单(在脚本授予后);质检侧菜单仍按原权限。sys_role_menu。views/production/pre-transit-sample/。sqxp.ts 路由。require_any_menu_code。zkxw.sql / 待同步脚本。./scripts/update-graph.sh。/web/admin/production-pre-transit-samples/* 并收紧各自鉴权。