# 前端执行票 —— 统一分页批次二:点位摘要两级清单(设备卡片、关联设备图层清单) ## Question 按 [全局分页规范](../specs/2026-10-18-global-list-pagination.md) 落地批次二:`PointDetailCard.vue` 两个全量直渲清单接入共享 pager——「设备卡片」(`data-device-cards`,详情端点 `devices[]`)与「关联设备图层清单」(`data-device-layer-list`,票 42 的快照 `deviceCodes` 全量保留)。前端集合分页,每页 10 条、页码直达/前后页,两清单各自独立页码;换点位/设备时复位。 ## Acceptance - 两清单每页 ≤10 条、`pageCount <= 1` 不画控件、到边禁用保占位。 - **票 42 口径不变**:关联设备清单数据仍保留全部编码(含待确认),分页只是窗口化渲染;互斥归类(已上图/无地图位置/模式隐藏/待确认)与差额可追溯不受影响。 - 换点位/设备/返回第一级时页码复位;数据刷新(freshness tick)不复位,越界夹回。 - 空态文案沿用既有(「该监测点当前没有关联设备」等);新增闸门 + 变异打红;既有相关闸门按成例改写后全绿。 ## Context 共享 pager 由批次一提供(`domain/pagination.js` + `PagerNav.vue`)。教训复用:票 43(稳定标量键);票 42(清单总数只认当前快照、每台设备恰好落一类)。 ## Related spec [`../specs/2026-10-18-global-list-pagination.md`](../specs/2026-10-18-global-list-pagination.md) ## 进度 - [x] 认领(Assignees: Qoder;阻塞票 #59 已关闭,处于 frontier) - [x] 读票全(正文/评论/标签/认领/父 00/阻塞边 #59)+ 规范 + 票 59 成例 + 既有闸门断言面 - [x] 调查:仓内资料足以回答,未新开 research 笔记;两处票面未写死的分叉已向维护者裁定(未命中子清单分页 / 不画计数行),记在开工说明评论 - [x] 实施:`PagerNav.vue` 新增 `showCount`(默认 true,既有消费方零改动);`PointDetailCard.vue` 三清单接共享 pager + `pages` 稳定标量键 + 复位 watch - [x] 新增闸门 [t60-point-detail-lists.mjs](../verify/t60-point-detail-lists.mjs) 42/42 + 变异 [t60-mutations.mjs](../verify/t60-mutations.mjs) 10/10 打红并按字节还原 - [x] 回归全绿:t59 37/37 + 变异 13/13、t46 54/54 + 变异 12/12、t10 57/57、t41 SSR 9/9、t42 39/39、t43 40/40、t44 47/47、并行票 64 61/61 - [x] 规范「修订记录」补两条当次裁定(口径只留一份) - [x] 收口(本票 resolved) - [x] **入库并推送(2026-10-21)**:维护者选定「批次一+二合并提交」边界,限定提交 `18263a6`(feat(cockpit): shared pager batch1+2 … (#59 #60))已推 `origin/master`(`b7c8137..18263a6`)。足迹=`pagination.js`+`PagerNav.vue`+`equipmentDetailView.js`+`EquipmentDetailSections.vue`+`PointDetailCard.vue`+ t59/t60 新闸门 + t46/t12 成例改写 + 票面 57/59/60 + 规范 + map(外科式 blob,只摘 57/59/60 hunks,并行 map 编辑留在工作树未提交)。**纯提交内容 worktree 复验**:t60 42/42、t59 37/37 + 变异 13/13、t46 54/54 + 变异 12/12、t10 57/57、t41 SSR 9/9 全绿。如实记:`pagination.js` 按选定边界整文件入库,含票 64 的槽位函数(其消费方面板未在本 commit 内,属并行在制品);推送同时带上了并行会话先前的三个已提交工作(`cee2bda`/`2ff20d7`/`60cecf6`)。 Status: resolved Assignees: Qoder Type: task Blocked by: #59(已关闭) Labels: wayfinder:task ## Comments - 批次二开工说明 + 维护者当次两条裁定(见本票 Answer 的「两条当次裁定」节;已读资料路径与一句话结论逐条记在该评论)。 ### local — 2026-10-20T16:51:39.623Z (收口时正文整篇替换误覆盖此条,补回以保留 provenance)已读资料与一句话结论: - 规范 `specs/2026-10-18-global-list-pagination.md` — 条文 2/3/4/6/7/11 + 三分法「前端集合」明列本票两清单。 - 票 59 Answer — 共享件已就位:`domain/pagination.js`(pagedRows/pageWindow/clampPage)+ `PagerNav.vue`(受控、唯一 @page 出口携带绝对页码);接线成例 = `pages` 组件本地状态 + `pagedOf()` + `gotoPage()`,复位在组件 watch。 - `components/PointDetailCard.vue`、`stores/deviceLayerStore.js`、`domain/detailFlow.js` — 设备卡片读 `pointData.devices[]`;关联清单读 store `rows`(保留全部编码),总数读 `total`(只认当前快照 `deviceCodes`),归类/图例读 `counts`/`legend`,票 14 未命中行读 `placement === 'unmatched'`。 - 既有闸门/走查断言面:t42 B1b(总数 ≠ 清单行数)、t43 F9(卡片与清单 hover/select 绑定)、t44 F7/F10/F12、t46 E5/E6/E7b/E8、t59 S7/C 组、t18/t44/t45 走查探针(`data-device-layer-row`/`data-device-more` 读行)。 调查结论:仓内既有资料足以回答本次全部问题,未新开 research 笔记。两条票面未写死分叉已向维护者裁定(见 Answer「两条当次裁定」)。 ## Answer **已实施、闸门 + 变异闭环并关闭(2026-10-19)。按 AGENTS.md 跳过 build/dev/浏览器验证。** ### 交付物 | 文件 | 内容 | |---|---| | `src/modules/cockpit/components/PointDetailCard.vue` | 三个清单接入共享 pager:「设备卡片」(`data-device-cards`,详情端点 `devices[]`)、「关联设备图层清单」(`data-device-layer-list`,命中子集)、「未命中设备清单」(票 14 展开子清单,当次裁定 1)。窗口行 `pagedCards/pagedLayerRows/pagedUnmatchedRows` 全部经 `pagedOf()` → `domain/pagination.js` 的 `pagedRows`(条文 11 单源,组件零 `Math.*`/零 `.slice(`);页码是视图本地状态 `pages = { cards, layer, unmatched }`(稳定标量键,票 43 教训),唯一出口 `gotoPage(key, target)`;复位 watch 的 getter 收成**一个标量字符串** `` `${pointCode}|${deviceCode}` `` | | `src/modules/cockpit/components/PagerNav.vue` | 新增 `showCount` prop(`Boolean`,**默认 `true`**):计数行是唯一受它门控的块(`v-if="showCount"`),前后页/页码直达/跳页能力不受影响。批次一既有消费方(设备详情三清单)不传该 prop ⇒ 形态逐字不变 | | `.scratch/.../specs/2026-10-18-global-list-pagination.md` | 「修订记录」追加票 60 两条当次裁定(规范是唯一口径来源,不在别处另写第二份) | ### 两条当次裁定(票面未写死,已向维护者确认后按此实施) 1. **票 14 的「另有 N 台 · 未命中当前筛选」展开子清单同样 ≤10/页,第三套独立页码。** 规范判据一视同仁(可能拉长页面就分页);`pageCount<=1` 时共享层自己 v-if 掉 ⇒ 常态界面零新增控件。「另有 N 台」的 N 仍读**全量** `unmatchedDeviceRows.length`(`data-device-more-count` 不变),差额可追溯是票 14 的口径。 2. **本组件三处 pager 不画计数行**(`:show-count="false"`)。理由:上方已各有权威总数——设备卡片侧是 KPI「设备合计」(读后端统计),关联清单侧是标题「总数 X 台(已上图 Y)」(只认当前快照);再并排放一个「共 N 条」(窗口口径)就是并排的第二个总数,且窗口条数 ≠ 快照总数正是票 42 明写的「总数 ≠ 清单行数」。 > 实施中途的一次自我纠正:pager 容器在 `