5.3 KiB
5.3 KiB
运输计划「复制」:新增弹窗预填
日期: 2026-08-06
状态: 已实现
选定方案: 方案 1 — 纯前端预填(打开「新增运输计划」弹窗,映射可复制字段;保存仍走现有 createFull)
1. 目标
在运输计划列表(/#/pl/plan-module/plan)支持基于已有计划复制新建:
- 打开「新增运输计划」弹窗并预填可复制字段。
- 用户可修改日期、产品等后保存,才真正建单。
- 复制基础信息、产品信息、备注、运输物流信息;不复制车辆、承运商及运费相关信息。
2. 非目标
- 不新增后端复制/草稿 API
- 不直接一键落库(须用户确认保存)
- 不批量复制
- 不改造小程序 / H5
- 不改变现有编辑、安排运输、作废等逻辑
3. 交互
3.1 入口
| 位置 | 条件 | 行为 |
|---|---|---|
| 列表工具栏「复制」 | 恰好勾选 1 条 | 打开新增弹窗并按源计划预填 |
查看弹窗 #hero-actions「复制」 |
始终可点(含已作废、已归档) | 同上;与「编辑」一致,打开表单弹窗,不强制关闭查看弹窗 |
- 按钮:
CopyDocument图标 +「复制」;工具栏用btn-ghost(主行动仍为「新增计划」)。 - 任意跟进状态 / 运输状态 / 归档状态均可作为复制源;复制不继承业务状态。
3.2 弹窗行为
planId为空(新建模式),另传copyFromPlanId = 源计划 id。- 标题:新增运输计划(与普通新增一致)。
- 打开后
planApi.get(copyFromPlanId)→loadPlanForCopy预填。 - 用户改字段后点「保存」或「保存并安排」→ 现有
createFull路径。 - 成功后:新计划编号、跟进状态待安排、运输状态未安排;源计划不变。
3.3 日期与跟进人
| 字段 | 规则 |
|---|---|
createDate |
设为当天 |
planDate、取货时间、送货时间 |
原样带入,用户可改 |
| 跟进人 | 当前登录用户(与普通新增一致) |
复制模式下,关闭「计划日期变更自动同步取货/送货时间」的 watch,避免覆盖已带入的取送货时间。
4. 字段映射
4.1 复制(预填)
| 区块 | 字段 |
|---|---|
| 合同快照 | contractId、合同号、甲乙方、客户/供应商/目的地、联系人电话、结算方式、hasFreight 等;加载合同详情失败时用计划字段拼快照(同编辑) |
| 基础信息 | planDate、belongsCompany、planType;createDate=当天;跟进人=当前用户 |
| 产品信息 | 产品行业务字段(含别名/品牌、计划数量 quantity、产品备注等);数量仅用计划数量 |
| 运输物流 | 取货/送货地址、经纬度、时间、联系方式、注意事项 |
| 备注 | remark |
4.2 清空(不复制)
| 区块 | 字段 |
|---|---|
| 车辆 | vehicleId、司机、人员摘要、车辆摘要条 |
| 承运商/运费 | carrierId、distanceKm、运费计价字段(重置为新增默认) |
| 执行态 | 计划编号、各业务状态、transportId/transportNo、安排结果与链接 |
| 产品执行结果 | actualQty、出入库实绩、归档品牌数量、危化证书 URL(purchaseCertUrl / transportCertUrl / legalUseCertUrl) |
| 产品行主键 | 不沿用源 plan_product.id(表单行用临时键,提交只带产品业务字段) |
5. 组件与改动文件
| 文件 | 变更 |
|---|---|
web-admin/src/components/business/pl-plan-form-dialog/index.vue |
新增 prop copyFromPlanId;实现 loadPlanForCopy;复制态禁用计划日期→取送货联动;产品映射去掉证书 URL / 源行 id |
web-admin/src/views/pl/plan/index.vue |
工具栏与查看弹窗「复制」;copyFromPlanId 与 editingPlanId 互斥传入表单弹窗 |
可选:若映射过长,抽出 mapPlanToCopyForm composable(非必须)。
后端: 无变更。
6. 数据流
列表/查看 「复制」
→ formDialogVisible=true, planId='', copyFromPlanId=源id
→ PlPlanFormDialog opened
→ planApi.get(copyFromPlanId)
→ loadPlanForCopy(裁剪车辆/承运商/运费/执行态)
→ 用户编辑
→ createFull(同新增)
→ success → 刷新列表;可选打开安排弹窗
7. 错误处理
- 拉取源计划失败:
ElMessage.error,关闭表单弹窗,不展示半成品表单。 - 保存失败:与现有新增一致(校验滚动 + 接口错误提示)。
8. 验收
- 勾选 1 条 →「复制」→ 标题为「新增运输计划」;
createDate为今天;跟进人为当前用户。 - 合同/基础/产品计划数量/备注/取送货已预填;车牌、承运商、运费为空。
- 修改后保存 → 产生新计划编号与待安排状态;源计划数据不变。
- 已作废、已归档计划也可复制。
- 未勾选或勾选多条时工具栏「复制」禁用;普通新增、编辑行为不变。
9. 决议摘要
| 议题 | 决议 |
|---|---|
| 交互 | 打开新增弹窗预填,保存才建单 |
| 计划/取送货日期 | 原样带入 |
| 承运商 | 不复制(与车辆一并清空) |
| 入口 | 列表工具栏(单选)+ 查看弹窗 |
| 可复制范围 | 任意状态 |
| 创建日期 | 当天 |
| 产品数量 | 仅计划 quantity |
| 实现 | 纯前端,复用 createFull |