15: 面板选设备与三维设备点的对应反应规格(来自决策票 06)
Type: spec
Status: ready-for-agent
Label: ready-for-agent
Blocked by: 06
Category: spec
本规格固化决策票 06的维护者确认结果,作为同一张 map的子规格单。它是「面板选设备与三维设备点互相对应反应」的实施输入,不覆盖同目录现有的 spec.md;现有 spec.md 继续只描述票 03 的监测点/设备定位视角契约。
进度:100%
规格文档已发布为 ready-for-agent 并挂到同一决策 map;100% 仅指规格交付,不表示对应反应功能已实现。下一步:后续实现按本规格接入,表现层数值(引线虚实/颜色、压暗缩小程度、hover 拾取节流阈值)由 08 原型与实现票现场定;重叠拾取/呈现归票 11。未经本对话明确要求,本次不运行 build 或浏览器走查。
Problem Statement
值班人员选中监测点后,关联监测设备图层会展示该点下的设备点(票 05/14)。但当值班人员在面板中点设备卡片、或反过来在三维里点设备点时,三维设备点与面板之间缺乏「谁被选中、谁被指着」的对应反应,靠颜色表达又会与设备状态色键(票 07)冲突。若不定义这套反应语言,实现票会自行发明 hover/选中/弱化/拾取的语义,导致面板与三维互相不对应、色键语义被挪用、双向链接只做一半。
现有相机契约已定义两档定位视角(票 03:点位级 500 m / 设备级 150 m),但「点面板设备是否真的飞设备级、何时飞、返回点位级镜头如何」未定;pickPointMarkerAt() 只认 pointCode 实体(票 10),设备点目前拾不到;宿主 dataset 已有 data-map-picked 断言先例,但缺设备级断言字段。重叠(设备坐标≈点位坐标)时 scene.pick 只回最上层一个,逐台展开归票 11,本规格只定正常单点的反应与拾取。
Solution
维护者复验修订(优先于旧锚定与中心弱化条款)
点位摘要跟随监测点;进入设备详情后面板及其屏幕连接短线跟随所选设备,A→B 换锚,返回摘要恢复监测点锚。设备仍属于原监测点,空间锚点变化不改变业务归属。设备—监测点的场景归属线与面板连接短线是不同指示,前者保留既有语义。
中心设备图标始终不透明,不随状态特效闪烁、渐隐或旋转,不缩小到正常尺寸以下;选中/hover 的放大保留,外围光环承担状态动画。因此旧“其余中心设备压暗 + 缩小”条款不再用于地图中心符号。无位置设备按自身原因显示固定详情,不借父点坐标;展开偏移计入设备视觉锚点。此修订来自用户直接反馈,旧条款保留为历史。
从值班人员视角:面板 hover 一张设备卡片,三维里对应设备点轻放大;三维里 hover 一个设备点,面板里对应卡片高亮。点击选中一台设备时,三维点显示「它是被选中的那台」——外环 + 放大 + 引线(引线连到该监测点标记中心,即面板锚点);其余设备(≥ 3 台时)压暗并缩小退后。首次进入设备级时镜头飞到设备级预设视角看清这台设备;在同一点位内切换设备只换中心不重飞;返回点位级时回到点位级视角。三维点设备点会反选面板卡片并进入设备详情第二级;「返回点位」把三维还原为监测点选中态。三维里的设备点被拾取使用独立身份,不冒充监测点(票 05),且设备点优先于监测点被拾到。走查能通过宿主只读字段读到「当前选中哪台设备、面板停在哪个层级、当前 hover 哪台」,而不是只看图。
User Stories
- 作为值班人员,我想在面板 hover 设备卡片时三维里对应设备点轻放大,以便在画面里立刻认出卡片指的是哪台设备。
- 作为值班人员,我想在三维里 hover 设备点时面板对应卡片高亮,以便反向也认得出指针停在哪个设备的空间位置。
- 作为值班人员,我想点击选中一台设备时三维点出现外环并放大一档,以便与没有选中的设备一眼区分。
- 作为值班人员,我想选中设备时有一条引线连到它的监测点标记中心(面板锚点),以便明白这台设备属于哪个监测点、面板正在说它。
- 作为值班人员,我想设备点与监测点坐标相同(重叠)时引线退化不画,以便不会出现长度为 0 的线糊在标记上。
- 作为值班人员,我想选中反应的视觉不使用颜色,以便不与设备状态色键(票 07)冲突、也不破坏「颜色不是唯一线索」。
- 作为值班人员,我想首次进入设备级时镜头飞到设备级预设视角(150 m,票 03 数值可配置),以便能看清这台被选中的设备。
- 作为值班人员,我想在同一点位内从设备 A 切到设备 B 时只换中心、不再飞一次镜头,以便逐台巡检时画面不反复晃动。
- 作为值班人员,我想从设备级返回点位级时镜头回到点位级定位视角(500 m),以便回到「看整个点位及其全部设备」的视野。
- 作为值班人员,我想返回点位级不等于取消选中(监测点仍选中),以便不会触发票 03 的「取消不回退」语义冲突。
- 作为值班人员,我想在三维里点一个设备点,面板滚动到该设备卡片并进入设备详情第二级,以便从地图侧也能直达这台设备的详情。
- 作为值班人员,我想面板第二级打开时三维仍保持该设备的选中强化,以便详情与三维始终指向同一台设备。
- 作为值班人员,我想点面板「返回点位」后三维还原为监测点选中态(设备外环/放大/引线清除),以便层级回退与视觉回退一致。
- 作为值班人员,我想面板锚点仍跟随监测点标记中心而不是跟随设备点,以便锚定契约(票 04/12)不因设备选中被破坏。
- 作为值班人员,我想选中一台设备时其余设备(≥ 3 台时)压暗并缩小,以便焦点设备清晰、其余设备仍可见可点。
- 作为值班人员,我想设备数少于 3 台时不启用弱化,以便小点位不会出现无谓的视觉抖动。
- 作为值班人员,我想 hover 到一台被压暗的设备时它撤销弱化并轻放大,以便在弱化的设备里也能认出并点击想看的这台。
- 作为值班人员,我想 hover 不会给设备叠加外环或引线(那是选中专属),以便「被指着」和「被选中」两档一眼可分。
- 作为值班人员,我想已选中的设备不被 hover 干扰,以便选中态在指针乱晃时保持稳定。
- 作为值班人员,我想在三维里点设备点能拾到设备(通过独立拾取入口),以便三维 → 面板的双向联动成立。
- 作为值班人员,我想点设备点不会误开一个监测点,以便设备身份与监测点身份(票 05)互不冒充。
- 作为值班人员,我想设备点优先于监测点被拾到(正常单点),以便点了设备区域就是选设备;点监测点标记则回到点位级。
- 作为值班人员,我想未关联设备的既有拾取链路不变,以便本规格不改变没有点位归属的设备行为。
- 作为验收人员,我想走查能读到当前选中设备编码、面板层级和当前 hover 设备编码,以便对断言而不是看图。
- 作为验收人员,我想新增字段不破坏既有
data-map-picked 语义,以便票 10 的既有走查继续成立。
Implementation Decisions
- 反应语言分两档、可叠加规则固定:hover 是瞬态、只作用于非选中设备(被 hover 的撤弱化 + 轻放大,不叠外环/引线);选中是持久态(外环 + 放大 + 引线),不被 hover 干扰;已选中设备保持强化。对应反应一律不用颜色——色键语义仍只属于设备状态(票 07),「颜色不是唯一线索」验收不被破坏。
- hover=双侧:面板卡片 hover → 三维点轻放大;三维 pointermove hover 设备点 → 面板对应卡片高亮,复用
detailStore/selectDevice 链路。三维侧 pointermove 拾取的节流/静止判断与成本控制交实现(不在本规格锁数值)。
- 选中态引线从设备点连到监测点标记中心(即票 04/12 的面板锚点),随锚点走;设备点与监测点坐标相同(引线长度≈0)时引线退化不画,靠外环 + 放大表达。引线虚实/颜色、压暗缩小程度等表现层数值留 08 原型与实现票现场定。
- 镜头联动(数值全部仍归票 03
map.locate,本规格只定行为):点监测点 → 点位级定位(500 m);首次进入设备级(从点位级视角点设备卡片)→ 设备级定位飞一次(150 m);设备级内 A→B 切换 → 只换中心、不重飞;返回点位级 → 回 500 m 定位视角。返回点位是设备级 → 点位级的层级回退,不是票 03 的「取消选中不回退」(监测点仍选中),两者语义并存。
- 双向联动=全双向:三维点设备点 → 面板滚动到该卡片并选中(进设备级第二级,复用
detailStore.selectDevice);面板第二级打开时三维保持该设备选中强化;「返回点位」→ 面板回第一级、三维还原为监测点选中态(设备外环/放大/引线清除)。面板锚点仍跟随监测点标记中心(票 04/12 与 CONTEXT.md「面板锚点」词条不动),三维强化跟随设备、锚点归属不换。
- 多设备弱化:其余设备压暗 + 缩小;阈值=该点位设备数 ≥ 3 台才启用,少于 3 台全亮。弱化不改变已上图数,票 07 独立设备图例只计实际绘制,计数不受影响;本规格不新增第二个计数口径。
- 拾取=独立入口
pickDeviceMarkerAt()(认 deviceCode,不混 pointCode 归属判据;票 05「不冒充监测点标记」由此结构性保证)。点选链路先试设备点、再试监测点——正常单点设备点优先、监测点兜底(点监测点标记回点位级)。未关联设备既有拾取链路不变。重叠时的 drillPick/展开/逐台点选归票 11,本规格只定正常单点;管线交互优先级低于监测点和设备点位(票 22)保持不变。
- 可断言口径:宿主
dataset 新增只读、可空字段,走查对断言不对图:
data-map-device-picked = 当前选中设备 deviceCode
data-map-panel-selection = none|point|equipment(与 detailStore.selection 对应)
data-map-device-hovered = 当前三维 hover 设备 deviceCode
- 不破坏既有
data-map-picked(票 10 走查在用)。
Testing Decisions
- 最高测试接缝是驾驶舱外壳的外部可观察行为:从真实地图标记或监测点台账选中监测点后,用真实鼠标/指针完成「面板 hover 卡片 → 三维反应」「三维 hover 点 → 面板高亮」「点设备卡片进设备级」「三维点设备反选面板」「返回点位还原」「弱化与 hover 撤销」「设备点拾取优先于监测点」完整流程,观察面板层级、三维选中强化、引线与镜头。验收不读取 Cesium 私有实体、不依赖组件私有变量。
- 纯逻辑断言覆盖:两级详情状态机(
none → point → equipment)在三维反选与「返回点位」下的迁移、设备级切换只换中心的状态保持、弱化阈值(设备数 ≥ 3)判定、hover 撤弱化的作用域(只作用于非选中设备)、pickDeviceMarkerAt() 的身份返回(deviceCode 不混 pointCode)与设备点优先顺序。
- 走查断言读取宿主只读字段(
data-map-device-picked / data-map-panel-selection / data-map-device-hovered),与三维场景实际状态对照;引线出现/退化、外环/放大、压暗/缩小等观感由维护者目视裁定(与票 07 相同的「A + 人工走查」口径)。
- 回归沿用票 10 两级详情/真实鼠标点选/
data-map-picked、票 09 标记形状走查、票 03 相机定位断言(getCameraState() + dataset.camera)与票 05/14 设备图层生命周期走查的测试先例;设备状态特效、设备模型、同坐标拾取沿票 07/10/11 的各自验收契约。规格阶段只写验收契约,不运行 build、dev 或浏览器调试。
Out of Scope
- 重叠设备(同坐标/极近)的画法、聚合展开、逐台点选与超量降级;由票 11 决定,本规格只声明「重叠时引线退化不画、正常单点设备点优先」。
- 设备状态特效(票 07)、设备「模型」口径与资产(票 10)、设备图层的触发与生命周期(票 05/14)的重定义;本规格只在其之上定义「选中/指向」反应。
- 相机定位数值本身(heading/pitch/range、
map.locate 配置):全部仍归票 03;本规格只定「何时飞、何时只换中心、返回点位回哪档」的行为。
- 面板锚定跟随的形态与退化策略(票 04/12)及其面板浮层布局;本规格只声明「锚点归属不换仍跟随监测点」。
- 后端设备级坐标与校验契约的实际补齐(票 09)、真实数据全面接线、登录/权限/工单写操作、移动端/竖屏/多屏拼接。
- 覆盖或改写现有票 03 的定位视角规格;本规格只引用其定位行为与数值。
Further Notes
- 本规格的唯一决策来源是票 06 的
## Answer;它把讨论结论转为后续实现可消费的行为契约。
- 与票 11 的边界已显式切分:引线退化(重叠不画引线)属本规格的选中表现语言;重叠时的 drillPick/展开/逐台拾取归票 11。实现时若先做本规格、票 11 未落地,正常单点拾取与反应可先行,重叠行为按票 11 结论补。
- 票 11 收口后的边界补充(2026-09-25):展开态(聚合符号摊开成环/扇形)下,选中设备的引线照 06 逻辑画(连监测点标记中心,表达归属);「重叠引线退化不画」只约束未摊开(地理重合)场景。聚合符号/展开环/逐台拾取与 K>10 降级归票 11,本规格不重开 06。
- 表现层数值(引线虚实/颜色、压暗缩小程度、hover 拾取节流阈值)属于 08 原型现场校准项,不在本规格锁死;校准结果若推翻票 06 任一条语义,回票 06 重议,不由实现票自行改。
- 本规格新增为同一决策 map 的子规格单,现有票 03 的
spec.md 保持不变;14 号规格(关联监测设备图层)与本规格是同一实施链路的两个输入,实施时合并消费,不发生互相覆盖。
- 规格发布后,实施票应在设备图层可用(09 设备级坐标/状态契约或明确降级)前提下开展。