hl-api-changelog/changelogs-v2/2026-08/12_frontend_确认执行页逐日车费多车只显示一行-前端缺陷-管理后台.md
API Changelog Bot 950381cfcc
所有检测均成功
changelog-filename-gate / validate (push) Successful in 2s
docs(changelog): 前端缺陷-确认执行页逐日车费多车只显示一行(mmg)
2026-08-12 15:19:09 +08:00

5.5 KiB

schema, ticket, title, consumer, change_type, author, backend_status, gateway_status, frontend_status, frontend_owner, frontend_ref, target_release, verified_at, status_note, updated_at, base
schema ticket title consumer change_type author backend_status gateway_status frontend_status frontend_owner frontend_ref target_release verified_at status_note updated_at base
hl-changelog/v2 frontend 确认执行页「逐日车费」多车只显示一行:按 serviceDate 去重把同日多台车折叠成单行 admin 前端缺陷 wx(GIT) not_required not_required pending mmg 后端零改动。已用测试服真实 API 核实(订单 26-0821,看板 GET /admin/fleet/board/orders/2086270141158346754activeAssignments 返回 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 逐日车费走 mergeContinuityDailyVehicleFeesvehicleFeeAmount.js,该函数按 serviceDate 去重、同日多台车只保留第一台的价——它本是为「同一台车跨段接续」设计的合并,被错用到「多台车并行」场景,把「逐日×逐车」折叠成「逐日单行」,总价也错。修法:确认页逐日车费按「车+服务日」逐行铺开(读 activeAssignments[].dailyVehicleFees,同日多车保留多行并带车牌/车型区分),总价直接用根级 vehicleFeeTotal,不要用按日期去重的聚合。 2026-08-12 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-203 天 ×¥1500+ 08-211 天 ×¥1500
    • 蒙A-T1557 丰田普拉多:08-18~08-203 天 ×¥1000+ 08-211 天 ×¥1000
  • 每段 dailyVehicleFees[] 内逐日价齐全chargeable/calendarPrice/assignmentPrice/source
  • 根级 vehicleFeeTotal = "10000.00"vehicleFeeSummaries = [{蒙A-K1999 考斯特 ¥6000},{蒙A-T1557 普拉多 ¥4000}]

正确展示应为 8 行4 天 × 2 车),总价 ¥10000

三、根因(前端)

AssignModal.vue

// ~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

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)  // ← 按日期去重:同日多台车只保留第一台
    }
  }
  ...
}

mergeContinuityDailyVehicleFeesserviceDate 去重,同一天多台车只保留第一台的价,把「逐日 × 逐车」折叠成「逐日单行」。总价 sumContinuityVehicleFeeTotal 同受此口径影响。这套合并是为「同一台车跨段接续、同日不重叠」设计的,被错误套用到「多台车并行」场景。

四、修复建议

确认执行页Step4的「逐日车费」不要mergeContinuityDailyVehicleFees 这套按日期去重的单段连续性聚合:

  1. 逐日车费列表:直接遍历 activeAssignments[],把每段的 dailyVehicleFees[] 按「车 + 服务日」逐行铺开;同日多车保留多行,并带车牌/车型区分(如 8月18日 · 蒙A-K1999 考斯特 ¥15008月18日 · 蒙A-T1557 普拉多 ¥1000)。
  2. 最终总车费:直接用根级 order.vehicleFeeTotal(后端已按结算口径算好,本例 ¥10000,不要前端再聚合。resolveBoardOrderVehicleFeeTotalvehicleFeeAmount.js:139已有「有 dailyVehiclePlan/vehicleFeeSummaries 时取根级 vehicleFeeTotal」的正确口径,可复用。

注意:mergeContinuityDailyVehicleFees/sumContinuityVehicleFeeTotal 仅在「同车跨段、同日不重叠」前提下安全;多车并行时必须按车区分,不能按日期去重。

五、验收

  • 多车订单(同日 ≥2 台车)确认执行页:「逐日车费」展示 服务日数 × 车数 行,每台车每天的价都在,且能区分是哪台车
  • 「最终总车费」= 后端 vehicleFeeTotal(本例 ¥10000
  • 单车订单确认执行页不受影响(回归)
  • 同一台车跨段接续(同日不重叠)场景仍正确合并