From d94a55f3358ed7ded4d5a5579968744ed047b6a4 Mon Sep 17 00:00:00 2001
From: 张含笑 <zhx18749296735@163.com>
Date: Tue, 11 Nov 2025 10:20:12 +0800
Subject: [PATCH] feat:测试

---
 src/views/layerManagement/components/leftList.vue |   65 ++++++++++++++++++++++++++------
 src/views/layerManagement/index.vue               |   39 +++++++++++++++++--
 2 files changed, 88 insertions(+), 16 deletions(-)

diff --git a/src/views/layerManagement/components/leftList.vue b/src/views/layerManagement/components/leftList.vue
index 505c737..4b717b7 100644
--- a/src/views/layerManagement/components/leftList.vue
+++ b/src/views/layerManagement/components/leftList.vue
@@ -159,7 +159,6 @@
     const allFenceKeys = treeData.value.flatMap(
       folder => folder.children.map(fence => fence.id) // folder 是 level 2,children 是 level 3
     );
-
     const allFenceNodes = treeData.value.flatMap(folder => folder.children);
     if (checkedKeys.value.length === allFenceKeys.length) {
       // 取消全选:清空 keys 和数据
@@ -178,21 +177,63 @@
   }
 };
 // 定位按钮事件
+// const handleLocation = node => {
+//   // checkedKeys.value = [];
+//   // checkedNodes.value = [];
+//   // coverData.value = [];
+//   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 handleLocation = node => {
-  checkedKeys.value = [];
-  checkedNodes.value = [];
-  coverData.value = [];
+  const currentCheckedKeys = Array.isArray(checkedKeys.value) ? [...checkedKeys.value] : [];
+  const currentCheckedNodes = Array.isArray(checkedNodes.value) ? [...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 {
-    emit('update:coverData', [node.data]);
+    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;
+  } 
+  else {
+    const currentNodeId = node.data.id;  
+    if (!currentCheckedKeys.includes(currentNodeId)) {
+      currentCheckedKeys.push(currentNodeId);
+      currentCheckedNodes.push(node.data);
+      console.log(' currentCheckedNodes', currentCheckedNodes);
+      
+    }
+    treeRef.value.setCheckedKeys(currentCheckedKeys);
+    checkedKeys.value = currentCheckedKeys;
+    checkedNodes.value = currentCheckedNodes;
+    coverData.value = currentCheckedNodes;
+    console.log('currentCheckedNodes',currentCheckedNodes);
+    
+    console.log('coverData.value',node.data);
+    
   }
+
+  emit('update:coverData', coverData.value);
 };
 // 编辑按钮事件
 const handleEdit = node => {
diff --git a/src/views/layerManagement/index.vue b/src/views/layerManagement/index.vue
index a33a2c3..9aa5477 100644
--- a/src/views/layerManagement/index.vue
+++ b/src/views/layerManagement/index.vue
@@ -65,7 +65,7 @@
 const areaCode = userInfo.value?.detail?.areaCode || '';
 // 红色警告交叉面提示窗
 const isShowWaringTip = ref(false);
-const activeName = ref('电子围栏');
+const activeName = ref('自定义识别区');
 const activeType = ref('0');
 let tbJwdList = [];
 const selectDataList = ref([]);
@@ -73,7 +73,7 @@
 let curPolygonPosition = [];
 const tabData = ref([
   {
-    name: '电子围栏',
+    name: '自定义识别区',
     type: '0',
   },
   {
@@ -121,7 +121,7 @@
 };
 const getdataFolderApi = () => {
   let id;
-  if (activeName.value === '电子围栏') {
+  if (activeName.value === '自定义识别区') {
     id = 1;
   } else if (activeName.value === '自定义禁飞区') {
     id = 2;
@@ -282,7 +282,7 @@
       layerParams.value.editNest = true; // 显示右侧编辑组件
       layerParams.value.decideWhetherToAddOrEdit = 2; // 标记为编辑模式
       // 根据围栏类型设置fenceType
-      if (activeName.value === '电子围栏') {
+      if (activeName.value === '自定义识别区') {
         layerParams.value.fenceType = 1;
       } else if (activeName.value === '自定义禁飞区') {
         layerParams.value.fenceType = 2;
@@ -308,6 +308,7 @@
   });
   viewer = publicCesiumInstance.getViewer();
   viewInstance.value = publicCesiumInstance;
+  viewInstance.value?.flyToContour();
   const nanChangPosition = Cesium.Cartesian3.fromDegrees(
     115.892151, // 经度
     28.676493, // 纬度
@@ -394,13 +395,43 @@
   }
 };
 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: 13, // 缩放倍数
+    pitch: -90
+  });
+};
 onBeforeUnmount(() => {
   destroyMap();
   cesiumContextMenu(false);

--
Gitblit v1.9.3