# 前端执行票 —— 一张图正下方居中持久显示管线颜色图例 Label: ready-for-agent Category: frontend-execution ## 来源 维护者 2026-10-15 在票 46 收口时新增反馈第 3 条(原话): 「添加对应管线颜色的图例在一张图正下方居中持久显示:● 燃气 ● 供水 ● 污水 ● 雨水 ● 窨井(用颜色区分)」 ## 范围 1. **位置与形态**:在中央「一张图」**正下方、水平居中**新增一条管线颜色图例,**持久显示** (不随模式切换/筛选/悬停消失;与一张图顶部既有的**状态图例**是两条不同的东西,不合并、不互相替换)。 2. **颜色必须与地图管线同源**:色值取自 `domain/pipeVisual.js` 的 `PIPE_PALETTE` (燃气 `#ff3b52` / 供水 `#168bff` / 污水 `#29e36c` / 雨水 `#00e5ff` / 窨井 `#b36bff`), 经 `pipeColorKey(row)` 决定某条管线落哪个桶。**不在图例里另抄一份十六进制** —— 抄了就有两处真相,改色时地图与图例必然漂移(本仓反复付过学费的那类缺陷)。 3. **词条**:维护者点名五个(燃气/供水/污水/雨水/窨井)。`PIPE_PALETTE` 实际另有两桶 `DRAINAGE_UNKNOWN`「排水(雨污等级未识别)」与 `UNKNOWN`「未分类」,色值 `#aab7c4`, **地图上真的会画出这两种颜色**(管网 `network_level` 缺失或脏值时)。 → 实施时按「图例必须覆盖地图实际会画出的颜色」这条判据**决定是否一并列出**, 并把结论写进票面;若要省略,必须同时给出"用户看到灰线却查不到含义"的处置办法, 不得静默丢掉。 4. **不只有颜色**:延续票 06/09 的立场(色盲、打印、灰度大屏仍要读得出), 每个色块同时带文字;建议带该桶的管线条数(真实计数,缺失不补 0)。 5. **窄屏/低精度形态**:图例不得遮挡管线本体,不得撑破画布;换行居中而不是横向溢出。 ## 非目标 - 不改后端契约、不新增写操作。 - 不改管线颜色口径本身(`PIPE_PALETTE`/`pipeColorKey` 的判定逻辑不在本票范围)。 - 不动一张图**顶部**的状态图例与状态筛选入口(决策 02 冻结的全局组合筛选入口,必须常驻可点)。 - 不做图例点击筛选(本票只是"颜色 → 含义"的读数;要筛选另立票)。 ## 验收 - 零依赖逻辑闸门:图例行的色值与 `PIPE_PALETTE` **逐字节同源**(断言取的是同一对象,不是复制值); 词条覆盖 `pipeColorKey` 的全部可能返回值;计数缺失时不画 0。 - 浏览器走查(需维护者明确授权后执行):五个色块出现在一张图正下方居中、持久显示; 切模式/筛选/悬停不消失;色块颜色与地图上对应管线一致。 - 按 `AGENTS.md`,不自动运行 build/dev/走查。 ## 关联 - 单源:`domain/pipeVisual.js`(`PIPE_PALETTE` / `pipeColorKey`); 消费侧参考:`services/cesiumPipeLayer.js`(`visualColor()` 就是拿它上色)。 - 落点候选:`CockpitShell.vue` 的 `cockpit-shell__map` 底部带(既有 `cockpit-shell__map-summary` 底部摘要条与之共存,需避让或并入,实施时定)。 - 上游:票 24(设施点位与管线真实几何图层接线)、票 32(管线构件 glTF 与 network_level 分色)。 ## 进度 Status: ready-for-agent Type: task Blocked by: Labels: ready-for-agent, frontend-execution, wayfinder:task ## Comments ## Answer