This commit is contained in:
zlwu committed 2026-09-03 13:50:25 +08:00
1 parent 67d37a1f0e
commit 54a1ba0c5c
21 files changed
+8646 -7577

No files matched your search

@@ -0,0 +1,47 @@
# 地磅可选车辆(皖H21522)Implementation Plan
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
**Goal:** 车牌为皖H21522 时,内部客户段地磅默认不勾且可手动勾选;换车时按规则重算各段。
**Architecture:** 车牌例外判定集中在工具函数;表单弹窗传入当前车牌并在换车时重算;装货/送货段按「可否手动」控制 checkbox。
**Tech Stack:** Vue 3 + TypeScript(web-admin)
---
### Task 1: 工具函数与默认值
**Files:**
- Modify: `web-admin/src/utils/pl-internal-customer.ts`
- Modify: `web-admin/src/utils/pl-plan-stop-form.ts`
- [x] 增加 `PL_DIBANG_OPTIONAL_VEHICLE_PLATES` / `isPlDibangOptionalVehiclePlate`
- [x] `resolveStopDibangDefaults` 增加可选 `vehiclePlate`:可选车时内部客户也返回未勾选
- [x] 新增 `canManualToggleStopDibang(customerName, vehiclePlate?)`
- [x] `normalizeStopDibangFieldsFromApi`:可选车时不强制 gen=1,保留 API 值;仍禁止外部客户 gen=1
### Task 2: 装货/送货段 UI
**Files:**
- Modify: `web-admin/src/components/business/pl-plan-load-section/index.vue`
- Modify: `web-admin/src/components/business/pl-plan-delivery-section/index.vue`
- [x] 新增 prop `vehiclePlate`
- [x] checkbox `disabled` 绑定 `!canManualToggle`
- [x] `handleCustomerChange` / `handleDibangToggle` 使用车牌感知的 defaults / canManual
- [x] 更新 hint 文案
### Task 3: 表单弹窗换车联动
**Files:**
- Modify: `web-admin/src/components/business/pl-plan-form-dialog/index.vue`
- [x] computed 当前车牌传给两段组件
- [x] `handleVehicleChange`(及清空车辆)后调用 `reapplyStopDibangByVehiclePlate`
- [x] 编辑打开时 `syncStopDibang: false`,不强制覆盖已存值
### Task 4: 验证
- [x] 单元测试:`pl-dibang-optional-vehicle.test.ts`(5 passed)
- [x] `graphify update`(frontend)
@@ -0,0 +1,44 @@
# 运输计划「地磅可选车辆」设计
日期:2026-09-02
范围:`web-admin` 运输计划新增/编辑弹窗(装货/送货段地磅勾选)
状态:已实现
## 1. 背景与目标
默认规则:装货/送货段客户为内部客户(安庆市山峡化工有限公司 / 安徽云栋化工有限公司)时,「生成地磅单」默认勾选且不可改;其他客户不勾且不可勾。
业务例外:当计划车牌为 **皖H21522** 时,即使段次客户为内部客户,地磅单也默认不勾选,但勾选框放开,由用户自行决定。
## 2. 已确认决策
| 项 | 决策 |
|---|---|
| 匹配方式 | 主牌精确匹配 `皖H21522`(不含挂车号拼接) |
| 换到该车 | 立刻取消所有装货/送货段地磅勾选,并放开勾选框(内部客户可再勾) |
| 换离该车 | 立刻恢复原规则:内部客户自动勾选并锁定;外部客户不勾且锁定 |
| 编辑回填 | 保留接口已存勾选值;若当前为该车 + 内部客户,仅放开勾选框 |
| 外部客户 | 行为不变:始终不勾、不可勾(与是否该车无关) |
## 3. 行为矩阵
| 车牌 | 段客户 | 默认勾选 | 可手动改 |
|---|---|---|---|
| 非 皖H21522 | 内部 | 是(装货出库 / 送货入库) | 否 |
| 非 皖H21522 | 外部/空 | 否 | 否 |
| 皖H21522 | 内部 | 否 | 是 |
| 皖H21522 | 外部/空 | 否 | 否 |
## 4. 实现要点
- 常量与判定:`isPlDibangOptionalVehiclePlate(plate)`(与 `pl-internal-customer` 同层或同文件旁)
- `resolveStopDibangDefaults(customerName, stopType, vehiclePlate?)`:可选车牌参与默认值
- `canManualToggleStopDibang(customerName, vehiclePlate?)`:仅「内部 + 可选车」为 true
- 表单弹窗:根据当前选中车辆 `licensePlate` 传给装货/送货段;`handleVehicleChange` 后对所有段重算地磅字段
- 装货/送货段:`disabled` 改为 `!canManualToggle`;换客户时传入当前车牌计算默认值;提示文案区分「默认勾选 / 可选 / 仅内部可生成」
## 5. 非目标
- 不改后端地磅生成规则(仍以段上 `generateDibang` 为准)
- 不扩展其他车牌(后续可加常量列表)
- 不改列表/查看态展示逻辑(只读展示已存字段)