2026-09-16.md 8.6 KB

2026-09-16:监测报警 GIS 接入统一画布(Ticket #4)

目标

  • 完成 Gogs Issue #4:将监测报警一张图接入统一 GIS 页壳和共享画布。
  • 复核后端报警、工单状态和数据库契约,更新前端领域共识。

结论

  • Issue #3 收尾提交已推送,当前分支在实现 #4 前与 origin/master 同步。
  • 报警一张图继续复用 WaterGisPageShell、GisMapCanvas、彩色聚合图标和“报警集合:数量”文本。
  • 报警点位状态统一调用共享监测点状态推导,不再维护报警页私有优先级;关联工单仅在未结束时显示蓝色,已结案/已取消不再误判为关联工单。
  • 报警详情独立展示报警等级、报警类型、设备报警状态、报警记录状态、报警展示状态、设备当前状态、在线状态和关联工单状态;设备状态或记录状态缺失时显示“未获取”,不互相替代。
  • 报警地图通过分页读取全部报警台账和设备点位补全状态;台账或设备接口失败时显示降级提醒,但保留点位列表和重试入口。
  • 新增 全图 控件,并在地图 ready 后重新适配点位视野。

验证

  • GIS、报警模型和报警页单文件测试:24/24 通过。
  • 前端全量测试:103/103 通过。
  • 生产构建:通过。
  • git diff --check:通过。
  • 真实登录态和 BMapGL 点位颜色仍需人工浏览器验收。

风险

  • 后端 AlarmMapPointOutDTO 仍缺少设备报警状态、在线状态和关联工单字段;当前前端通过报警台账与设备 GIS 接口补全。后续若报警数据规模继续增长,建议后端在地图点位契约中直接返回这些字段。
  • 报警台账分页设置 200 条/页、最多 50 页的安全上限;超过上限会进入加载失败状态,而不是静默丢失状态。

补充:三张 GIS 图一致性回归(Ticket #5)

  • 共享页壳 WaterGisPageShell 新增统一的指标卡样式(图标框 + 文本块 + 数值单位)、地图错误态与空态定位样式;三张图不再各自维护重复的指标卡/错误态 CSS。
  • 设施图与设备图移除了共享页壳内嵌套的 .metric-grid(此前为 2 列,与报警图单列结构冲突),统一由页壳提供网格;三张图的指标卡结构统一为 metric-icon + metric-body + metric-value + small。
  • 设备图补齐地图空态;三张图的空态均按“未加载完成不显示空态”处理。
  • 三张图的地图错误提示统一提供“重试”入口;刷新与“全图”按钮在三张图保持一致。
  • 报警图详情抽屉按模式区分宽度:报警审核保持 720px,监测报警一张图与另外两图一致使用 420px 右侧抽屉。
  • 新增契约测试 tests/waterGisConsistency.test.mjs:锁定共享指标网格、三图指标结构、刷新/空态/错误重试/抽屉契约、搜索结果卡片结构,以及“聚合后点位数之和等于有效点位总数”的数据完整性属性。
  • 删除设备图遗留的未使用 .map-container 规则;.gitignore 增加 Vite 构建临时配置忽略规则。
  • 验证:前端全量测试 112/112 通过;生产构建通过;git diff --check 通过。
  • 仍需人工验收:真实登录态下三张图的点位数量、图标颜色、名称标签、左侧面板滚动、抽屉遮挡与门户/菜单路由。

补充:三图 UI 一致性人工验收修正

  • 根因:waterSupplyPageTheme.scss 是全局样式,其中 .metric-icon { position: absolute; top:16px; left:16px } 与 .metric { padding-left:48px } 会泄漏到设施/设备 GIS 页,导致指标卡图标绝对定位并压住文字。共享页壳的指标卡规则现在显式声明 position: static 并覆盖内边距,已消除重叠。
  • 整体排版参考监测报警一张图:设施图与设备图改为与报警图相同的“el-card.water-panel.map-card + embedded 页壳”结构,三图页壳、页头、指标卡、空态、错误态的承载方式一致。
  • 右侧抽屉参考监测设备一张图:监测报警一张图新增独立的地图模式抽屉(420px、detail-hero + detail-section + dl 字段列表),报警审核/报警管理仍使用原有工作台抽屉(720px/420px + 审核表单 + 时间线)。
  • 新增契约测试:指标卡定位回归、三图卡片与抽屉结构一致性。
  • 验证:前端全量测试 114/114 通过;生产构建通过。
  • 仍需人工验收:三图指标卡与抽屉的实际渲染效果、点位数量与颜色、左侧面板滚动。

补充:GIS 页面骨架对齐监测报警一张图

  • 目标结构以「监测报警一张图」为准:页面标题区(图标 + 标题 + 副标题 + 刷新)→ 独立筛选卡片(卡片标题 + 关键字/类型 + 查询/重置)→ 地图卡片(内嵌统一页壳)。
  • 设施图与设备图补齐页面标题区与筛选卡片;筛选控件与页壳内搜索框绑定同一组状态,保持行为一致。
  • 新增共享样式 src/views/subSystem/waterSupply/components/waterGisPageTheme.scss,承载 .gis-page 页面骨架、标题区、筛选卡片、卡片标题与地图卡片样式;设施图与设备图通过非 scoped @use 引入,避免逐页复制。
  • 报警图保持原样作为参照基准,其本地样式与共享骨架取值一致。
  • 验证:前端全量测试 116/116 通过;生产构建通过。

补充:GIS 查询与图层控制同步

  • 边界:仅修改供水设施 GIS 一张图的「设施类型筛选 ↔ 图层控制 ↔ 地图渲染」联动;设备图与报警图的筛选早已直接驱动地图点位,本次只补契约测试锁定,不改行为;后端与其他页面不动。
  • 设施图实现:类型选择框 @change 触发 applyFacilityTypeToLayers,选中某类型时只勾选该图层,清空时恢复全部图层;图层复选框变化时反向同步筛选(只剩一个图层时回填类型,其余视为“全部”)。
  • 地图点位与管线来自 visibleMapModel(由 layerState 过滤),因此图层控制同时决定地图渲染内容与左侧搜索结果。
  • 重置筛选会恢复全部图层。
  • 新增/更新测试:设施图筛选驱动图层与地图渲染、重置恢复图层、三图点位均来自过滤后的图层状态。
  • 验证:前端全量测试 119/119 通过;生产构建通过。

补充:#52 / #53 / #55 三票执行(后端为主,前端随 #55 呈现对齐)

  • 执行方式变更:三票原计划由三个子代理执行者并行完成;本会话无法派发/等待子代理(子代理启动后未收到任务载荷),改由主代理按 #53 → #52 → #55 顺序执行,逐票 TDD、全量测试、分别提交。
  • #53(后端提交 8bf96ef):旧管网模块(controller / domain / mapper / mapper.xml / service / 导出 DTO)与 /api/water/pipe/* 路由退场;GIS 一张图管网详情改走统一表 pipe_network_base(network_id,点设施主键仍按数值解析);供水设施 Excel 导入/导出收敛为四类;设施测试数据改写为写 pipe_network_base(network_type='2'),泵站改回共用表 pump_station(station_type='water_supply');新增 LegacyPipeTableRetirementTest 守住旧表/旧列零残留与“种子只写统一表”。
  • #52(后端提交 a21e3e5):设备删除改为物理清理从属数据 —— equipment_status / equipment_point_rel 新增物理删除语句,修复 KingbaseES 外键 fk_equipment_status 阻止设备删除的问题(equipment_test / equipment_maintain 原本即物理删除);非供水设备的拒绝逻辑与提示文案保持不变。
  • #55(后端 1344d9e / 前端 d386360):新增幂等字典脚本 migration_pipe_network_status_dict.sql(pipe_network_status = 0正常 / 1维护中 / 2异常,只重写字典定义,不改表结构与业务数据);前端管网信息查询页列表与详情共用 statusTagType(0 绿 / 1 橙 / 2 红),统计页与供水设施 GIS 详情的管网状态文案与配色对齐,2 不再被判为“未知”。
  • 验证:后端 mvn -o test 全绿(zksy-system 133 / zksy-admin 172);前端 node --test tests/*.test.mjs 全绿(125 项);npm run build:prod 通过;KingbaseES 实库验证(外键删除复现、字典脚本、设施种子脚本)均在单事务内执行后回滚,未写入任何数据。
  • 风险/后续:pipe_network_status 字典脚本需在 KingbaseES 执行后才在页面生效(部署动作,当前库内仍是旧的 0正常/1异常 两项);#52 的实库验收目前是“单测 + 实库脚本复现”,尚无自动化 DB 集成测试;pump_station_id_seq 曾落后于表内最大 ID(下一次新增泵站会撞主键),验证过程已把它推进到安全位。