What to build: 在预警处置一级模式下同时展示当前预警、历史分析、预警效率、预警分析四个二级面板,并保持预警/报警双模式语义。
Blocked by: 13, 16
Status: resolved Labels: ready-for-agent
已读正文、依赖票 13/16、所属 effort 规格与 map、已有实施记录。依赖已满足:13 与 16 均为 resolved;本票当前无评论、无实施记录,原先的 ready-for-agent 状态准确反映可执行性。
现状不是零代码而是半成品:panelCatalog.js 已声明四个 panelId,eventStore/EventListPane 只覆盖 currentEvents,panelViews.js 未注册预警处置面板,其余三块仍渲染占位。已有事件切换只证明当前列表,不证明历史趋势、效率指标或多维分析;当前列表也未把工单状态作为可见字段。现有 mock 已覆盖跨设备当前事件,但没有 #19 所需的 history-analysis、handling-efficiency、multidimensional-analysis 三类响应。
eventStore 持有四块分区;预警/报警切换和时间范围由同一 store 驱动,四块面板共享,不在组件内各存一份。panelViews 注册三块通用块视图;新增共享面板内容组件提供切换与范围筛选,复用 PanelBlocks。真实后端接线仍受 #25 的 J2(工单 0–7 口径)和 BT-5 真实适配器状态影响,本票先按已冻结前端 mock 契约落地,不把 mock 读数宣称为真实联调结果。
已完成并关闭(前端 mock 阶段)。
src/modules/cockpit/domain/warningResponsePanels.js:历史分析、预警效率、多维分析的契约适配与视图计划;包含 7/30/90 天范围、处置率、响应/关闭时长、工单七态、类型/等级/行业/区域分布和重点识别。src/modules/cockpit/services/warningResponseApi.js:统一出口接入 /events/history-analysis、/events/handling-efficiency、/events/multidimensional-analysis,查询参数包含共享预警/报警族、行业和时间范围。src/modules/cockpit/stores/eventStore.js:四块面板独立分区;mode 与 range 由同一个 store 持有,切换时以 token 丢弃迟到响应。src/modules/cockpit/domain/panelViews.js、CockpitShell.vue、components/WarningResponsePane.vue:注册并挂载四块面板;三块聚合面板共用范围和族切换控件,现有 CockpitPanel 继续提供独立展开/收起。components/EventListPane.vue 与事件 mock:当前事件行显示关联工单状态,详情继续复用既有「定位关联设备」流程,不创建事件地图实体。mocks/contractMocks.js:新增三类聚合响应,按 eventFamily、行业和范围真实回显/过滤;当前事件样例补工单摘要。.scratch/cockpit-shell-panel-layout/verify/t19-warning-response.mjs:零依赖逻辑闸门,覆盖目录映射、三类契约适配、统计块、空/过期状态、mode 同步、视图注册与组件静态边界。eventStore.range。familyMetrics 与效率聚合字段形状。eventStore.mode,不是组件各存状态。CockpitPanel 与 uiStore.expandedPanelIds。AGENTS.md 规则,本次没有自动运行脚本、build、dev server 或浏览器调试;因此不能宣称运行时/构建验证通过。当前交付是 mock 阶段。真实后端仍受 #25 的 J2 工单 0–7 状态口径和 BT-5 真实适配器/联调证据影响;这些不阻塞本票的前端契约实现,但在切 real 数据源前必须复核。下一步为维护者按授权运行 node .scratch/cockpit-shell-panel-layout/verify/t19-warning-response.mjs,再决定是否安排 dev/浏览器走查。
预警处置模式四块面板已完成:当前事件继续支持预警/报警切换、工单状态与设备定位;历史分析支持趋势与 7/30/90 天范围;预警效率展示处置率、响应时长、关闭时长和七态工单分布;预警分析展示类型、等级、行业、区域分布与重点识别。四块面板共享 eventStore.mode,三块聚合面板共享 eventStore.range,均保持只读与独立展开/收起。交付以 mock 契约和零依赖逻辑闸门为依据,未运行 build/debug 命令(遵循项目规则);真实接线边界保留在 #25/J2/BT-5。
ready-for-agent 标签,因为本地 tracker 既有 resolved 票仍保留该标签;权威状态已改为 Status: resolved。本票被重开复核,不是要重做,而是因为票 20 发现本票交付面里有两处真缺陷。 维护者 2026-09-29 裁定「以后端
WorkOrderStatusEnum(0–7)为唯一真理,删除其他不必要的字典」, 票 20 执行该裁定时在本票的交付面上查出下面两条。
本票的「预警效率」面板画 FamilyMetrics.workOrderStates(键是状态码),
而中文标签取自 domain/workOrder.js 的 WORK_ORDER_STATES。那份字典当时是旧的 1–7 七态,
把「已结案」标在码 6 上;但后端的 6 是「延期中」、5 才是「已结案」(见票 12 重开记录里的后端原文)。
后果:本票那块分布图的每一根柱子的标签都是错的(例如后端的 5 已结案被画成「待验收」)。
这是"已交付但从未被真机核对过"的读数 —— 逻辑闸门全绿是因为它只验了
workOrderStates.length === 7(数量对,语义错),没有对着后端字典逐码核对。
票 20 已修:字典对齐 0–7 后本面板自动跟随(它消费同一份 WORK_ORDER_STATES);
面板标题「工单七态分布」改为中性的「工单状态分布」(0–7 是 8 个码,「七态」已不成立)。
verify/t19-warning-response.mjs 的 B2/C2 已同步(16/16 通过)。
票 11/17/18 都各自把新增的组件与 domain 文件补进了 verify/t05-adapter.mjs 的
pageAndStoreFiles / domainFiles("不补进去,新代码就是检查不到的荒地"是票 18 的原话),
而票 19 漏了:components/WarningResponsePane.vue 与 domain/warningResponsePanels.js
两个文件此前不在任何静态守卫的扫描面里。
票 20 已按 Q8=C 的裁定处理:先实测这两个文件是否干净(D1 零后端裸字段 / D2 零凭据 / D3 不自己发请求 / D4 不反向 import service / D5 不跳登录页 —— 实测全部干净), 干净才补进名单。t05 因此由 255 → 270 项。若当时测出是脏的,就该归本票而不是塞进票 20 的 diff。
本票的 responseEfficiencyPanel 原先照 handlingRate 直画:后端在没有可算事件时回
state=EMPTY + value="0.0000",于是界面会显示「处置率 0.0%」,而真相是「没有可参与计算的事件」。
这是票 18 在在线率上用 M3/M14 两条变异测试专门守过的那一族错,本票漏了。
票 20 已修:toHandlingEfficiency() 补带 handlingState,新增并导出
handlingRateView() / handlingRateHint()(态势总览与预警效率共用同一条判据,
不各写一份),分母为 0 时显示 — 加一句说明。
票面七条验收的前端交付面逐条仍然成立(本票已 resolved 的结论不变);
上面三条都是"实现与后端权威契约对不上",不改变本票交付的功能范围。
复核通过后本票可再次 close(当前 Status: resolved 保持不变)。