build-map-next.mjs 4.4 KB

12345678910111213141516171819202122232425262728
  1. /**
  2. * 票 46 收尾:map.md 的 HEAD blob + 只替换本票三处 → 输出到临时文件。
  3. * 不动工作树(里面混有并行票 43/47 的未提交编辑)。
  4. */
  5. import { execFileSync } from 'node:child_process'
  6. import { readFileSync, writeFileSync } from 'node:fs'
  7. const REPO = 'E:/City-Lifeline-Cockpit-TvT'
  8. const REL = '.scratch/cockpit-real-data-wayfinding/map.md'
  9. const head = execFileSync('git', ['-C', REPO, 'show', `HEAD:${REL}`], { encoding: 'utf8', maxBuffer: 10 * 1024 * 1024 })
  10. // ① 票 46 索引行:勾选 + 收口 gist(链接改指实际文件 46-untitled.md)
  11. const old46 = '- [ ] [46: 前端执行票 —— 监测点与设备详情卡片化、分类查询与历史折叠](issues/46-point-device-detail-card-and-history-filters.md) — 详情面板优先用图表/卡片;设备卡片预警/报警/工单增加分类查询;历史条目可折叠且每条可展开详情'
  12. const new46 = '- [x] [46: 前端执行票 —— 监测点与设备详情卡片化、分类查询与历史折叠](issues/46-untitled.md) — **已实施并浏览器走查关闭(2026-10-15,提交 `2e27b29` 已推送)**。三轮:① 点位摘要卡片化(状态卡+设备计数 KPI,统计缺失不画假 0)+ 预警/报警按等级、工单按状态字典 0–7 分类 chips(词表全单源)+ 历史条目默认折叠、展开保留数据时间/状态/来源/关联对象;② 维护者返工:设备详情弃六块长滚动改**标签页**(档案默认页、最新图片并入该页|指标|预警信息|报警信息|工单状态),预警/报警**每页 10 条**分页;状态图例与一张图顶部**视觉+词表双对齐**(图标登记提为 `legendIconFor` 单源);③ 真实后端 CDP 走查 27/27(设备 21119740:66 报警 → 第 1/7 页·末页余 6·到边禁用·先筛后翻回第 1 页·再点取消·返回零重复取数·480px 无溢出·零报错)。t46 闸门 53/53 + 变异 11/11;证据 [verify/artifacts/t46/](../verify/artifacts/t46/)。\n- [ ] [48: 前端执行票 —— 一张图正下方居中持久显示管线颜色图例](issues/48-untitled.md) — 维护者 2026-10-15 新增(票 46 收口反馈第 3 条):● 燃气 ● 供水 ● 污水 ● 雨水 ● 窨井 持久居中图例;色值必须与 `PIPE_PALETTE` 同源不得另抄;`DRAINAGE_UNKNOWN`/`UNKNOWN` 两桶地图真会画出,是否列入须在票面给结论'
  13. // ② Decisions so far 追加 gist(放在节头之后的第一行)
  14. const anchor = '## Decisions so far\n\n'
  15. const gist = '- [前端执行票 —— 监测点与设备详情卡片化、分类查询与历史折叠](issues/46-untitled.md) — **三轮收口(2026-10-15,真实后端走查 27/27 后关闭,提交 `2e27b29` 已推送)**。监测点摘要改状态卡+KPI 计数条(`pointDeviceCountsView`:统计缺失→不画,真 0→照画);预警/报警/工单加分类 chips(等级词表复用票 13 `eventLevelTag`、工单复用字典 0–7,认不出落 unknown 不猜);历史条目 `<details>` 默认折叠、展开必留数据时间/状态/来源/关联对象四件事;设备详情按维护者返工改**标签页**(档案默认页+图片并入、指标、预警信息、报警信息、工单状态;渲染计划仍六块独立分区不破 t11 D1/D9),预警/报警每页 10 条分页(`pagedRows` 越界夹回、单页不出现控件);状态图例与一张图顶部对齐=图标登记提为 `legendIconFor` 单源 + 详情 5 处 StatusTag 全绑定(设备侧仍走票 44 独立平行表,只借图标登记不借状态语义)。分类/页签/页码全为组件本地视图状态:不发请求、不动 selection、换设备复位。闸门 t46 53/53 + 变异 11/11(含 Windows 沙箱管道空输出的假信号排除记录);**教训**:具名 import 拼错文本守卫全绿、只有加载 .vue 的 t41 SSR 炸 → 新增"按真实导出+双向清单"判据(E11 系);`legendIconFor` 首版吃继承键(toString 命中原型方法)改 hasOwnProperty。\n\n'
  16. if (!head.includes(old46)) { console.error('MISS: 票46 索引行未在 HEAD 版中命中'); process.exit(1) }
  17. if (!head.includes(anchor)) { console.error('MISS: Decisions 节头未命中'); process.exit(1) }
  18. let out = head.replace(old46, new46)
  19. out = out.replace(anchor, anchor + gist)
  20. writeFileSync('E:/City-Lifeline-Cockpit-TvT/.scratch/cockpit-real-data-wayfinding/verify/artifacts/t46/map.next.md', out, 'utf8')
  21. console.log('OK bytes:', Buffer.byteLength(head), '->', Buffer.byteLength(out))