Files
2026-07-27 16:46:15 +08:00

83 lines
9.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 事件中心 → 历史证据连续工作流
## 目标
让值守人员从事件详情进入历史数据时,不再重新选择车辆、协议与时间。事件中心会把事件车辆、来源协议、事件时间和事件标识带入历史数据;历史页始终保留来源事件上下文,并可返回同一事件详情。
## 设计与实现证据
- `history-event-context-concept.png`Image Gen 生成的 1440 × 900 完整工作区概念。
- `history-event-context-desktop.png`:真实 React / Semi UI 页面在 1440 × 900 的浏览器渲染,已选中事件时刻对应的历史记录并打开证据详情。
- `history-event-context-mobile.png`390 × 844 移动端事件上下文与历史列表。
- `history-event-detail-mobile.png`390 × 844 移动端证据详情抽屉。
- `notification-to-event-desktop.png`1440 × 900 通知审计详情,展示可追溯的“查看事件”入口。
- `notification-event-route-desktop.png`1440 × 900 从通知进入原事件后的 URL 深链与选中态。
- `notification-event-route-mobile.png`390 × 844 同一事件深链在移动端恢复为 bottom sheet。
- `notification-shareable-detail-desktop.jpg`1440 × 900 通知第 2 页、50 条分页尺寸与指定送达详情由 URL 直接恢复。
- `notification-shareable-detail-mobile.jpg`390 × 844 移动端指定通知详情;主要动作固定在底部导航上方。
- `notification-stale-detail-mobile.jpg`390 × 844 失效通知链接的明确说明与一键清理动作。
- `event-detail-error-desktop.png` / `event-detail-error-mobile.png`:事件深链失败后的稳定恢复面板,包含重试和返回事件流。
- `history-validation-desktop.png` / `history-validation-mobile.png`:超过 5 台车辆时的提交前校验与禁用状态。
- `event-list-error-desktop.png` / `history-list-error-desktop.png`:事件流与历史明细请求失败时的单一错误语义;不会再叠加“暂无数据”或业务空结果。
- `event-shareable-page-desktop.png`:事件筛选、第 3 页与 50 条分页尺寸由 URL 恢复后的真实工作区。
- `history-shareable-evidence-desktop.png`:历史第 2 页、20 条分页尺寸与指定证据行由 URL 直接恢复并展开详情。
- `history-stale-evidence-desktop.jpg`1440 × 900 失效 `rowId` 的明确说明与恢复动作;主表和当前查询上下文继续保留。
- `history-stale-evidence-mobile.jpg`390 × 844 同一失效证据状态在移动端详情抽屉中的等价呈现。
## 实现约束
- 历史查询默认使用事件前后 3 分钟、事件车辆、原协议与原始报文。
- 时间按 Asia/Shanghai 写入查询参数,避免 UTC 事件时间造成窗口偏移。
- 来源事件参数在历史页修改查询条件后继续保留;返回时按 `eventId` 重新打开原事件详情。
- 事件页签、已应用筛选和当前事件以 URL 为单一事实来源;通知、自动化运行、浏览器前进/后退和分享链接统一进入同一事件。
- 历史页在组件不卸载的同路由跳转中同步 URL 查询范围,避免地址栏、筛选表单和结果数据失步。
- 事件详情只有在首次成功加载后才开启 5 秒自动同步;失败时保持稳定错误状态,避免错误与加载状态闪烁。
- 历史查询拒绝超过 5 台车辆、缺失时间和结束时间不晚于开始时间的范围,不再静默截断或把错误推迟到接口层。
- 列表状态遵循“加载 → 失败 → 空结果 → 数据”的互斥优先级;事件筛选有结果为空时提供一键清空筛选。
- 事件与历史分页写入 `offset` / `limit`;历史选中证据写入 `rowId`。刷新、分享链接和同路由跳转可以恢复到相同工作位置。
- 数据总量缩减导致页码越界时自动退回最后一个有效页,并同步修正 URL避免停留在虚假的空页。
- 指定证据仍在恢复时显示加载态、查询失败时保留重试入口、当前页不存在时解释链接失效并允许一键清理;桌面 inspector 与移动端详情抽屉语义一致。
- 通知页的搜索、阅读状态、分页尺寸、页码和选中详情写入独立 URL 参数;刷新、前进/后退和分享链接均可恢复同一审计位置。
- 通知搜索明确限定为当前页并真实覆盖事件标题、正文、事件号、车牌、VIN、收件人、协议和渠道搜索隐藏当前详情时同步清理失效选中态。
- 午夜后第一分钟内若“今天”形成零长度区间,默认回退到有效的近 24 小时窗口,避免页面初次打开即出现时间校验错误。
- 不改变既有 API、权限、导出、字段设置、分页、质量判读或响应式模型。
- 移动端只保留事件标题与返回动作,车辆、来源和时间仍保存在查询范围与详情中,避免挤压首屏。
## Fidelity ledger
| 检查项 | 概念要求 | 实现结果 |
| --- | --- | --- |
| 来源上下文 | 蓝色轻量事件返回轨道 | 已实现;事件、车辆、协议、发生时间和返回动作同屏 |
| 查询范围 | 车辆、事件时间窗、原始报文、原协议 | 已实现;进入页面即应用,无需二次输入 |
| 信息密度 | 连续查询、统计、表格和详情 | 已实现;无卡片墙,桌面首屏可见分页与详情 |
| 详情连续性 | 选中行不离开结果列表 | 已实现;桌面常驻 inspector移动端 bottom sheet |
| 视觉系统 | 真白、冷灰、克制蓝、细边框 | 已实现;沿用平台令牌,无渐变光晕或装饰图像 |
| 响应式 | 1440 × 900 与 390 × 844 | 已验证;无横向页面溢出,关键动作可见 |
| 键盘与语义 | 行可键盘打开、上下文可读 | 已实现;事件上下文有 region 标签,返回为原生链接 |
| 路由连续性 | 通知、事件、历史可往返且可分享 | 已实现;事件选中/关闭同步 `eventId`,前进/后退恢复页签与详情 |
| 异常恢复 | 深链失败不伪装为空态或无限加载 | 已实现;明确加载、错误、手动重试和返回动作,桌面/移动一致 |
| 输入边界 | 车辆与时间范围提交前可理解 | 已实现;超限数量和非法时间即时说明,查询动作同步禁用 |
| 状态优先级 | 失败不能同时伪装为空结果 | 已实现;事件表格内建空占位静默,事件与历史错误均保留当前范围和重试入口 |
| 工作位置恢复 | 分享链接恢复页码、分页尺寸与证据详情 | 已实现;事件分页、历史分页和 `rowId` 均由 URL 驱动并经过越界归一化 |
| 失效证据恢复 | 过期或跨页链接不能静默留白 | 已实现;加载、读取失败、当前页不存在和正常证据四态互斥,均可关闭或恢复 |
| 通知审计位置 | 通知筛选、分页和详情可恢复且不产生幽灵选中态 | 已实现;`notifySearch``notifyRead``notifyOffset``notifyLimit``notificationId` 由 URL 驱动 |
## 有意差异
- 概念图包含小型趋势条;真实实现打开的是“原始报文”,该数据类型按产品语义不生成聚合趋势,因此保留现有“原始报文不生成趋势”规则,避免制造错误趋势。
- 实现继续使用既有三项结果轨道,不新增无法由当前 API 准确提供的“异常总数”。
- 实现保留经过验证的字段、导出和工具入口,而不是完全照抄概念图中的工具排列。
- 错误和校验文案是概念图未展示但真实工作流必需的状态文案;仅在对应异常发生时出现,不改变正常首屏。
- 通知搜索文案改为“筛选当前页事件、车辆或收件人”,“全部标为已读”改为“本页标为已读”;这是对真实作用范围的必要澄清,避免暗示跨页操作。
## 验证
- 事件领域、历史领域、共享状态、事件中心、历史页相关测试5 个文件 / 76 个测试通过。
- 浏览器核心路径:通知审计 → 查看原事件 → URL 恢复筛选和选中态 → 后退通知 → 前进原事件 → 关闭详情移除 `eventId`;历史证据往返路径继续通过。
- 异常路径:事件详情失败 → 稳定错误面板 → 手动重试 → 返回事件流;历史页输入 6 台车辆 → 明确说明 → 查询禁用。两条路径均在 1440 × 900 和 390 × 844 验证。
- 列表失败路径:事件流与历史明细均验证为单一 `alert`,错误时没有业务空结果;事件重试成功返回空集合后才展示空结果和“清空筛选”。桌面 1440 × 900 使用真实浏览器截图,移动端共享错误面板与原生 390 × 844 断点证据复核通过。
- 可恢复工作位置:浏览器直接打开事件 `offset=100&limit=50` 后恢复第 3 页,上一页同步为 `offset=50`;打开历史 `offset=20&limit=20&rowId=QA-HISTORY-row` 后恢复第 2 页并展开证据,关闭详情移除 `rowId`,下一页同步为 `offset=40`
- 失效证据路径:浏览器直接打开不存在的 `rowId`,桌面 1440 × 900 和移动端 390 × 844 均说明失效原因;点击“清除失效链接”后 URL 移除 `rowId`,详情面板同步关闭。查询失败重试和午夜默认范围另有组件回归测试。
- 通知审计路径:浏览器直接打开 `notifyOffset=50&notifyLimit=50&notificationId=18` 后恢复第 2 页和送达详情;按收件人搜索只保留匹配行,搜索无结果时自动清理 `notificationId`;移动端失效通知清理后详情与 URL 同步关闭。
- 概念图与桌面、移动端实现图均以原始分辨率检查。