From d64fb9b8f0f10939acba3b3ea1453d1b2eddfff1 Mon Sep 17 00:00:00 2001 From: API Changelog Bot Date: Sat, 22 Aug 2026 10:31:43 +0800 Subject: [PATCH] =?UTF-8?q?docs(changelog):=20=E8=A1=8C=E7=BA=A7=E9=87=8A?= =?UTF-8?q?=E6=94=BE=E5=8D=A0=E7=94=A8=E5=AF=B9=E5=B7=B2=E5=8F=96=E6=B6=88?= =?UTF-8?q?=E5=85=A8=E7=A8=8B=E6=A7=BD=E8=A1=8C=E8=AF=AF=E6=8B=A6=E6=88=AA?= =?UTF-8?q?-=E5=89=8D=E7=AB=AF=E7=BC=BA=E9=99=B7=E5=91=8A=E7=9F=A5?= =?UTF-8?q?=EF=BC=88=E6=A0=B9=E6=B2=BB=20#6152=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...¶ˆ全程槽行解析服务日失败误拦截-前端缺陷-管理后台.md | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 changelogs-v2/2026-08/22_frontend_行级释放占用已取消全程槽行解析服务日失败误拦截-前端缺陷-管理后台.md diff --git a/changelogs-v2/2026-08/22_frontend_行级释放占用已取消全程槽行解析服务日失败误拦截-前端缺陷-管理后台.md b/changelogs-v2/2026-08/22_frontend_行级释放占用已取消全程槽行解析服务日失败误拦截-前端缺陷-管理后台.md new file mode 100644 index 00000000..1338d4d7 --- /dev/null +++ b/changelogs-v2/2026-08/22_frontend_行级释放占用已取消全程槽行解析服务日失败误拦截-前端缺陷-管理后台.md @@ -0,0 +1,56 @@ +--- +schema: "hl-changelog/v2" +ticket: "frontend-fleet-clear-cancelled-occupancy-row" +title: "行级「释放占用」对已取消全程槽行误报「缺少该派单的服务日期」" +consumer: "admin" +author: "kimi(wx)" +change_type: "前端缺陷" +backend_status: "not_required" +gateway_status: "not_required" +frontend_status: "pending" +frontend_owner: "mmg" +frontend_ref: "" +target_release: "" +verified_at: "" +status_note: "前端缺陷:已取消的全程槽派单行(整单取消场景)行级「释放占用」解析服务日失败被误拦截,报「缺少该派单的服务日期,请刷新详情后重试」且刷新无效。建议解析为空时降级整单级释放(后端向后兼容)或该行隐藏行级按钮。根治在 #6152(后端详情将给已取消行补返起止日期)。临时绕路:用卡片顶「释放车辆/司机占用」整单级入口,功能正常。" +updated_at: "2026-08-22" +base: "dev-v3" +generated: "2026-08-22T18:30:00+08:00" +--- + +# 行级「释放占用」对已取消全程槽行误报「缺少该派单的服务日期」 + +> 前端缺陷,待前端修复。后端无问题(整单级释放入口功能正常,接口本身向后兼容)。 + +## 现象(TEST 实测,订单 26-9250) + +订单行程中中止(整单取消),派单看板 → 订单详情 → 车辆执行段 → 已取消行内点「**释放占用**」(行级,#6114): + +- 报错「缺少该派单的服务日期,请刷新详情后重试」,刷新详情后重试仍报同样错误(用户连点 4 次均失败)。 +- 卡片顶部「**释放车辆/司机占用**」(整单级,#6107)**功能正常**,可作为临时绕路。 + +## 根因(前端) + +`src/views/fleet/board/index.vue` `onClearCancelledOccupancyRow`:行级释放必须先解析该行的服务日期数组(先取 `assignment.serviceDate`,否则走 `resolveVehicleFeeServiceDates` 的 7 种来源:dailyVehiclePlan / dailyVehicleFees / chargeable+freeServiceDates / serviceDates / serviceDateSegments / itinerary.days / startDate~endDate),解析为空则拦截不发请求。 + +本条已取消派单是**全程槽行**(`service_date` 为 NULL),且已取消行按 #5828 读侧精简(身份字段置空、仅回显 `cancelled*` 快照,快照不含日期)——7 种日期来源在该行全部为空,于是误拦截。 + +#6114 实现时只覆盖了「终止勾选未用天」场景(行上带 serviceDates),未覆盖「整单取消的全程槽行」场景。 + +## 后端事实(无需改动) + +`POST /admin/fleet/assignments/clear-cancelled-occupancy`: + +- 不传 `serviceDates`(或传空数组)= 整单级释放该订单全部已取消派单占用,**向后兼容且幂等**(`intentsWritten=0` 视为成功)。 +- 传 `serviceDates` 时后端对全程行按 startDate~endDate 自动展开为天(`coveredServiceDates`),即后端本身能处理全程槽行——缺的只是前端解析不出日期。 + +## 修复建议(前端二选一) + +1. **降级整单级**:行级解析服务日为空时,确认弹窗文案改为整单级口径(「将释放该订单下已取消派单占用的车辆/司机」),请求不带 `serviceDates` 直接发——后端即整单级释放。 +2. **隐藏行级按钮**:`canClearCancelledOccupancyRow` 增加「能解析出服务日」前置条件,解析不出的行不显示行级「释放占用」,保留卡片顶整单级入口。 + +推荐方案 1(操作路径不变,用户无感)。 + +## 根治跟踪 + +后端工单 **#6152**(feat(fleet): 已派车后取消进异常桶对标房务)验收项包含「已取消行补返起止日期字段」,落地后行级释放可恢复逐天精确语义;本前端降级修复与其不冲突(解析得到日期时仍走行级)。