hl-api-changelog/changelogs-v2/2026-07/28_5338_Fleet按订单分窗状态集合守恒-修改接口-管理后台.md
wx 9a6968de9e
所有检测均成功
changelog-filename-gate / validate (push) Successful in 1s
docs: persist 5338 closeout evidence (#65)
2026-07-31 12:56:13 +08:00

6.3 KiB

schema, ticket, title, consumer, change_type, 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 backend_status gateway_status frontend_status frontend_owner frontend_ref target_release verified_at status_note updated_at base
hl-changelog/v2 5338 Fleet 按订单分窗保持路由状态集合守恒 admin 修改接口 deployed not_required implemented hl-ui-pi 868739d793aff1ca265296a7bf2cd681fcb557bd frontend-only复用 #4760 grid/unassigned 与 #5301 coarse status 已部署契约;#5338 无后端 diff、PR、测试或部署要求。前端代码已有 implemented 证据,但尚无 target_release 或页面验证证据,不上调 released/verified 2026-07-31 dev-v3

Fleet按订单分窗保持路由状态集合守恒

Tracking Issuewx/HL#5338 责任端mmg/hl-ui Fleet Matrix 分窗前端 前端基线v2.1@18daf2a03e9946c46d7bf31c7577adcb05d3c168 性质frontend-only;不是后端缺陷,不新增后端接口、字段、错误码或部署

问题与根因

修复前,matrix-solo?solo=byOrder&status=assigned 已把 route status 传给 grid,且 coarse assigned 正确映射为 holding/holding_urgent/assigned;但共享 composable 会继续合并不带 status 的 unassigned-ordersSoloByOrderView.visibleOrders 又只排除 canceled,未按 route status 最终收口。

这会令 assigned 分窗混入无车的 unassigned/unassigned_urgent rows。主矩阵原本已使用共享 matchesMatrixStatusFilter;#5338 只补齐 byOrder 分窗的同一保护,不归因于后端 grid 或 coarse status 契约。

变更接口

GET /admin/fleet/matrix/grid

GET /admin/fleet/matrix/unassigned-orders

接口契约保持不变,继续沿用 #4760/#5301

  • coarse assigned = holding + holding_urgent + assigned
  • coarse unassigned = unassigned + unassigned_urgent
  • 只有 route all 的最终显示集合可以同时包含已派与未派两侧。
  • backend_status=deployed 仅表示上述既有接口契约已部署,不表示 #5338 有后端代码发布。
  • gateway_status=not_required:根因是前端将两个成功响应合并后缺少 view-level route filter,fresh API probe 不能证明页面集合守恒。

前端实现结果implemented,不代表 released/verified

  1. SoloByOrderView 最终展示复用共享 matchesMatrixStatusFilter,未维护第二套状态映射。
  2. route query、grid/unassigned 请求、visibleOrders 与跨窗口 drag source 使用同一筛选 identity。
  3. assigned 只显示 holding/holding_urgent/assigned,排除全部无车未派 rows。
  4. unassigned 只显示 unassigned/unassigned_urgent,排除已绑车 rows;仅 all 合并两侧。
  5. 最终过滤后的同一数组同时用于渲染与拖拽,drag source 不再绕过 visibleOrders。

前端实现验收6/6;不代表页面发布/验证)

  • 组件挂载测试覆盖 route all/unassigned/assigned,显示集合与主矩阵同筛选口径守恒。
  • assigned 样本同时包含 holding/holding_urgent/assigned,并排除 unassigned/unassigned_urgent 无车 rows。
  • unassigned 只含未派 rows 并排除所有已绑车 rows;只有 all 合并两侧。
  • 最终展示与 drag source 都复用 matchesMatrixStatusFilter 的同一过滤结果。
  • year/month/fleetTeamIds/typeKeys/status 从 route、请求到 visible/drag 集合保持同一身份。
  • 不改变 grid、unassigned-orders、statuses[] 或 coarse status 后端契约。

验证证据

  • 前端业务提交:mmg/hl-ui@868739d793aff1ca265296a7bf2cd681fcb557bd,仅修改 SoloByOrderView.vue 并新增 SoloByOrderView.spec.js;没有后端文件。
  • 前端任务账本:mmg/hl-ui:.claude/tasks/done/changelog-5338-3c335437bf.md,记录 status=donesource_status=implemented、6 个 mount tests、21 个 composable tests、source 46 tests、ESLint/Prettier/Stylelint 与 production build 通过。
  • Changelog 领取/完成提交:wx/hl-api-changelog@4ad3a92f66741651b60d6d1c6f3d12983e96ea56 / @73c4daab04bf094507698d9ab814cdbdd711bf73
  • 2026-07-31 只读复核时,当前 v2.1@6b3b04c58da5126f922cdaea52caeb13ab343444 仍保留共享 matchesMatrixStatusFiltervisibleOrders 最终过滤与 setupCrossWindowDrag(() => visibleOrders.value);实现提交已在当前分支祖先链中。
  • Deploy Panel 测试环境任务 a44ef795 已把当前 v2.1@6b3b04c58da5 构建部署成功,但本条目没有 target_release 或浏览器页面验证证据;因此 frontend_status 保持 implemented,不得表述为 releasedverified
  • 前端仓库没有关联 PR,交付形态为直接提交;本记录不追建事后 PR。

后端独立闭环证据

  • #5338 是 frontend-only 集合过滤,后端 contract review 结论为 no contract changeController、DTO/VO、Feign、字段、枚举、错误码与数据库均无 diff;故 #5338 的后端 merge/test/deploy 均为 not_required,不伪造 PR、测试或发布。
  • 既有 grid + unassigned-orders 契约已由 #4760 完成PR #4761/#4772 已合并,Fleet/User 定向测试、Fleet reactor、Spotless、测试部署及独立账号真实 API 回归证据均持久记录在 wx/HL#4760
  • coarse/精确状态契约已由 #5301 完成PR #5304 squash 合并到 dev-v3@ed56bec1fa466f92e0d41d7b92de3ad4756517b3;51 个定向测试、Fleet reactor 2474 tests、Spotless、Fleet 双实例部署及真实网关验证记录在 wx/HL#5301
  • 当前 dev-v3 源码仍明确实现 coarse assigned = holding + holding_urgent + assigned,并保留 grid/unassigned-orders 契约;#5338 不需要 fresh gateway probe,因为 API 成功不能证明前端合并后的页面集合。

关联与去重

  • #4760 规定 byOrder 使用 grid + unassigned-orders 并携带 route status;本条目补充最终显示集合守恒,不修改其历史文件。
  • #5301 规定 coarse assigned 与精确 statuses[];本条目不改变该契约。
  • D-03 的 todayDay 未消费仍归 #4760 existing-follow-up,不在 #5338 创建重复验收。
  • D-01 day-orders 陈旧失败隔离由独立 #5337 跟踪。