4.9 KiB
4.9 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 | 5337 | Fleet 日期清单隔离陈旧失败与当前弹窗状态 | admin | 修改接口 | deployed | not_required | implemented | hl-ui-pi | 0f025662443f50ca40d118043ed491a2d918a855 | 2026-07-29T13:45:27+08:00 | frontend-only:复用 #4760 已部署 day-orders 契约,无新增后端发布;本次只交接前端异步 identity 修复,fresh gateway probe 不适用 | 2026-07-29 | dev-v3 |
Fleet:日期清单隔离陈旧失败与当前弹窗状态
Tracking Issue:wx/HL#5337 责任端:
mmg/hl-uiFleet Matrix 前端 前端基线:v2.1@18daf2a03e9946c46d7bf31c7577adcb05d3c168性质:frontend-only;不是后端缺陷,不新增后端接口、字段、错误码或部署
问题与根因
日期弹窗快速从 A 日期切到 B 日期时,fetchDayOrders 的 dayRequestSeq 只在 Promise 成功后检查。A 旧请求若在 B 新请求成功后才失败,会在 await 处直接 reject,随后 A 对应的 openDayList catch 无 requestSeq + date 身份校验并无条件清空共享 dayOrders。
结果是标题仍属于 B,但 rows 被旧 A 清空,页面显示 B 日期假空数据,统一 error 也可能属于旧 A。旧 success 已有序号保护;缺口仅在 failure/error/clear/loading/title 的共同身份约束。
变更接口
GET /admin/fleet/matrix/day-orders
接口契约保持不变,继续沿用 #4760:
GET /admin/fleet/matrix/day-orders?date=YYYY-MM-DD
- 请求参数、响应结构、空值和错误码均不变。
backend_status=deployed仅表示#4760的既有接口契约已部署,不表示 #5337 有后端代码发布。gateway_status=not_required:根因是前端 Promise 乱序与共享状态写入,接口 fresh probe 不能证明竞态修复。
前端必须调整
- 为每次日期请求建立稳定的
requestSeq + dateidentity。 - 只有当前 identity 可以写 rows、清空 rows、更新 error/loading 或改变弹窗状态。
- 陈旧 success 与陈旧 failure 都必须 no-op,不能依赖只有成功路径执行的序号检查。
- title、rows、error、loading 必须绑定同一 identity;禁止新日期标题搭配旧错误或假空数据。
前端验收
- deferred 测试覆盖 A旧 success 晚于B新 success、A旧 failure 晚于B新 success、A旧 success 晚于B新 failure、当前请求 failure 四类交错。
- A旧 failure 晚于B新 success 时,B rows、B title 与 B error state 保持不变,旧 A 完全 no-op。
- 只有当前
requestSeq + dateidentity 可以写 rows、clear、error 与 loading。 - 真实 Matrix 页面挂载测试快速点击两个日期列头并控制 Promise 顺序,断言最终标题、行数、空态和错误均属于最新日期。
- 不改变
/day-ordersAPI 字段、后端行为或公共契约。
验证证据
- 权威审计:
C:/Users/Administrator/AppData/Local/Temp/fleet-frontend-current-remote-audit-task_e6c54bb3a8b9.md - 审计 SHA-256:
ab3ceafdf3a433ea7d0a99d1f8962839ed49d2819d4eab1d6de13c85e891d882 - 当前前端远端源码:
mmg/hl-ui v2.1@18daf2a03e9946c46d7bf31c7577adcb05d3c168 - 源码证据:
useFleetMatrixData.js:553-559、matrix/index.vue:902-908、DayListModal.vue:10-16,120-124。 - 审计已确认当前测试没有 day-orders deferred race 页面挂载覆盖;本条目初始状态为
pending,不宣称前端已修复或测试已通过。
关联与去重
#4760是 day-orders 既有接口和 Fleet Matrix 真实数据源责任,本条目不修改其历史文件。- D-03 的
todayDay未消费仍归#4760existing-follow-up,不在 #5337 创建重复验收。 - D-02 byOrder 分窗状态守恒由独立
#5338跟踪。
后端 closeout 持久证据(2026-07-31)
- 消费端修复提交:
mmg/hl-ui@0f025662443f50ca40d118043ed491a2d918a855;无关联 PR,提交已进入v2.1主线历史。 - 测试环境自动部署:task
a44ef795,v2.1@6b3b04c58da5126f922cdaea52caeb13ab343444,2026-07-31 11:27:30–11:27:40,status=success、exit_code=0、has_build_error=false。 - A/B 乱序定向回归:从修复提交归档到独立 OS Temp 副本后实跑
useFleetMatrixData.spec.js、day-orders-race.spec.js、matrix.spec.js,结果为 3 files / 25 tests passed。 - 测试日志 SHA-256:
abc6d6a39f9f40aed114b2c338850341f8583949be012012d12de7ff165c9175;关单时已把命令、结果与哈希持久回写wx/HL#5337。 - 后端 API 仍复用 #4760 的
GET /admin/fleet/matrix/day-orders,无 #5337 后端代码、数据库、网关或生产变更。 - 本节只补后端关单和消费端实现证据;没有实际测试页面人工操作证据,因此
frontend_status继续保持implemented,不升级为released或verified。