From 7b6b15aa1470dd5fee4fcc6cae0d3902ab3cf85d Mon Sep 17 00:00:00 2001
From: 罗广辉 <guanghui.luo@foxmail.com>
Date: Sat, 29 Mar 2025 16:55:53 +0800
Subject: [PATCH] fix: 机巢点击交互bug

---
 src/views/Home/useAggregation.js |   24 ++++++++++++++----------
 1 files changed, 14 insertions(+), 10 deletions(-)

diff --git a/src/views/Home/useAggregation.js b/src/views/Home/useAggregation.js
index db6ec45..1dc0104 100644
--- a/src/views/Home/useAggregation.js
+++ b/src/views/Home/useAggregation.js
@@ -20,7 +20,6 @@
   let viewer = null;
   const active = ref('');
   let handler = null;
-  let labelDiv = null;
   let positionC3 = null;
   const init = () => {
     determineScaling();
@@ -128,8 +127,9 @@
   };
 
   const getLabelDom = () => {
-    const vNode = h(MapPopUpBox, { data: '参数',removeLabel });
+    const vNode = h(MapPopUpBox, { data: '参数', removeLabel });
     const tooltipContainer = document.createElement('div');
+    tooltipContainer.id = 'mapPopUpBox';
     tooltipContainer.style.position = 'absolute';
     tooltipContainer.style.transform = 'translateY(-50%)';
     tooltipContainer.style.pointerEvents = 'none';
@@ -139,13 +139,15 @@
   };
 
   const labelBox = () => {
-    if (!labelDiv) {
-      labelDiv = getLabelDom();
+    let dom = document.querySelector('#mapPopUpBox');
+    if (!dom) {
+      dom = getLabelDom();
     }
     const screenPosition = viewer.scene.cartesianToCanvasCoordinates(positionC3);
     if (screenPosition) {
-      labelDiv.style.left = `${screenPosition.x}px`;
-      labelDiv.style.top = `${screenPosition.y}px`;
+      dom.style.left = `${screenPosition.x}px`;
+      dom.style.top = `${screenPosition.y}px`;
+      dom.style.display = 'block';
     }
   };
 
@@ -154,6 +156,7 @@
     if (Cesium.defined(pickedObject) && pickedObject.id) {
       const entity = pickedObject.id;
       positionC3 = entity.position._value;
+      viewer.scene.postRender.removeEventListener(labelBox);
       viewer.scene.postRender.addEventListener(labelBox);
     }
   };
@@ -164,16 +167,17 @@
   };
   const removeLabel = () => {
     viewer.scene.postRender.removeEventListener(labelBox);
-    if (labelDiv && labelDiv.parentNode) {
-      labelDiv.parentNode.removeChild(labelDiv);
-      labelDiv = null;
+    const dom = document.querySelector('#mapPopUpBox');
+    if (dom && dom.parentNode) {
+      dom.parentNode.removeChild(dom);
     }
   };
 
-  onUnmounted(() => {
+  onBeforeUnmount(() => {
     removeEntities();
     removeLabel();
     handler?.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK);
+    handler?.destroy();
   });
 
   onMounted(() => {

--
Gitblit v1.9.3