From 950381cfcc8d84f5e0269a76a19b12c320e2c116 Mon Sep 17 00:00:00 2001 From: API Changelog Bot Date: Wed, 12 Aug 2026 15:19:09 +0800 Subject: [PATCH] =?UTF-8?q?docs(changelog):=20=E5=89=8D=E7=AB=AF=E7=BC=BA?= =?UTF-8?q?=E9=99=B7-=E7=A1=AE=E8=AE=A4=E6=89=A7=E8=A1=8C=E9=A1=B5?= =?UTF-8?q?=E9=80=90=E6=97=A5=E8=BD=A6=E8=B4=B9=E5=A4=9A=E8=BD=A6=E5=8F=AA?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E4=B8=80=E8=A1=8C(mmg)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...页逐日车费多车只显示一行-前端缺陷-管理后台.md | 95 +++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 changelogs-v2/2026-08/12_frontend_确认执行页逐日车费多车只显示一行-前端缺陷-管理后台.md diff --git a/changelogs-v2/2026-08/12_frontend_确认执行页逐日车费多车只显示一行-前端缺陷-管理后台.md b/changelogs-v2/2026-08/12_frontend_确认执行页逐日车费多车只显示一行-前端缺陷-管理后台.md new file mode 100644 index 0000000..4dafd0b --- /dev/null +++ b/changelogs-v2/2026-08/12_frontend_确认执行页逐日车费多车只显示一行-前端缺陷-管理后台.md @@ -0,0 +1,95 @@ +--- +schema: "hl-changelog/v2" +ticket: "frontend" +title: "确认执行页「逐日车费」多车只显示一行:按 serviceDate 去重把同日多台车折叠成单行" +consumer: "admin" +change_type: "前端缺陷" +author: "wx(GIT)" +backend_status: "not_required" +gateway_status: "not_required" +frontend_status: "pending" +frontend_owner: "mmg" +frontend_ref: "" +target_release: "" +verified_at: "" +status_note: "后端零改动。已用测试服真实 API 核实(订单 26-0821,看板 GET /admin/fleet/board/orders/2086270141158346754):activeAssignments 返回 4 段完整执行段(蒙A-K1999 考斯特 08-18~08-20 三天+08-21 一天 ×¥1500,蒙A-T1557 普拉多 08-18~08-20 三天+08-21 一天 ×¥1000),每段 dailyVehicleFees 逐日价齐全,根级 vehicleFeeTotal=\"10000.00\"、vehicleFeeSummaries=[考斯特¥6000, 普拉多¥4000]。根因在前端:AssignModal.vue step4 逐日车费走 mergeContinuityDailyVehicleFees(vehicleFeeAmount.js),该函数按 serviceDate 去重、同日多台车只保留第一台的价——它本是为「同一台车跨段接续」设计的合并,被错用到「多台车并行」场景,把「逐日×逐车」折叠成「逐日单行」,总价也错。修法:确认页逐日车费按「车+服务日」逐行铺开(读 activeAssignments[].dailyVehicleFees,同日多车保留多行并带车牌/车型区分),总价直接用根级 vehicleFeeTotal,不要用按日期去重的聚合。" +updated_at: "2026-08-12" +base: "dev-v3" +--- + +# 确认执行页「逐日车费」多车只显示一行(前端) + +> **页面**:车务管理 → 派单看板 → 订单派车弹窗 → Step4「确认执行」→「逐日车费」卡片 +「最终总车费(只读合计)」 +> **后端**:本条**零改动**。下面结论来自测试服真实 API(订单 26-0821)。 + +--- + +## 一、现象 + +多车订单(同一服务日 ≥2 台车)走到确认执行页时: +- 「逐日车费」只显示 1 行(如 `8月18日 收费 ¥1000.00`),其余车/其余天全部丢失; +- 「最终总车费(只读合计)」也错(截图显示 ¥1000,应为 ¥10000)。 + +用户原话:「这个逐日车费就显示一个车一天的???」 + +## 二、后端已排除(数据完整) + +`GET /admin/fleet/board/orders/2086270141158346754` 返回: + +- `activeAssignments` = **4 段**(同一台车接续服务被拆成两段,属正常): + - 蒙A-K1999 丰田考斯特:`08-18~08-20`(3 天 ×¥1500)+ `08-21`(1 天 ×¥1500) + - 蒙A-T1557 丰田普拉多:`08-18~08-20`(3 天 ×¥1000)+ `08-21`(1 天 ×¥1000) +- 每段 `dailyVehicleFees[]` 内逐日价齐全(chargeable/calendarPrice/assignmentPrice/source)。 +- 根级 `vehicleFeeTotal = "10000.00"`、`vehicleFeeSummaries = [{蒙A-K1999 考斯特 ¥6000},{蒙A-T1557 普拉多 ¥4000}]`。 + +正确展示应为 **8 行(4 天 × 2 车)**,总价 **¥10000**。 + +## 三、根因(前端) + +`AssignModal.vue`: + +```js +// ~1471 确认态执行段来源(这里本身是对的,= 全部 activeAssignments) +const confirmationAssignments = computed(() => + activeAssignments.value.length ? activeAssignments.value : [currentAssignment...]) + +// ~1746 step4 多段时逐日车费走连续性聚合 +const confirmationDailyVehicleFees = computed(() => { + const segments = confirmationAssignments.value + if (!(step.value === 4 && segments.length > 1)) return dailyVehicleFees.value + return mergeContinuityDailyVehicleFees(segments) // ← 问题在这 +}) +``` + +`utils/vehicleFeeAmount.js:106`: + +```js +export function mergeContinuityDailyVehicleFees(segments = []) { + const byDate = new Map() + for (const segment of rows) { + for (const fee of segment?.dailyVehicleFees ?? []) { + const date = String(fee?.serviceDate || '').trim() + if (date && !byDate.has(date)) byDate.set(date, fee) // ← 按日期去重:同日多台车只保留第一台 + } + } + ... +} +``` + +**`mergeContinuityDailyVehicleFees` 按 `serviceDate` 去重,同一天多台车只保留第一台的价**,把「逐日 × 逐车」折叠成「逐日单行」。总价 `sumContinuityVehicleFeeTotal` 同受此口径影响。这套合并是为「同一台车跨段接续、同日不重叠」设计的,被错误套用到「多台车并行」场景。 + +## 四、修复建议 + +确认执行页(Step4)的「逐日车费」**不要**用 `mergeContinuityDailyVehicleFees` 这套按日期去重的单段连续性聚合: + +1. **逐日车费列表**:直接遍历 `activeAssignments[]`,把每段的 `dailyVehicleFees[]` 按「车 + 服务日」逐行铺开;同日多车保留多行,并带车牌/车型区分(如 `8月18日 · 蒙A-K1999 考斯特 ¥1500`、`8月18日 · 蒙A-T1557 普拉多 ¥1000`)。 +2. **最终总车费**:直接用根级 `order.vehicleFeeTotal`(后端已按结算口径算好,本例 ¥10000),不要前端再聚合。`resolveBoardOrderVehicleFeeTotal`(vehicleFeeAmount.js:139)已有「有 dailyVehiclePlan/vehicleFeeSummaries 时取根级 vehicleFeeTotal」的正确口径,可复用。 + +> 注意:`mergeContinuityDailyVehicleFees`/`sumContinuityVehicleFeeTotal` 仅在「同车跨段、同日不重叠」前提下安全;多车并行时必须按车区分,不能按日期去重。 + +## 五、验收 + +- [ ] 多车订单(同日 ≥2 台车)确认执行页:「逐日车费」展示 服务日数 × 车数 行,每台车每天的价都在,且能区分是哪台车 +- [ ] 「最终总车费」= 后端 `vehicleFeeTotal`(本例 ¥10000) +- [ ] 单车订单确认执行页不受影响(回归) +- [ ] 同一台车跨段接续(同日不重叠)场景仍正确合并