日期:2026-10-08
状态:已确认(2026-10-08)
关联:docs/superpowers/specs/2026-10-07-sample-freight-batch-design.md(运费批次实体已落地)
Demo:docs/demos/2026-10-08-sample-freight-menu-demo.html
运费批次(biz_sample_freight / biz_sample_freight_item)与协议单内「配置运费」已实现。原设计将「独立运费中心」列为非目标。业务需要在细胞存储侧提供全局台账:一次专线车/快递常混装细胞存储 + 科研捐赠样本,需在一处查看与配置。
| 项 | 结论 |
|---|---|
| 菜单位置 | 细胞存储 →「样本信息管理」下方 → 运费信息 |
| 协议单入口 | 两边保留:菜单管全局,协议单作快捷 |
| 列表粒度 | 一笔运费批次;样本多行展示,运费列 合并单元格(rowspan) |
| 样本来源 | 细胞存储 + 科研捐赠均可关联与展示 |
| 数据模型 | 不新建表;复用现有运费 API |
| 项 | 值 |
|---|---|
| 侧栏父级 | 细胞存储 |
| 标题 | 运费信息 |
| 顺序 | 紧挨「样本信息管理」之后 |
| 路由 path(建议) | sample-freight |
| 组件 | /cell-storage/sample-freight/index |
| 权限码 | cell-storage:sample-freight:list |
| Hash 示例 | /#/market/cell-storage/sample-freight |
web-admin/src/router/modules/sqxp.ts 增加路由。docs/sql/migrations/2026-10-08-sample-freight-menu.sql 写入 sys_menu(及按需角色授权),order_num 排在样本信息管理之后。App.vue panelTitleBarTextRules 注册「运费信息」完整标题(若需竖条)。对齐标准列表(筛选 → 工具栏 → 表格 → 分页)与 Fresh Mint;参考 Demo HTML。
sample_transport_mode)type="primary")按钮均带 <el-icon>。
批次字段(rowspan):运输方式、运费(元)、关联数、创建时间、操作(或操作仅行内按需)。
样本字段(每关联样本一行):来源 Tag、协议单号、样本编码、样本类型。
细胞存储 / 科研捐赠(语义色 Tag)。el-tag。min-width;操作列 fixed="right",min-width ≥ 260px。el-table 用 span-method 实现 rowspan。按运费批次分页(不是按样本行)。页脚文案可附带「本页样本明细行数」提示。
弹窗(dialog-form-layout,label-position="top",无 backdrop blur):
POST /web/admin/sample-freightsPOST /web/admin/sample-freights/{id}/linkPOST .../unlink)。PUT /web/admin/sample-freights/{id} 改运输方式/金额。协议单 SampleTransportFormSection 行为不变;两边写同一套后端接口。
现有 CRUD/API 已覆盖主路径。本需求增量:
列表带 items
GET /web/admin/sample-freights 增加查询参数 includeItems=true(默认 false 保持兼容)。
为 true 时每条返回 items[]:sampleSource、sampleId、sampleCode、protocolId、protocolNo(需联表协议号)、sampleTypeName(可选联表)。
筛选增强(同列表接口)
sampleSource:cell_storage | research_donation(有匹配 item 的批次)keyword:命中 transport_mode / 协议单号 / 样本编码样本待选列表(供配置弹窗)
GET /web/admin/sample-freights/sample-optionssampleSource?、keyword、page、pageSize权限:菜单码 cell-storage:sample-freight:list;接口沿用 admin 鉴权,数据范围与协议样本一致。
| 文件 | 说明 |
|---|---|
web-admin/src/views/cell-storage/sample-freight/index.vue |
列表页 |
web-admin/src/views/cell-storage/sample-freight/FreightConfigDialog.vue |
配置运费弹窗(可抽公共,供协议单后续复用) |
web-admin/src/api/sample-freight.ts |
扩展 list 参数、sample-options |
web-admin/src/router/modules/sqxp.ts |
路由 |
docs/sql/migrations/2026-10-08-sample-freight-menu.sql |
菜单 |
协议单组件可不在本迭代强制抽取公共弹窗;行为一致即可。
includeItems + 筛选 + protocolNo/typeName enrichment;样本 options API| 风险 | 对策 |
|---|---|
| el-table span-method 与勾选/斑马纹 | 按批次生成扁平行 + span-method;勾选绑定 freightId |
| 列表 items 过大 | 分页按批次;单批次 items 异常多时详情懒加载(首版可全带) |
| 样本 options 性能 | 远程搜索 + 分页,禁止一次拉全表 |