---
schema: "hl-changelog/v2"
ticket: "5337"
title: "Fleet 日期清单隔离陈旧失败与当前弹窗状态"
consumer: "admin"
change_type: "修改接口"
backend_status: "deployed"
gateway_status: "not_required"
frontend_status: "implemented"
frontend_owner: "hl-ui-pi"
frontend_ref: "0f025662443f50ca40d118043ed491a2d918a855"
target_release: ""
verified_at: "2026-07-29T13:45:27+08:00"
status_note: "frontend-only：复用 #4760 已部署 day-orders 契约，无新增后端发布；本次只交接前端异步 identity 修复，fresh gateway probe 不适用"
updated_at: "2026-07-29"
base: "dev-v3"
---

# Fleet：日期清单隔离陈旧失败与当前弹窗状态

> **Tracking Issue**：[wx/HL#5337](https://git.1814.love:8443/wx/HL/issues/5337)
> **责任端**：`mmg/hl-ui` Fleet 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`：

```http
GET /admin/fleet/matrix/day-orders?date=YYYY-MM-DD
```

- 请求参数、响应结构、空值和错误码均不变。
- `backend_status=deployed` 仅表示 `#4760` 的既有接口契约已部署，不表示 #5337 有后端代码发布。
- `gateway_status=not_required`：根因是前端 Promise 乱序与共享状态写入，接口 fresh probe 不能证明竞态修复。

## 前端必须调整

1. 为每次日期请求建立稳定的 `requestSeq + date` identity。
2. 只有当前 identity 可以写 rows、清空 rows、更新 error/loading 或改变弹窗状态。
3. 陈旧 success 与陈旧 failure 都必须 no-op，不能依赖只有成功路径执行的序号检查。
4. 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 + date` identity 可以写 rows、clear、error 与 loading。
- [ ] 真实 Matrix 页面挂载测试快速点击两个日期列头并控制 Promise 顺序，断言最终标题、行数、空态和错误均属于最新日期。
- [ ] 不改变 `/day-orders` API 字段、后端行为或公共契约。

## 验证证据

- 权威审计：`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` 未消费仍归 `#4760` existing-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`。
