From b5e2aaaba43d7456ab6ffedefa16c97a22cbe479 Mon Sep 17 00:00:00 2001
From: 罗广辉 <guanghui.luo@foxmail.com>
Date: Fri, 21 Nov 2025 18:40:01 +0800
Subject: [PATCH] Merge branch 'feature/v8.0/8.0.2' into prod

---
 src/views/layerManagement/index.vue |   85 +++++++++++++++++++++++++++---------------
 1 files changed, 54 insertions(+), 31 deletions(-)

diff --git a/src/views/layerManagement/index.vue b/src/views/layerManagement/index.vue
index 9ff0fda..0c56040 100644
--- a/src/views/layerManagement/index.vue
+++ b/src/views/layerManagement/index.vue
@@ -23,6 +23,7 @@
           @update:editFolder="handleFolder"
           :activeName="activeName"
           @newFencesMethods="newFencesMethods"
+          :reset-check="resetCheck" 
         ></leftList>
         <rightEdit
           v-if="layerParams.addNest || layerParams.editNest"
@@ -97,19 +98,23 @@
   editFolderData: null,
   editingIsProhibited: false, //禁止编辑
   isDetailShow: false,
-  isSingleLocating:false
+  isSingleLocating:false , //是否是单个定位
+  currentLocationFolderId:null,
 });
-
+const resetCheck = ref(false);
 const handleClick = tab => {
   const clickedTab = tabData.value.find(item => item.type === tab.paneName);
   activeType.value = clickedTab.type;
   activeName.value = clickedTab.name;
   getdataFolderApi();
   parentMethod();
+  handleCoverDataUpdate([])
   layerParams.value.addNest = false
     layerParams.value.editNest = false
      layerParams.value.addFolder = false
     layerParams.value.editFolder = false
+    resetCheck.value = !resetCheck.value;
+    
 };
 const refreshMethod = () => {
   getdataFolderApi();
@@ -170,8 +175,7 @@
 // 点击显示区域
 const handleCoverDataUpdate = data => {
   selectDataList.value = data;
-  if (selectDataList.value.length > 0) {
-  
+  if (selectDataList.value?.length > 0) {
     loadDataToMap(selectDataList.value);
   } else {
     viewer.entities.removeAll();
@@ -218,7 +222,7 @@
         : item.category_id === 3 
           ? colorMap.border3 
           : Cesium.Color.YELLOW;
-    viewer.entities.add({
+      viewer.entities.add({
       id: `polygon_${item.id}`,
       customType: 'fence_polygon',
       customInfo: item,
@@ -241,9 +245,7 @@
       },
       zIndex: 99, 
     });
-  });
-
-  
+  });  
  if (!layerParams.value.isSingleLocating) {
     focusOnAllFeatures(); 
   }
@@ -251,16 +253,44 @@
 };
 const focusOnAllFeatures = () => {
   if (tbJwdList.length === 0 || !viewer) return;
+  
+  // 判断是否有指定定位的文件夹
+  if (layerParams.value.currentLocationFolderId) {
+    // 筛选当前文件夹下的所有子节点坐标
+    const targetFolderPositions = selectDataList.value
+      .filter(item => item.folder_id === layerParams.value.currentLocationFolderId)
+      .flatMap(item => {
+        const positions = parseGeoDataToPositions(item.geo_data, item.altitude);
+        return positions.length >= 3 ? positions : [];
+      });
+    
+    if (targetFolderPositions.length > 0) {
+      const positionsData = targetFolderPositions.map(pos => [
+        pos.lng,
+        pos.lat,
+        pos.height || 0
+      ]);
+      flyVisual({
+        positionsData,
+        viewer,
+        multiple: activeName.value === '国土空间规划' ? 13 : 10,
+        pitch: -90
+      });
+      return; // 仅聚焦当前文件夹,结束方法
+    }
+  }
+
+  // 无指定文件夹时,聚焦所有选中数据
   const positionsData = tbJwdList.map(pos => [
     pos.lng,
     pos.lat,
-    pos.height || 0 
+    pos.height || 0
   ]);
   flyVisual({
     positionsData,
     viewer,
-      multiple:activeName.value == '国土空间规划' ? 13 :4, // 缩放倍数
-    pitch: -90 
+    multiple: activeName.value === '国土空间规划' ? 13 : 4,
+    pitch: -90
   });
 };
 // 区域点击显示详细信息
@@ -348,7 +378,7 @@
       let cartographic = Cesium.Cartographic.fromCartesian(item);
       let lng = Cesium.Math.toDegrees(cartographic.longitude); // 经度
       let lat = Cesium.Math.toDegrees(cartographic.latitude); // 纬度
-      let height = Cesium.Math.toDegrees(cartographic.height); //高度
+      let height = Cesium.Math.toDegrees(cartographic.height); //高度 
       return {
         lng: _.round(lng, 6),
         lat: _.round(lat, 6),
@@ -409,14 +439,6 @@
   }
 };
 provide('layerParams', layerParams);
-// onMounted(() => {
-//   initMap();
-//   cesiumContextMenu();
-//   getdataFolderApi();
-//   EventBus.on('deleteMapEntityById', deleteMapEntityById);
-//   EventBus.on('deleteMapEntitiesByFolderId', deleteMapEntitiesByFolderId);
-  
-// });
 onMounted(() => {
   initMap();
   cesiumContextMenu();
@@ -431,22 +453,23 @@
 
 //定位到指定节点
 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:activeName.value == '国土空间规划' ? 13 :7, // 缩放倍数
-    pitch: -90
-  });
+  if (positions.length < 3) return;
 
+  // level 2 节点走全量聚焦,level 3 节点走单个聚焦
+  if (nodeData.level === 2) {
+    focusOnAllFeatures();
+  } else {
+    flyVisual({
+      positionsData: positions.map(pos => [pos.lng, pos.lat, pos.height || 0]),
+      viewer,
+      multiple: activeName.value === '国土空间规划' ? 13 : 7, // 缩放倍数
+      pitch: -90
+    });
+  }
 };
 onBeforeUnmount(() => {
   destroyMap();

--
Gitblit v1.9.3