From ac3b380f3173eb0890b6aa18d64749b8a4025cb8 Mon Sep 17 00:00:00 2001 From: xudan Date: Mon, 15 Sep 2025 18:10:04 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BD=8D=E7=BD=AE?= =?UTF-8?q?=E5=92=8C=E5=8F=AF=E8=A7=81=E6=80=A7=E6=89=B9=E9=87=8F=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE=E9=80=BB=E8=BE=91=EF=BC=8C=E4=BB=85=E5=9C=A8=E6=8F=90?= =?UTF-8?q?=E4=BE=9B=E5=9D=90=E6=A0=87=E6=88=96=E8=A7=92=E5=BA=A6=E6=97=B6?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=EF=BC=8C=E6=8F=90=E5=8D=87=E6=B8=B2=E6=9F=93?= =?UTF-8?q?=E6=95=88=E7=8E=87=E5=92=8C=E5=8F=AF=E8=AF=BB=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/movement-supervision.vue | 37 +++++++++++++++++++----------- 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/src/pages/movement-supervision.vue b/src/pages/movement-supervision.vue index 54f0511..0db3584 100644 --- a/src/pages/movement-supervision.vue +++ b/src/pages/movement-supervision.vue @@ -148,19 +148,30 @@ const monitorScene = async () => { } }); - // 批量设置位置和可见性,只渲染一次 - const positionUpdates = updates.map(({ id, data }) => { - const { x, y, angle } = data; - if (isNil(x) || isNil(y)) { - return { id, visible: false }; - } else { - const newX = x - 60; - const newY = y - 60; - // 后端 angle 为逆时针,把转换改为“先取反再加偏移”: - const rotate = angle == null ? undefined : -angle + 180; - return { id, x: newX, y: newY, rotate, visible: true, locked: LockState.None }; - } - }); + // 批量设置位置和可见性(仅在提供坐标时更新) + const positionUpdates = updates + .map(({ id, data }) => { + const { x, y, angle } = data; + // 仅当提供 x、y 或 angle 时才更新位置/角度,避免因缺省数据误将可见性设为 false + if (isNil(x) && isNil(y) && angle == null) { + return undefined; + } + const payload: any = { id }; + if (!isNil(x) && !isNil(y)) { + const newX = x - 60; + const newY = y - 60; + payload.x = newX; + payload.y = newY; + payload.visible = true; + payload.locked = LockState.None; + } + if (angle != null) { + // 后端 angle 为逆时针,把转换改为“先取反再加偏移” + payload.rotate = -angle + 180; + } + return payload; + }) + .filter((v) => v); // 使用Meta2D的批量更新方法,减少渲染调用 positionUpdates.forEach((update) => {