# 15: 前端执行票 —— 数据时间展示 + 片区/行业维度 + 管理面板片区化 Type: task Status: resolved Label: ready-for-agent Blocked by: 03, 06 Category: frontend-execution ## 来源 - 决策:[03 监测数据时间字段与异构设备来源](03-monitoring-created-at-contract.md)、[06 异常统计、工单处置率与管理字段词汇](06-cross-mode-business-semantics.md) - 规格:[08 监测数据时间规格](08-monitoring-created-at-spec.md)、[10 业务语义规格](10-business-semantics-spec.md) ## 状态 **前端执行票(codex 已认领,实施中)**。依赖决策 03/06 与规格 08/10 已收口。实现阶段使用契约 mock/fixture;真实后端联调与阶段收口归票 18。 已完整读取票与 map、时间/业务规格,确认标签 ready-for-agent、上游决策均关闭,无 needs-triage 前置诊断。deck 写入通道在用户切换完全权限后仍报旧 workspace-write 拒绝,使用当前会话文件编辑工具认领本地票成功。已核对消费链:filterOptions → 外壳/地图与监测 store → API → 分布/管理面板与 mock;现有源码仍使用 regionMap、旧机构权属维度和 updatedAt 数据时间,尚未完成实施。 实施进展:已增加未分区筛选与 district 编码/中文映射;地图和监测 API、store、外壳筛选链改为 scope→district 直传;监测三分区和台账/异常设备已读取 createdAt,新增数据时间渲染断言面;管理适配与视图改为 districtIndustry 设施/设备计数,空态判据同步。mock 已迁移至 district/districtFilter 和 createdAt(含对象时间缺失样例),管理计数按片区与行业筛选、总量由行级计数求和;基础档案/概览已接 districtDistribution,相关 API/外壳也接片区筛选。设备详情显式标注采样时间,档案静态行保留。 允许的自查:零依赖 Node 内联领域契约断言已通过(district=0、未分区哨兵、脏值降级、窨井、分区/逐对象 createdAt、未知时间不借响应时间、管理面板不读旧维度);mock 请求过滤断言已通过(0 和 UNASSIGNED 分别命中并正确回显);限定源码的 git diff --check 通过。未进行浏览器走查,因此票继续打开,不声称完整验收完成。 可复跑脚本:[时间与片区契约闸门](../verify/t15-time-district.mjs),命令 `node .scratch/cockpit-real-data-wayfinding/verify/t15-time-district.mjs`,已运行 10/10 通过。包含真实 transport 注入的五个服务×三种片区请求检查(不实际访问后端)、模板数据/采样时间断言;不将此结果冒充浏览器或真实后端联调。管理 mock 的过滤后 totals 已按行级计数求和。 浏览器进展:用户已明确授权本票启动开发服务与浏览器验收。服务以后台任务 pwsh-714 启动,实际 URL 为 http://localhost:8001/#/cockpit。已走查运行监测(分区 createdAt、台账对象 createdAt、异常设备时间缺失显示 —)、未分区筛选回显、切模式保留范围、城南管理计数(供水设施 1/设备 1,未分区为排水设施 1/设备 0),管理面板无旧维度。截图确认管理条目布局可读。发现基础档案 mock 只过滤分布却未同步总量(城南分布 3、总量仍 5),尚未通过最终验收。浏览器会话已关闭。 复验进展:基础档案 mock 已改为同一份筛选后事实集推导所有聚合,城南浏览器复验设施总数=3、分布=3、里程=4.2 一致;窨井筛选下管理信息显示城北·窨井(设施0/设备1),基础档案诚实为空。契约脚本新增统计自洽回归,11/11 通过。截图发现新 createdAt KPI 在窄栏溢出,已加专用小字号/overflow-wrap:anywhere,尚待修复后截图核验。浏览器重载后连续 stale ref,按 browser-skill 恢复规则停止该会话,不冒充复验通过。 最终检查:契约脚本 11/11 通过;限定源码 diff --check 通过;静态搜索未发现运行时代码残留 regionQuery/regionMap/selectedRegion/regionDistribution/旧管理字段,只有历史注释中的「井盖」和退役说明。已完成浏览器证据包括:运行监测 createdAt、台账对象时间、异常设备未知时间「—」、未分区回显、城南管理计数、窨井筛选和基础档案城南总量/分布一致;设备详情采样时间标签已由模板断言覆盖。 最终状态:新会话在正确的 http://localhost:8001/#/cockpit 完成浏览器走查。运行监测面板显示「数据时间」createdAt,台账对象显示逐对象数据时间,异常设备缺失时间显示「—」;监测分布显示城南/城北/太常/未分区并包含窨井。截图确认专用时间 KPI 已在窄栏内换行,无再覆盖相邻读数;管理面板与基础档案此前已完成片区统计走查。设备详情的「采样时间」标签由 11/11 脚本模板断言覆盖。 本票交付物和验收均完成。真实后端联调仍归票 18。全树 diff --check 发现既有 map.md 文件尾空行(非本轮引入),未动无关修改。按 AGENTS.md 不自动运行 build/debug、package scripts 或浏览器走查;未执行项如实记录,不视为通过。 **⚠ 后端契约变更通知(来自 [执行票 12](12-backend-read-model-district.md),2026-10-08)**:本票的消费侧契约已按决策 06 落地为**片区 district**,与下方「范围」原文有以下差异,实施时以本条为准: 1. **`region` 已废止**:后端响应中 `region` / `regionDistribution` / `selectedFilters.region` / `mapFilter.region` 已更名为 `district` 系列;**`region` 入参不再接受**。前端 `map.filters.regionMap`(配置映射)随之**失效**,范围筛选改为直接下发片区编码(见第 2 条)。`domain/filterOptions.js` 的 `regionQuery` / `hasRegionMapping` / `REGION_MAP_GAP` 需相应改造或退役。 2. **片区取值形态=编码 + 中文名双字段**:回 `district`(Integer,`0`城南/`1`城北/`2`太常,**未分区为 `null`**)+ `districtName`(String,未分区回字面量「未分区」)。筛选入参:`district=0|1|2` 按片区、`district=UNASSIGNED` 只看未分区、不传=不筛;**其它值后端回 400**。统计保留数字、展示层映射中文(符合决策 06)。 3. **管理信息响应已删字段**:`organizations`、`ownershipDistribution`、`totals.unmaintainedCount` 已从 `infrastructure/management-information` **删除**。前端 `domain/infrastructurePanels.js` 仍在读这三个字段(约第 213–232 行)与 `MANAGEMENT_REGION_GAP` 文案,需改为消费**片区×行业**计数(本票范围 4)。 4. **`mapFilter` 新增 `districtFilter`**:取值 `NONE`(未筛)/`ASSIGNED`(按片区)/`UNASSIGNED`(只看未分区)—— 「未筛」与「只看未分区」的 `district` 编码都是 `null`,必须靠该字段区分,不要用编码反推。 ## 范围(做什么) 1. **数据时间展示**:消费新建 `createdAt`(create_time 语义)分区级/逐对象字段;空态显示"—/数据时间未知";「数据时间」与「采样时间」两套标签各归其位;`METRIC_FRESHNESS_GAP` 措辞同步。 2. **片区维度**:`district 0/1/2 → 城南/城北/太常`,未识别 → `未分区`;统计保留数字、展示层映射中文;范围筛选/回显统一按片区。 3. **行业词汇**:显示词「井盖」→「窨井」(MANHOLE 映射不变);相关筛选项/面板同步。 4. **管理信息面板片区化**:保留 panelId/布局,视图改为片区×行业的设施/设备计数;移除管理单位/权属构成/责任区域内容。 5. **设备档案**:`ownershipUnit / maintainer / maintainerPhone` 保留为静态行,不参与筛选/统计。 ## 非目标 - 不实现后端 district 契约字段(归执行票 12);前端先按规格接好消费侧并如实降级。 - 不定义异常统计/处置率(归执行票 16 与规格 10 的范围,本票只做维度词汇与展示基础设施)。 ## 验收(后续执行) 零依赖逻辑闸门 + 浏览器走查(`data-*`:数据时间读数、片区筛选含未分区、行业含窨井、管理面板片区×行业计数且无管理单位/权属/责任区域)。 ## 关联 - 上游:决策 03/06、规格 08/10 - 下游:可与 14/16 并行