From 272dfc0d5ef7f057326a90327818cddc897a73fe Mon Sep 17 00:00:00 2001 From: wuzilong <704541015@qq.com> Date: Mon, 12 Oct 2026 22:10:47 +0800 Subject: [PATCH] docs: specify enriched driver plan copy-to-group text format 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 --- ...-pl-driver-plan-copy-text-enrich-design.md | 106 ++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 docs/superpowers/specs/2026-10-12-mini-pl-driver-plan-copy-text-enrich-design.md diff --git a/docs/superpowers/specs/2026-10-12-mini-pl-driver-plan-copy-text-enrich-design.md b/docs/superpowers/specs/2026-10-12-mini-pl-driver-plan-copy-text-enrich-design.md new file mode 100644 index 000000000..e9b0ed789 --- /dev/null +++ b/docs/superpowers/specs/2026-10-12-mini-pl-driver-plan-copy-text-enrich-design.md @@ -0,0 +1,106 @@ +# 小程序 · 司机运输计划单「复制发群」文案 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. 验收 + +1. 一装两送多产品:与 §4 定稿示例结构一致 +2. 列表「复制发群」与详情保存后弹窗复制文案一致 +3. 缺车牌 / 缺规格 / 未填实际数量 → 对应位置 `—` +4. 无送货或无装货 → 对应区块标题下为 `—` +5. 剪贴板不含附件 URL + +## 7. 风险 + +纯前端字符串拼接;字段缺失只影响展示为 `—`,不影响回执保存。