Capture the confirmed WeChat paste layout (vehicle, compact product lines, load/delivery sections by customer) so implementation can follow a single source of truth. Co-authored-by: Cursor <cursoragent@cursor.com>
4.6 KiB
4.6 KiB
小程序 · 司机运输计划单「复制发群」文案 enrichment
日期: 2026-10-12
状态: 已确认
范围: 仅miniprogram/utils/plDriverPlanCopy.js的buildDriverPlanCopyText
前置:
docs/superpowers/specs/2026-09-28-mini-pl-driver-plan-copy-wechat-design.md(入口与剪贴板模式)docs/superpowers/specs/2026-10-09-pl-plan-copy-seq-design.md(序号 ensure)
关系: 本设计替换上述前置文档中的「复制文案模板 / 装送货量行格式」;入口交互、序号发号、不含附件等决策仍有效。
1. 目标
客户要求群聊文案更易扫读:增加车牌与产品明细(名称、规格型号、包装规格、计划数量、实际数量),装/送货区块改名为「装货信息 / 送货信息」,并按客户分段列出产品。
2. 已确认决策
| # | 项 | 决策 |
|---|---|---|
| D1 | 实现路径 | 方案 1:只改 buildDriverPlanCopyText;不改后端、不改详情 UI、不加单测文件 |
| D2 | 头信息 | 保留 序号、计划编号;增加 车辆(车牌 licensePlate);不再在头信息输出装货方/送货方#N 列表 |
| D3 | 区块顺序 | 先 送货信息:,后 装货信息: |
| D4 | 分段 | 按 stop 客户名分段:先写 {客户名}:,再列该站产品;装货与送货对称 |
| D5 | 产品行 | 紧凑单行:产品名称 规格型号 包装规格 计划数量:… 实际数量:…(字段间两个空格) |
| D6 | 空值 | 统一 — |
| D7 | 附件 | 仍不包含 |
| D8 | 数据来源 | 仍用详情 GET(列表复制先拉详情);字段已在详情中存在 |
3. 非目标
- 不修改
driver-plan/list.vue/detail.vue的按钮与弹窗流程(除非工具函数签名被迫变更——本设计不变更签名) - 不修改后端 API / schema
- 不改详情页展示文案(「计划 / 规格型号」等 UI)
- 不改加油登记、ETC 等其它「复制发群」
- 不新增测试文件
4. 复制文案模板(定稿)
序号:128
计划编号:YSJH20260409001
车辆:沪A12345
送货信息:
甲客户:
- 工业酒精 95% 吨桶 计划数量:12 吨 实际数量:11.9 吨
乙客户:
- 工业酒精 95% 吨桶 计划数量:8 吨 实际数量:7.9 吨
- 甲醇 99.9% 吨桶 计划数量:2 吨 实际数量:2 吨
装货信息:
某某化工厂:
- 工业酒精 95% 吨桶 计划数量:20 吨 实际数量:19.8 吨
- 甲醇 99.9% 吨桶 计划数量:2 吨 实际数量:2 吨
4.1 字段映射
| 文案 | 来源 |
|---|---|
| 序号 | copySeqNo / copy_seq_no(调用方 ensure 后传入) |
| 计划编号 | planNo / plan_no |
| 车辆 | licensePlate / license_plate |
| 客户名 | stop.customerName / customer_name |
| 产品名称 | product.productName / product_name |
| 规格型号 | product.model |
| 包装规格 | product.packageSpec / package_spec |
| 计划数量 | product.planQty,缺省则 quantity;附 unit |
| 实际数量 | product.actualQty / actual_qty;附 unit |
4.2 产品行格式
- {产品名称} {规格型号} {包装规格} 计划数量:{数量}[ {单位}] 实际数量:{数量}[ {单位}]
- 数量与单位之间一个空格(有单位时);无单位只写数字或
— - 数量为空 → 该侧写
—(可带或不带单位:统一为—,不拼单位)
4.3 边界
| 情况 | 行为 |
|---|---|
| 无 delivery stop | 输出 送货信息: + 下一行 — |
| 无 load stop | 输出 装货信息: + 下一行 — |
| 某站无产品 | 保留 {客户名}:,下一行 - — |
| 客户名为空 | 写 —: |
| 多装货站 | 与送货相同,按详情顺序分段 |
| stop 顺序 | 以详情返回的 stops 数组顺序为准(delivery / load 各自过滤后保持相对顺序) |
5. 实现结构
| 文件 | 职责 |
|---|---|
miniprogram/utils/plDriverPlanCopy.js |
重写 buildDriverPlanCopyText;copyDriverPlanToClipboard 不变 |
列表 / 详情继续调用现有 copyDriverPlanToClipboard;列表仍:get → ensureCopySeq → 合并 copySeqNo → 复制。
6. 验收
- 一装两送多产品:与 §4 定稿示例结构一致
- 列表「复制发群」与详情保存后弹窗复制文案一致
- 缺车牌 / 缺规格 / 未填实际数量 → 对应位置
— - 无送货或无装货 → 对应区块标题下为
— - 剪贴板不含附件 URL
7. 风险
纯前端字符串拼接;字段缺失只影响展示为 —,不影响回执保存。