|
@@ -501,7 +501,7 @@ function publishDevHook() {
|
|
|
// 票 21:地面/管线视图切换(走查断言"切换不重置中心"用)。
|
|
// 票 21:地面/管线视图切换(走查断言"切换不重置中心"用)。
|
|
|
setViewMode: (mode, overrides) => setViewMode(mode, overrides),
|
|
setViewMode: (mode, overrides) => setViewMode(mode, overrides),
|
|
|
getViewMode: () => getViewMode(),
|
|
getViewMode: () => getViewMode(),
|
|
|
- // 票 76(C6):A/B 显隐把手已退役(`?overlay=0` / set/toggle/setMarkerOverlay 一并摘除),
|
|
|
|
|
|
|
+ // 票 76(C6):A/B 显隐把手已退役(?overlay=0 与 set/toggle 那组 DEV 把手一并摘除),
|
|
|
// 只留只读读数给走查确认 overlay 在位。
|
|
// 只留只读读数给走查确认 overlay 在位。
|
|
|
getMarkerOverlay: () => isMarkerOverlayVisible(),
|
|
getMarkerOverlay: () => isMarkerOverlayVisible(),
|
|
|
// 票 36:主场景区(走查与人工排查读"配没配、矩形是哪一个",票 37/38 也读这一个出口)。
|
|
// 票 36:主场景区(走查与人工排查读"配没配、矩形是哪一个",票 37/38 也读这一个出口)。
|
|
@@ -2631,7 +2631,7 @@ let toneColorsCache = null
|
|
|
*
|
|
*
|
|
|
* 为什么必须是一个函数:点位(`syncPointMarkers`)与关联设备(`syncAssociatedDevices`)是两条
|
|
* 为什么必须是一个函数:点位(`syncPointMarkers`)与关联设备(`syncAssociatedDevices`)是两条
|
|
|
* sync 入口,此前各写一份判据,于是出现「点位修好、设备点没修」。视觉去留只该有一个开关。
|
|
* sync 入口,此前各写一份判据,于是出现「点位修好、设备点没修」。视觉去留只该有一个开关。
|
|
|
- * 语义:overlay 已挂载且未被 `?overlay=0` 关掉 → billboard 只留实体与读数(`show:false`),
|
|
|
|
|
|
|
+ * 语义:overlay 已挂载 → billboard 只留实体与读数(`show:false`),
|
|
|
* 视觉由 DOM 承担;对照态(overlay 关)自动回到 billboard。
|
|
* 视觉由 DOM 承担;对照态(overlay 关)自动回到 billboard。
|
|
|
*/
|
|
*/
|
|
|
function billboardVisualHidden() {
|
|
function billboardVisualHidden() {
|
|
@@ -3144,7 +3144,7 @@ export function syncAssociatedDevices(devices, options = {}) {
|
|
|
(device) => colors[device.tone] || colors.neutral,
|
|
(device) => colors[device.tone] || colors.neutral,
|
|
|
// 票 76(C1):DOM overlay 挂载且可见时,聚合符号**视觉**由 overlay 承载 —— 引擎只保留
|
|
// 票 76(C1):DOM overlay 挂载且可见时,聚合符号**视觉**由 overlay 承载 —— 引擎只保留
|
|
|
// 实体与读数面(身份/位置/投影/readAssociatedDevices 不变),billboard/label 不渲染,
|
|
// 实体与读数面(身份/位置/投影/readAssociatedDevices 不变),billboard/label 不渲染,
|
|
|
- // 两层不重画同一个聚合符号;`?overlay=0` 走 A/B 对照组时自动回到 billboard 视觉。
|
|
|
|
|
|
|
+ // 两层不重画同一个聚合符号(票 76 / C6 后不再有 A/B 对照组)。
|
|
|
// 票 76(C1/C4):聚合符号与**设备本体**的视觉都让位给 DOM —— 同一判据 `billboardVisualHidden()`,
|
|
// 票 76(C1/C4):聚合符号与**设备本体**的视觉都让位给 DOM —— 同一判据 `billboardVisualHidden()`,
|
|
|
// 不会再出现「点位修好、设备点没修」。
|
|
// 不会再出现「点位修好、设备点没修」。
|
|
|
{
|
|
{
|
|
@@ -3673,7 +3673,9 @@ export function setDomHoverTarget(kind, code) {
|
|
|
*/
|
|
*/
|
|
|
function domMarkerAt(clientX, clientY) {
|
|
function domMarkerAt(clientX, clientY) {
|
|
|
if (!Number.isFinite(clientX) || !Number.isFinite(clientY)) return null
|
|
if (!Number.isFinite(clientX) || !Number.isFinite(clientY)) return null
|
|
|
- if (!instance || !instance.host || !isMarkerOverlayMounted() || !isMarkerOverlayVisible()) return null
|
|
|
|
|
|
|
+ // 不做「overlay 是否挂载」的前置判断:overlay 不在时 `elementFromPoint` 命中的自然不是节点,结果同为 null;
|
|
|
|
|
+ // 反过来这道判断会让「按坐标点选」在 node 里无法断言(行为闸门要驱动同一条链)。
|
|
|
|
|
+ if (!instance || !instance.host) return null
|
|
|
const doc = instance.host.ownerDocument
|
|
const doc = instance.host.ownerDocument
|
|
|
if (!doc || typeof doc.elementFromPoint !== 'function') return null
|
|
if (!doc || typeof doc.elementFromPoint !== 'function') return null
|
|
|
const element = doc.elementFromPoint(clientX, clientY)
|
|
const element = doc.elementFromPoint(clientX, clientY)
|