From ab35ec832acf1e110cf9f63a26d0d179629593f3 Mon Sep 17 00:00:00 2001
From: 张含笑 <zhx18749296735@163.com>
Date: Tue, 11 Nov 2025 14:23:05 +0800
Subject: [PATCH] feat:调试

---
 src/views/layerManagement/components/leftList.vue |   44 +++++++++++----------
 src/views/layerManagement/index.vue               |   32 +++++++++++++++-
 2 files changed, 53 insertions(+), 23 deletions(-)

diff --git a/src/views/layerManagement/components/leftList.vue b/src/views/layerManagement/components/leftList.vue
index abebf4d..d8d02c8 100644
--- a/src/views/layerManagement/components/leftList.vue
+++ b/src/views/layerManagement/components/leftList.vue
@@ -151,7 +151,7 @@
 };
 const handleCheck = (checkedNodesData, checkedKeysData) => {
   const filteredNodes = checkedKeysData.checkedNodes.filter(node => node.level === 3);
-  checkedNodes.value = checkedNodesData.checkedNodes;
+  checkedNodes.value = checkedNodesData.children;
   checkedKeys.value = filteredNodes.map(node => node.id);
   coverData.value = filteredNodes;
   emit('update:coverData', coverData.value);
@@ -184,28 +184,33 @@
   }
 };
 // 定位按钮事件
+
 const handleLocation = node => {
-  checkedKeys.value = [];
-  checkedNodes.value = [];
-  coverData.value = [];
+  const currentCheckedKeys = [...checkedKeys.value];
+  const currentCheckedNodes = [...checkedNodes.value];
+  EventBus.emit('focusOnNode', node.data);
   if (node.data.level === 2) {
     const folderChildren = node.data.children || [];
-    // const childrenIds = folderChildren.map(child => child.id);
-    // treeRef.value.setCheckedKeys(childrenIds);
-    // checkedKeys.value = childrenIds;
-    // checkedNodes.value = folderChildren;
-    coverData.value = folderChildren;
-    emit('update:coverData', coverData.value);
-  } else {
-    // const currentNodeId = node.data.id;
-    // treeRef.value.setCheckedKeys([currentNodeId]);
-    // checkedKeys.value = [currentNodeId];
-    // checkedNodes.value = [node.data];
-    coverData.value = [node.data];
-    emit('update:coverData', coverData.value);
+    const childrenIds = folderChildren.map(child => child.id);
+    // 合并已选中的节点和当前文件夹的子节点
+    const newCheckedKeys = [...new Set([...currentCheckedKeys, ...childrenIds])];
+    const newCheckedNodes = [...currentCheckedNodes, ...folderChildren];
+    treeRef.value.setCheckedKeys(newCheckedKeys);
+    checkedKeys.value = newCheckedKeys;
+    checkedNodes.value = newCheckedNodes;
+    coverData.value = newCheckedNodes;
+  } 
+  // 如果是单个节点(level 3),仅添加到选中列表(如果未选中)
+  else if (!currentCheckedKeys.includes(node.data.id)) {
+    currentCheckedKeys.push(node.data.id);
+    currentCheckedNodes.push(node.data);
+    treeRef.value.setCheckedKeys(currentCheckedKeys);
+    checkedKeys.value = currentCheckedKeys;
+    checkedNodes.value = currentCheckedNodes;
+    coverData.value = currentCheckedNodes;
   }
+  emit('update:coverData', coverData.value);
 };
-
 // 编辑按钮事件
 const handleEdit = node => {
   if (node.data.level == 2) {
@@ -246,7 +251,6 @@
         deleteFolderApi(id).then(res => {
           ElMessage.success('删除成功');
           gettreeDataApi();
-          // 通知父组件删除该文件夹下所有围栏的地图实体
           EventBus.emit('deleteMapEntitiesByFolderId', id);
         });
       } else if (node.data.level === 3) {
@@ -254,7 +258,6 @@
         deleteFenceApi(id).then(res => {
           ElMessage.success('删除成功');
           gettreeDataApi();
-          // 通知父组件删除对应的地图实体
           EventBus.emit('deleteMapEntityById', id);
         });
       }
@@ -284,7 +287,6 @@
     layerParams.value.fileType = 2;
   }
 };
-
 function uploadFlightFile(file, t) {
   const fileSuffix = file.name.substring(file.name.lastIndexOf('.') + 1);
   if (!['zip'].includes(fileSuffix)) {
diff --git a/src/views/layerManagement/index.vue b/src/views/layerManagement/index.vue
index f22c675..1147d1c 100644
--- a/src/views/layerManagement/index.vue
+++ b/src/views/layerManagement/index.vue
@@ -304,7 +304,7 @@
     flatMode: false,
     terrain: true,
     layerMode: 4, //轮廓线
-    dockOptions:{showDock:true}//机巢
+    // dockOptions:{showDock:true}//机巢
   });
   viewer = publicCesiumInstance.getViewer();
   viewInstance.value = publicCesiumInstance;
@@ -395,14 +395,42 @@
   }
 };
 provide('layerParams', layerParams);
+// onMounted(() => {
+//   initMap();
+//   cesiumContextMenu();
+//   getdataFolderApi();
+//   EventBus.on('deleteMapEntityById', deleteMapEntityById);
+//   EventBus.on('deleteMapEntitiesByFolderId', deleteMapEntitiesByFolderId);
+  
+// });
 onMounted(() => {
   initMap();
   cesiumContextMenu();
   getdataFolderApi();
+  
+  // 新增:监听定位事件
+  EventBus.on('focusOnNode', (nodeData) => {
+    focusOnNode(nodeData);
+  });
+
   EventBus.on('deleteMapEntityById', deleteMapEntityById);
   EventBus.on('deleteMapEntitiesByFolderId', deleteMapEntitiesByFolderId);
-  
 });
+
+// 新增:定位到指定节点
+const focusOnNode = (nodeData) => {
+  if (!viewer || !nodeData?.geo_data) return;
+  // 解析节点坐标
+  const positions = parseGeoDataToPositions(nodeData.geo_data, nodeData.altitude);
+  if (positions.length < 3) return;
+  // 飞向该节点(保持其他已选中的围栏显示)
+  flyVisual({
+    positionsData: positions.map(pos => [pos.lng, pos.lat, pos.height || 0]),
+    viewer,
+    multiple: 4, // 缩放倍数
+    pitch: -90
+  });
+};
 onBeforeUnmount(() => {
   destroyMap();
   cesiumContextMenu(false);

--
Gitblit v1.9.3