日期: 2026-07-27
状态: 待实施
前置:docs/superpowers/specs/2026-07-26-pl-print-slip-dropdown-design.md;现网入库单 / 送(提)货单 / 分装单模版(pl-*-slip-template.ts)
Demo:docs/pl-plan-batch-print-merge-demo.html
运输计划列表支持勾选 多条 计划,将所选计划的产品合打到 一张 单据上。单据类型仍为:入库单、送(提)货单、分装单。沿用现网模版样式,仅扩展物料表与备注数据。
| # | 决策 | 说明 |
|---|---|---|
| D1 | 前端合打 | 复用三个打印弹窗;扩展为支持 planIds[];不新增后端合打 API |
| D2 | 入库单合打条件 | 所选计划 客户名称一致 且 计划日期一致,且均为入库类(planType=inbound) |
| D3 | 送(提)货单合打条件 | 客户名称一致且计划日期一致,且均为出库类(planType=outbound) |
| D4 | 分装单合打条件 | 不校验 客户名称、计划日期;所选须均可打分装单(出库类) |
| D5 | 物料行 | 分行列出,不合并同名产品数量;入库/送货「单据编号」列填各行所属 planNo;分装「序号」按合并后行序递增 |
| D6 | 备注 | 多计划备注换行合并;格式 计划号:备注;空备注跳过 |
| D7 | 收货联系方式 | 合打(及本期约定)留空 |
| D8 | 车辆信息 | 不填入打印数据 |
| D9 | 模版 | 三类单据沿用当前模版结构与样式,只增加物料表内容(及备注合并) |
| D10 | 入口范围 | 列表工具栏 支持多选合打;查看弹窗 / 安排成功底栏仍为单计划打印(行为不变) |
| D11 | 单选 | 勾选恰好 1 条时,行为与现网一致 |
canBatchPrint(command, plans);不满足则该项 disabled,title/点击提示说明原因。编辑 / 安排运输 / 作废 / 删除等仍要求恰好 1 条,不变。
抽纯函数(建议 web-admin/src/utils/pl-display.ts 或 pl-batch-print.ts):
canBatchPrintSlip(plans: Plan[], command: PlPrintSlipCommand): { ok: boolean; reason?: string }
| command | 规则 |
|---|---|
inbound |
plans.length≥1;全部 planType==='inbound';全部 customerName 相同(trim 后);全部 planDate 相同 |
delivery |
全部 planType==='outbound';客户名称、计划日期同上 |
subpack |
全部 canPrintSlipCommand(planType,'subpack')(即出库类);不校验客户/日期 |
客户名称比较字段:与列表「客户名称」一致,使用 customerName(trim);若个别历史数据空,视为不相等(合打入库/送货失败并提示)。
单条时等价于现有 canPrintSlipCommand(plan.planType, command)。
现有:open(planId: string)
扩展:open(planIdOrIds: string | string[])
planApi.get(或等价详情接口),按传入顺序排列从多条 Plan 构造传给模版渲染的上下文:
| 字段 | 合打取值 |
|---|---|
物料 products |
按计划顺序展开;每行带所属 planNo(入库/送货写入「单据编号」列) |
planDate / 中文日期 |
取第一条(入库/送货时各条已相同;分装取第一条) |
| 客户 / 送货单位 / 收货单位 | 取第一条的客户相关字段(入库/送货已一致) |
remark |
plans.filter(有备注).map(p => \${p.planNo}:${p.remark.trim()}`).join('\n')` |
| 收货联系方式 | '' |
| 车辆 / 车牌 / 司机等 | 不填(空或不传入模版占位) |
| 分装单号等单据级字段 | 仍按现网单计划规则生成(基于第一条或现有逻辑),不因合打改号规则(若现网依赖单 planId,继续用第一条 id 触发取号) |
模版 HTML 不改;仅 buildProductRows / 占位符替换的数据源改为合打结果。
勾选顺序 → 计划顺序 → 各计划内原产品顺序。
| 文件 | 职责 |
|---|---|
web-admin/src/utils/pl-batch-print.ts(新建)或扩展 pl-display.ts |
canBatchPrintSlip、备注合并、产品行展开 helper |
web-admin/src/views/pl/plan/index.vue |
工具栏:N≥1 可打开打印;菜单 disabled 绑合打校验;传入 ids |
web-admin/src/components/business/pl-inbound-slip-print-dialog/index.vue |
open 支持多 id;合打渲染 |
web-admin/src/components/business/pl-delivery-slip-print-dialog/index.vue |
同上;收货联系方式空 |
web-admin/src/components/business/pl-subpack-slip-print-dialog/index.vue |
同上;序号递增 |
web-admin/src/utils/pl-inbound-slip-template.ts 等 |
尽量不改模版结构;若 buildProductRows 需按行 planNo 覆盖,做最小改动 |
| 单测(可选) | canBatchPrintSlip、备注合并纯函数 |
查看弹窗 / pl-plan-arrange-dialog 打印入口:不改(仍 open(singleId))。
合打入库单要求:客户名称一致且计划日期一致,且均为入库类计划合打送(提)货单要求:客户名称一致且计划日期一致,且均为出库类计划分装单仅支持出库类计划计划号:备注 多行。