# 事件中心 → 历史证据连续工作流 ## 目标 让值守人员从事件详情进入历史数据时,不再重新选择车辆、协议与时间。事件中心会把事件车辆、来源协议、事件时间和事件标识带入历史数据;历史页始终保留来源事件上下文,并可返回同一事件详情。 ## 设计与实现证据 - `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¬ifyLimit=50¬ificationId=18` 后恢复第 2 页和送达详情;按收件人搜索只保留匹配行,搜索无结果时自动清理 `notificationId`;移动端失效通知清理后详情与 URL 同步关闭。 - 概念图与桌面、移动端实现图均以原始分辨率检查。