What to build: 将后端解析后的监测点状态渲染为地图标记、颜色和图例。前端不重算点位状态,不把事件等级色混用为点位状态色。
Blocked by: 08
Status: resolved Labels: ready-for-agent
已完成并关闭(2026-09-18)。 逻辑闸门 38/38、真机走查 28/28;回归 16 个既有闸门全绿 (t01 20/20、t04 9/9、t05 179/179 + 10/10、t06、t07 39/39 + 20/20、t08 44/44 + 16/16、 t21 9/9 + 10/10、t28 7/7、t29 6/6、t30 7/7)。
src/modules/cockpit/domain/pointStatus.js:状态 → 视觉表现的唯一一张表。
六个后端状态(ALARM/WARNING/WORK_ORDER/NORMAL/OFFLINE/EMPTY,标签与优先级逐字照抄后端
CockpitMonitoringPointStatus)各带 色键 + 形状 + 文字;另有 UNKNOWN(状态未发布)
与 UNASSOCIATED(无关联设备)两条。地图标记、地图图例、markerSvg() 图片都从这一张表取,
所以「图例与标记一致」是结构性的,不靠两边各自小心。services/cesiumEngine.js 新增点位标记层:CustomDataSource('cockpit-point-markers') +
billboard(形状 SVG data URL、CLAMP_TO_GROUND 贴地形)。引擎层只认 shape/tone,不认识业务状态名。services/mapService.js 新增 syncPointMarkersForSummary() / getPointMarkerState() /
clearPointMarkers();语义色从 .cockpit-shell 的计算样式读 --lv1..--neutral,
域层与引擎零色值(票 06 的单一口径)。components/MapCanvas.vue:地图图例换成点位状态图例(8 行,每行形状 + 文字 + 计数),
标记随分页批次增量重画;StatusTag 增可选 shape 道具(不传仍是票 06 的圆点)。mocks/contractMocks.js:新增 point-statuses 场景(六态 + 未关联设备 + 一个前端不认识的状态,
全部可上图)。默认样例一个字节未动,所以票 07/08 的走查数字(2,4,5 / 可上图 2 · 不上图 3)原样成立。DataSourceCollection.add() 是异步的(Promise.resolve(ds).then() 里才 push)。
同一 tick 内「先写后读」会建出两个数据源:写进未注册的 A,再从新建的空 B 读回 0 个。
症状极具迷惑性——模块计数与 dataset 都说 8,组件渲染却是「点位标记 0」,
而晚一点的 DEV 把手调用(A 已注册)又读回 8,同一页面两套答案。
修法:WeakMap 按 viewer 缓存数据源实例。第 2 条同时暴露了走查的盲区:它一路在点分页按钮,所以永远能画出标记。 为此新增走查块 H:一次都不点,只等引擎 ready,要求标记自己出现。
toneColors() 改成恒返回一个颜色 → C2/C3 红(第一版 C2 比的是"图片是否不同",而图片里含形状,
所以它当时假绿 25/25;已改成把颜色从 SVG 里单独抠出来比,并要求逐个等于 token 实测值)。StatusTag 的形状去掉 → D4/D6/D7 红。NORMAL → B1/B2/B3/B5/C4/C7/D3/D5 红。hollowSquare 几何形状,改为「镂空徽标母版 T_MarkPoint_White + 降饱和降亮度 + 不使用内层图标(Q25=C),并保留文字标签「无设备」」。本行原「空心方块」口径被取代;本票其余口径(六态、优先级、色键、颜色不是唯一线索)不变。disableDepthTestDistance: Infinity:状态点不因地形/建筑遮挡而消失(大屏值守优先)。
若将来要"被楼挡住",改这一处即可。本票八行图例继续只解释默认摘要的监测点状态与未关联设备;新增的关联监测设备临时图层应有独立设备图例,且设备图例只计当前模式实际绘制的设备。data-map-markers* 与“点位标记”数仍只计当前模式可见的摘要标记,不计设备图层;摘要分页总数不混入关联设备。该图层及模式筛选的实现由后续规格负责,本票原有图例验收与完成记录保留。参见决策地图票 05。
entity.id 已按 point|<kind>|<code> 建好,可直接拾取)。点位状态 → 视觉表现收成一张表(domain/pointStatus.js),地图标记与地图图例同源于它;
前端只渲染后端 pointStatus,认不出的状态如实落「状态未发布」而不猜成正常;
每个状态同时有形状、色键与文字,颜色不是唯一线索;事件等级色不再出现在地图图例上。