From 16dd04f746df4e25424e59a9948c78c367f3cce5 Mon Sep 17 00:00:00 2001 From: zhaolei <256168157@qq.com> Date: Wed, 21 Oct 2026 17:49:01 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=8B=93=E6=89=91=E4=BD=8D=E7=BD=AE=20f?= =?UTF-8?q?allback=20=E7=A9=BA=E5=AF=B9=E8=B1=A1=E5=88=A4=E6=96=AD=20+=20E?= =?UTF-8?q?lectron=20=E9=BB=98=E8=AE=A4=E9=A1=B5=20+=20asar=20=E6=AD=A3?= =?UTF-8?q?=E7=A1=AE=E6=89=93=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 根因 1:monitoring-topology-positions 在 portable Local Storage 里是空对象 {} - {} 是 truthy,跳过 fallback - L2335 if (savedPositions) 也是 truthy,跳过 else 大圆圈 - 但 savedPositions[d.id] 全 undefined → 所有设备落到 rest.forEach → 大圆圈 根因 2:手动 asar pack ./dist 只打了 dist 没打 package.json/electron → Electron 默认页 修复: - L2311-2315: 空对象也跳过,继续 fallback 主进程 JSON - L2339: 渲染前加 length>0 防御 - 清理 default_app.asar - 用 electron-builder 正确打包(asar 包含 package.json + electron/ + dist/ + node_modules) --- components/monitoring/MonitoringTopologyView.tsx | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/components/monitoring/MonitoringTopologyView.tsx b/components/monitoring/MonitoringTopologyView.tsx index 6164d0d..f968e21 100644 --- a/components/monitoring/MonitoringTopologyView.tsx +++ b/components/monitoring/MonitoringTopologyView.tsx @@ -2309,7 +2309,11 @@ export function MonitoringTopologyView({ hosts, keys }: Props) { // 本地 Electron:从 localStorage 读,找不到则从主进程 inspection-data.json 读 try { let saved = localStorage.getItem('monitoring-topology-positions'); - if (saved) return JSON.parse(saved); + if (saved) { + const parsed = JSON.parse(saved); + // 空对象 {} 等于没有,继续 fallback + if (parsed && typeof parsed === 'object' && Object.keys(parsed).length > 0) return parsed; + } // portable 版 localStorage 为空 → fallback 主进程 JSON(sendSync 同步) try { const nc = (window as any).netcatty; @@ -2332,7 +2336,7 @@ export function MonitoringTopologyView({ hosts, keys }: Props) { const MIN_Y = -0.5; const MAX_Y = 20; - if (savedPositions) { + if (savedPositions && Object.keys(savedPositions).length > 0) { devices.forEach((d) => { if (savedPositions[d.id]) { positions[d.id] = new THREE.Vector3(