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 <cursoragent@cursor.com>
This commit is contained in:
1 parent
6a8cd90b98
commit
272dfc0d5e
1 file changed
+106
@@ -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. 风险
|
||||
|
||||
纯前端字符串拼接;字段缺失只影响展示为 `—`,不影响回执保存。
|
||||
Reference in new issue
Block a user