Type: task Status: resolved Label: ready-for-agent Blocked by: 37(已关闭,省略方法就位) Category: frontend-execution
维护者 2026-10-13 反馈第 2、4、5、6 条。
lengthKm状态:四条范围全部实施、离线闸门 + 变异闸 + 真实浏览器走查(用户授权)完成,票关闭。改动未提交(工作树混有票 43/45/46/47 等并行在制品,入库须单独裁剪,与票 33/36/37 同一条纪律)。
infrastructurePanels.js:toBaseArchives 不再解析 totals.scale;archivePanel KPI 只剩设施总数 + 管线里程。overviewPanels.js:toOverviewRegions 不再带 scale;infrastructureSummaryPanel 删规模 KPI;toOverviewInfrastructure 的 facilityTypes[].scale 不再透传(真实值是 "km" 长度单位串,留字段只会诱导出第二次误用;长度归 lengthKm)。PanelBlocks.vue:删 lengthKm 的 panel-kpi--wide 整行特判与对应 CSS——「谁独占整行」由组件按 key 特判是第二份布局语义;KPI 网格 auto-fit 两项自然同行。panelBlocks.js:KPI_ICONS 删 scale 位;CODE_TEXT 的 large/medium/small 翻译保留(后端仍透传自由字符串,词表删了将来误上屏就是英文枚举——票 17 逮过的教训)。contractMocks.js 的 totals.scale 改真实形状 null、facilityTypes[].scale 改 "km"(mock 若继续给 medium,误留的消费点在真实下显示 —、mock 下显示「中型」,走查抓不到)。v-show="statusPanelExpanded" 的状态详情区,默认收起 → 失败提示永远看不见。改为 <main> 底部居中可见浮层(data-locate-notice,带 编码 · 原因 与关闭按钮,8 秒自动收起;定时器卸载必拆——票 15 的漏取消坑)。data-locate-result 断言面随迁。setCameraFocus(ADR 0008 只换中心、保持 heading/range,行星球尺度下几乎无感)。监测点改走 locateMonitoringPoint(完整视角定位,与点地图上同一个点位的 pointSelection 是同一条相机语义);非监测点保留中心换焦兜底;下发结果 await 核对,false 如实降级「地图尚未就绪」不假装成功。store 新增 clearLocate(反馈唯一持有者仍是 store)。panelBlocks.js 新增 dimensionBarsBlock:两个维度都由 domain 预聚合(按片区/按行业各一份,降序 + 并列保序复用 sortByCountDesc),切换是纯展示动作、零后端往返、不进全局筛选(与 panel-action 接缝刻意分开,互不冒充)。PanelBlocks.vue 新增 dimbars 画法:data-dim-tab(真 button + aria-pressed)+ data-dimbar-*;行标签复用票 37 EllipsisText 接缝;设备计数进悬停说明不占柱。切换状态按「面板名+块标题」记在组件本地(按块对象记会被刷新顶掉)。organizations/ownershipDistribution/unmaintained 零消费(t15 既有守卫复验);「责任区域」不作为独立概念(决策 06)。真实后端 operating-information 的 pointCodes 返回的是设施编码(TCRQ/CNRQ…),而 map-snapshot 对象序列只有监测点(GS001…)与未关联设备——两个编码空间不重叠,所以运行信息面板的定位在真实数据下永远 MISSING。前端行为正确(如实报三种原因之一,验收条文「或如实报三种原因之一」按此后半成立),但数据语义可疑:pointCodes 本应引用可上图的监测点。已另立后端契约票承接排查(见地图子票)。
改动未提交;本票 hunks:domain/panelBlocks.js(dimensionBarsBlock + KPI_ICONS 删 scale + 注释)、domain/infrastructurePanels.js、domain/overviewPanels.js、components/PanelBlocks.vue(dimbars 画法 + 删 --wide + 本地切换状态)、CockpitShell.vue(浮层 + 自动收起 + 样式;混有票 45/47 在制品 hunks)、stores/infrastructureStore.js(locatePoint 完整视角 + clearLocate)、mocks/contractMocks.js(scale 真实形状 2 处)、verify/t38-*.mjs 两个新脚本、.scratch/.../t44-distribution-ranking.mjs(dimbars 归类 + B7 升级)、t20-overview-panels.mjs(B1b/C2d 随契约更新)。
districtIndustry 已交付)。pointCodes 设施编码问题另立后端票(见上)。第二轮(维护者 2026-10-15 复验反馈 2 条)已实施并走查闭环,票重新关闭。改动未提交。
根因不是我以为的「两处各自取数不一致」:overviewStore.loadPanels 确实取了 /infrastructure/base-archives(管线里程的唯一来源),但合并进基础设施分区时硬写 regions: null —— 概览面板因此永远拿不到里程、显示占位符 —,而基础档案读同一个端点显示 62.60552。这正是 t20 里 D3-regions-are-merged-into-infrastructure 那条红;第一轮我把它归为「与本票无关的基线红」是失察,本轮连同同族真缺陷一并修。
overviewStore.js:真的把 regions 并进分区(regionsLoaded ? regions.data : null,附 regionsState/regionsReason);里程两处按构造同源(同一个端点的同一字段),不再是「两次取数期望一致」。lengthKm 加 wide: true,渲染层只认通用 item.wide(.panel-kpi--wide),不按 key 特判 —— 与第一轮删掉的那版的区别是「谁独占整行」的决定权在 domain,不在渲染层。第一轮的基础档案两项同行不受影响(都不声明 wide)。实测根因:21119740(测试环境监测设备01)是关联设备,不以自身编码上图 —— 它是宿主监测点 CBWS202610150001(城北排水监测点01)的 deviceCodes 成员。findMapObject 只按对象自身编码匹配,故永远 MISSING;维护者判语「实际上该点位是已加载在图中的真实设备」准确。
domain/mapLocate.js:新增 findDeviceOwner(按 deviceCodes 反查宿主监测点);planLocate 找不到对象时回联宿主,并带出 deviceCode 供上层区分。回联只在「找不到」时兜底:编码若真是对象自身编码仍直接命中;既非对象编码也非任何设备编码的,仍如实 MISSING(回联不吞真缺失)。stores/infrastructureStore.js:locatePoint 成功时开回联到的对象自己的编码(宿主点位)再进设备级 —— 与点地图上同一点位、再点它的设备卡片是同一条详情路径,「返回点位」回得去。反馈文案仍显示用户点的那个码(回联是内部动作,不改写用户看到的对象)。monitoringStore.locateCode 是死代码(外壳把所有 @locate 都接到 infrastructureStore.locatePoint),所以本修复落在真实接线的那条路径上。regions: null(里程根因)、linkToIndustry 拿到 filterStore 却不调用(点行业行静默无事发生,与「点了没反应」同类)、situationData 用 {...spread} 复制破坏「同源引用」证明、overviewStore 里的 deviceStatistics 死变量(裸后端字段名,触 t05 D1 面);另 2 条是过期夹具(B4/C2 仍按决策 06 之前的 regionDistribution/区域分布,已按真实后端形状 districtDistribution/片区分布 更新)。MANAGEMENT_REGION_GAP/REGION_MAP_GAP 导出而脚本仍 import,多票已归因),本轮零新增破坏。—),且独占整行排版;② 运行监测-运行概况 点「定位 21119740」→ 相机飞到目标街景(城北排水监测点标记可见)+ 弹出设备详情弹窗(测试环境监测设备01/21119740/报警/设备档案·最新指标·预警5·报警66),无失败浮层(成功按设计不出文字)——正是「直接调用对应点位的点击事件,移动到目标位置并触发弹窗」。stores/overviewStore.js(regions 真并入 / linkToIndustry 真调用 / 同源引用 / 删死变量)、domain/mapLocate.js(findDeviceOwner + planLocate 回联 + deviceCode 带出)、domain/overviewPanels.js(lengthKm 的 wide)、components/PanelBlocks.vue(通用 item.wide 类绑定 + .panel-kpi--wide CSS;该文件混有票 43/45/46/47 在制品,hunk 较大须逐段挑)、stores/infrastructureStore.js(locatePoint 开宿主再进设备级)、verify/t38-*.mjs 三脚本 + t38-r2-compile-check.mjs、t20-overview-panels.mjs(B4/C2 夹具更新)。
第二轮完成时间:2026-10-15(第一轮记录见上)。