2026-09-23.md 10 KB

2026-09-23:物联感知设备管理页三处调整

目标

用户要求调整 ../../src/views/subSystem/pipeNetwork/assetInfo/equipmentBase/index.vue(设备管理页):

  1. 表单页把「规格参数」移到「生产日期」之后,输入框宽度同步调整。
  2. 表单页地图选点时,自动把解析出的地址回填到「安装位置」。
  3. 详情弹窗按表单编辑页的分区方式展示。

结论与改动

文件:../../src/views/subSystem/pipeNetwork/assetInfo/equipmentBase/index.vue

  • 基础信息区:新增「规格参数」el-col :span="12",紧跟在生产日期之后(与生产日期同一行,宽度随半栏自适应);从资产信息区移除原来的 span=24 整行版本。
  • 资产信息区:保留 资产状态 / 资产价值 / 使用年限 三项(span 12 不变),不再包含规格参数。
  • 地图选点回填地址:
    • 新增 reverseGeocode(lng, lat)(基于 window.BMapGL.Geocoder 的逆地理编码,BD-09 坐标)与 extractAddress(result)(兼容 address / content.address / addressComponents / address_detail 多种返回形态,失败返回空串)。
    • handleMapClick(point) 在写入经纬度(bd09 → wgs84)后调用 fillLocationByPoint(point.lng, point.lat),解析成功即覆盖 form.equipmentLocation,失败保留原值。
    • 新增 locationTip 提示文案(解析中 / 已回填 / 解析失败),绑定在坐标输入下方的 .coordinate-tip,并在 reset() 与 openMapPicker() 中清空。
    • 地图选点弹窗底部新增「解析地址」一行,实时显示回填结果。
  • 详情弹窗:由单个 el-descriptions 拆成 基础信息 / 资产信息 / 部署运维 三段,分别用 .form-section-title.detail-section-title 分区标题,字段顺序与表单页一致;新增 .detail-section-title { margin-top: 18px; } 样式。

验证

  • read_lints 对该文件仅返回既有的 38 条警告(未知 element 标签、未解析变量等旧告警),无新增错误。
  • 未执行构建/运行时验证:逆地理编码依赖 index.html 全局加载的百度地图 WebGL SDK 与网络可达性,需前端实际点选地图确认。

风险与后续

  • 逆地理编码在地图 SDK 未加载或解析失败时静默降级,仅通过提示文案告知用户,不会阻断保存。
  • 回填会覆盖已手工填写的安装位置;若后续希望「仅在为空时回填」,需调整 fillLocationByPoint。

第二轮:列表区布局调整

  • 删除「设备台账」卡片副标题“一览管网监测设备台账与运行状态”。
  • 查询条件(筛选表单)从设备台账卡片中移出,单独成卡 .filter-card,放在 KPI「设备统计」框下方;「新增设备」按钮上移到页头右侧。
  • 「设备台账」改为分区标题(复用 .form-section-title + 新增 .section-block-title),放在设备列表卡片之上,参考「设备统计」页头的摆放方式。
  • 同步删除已无用的 .card-header-row / .card-title / .card-subtitle / .ledger-actions 样式。

第三轮:设备台账标题样式与位置

  • 「设备台账」标题改用与「设备统计」相同的 .page-title 字体(20px / 600 / #0a1628),不再使用分区蓝边小标题样式。
  • 将「设备台账」标题从设备列表卡片上方移到查询条件输入框上方(.filter-card 之前),并用 .section-block-title 保留上下间距。列表卡片不再带标题。

案件设备关联调整:case_info 改用 equipment_id

目标与结论

  • 用户要求 case_info.device_id 更名为 equipment_id、删除 device_code;案件设备关联统一按设备主键查询。
  • 后端两份 CaseInfo 实体、Mapper、保存 DTO、案件列表/详情及三处自动建案逻辑已同步。新增案件提交 equipmentId,设备 ID 必填且必须存在,不再接收旧 deviceId 作为关联字段。
  • 案件接口的 deviceCode 仅作为出参展示字段保留,按 equipmentId 从 equipment_base.equipment_code 读取,设备编码变更不影响案件关联。
  • 已检查 src/api/pipeNetwork/basic.js 和 src/views/subSystem/manholeCover/caseHandling/circulation.vue:前端只展示 deviceCode,没有使用旧 deviceId 或新建案件调用,因此本轮不改前端运行代码;保留设备管理页既有修改。

脚本与验证

  • 后端新增 pipe-network-service/sql/migration_case_info_equipment_id.sql,支持有效 ID 保留、旧编码唯一回填、幂等重跑、异常回滚;不强制历史无关联案件补设备,不对依赖对象使用 CASCADE。
  • 管理端与 zk-api-service 编译通过;案件 service/controller、工单、清警共 33 项测试通过。
  • pipe-network-service/sql/tests/case_info_equipment_id_migration.test.mjs 在内存 PGlite 中通过 11 个场景,覆盖重复执行、编码变更、重复编码、新旧 ID 冲突、孤立关联及依赖视图的失败回滚。
  • 未连接或修改实际数据库。PGlite 仅作 PostgreSQL 兼容性验证,最终仍需在 KingbaseES 验收;上线前备份并停止案件写入,完整执行脚本后部署管理端和 API 服务,避免旧版本继续访问已删除的列。

四子系统统一报警审核

目标与结果

  • 新建 src/views/subSystem/alarm/index.vue、AlarmSummary.vue、alarmReviewModel.js 及 src/api/alarmReview.js,按用户原型提供查询、分页、审核弹窗和处置时间线,样式使用系统 Element Plus 卡片/表格/分页。
  • 删除被替代的供水两个审核 wrapper、排水 bjsh、燃气 krqildjc、井盖 alarmList,以及独占的旧 API。供水 WaterAlarmPage 保留管理/GIS,移除旧审核实现并导航至 /monitorAlarm/alarmAudit。
  • 菜单 2118/2142/2097/2024 均复用已有行,path 统一 alarmAudit、component 为 subSystem/alarm/index,query 按设备根类型和燃气报警编码隔离;后端再校验实际授权菜单。
  • 报警等级使用 alarm_level,1~4 对应一级~四级(红/橙/蓝/绿);审核结果由后端枚举提供。审核意见两种结果均必填,附件最多 5 个/每个 10MB,未保存退出需确认,失败保留输入。
  • 确认报警创建待派单工单,但不改变设备状态或报警处理状态。误报警仅记录审核结论;状态与工单处置独立。
  • 后端脚本 pipe-network-service/sql/migration_alarm_review.sql:Kingbase int8 主键 + 独立 alarm_log_id_seq + nextval;不做历史迁移、不增加 source_key。新报警初始化及处理/工单过程通过触发器写 alarm_log,审核意见附件由审核事务记录。

验证

  • 前端 npm run build:prod 通过,既有 Sass 弃用和包体积提示未扩大处理范围。
  • 报警 UI 模型、审核新契约、原有报警 GIS、统一叶子 path 路由唯一性共 14 项 Node 测试通过。
  • 后端管理端 clean test 共 55 项通过;SQL 内存 PGlite 7 项通过。未连接真实数据库,未完成 KingbaseES 实机或真实登录 E2E。
  • zk-api-service 仍被既有缺失 CollectionAlarmWriter 类阻塞编译;已核对 HEAD 引用与文件树,未重写无关采集逻辑。部署说明在后端 docs/alarm-review-2026-09-23.md。

后续

  • 补回采集 API 的缺失类后重新编译;Kingbase 执行脚本并同步部署、重新登录验证 4 个菜单的数据隔离、审核/建单/时间线及实际附件访问。
  • 既有同设备未办结工单冲突规则保留,确认审核遇到冲突会整体回滚并提示,不会半成功。

报警审核列表底部文案清理

  • 按用户要求删除 src/views/subSystem/alarm/index.vue 分页下方说明文案及其专用 .list-note 样式,查询、审核和建单逻辑不变。
  • 同步更新 tests/waterAlarmAuditWorkbench.test.mjs,4 项测试通过,git diff --check 通过;本轮仅为文案清理,未重跑完整构建。

报警审核查询区域上下留白

  • 按用户反馈调整查询卡片:上下内边距统一为 16px、左右 20px,移除表单及表单项额外外边距;换行间距改由 flex gap 统一控制(行 12px、列 24px)。只影响报警审核页面查询区域。
  • 相关前端回归 5 项通过,Vue 模板及 scoped CSS 编译通过,git diff --check 通过;未重跑全量构建或真实页面截图验收。

报警处置记录图片缩略图与预览

  • 根据运行截图,将处置记录里的图片文件名链接改为 96×72 缩略图;点击使用 Element Plus 图片查看器放大,支持同条记录多图切换,预览层传送到 body 防止被抽屉裁切。
  • 新增 AlarmAttachments.vue,图片加载中/失败有占位提示;alarmReviewModel.js 统一筛选安全图片 URL,支持绝对地址、站内路径、大小写后缀以及查询参数/片段,不为非图片文件渲染链接。
  • 用户追加明确不要 PDF:审核表单文案、accept、前端校验和后端上传白名单/文件头校验均只允许 JPG/JPEG/PNG;尺寸及数量限制不变。本条取代前面初版支持 PDF 的描述,不删除历史存储文件。
  • 前端图片模型及审核页 11 项测试通过,Vue 脚本/模板/scoped CSS 编译通过;后端上传/审核/controller 共 13 项测试通过(含真实 PDF 头和伪装 PNG 的拒绝用例)。两个仓库 git diff --check 通过。未进行真实登录、实际图片网络加载的浏览器验收。
  • 本轮 npm run build:prod 生产构建通过。

报警空值展示与工单故障描述

  • 新增 hasActualValue 判断,列表及复用的审核/处置记录摘要在实际值为 null/undefined/空字符串时隐藏整行“实际值;阈值”;数字 0 和字符串 0 保持展示。
  • 修正后端审核建单传参:不再将审核意见传作 orderDesc,改由工单服务根据原报警生成故障描述,写入 work_order.order_desc。审核意见仍单独写入审核日志,审核事务、设备状态逻辑不变。
  • 自动生成的工单描述同样忽略没有实际值时的数值/阈值占位。不改历史工单,不需要结构脚本。
  • 前端相关 13 项测试和两个 SFC 的脚本/模板/样式编译通过;后端审核/controller/工单共 27 项测试通过,新增检查实际写入的 WorkOrder.orderDesc,覆盖实际值为 0 和为空。两个仓库 git diff --check 通过;未连接真实数据库或执行浏览器 E2E。