From 69cc010e3c7f994f302426c6f3acdc15c2b49cbb Mon Sep 17 00:00:00 2001
From: 张含笑 <zhx18749296735@163.com>
Date: Fri, 31 Oct 2025 10:18:33 +0800
Subject: [PATCH] feat:新增/编辑文件夹

---
 src/api/layer/index.js                              |   91 ++++++---
 src/views/layerManagement/components/rightEdit.vue  |   28 --
 src/views/layerManagement/components/folderFile.vue |  173 ++++++++++++------
 src/views/layerManagement/components/leftList.vue   |   95 ++++++----
 src/views/layerManagement/index.vue                 |  147 ++++++++--------
 5 files changed, 307 insertions(+), 227 deletions(-)

diff --git a/src/api/layer/index.js b/src/api/layer/index.js
index fb22ca2..158c108 100644
--- a/src/api/layer/index.js
+++ b/src/api/layer/index.js
@@ -1,42 +1,67 @@
 import request from '@/axios';
-export const treeDataApi = (params) => {
-    return request({
-		url: `/drone-device-core/layer/api/v1/tree`,
-		method: 'get',
-		params,
-		
-	})
-  };
+export const treeDataApi = params => {
+  return request({
+    url: `/drone-device-core/layer/api/v1/tree`,
+    method: 'get',
+    params,
+  });
+};
 //   电子围栏
 //   编辑
 export const deitFenceApi = data => {
-	return request({
-	  url:  `/drone-device-core/layer/api/v1/data`,
-	  method: 'put',
-	  data: data,
-	});
-  };
+  return request({
+    url: `/drone-device-core/layer/api/v1/data`,
+    method: 'put',
+    data: data,
+  });
+};
 
 // 删除
-export const deleteFenceApi = (id) => {
-	return request({
-	  url: `/drone-device-core/layer/api/v1/data/${id}`,
-	  method: 'delete',
-	});
-  };
+export const deleteFenceApi = id => {
+  return request({
+    url: `/drone-device-core/layer/api/v1/data/${id}`,
+    method: 'delete',
+  });
+};
 
 // 新增
-export const addFenceApi = (data) => {
-	return request({
-		url: `/drone-device-core/layer/api/v1/data`,
-		method: 'post',
-		data
-	})
-}
+export const addFenceApi = data => {
+  return request({
+    url: `/drone-device-core/layer/api/v1/data`,
+    method: 'post',
+    data,
+  });
+};
 // 获取文件夹
-export const dataFolderApi = (id) => {
-    return request({
-		url:`/drone-device-core/layer/api/v1/getFolderByCategoryId/${id}`,
-		method: 'get',	
-	})
-  };
\ No newline at end of file
+export const dataFolderApi = id => {
+  return request({
+    url: `/drone-device-core/layer/api/v1/getFolderByCategoryId/${id}`,
+    method: 'get',
+  });
+};
+//  文件夹
+//   编辑
+export const deitFolderApi = data => {
+  return request({
+    url: `/drone-device-core/layer/api/v1/folder`,
+    method: 'put',
+    data: data,
+  });
+};
+
+// 删除
+export const deleteFolderApi = id => {
+  return request({
+    url: `/drone-device-core/layer/api/v1/folder/${id}`,
+    method: 'delete',
+  });
+};
+
+// 新增
+export const addFolderApi = data => {
+  return request({
+    url: `/drone-device-core/layer/api/v1/folder`,
+    method: 'post',
+    data,
+  });
+};
diff --git a/src/views/layerManagement/components/folderFile.vue b/src/views/layerManagement/components/folderFile.vue
index 9342946..642222a 100644
--- a/src/views/layerManagement/components/folderFile.vue
+++ b/src/views/layerManagement/components/folderFile.vue
@@ -2,7 +2,6 @@
   <div class="rightContainer">
     <div class="contenttitle">文件夹信息</div>
     <div class="centerBox">
-
       <div class="itemRow">
         <div class="label">文件夹名称</div>
         <div>
@@ -16,7 +15,7 @@
             class="ztzf-layer-search filter-item"
             popper-class="ztzf-select-popper"
             @change="handleTypeChange"
-            v-model="formData.type"
+            v-model="formData.event_type"
             placeholder="请选择"
             clearable
           >
@@ -28,12 +27,12 @@
             />
           </el-select>
           <el-select
-            v-model="formData.algorithm"
+            v-model="formData.algorithm_name"
             popper-class="ztzf-select-popper"
             class="ztzf-layer-search"
             placeholder="请选择"
             clearable
-            :disabled="!formData.type"
+            :disabled="!formData.event_type"
           >
             <el-option
               v-for="item in algorithms"
@@ -45,25 +44,33 @@
         </div>
       </div>
     </div>
-    <div class="detailInfo">
+    <div class="detailInfo" v-if="layerParams.editFolder">
       <div class="infpItem">
         <div class="itemData">
           <div class="title">围栏总数量</div>
-          <div class="num"><span>{{totalCount}}</span>个</div>
+          <div class="num">
+            <span>{{ formData.total_count }}</span> 个
+          </div>
         </div>
         <div class="itemData">
           <div class="title">围栏总面积</div>
-          <div class="num"><span>{{totalArea}}</span>m²</div>
+          <div class="num">
+            <span>{{ formData.total_area }}</span> m²
+          </div>
         </div>
       </div>
       <div class="infpItem">
         <div class="itemData">
           <div class="title">创建时间</div>
-          <div class="num"><span>{{formData?.create_time}}</span></div>
+          <div class="num">
+            <span>{{ formData?.create_time }}</span>
+          </div>
         </div>
         <div class="itemData">
           <div class="title">创建人</div>
-          <div class="num"><span>{{formData?.create_name}}</span></div>
+          <div class="num">
+            <span>{{ formData?.create_name }}</span>
+          </div>
         </div>
       </div>
     </div>
@@ -75,86 +82,130 @@
 </template>
 
 <script setup>
-import { deitFenceApi } from '@/api/layer/index';
-import {
-  getTicketInfo,
-} from '@/api/tickets/ticket';
+import { ElMessage } from 'element-plus';
+import dayjs from 'dayjs';
+import { deleteFolderApi, deitFolderApi, addFolderApi } from '@/api/layer/index';
+import { getTicketInfo } from '@/api/tickets/ticket';
 const layerParams = inject('layerParams');
-const types = ref([]) //工单类型
-const allAlgorithms = ref([])
-const algorithms = ref([])
-
+const types = ref([]); //工单类型
+const allAlgorithms = ref([]);
+const algorithms = ref([]);
 const formData = ref({
-  folder_id: '',
+  category_id: '',
   name: '',
-  description: '',
-  is_enabled: false,
-  area: '',
-  altitude: '',
-  control_start_time: '',
-  control_end_time: '',
-  geo_data: '',
-  algorithm:'',
-  type: '',
+  event_type: '',
+  algorithm_name: '',
+  total_count: 0,
+  total_area: 0,
 });
-const detailData = ref(null)
-const totalArea = ref(null)
-const totalCount = ref(null)
-detailData.value = layerParams.value.editDetailData
-totalArea.value = layerParams.value.total_area
-totalCount.value = layerParams.value.total_count
-
+const detailData = ref(null);
+detailData.value = layerParams.value.editFolderData;
 const getTicketInfoData = async () => {
-  const response = await getTicketInfo()
-  const { dept_data, event_type, ai_type, info } = response.data.data
-  allAlgorithms.value = info
+  const response = await getTicketInfo();
+  const { dept_data, event_type, ai_type, info } = response.data.data;
+  allAlgorithms.value = info;
   types.value = Object.entries(event_type).map(([key, value]) => ({
     label: value,
     value: key,
-  }))
-
-}
-const handleTypeChange=(typeValue)=>{
-
-  const matchedCategory = allAlgorithms.value.find(category => category.dict_key === typeValue)
+  }));
+};
+const handleTypeChange = typeValue => {
+  const matchedCategory = allAlgorithms.value.find(category => category.dict_key === typeValue);
   if (!matchedCategory || !matchedCategory.algorithms || matchedCategory.algorithms.length === 0) {
     // 无匹配的算法时清空
-    algorithms.value = []
-    return
+    algorithms.value = [];
+    return;
   }
   algorithms.value = matchedCategory.algorithms.map(algo => ({
     label: algo.dict_value,
     value: algo.dict_key,
     dict_key: algo.dict_key,
     dict_value: algo.dict_value,
-  }))
-  console.log(' algorithms.value ', algorithms.value );
-}
+  }));
+};
 const clearAllData = () => {
-  detailData.value = {}
-  // 清空回显相关数据
+  formData.value = {
+    category_id: '',
+    name: '',
+    event_type: '',
+    algorithm_name: '',
+    total_count: 0,
+    total_area: 0,
+    create_time: '',
+    create_name: '',
+  };
+  algorithms.value = [];
   detailData.value = {};
-  totalArea.value = null;
-  totalCount.value = null;
-  // 重置判断状态(可选,根据业务需求是否需要)
   layerParams.value.decideWhetherToAddOrEdit = 1;
-  // 重置面板状态和缓存数据
   layerParams.value.addFolder = false;
   layerParams.value.editFolder = false;
   layerParams.value.editDetailData = null;
   layerParams.value.polygonPosition = null;
 };
 const cancelHandel = () => {
-  clearAllData()
-
+  clearAllData();
 };
 const submitHandle = () => {
-
-  clearAllData()
-
+  const params = {
+    category_id: layerParams.value.fileType === 1 ? 1 : 2,
+    name: formData.value.name,
+    event_type: formData.value.event_type,
+    algorithm_name: formData.value.algorithm_name,
+  };
+  // 如果是编辑模式,才添加 id
+  if (layerParams.value.addAnEditingFolder === 2) {
+    params.id = detailData.value.id;
+  }
+  if (layerParams.value.addAnEditingFolder === 1) {
+    // 文件夹新增
+    addFolderApi(params).then(res => {
+      if (res.status === 200) {
+        ElMessage({
+          message: '新增成功',
+          type: 'success',
+        });
+      }
+    });
+  } else {
+    //文件夹编辑
+    deitFolderApi(params).then(res => {
+      if (res.status === 200) {
+        ElMessage({
+          message: '编辑成功',
+          type: 'success',
+        });
+      }
+    });
+  }
+  clearAllData();
 };
-onMounted(() => {
-  getTicketInfoData()
+onMounted(async () => {
+
+  await getTicketInfoData();
+  const addOrEditStatus = layerParams.value.addAnEditingFolder || 1;
+  //  判断是否有编辑数据,有则回显
+  if (detailData.value && addOrEditStatus === 2) {
+    const editData = detailData.value;
+    formData.value = {
+      ...formData.value,
+      category_id: editData.category_id,
+      name: editData.name,
+      event_type: editData.event_type, // 回显“关联算法类型”值
+      algorithm_name: editData.algorithm_name, // 回显“算法”值
+  
+      total_count: editData.total_count,
+      total_area: editData.total_area,
+      create_time: editData.create_time ? dayjs(editData.create_time).format('YYYY年MM月DD日') : '',
+      create_name: editData.create_name,
+    };
+    if (formData.value.event_type) {
+      handleTypeChange(formData.value.event_type);
+
+      setTimeout(() => {
+        formData.value.algorithm_name = editData.algorithm_name;
+      }, 100);
+    }
+  }
 });
 </script>
 
diff --git a/src/views/layerManagement/components/leftList.vue b/src/views/layerManagement/components/leftList.vue
index 0ec7599..9cb3b10 100644
--- a/src/views/layerManagement/components/leftList.vue
+++ b/src/views/layerManagement/components/leftList.vue
@@ -12,7 +12,9 @@
       </div>
     </div>
     <div class="btnGroups">
-      <el-button class="ztzf-button" @click="addFence">{{props.activeName === '电子围栏' ? '新增围栏' : '新增禁飞区'}}</el-button>
+      <el-button class="ztzf-button" @click="addFence">{{
+        props.activeName === '电子围栏' ? '新增围栏' : '新增禁飞区'
+      }}</el-button>
       <el-button class="ztzf-button" @click="addFolder">新增文件夹</el-button>
       <el-button class="ztzf-button" @click="selectAll">全选</el-button>
     </div>
@@ -38,7 +40,8 @@
             <span>{{ node.label }}</span>
             <!-- 操作按钮组 -->
             <div class="tree-node-actions">
-              <el-button v-if="node.level !== 1"
+              <el-button
+               
                 icon="el-icon-location"
                 type="text"
                 @click="handleLocation(node)"
@@ -54,10 +57,11 @@
 </template>
 
 <script setup>
-import { treeDataApi ,deleteFenceApi} from '@/api/layer/index';
+import { ElMessage } from 'element-plus';
+import { treeDataApi, deleteFenceApi } from '@/api/layer/index';
 import { inject, onMounted } from 'vue';
-const emit = defineEmits(['update:coverData', 'update:deitData','newFencesMethods']);
-import EventBus from '@/utils/eventBus'
+const emit = defineEmits(['update:coverData', 'update:deitData', 'newFencesMethods']);
+import EventBus from '@/utils/eventBus';
 const coverData = ref();
 const layerParams = inject('layerParams');
 const checkedKeys = ref([]); // 存储勾选的节点key
@@ -81,7 +85,7 @@
   try {
     const res = await treeDataApi();
     treeAllData.value = res.data.data;
-console.log('接口数据',treeAllData.value);
+    console.log('接口数据', treeAllData.value);
 
     setupWatch();
   } catch (error) {
@@ -99,9 +103,9 @@
       if (treeData.value && treeData.value.length > 0) {
         const folderNode = treeData.value[0];
         // 赋值给 layerParams
-        layerParams.value.total_count = folderNode.total_count ?folderNode.total_count :0;
-        layerParams.value.total_area = folderNode.total_area ? folderNode.total_area :0;     
-      } 
+        layerParams.value.total_count = folderNode.total_count ? folderNode.total_count : 0;
+        layerParams.value.total_area = folderNode.total_area ? folderNode.total_area : 0;
+      }
     },
     { immediate: true }
   );
@@ -144,51 +148,72 @@
 
 // 编辑按钮事件
 const handleEdit = node => {
-  checkedKeys.value = [];
-  checkedNodes.value = [];
-  coverData.value = [];
+  if (node.data.level == 2) {
+    layerParams.value.editFolder = true;
+    layerParams.value.addAnEditingFolder = 2;
+    if (props.activeName === '电子围栏') {
+      layerParams.value.fileType = 1;
+    } else if (props.activeName === '自定义禁飞区') {
+      layerParams.value.fileType = 2;
+    }
+    emit('update:editFolder', node.data);
+  } else if (node.data.level === 3) {
+    checkedKeys.value = [];
+    checkedNodes.value = [];
+    coverData.value = [];
     layerParams.value.editNest = true;
-    layerParams.value.decideWhetherToAddOrEdit = 2
-      if (props.activeName === '电子围栏') {
-    layerParams.value.fenceType = 1; // 电子围栏类型标识
-  } else if (props.activeName === '自定义禁飞区') {
-    layerParams.value.fenceType = 2; // 自定义禁飞区类型标识
+    layerParams.value.decideWhetherToAddOrEdit = 2;
+    if (props.activeName === '电子围栏') {
+      layerParams.value.fenceType = 1; // 电子围栏类型标识
+    } else if (props.activeName === '自定义禁飞区') {
+      layerParams.value.fenceType = 2; // 自定义禁飞区类型标识
+    }
+    emit('update:deitData', node.data);
   }
-  emit('update:deitData', node.data);
 };
 
 // 删除按钮事件
 const handleDelete = node => {
-let id = node.data.id
-  deleteFenceApi(id).then(res=>{
-    console.log('删除成功',res);
-  })
-    gettreeDataApi();
+  let id = node.data.id;
+  deleteFenceApi(id).then(res => {
+   if (res.status === 200) {
+        ElMessage({
+          message: '删除成功',
+          type: 'success',
+        });
+      }
+  });
+  gettreeDataApi();
 };
 // 新增围栏
 const addFence = () => {
   layerParams.value.addNest = true;
-   layerParams.value.decideWhetherToAddOrEdit = 1
-   if (props.activeName === '电子围栏') {
+  layerParams.value.decideWhetherToAddOrEdit = 1;
+  if (props.activeName === '电子围栏') {
     layerParams.value.fenceType = 1; // 电子围栏类型标识
   } else if (props.activeName === '自定义禁飞区') {
     layerParams.value.fenceType = 2; // 自定义禁飞区类型标识
   }
-   emit('newFencesMethods'); 
+  emit('newFencesMethods');
 };
 // 新增文件夹
 const addFolder = () => {
-  layerParams.value.addFolder = true
-  layerParams.value.addAnEditingFolder =1
+  layerParams.value.addFolder = true;
+  layerParams.value.addAnEditingFolder = 1;
+  if (props.activeName === '电子围栏') {
+    layerParams.value.fileType = 1;
+  } else if (props.activeName === '自定义禁飞区') {
+    layerParams.value.fileType = 2;
+  }
 };
 
 onMounted(() => {
   gettreeDataApi();
-  EventBus.on('gettreeDataApi', gettreeDataApi)
+  EventBus.on('gettreeDataApi', gettreeDataApi);
 });
-onBeforeUnmount(()=>{
-    EventBus.off('gettreeDataApi', gettreeDataApi)
-})
+onBeforeUnmount(() => {
+  EventBus.off('gettreeDataApi', gettreeDataApi);
+});
 </script>
 
 <style scoped lang="scss">
@@ -264,9 +289,8 @@
   //  }
   //}
 
-
-  :deep(){
-    .el-checkbox{
+  :deep() {
+    .el-checkbox {
       --el-checkbox-bg-color: transparent !important;
     }
   }
@@ -275,7 +299,6 @@
     justify-content: space-between;
     align-items: center;
     width: 100%;
-
   }
 
   .tree-node-actions {
diff --git a/src/views/layerManagement/components/rightEdit.vue b/src/views/layerManagement/components/rightEdit.vue
index 1b0c7b8..88ef9c0 100644
--- a/src/views/layerManagement/components/rightEdit.vue
+++ b/src/views/layerManagement/components/rightEdit.vue
@@ -51,7 +51,7 @@
       </div>
     </div>
     <div class="detailInfo">
-      <div class="infpItem" v-if="layerParams.fenceType === 1">
+      <div class="infpItem" v-if="layerParams.editNest">
        
         <div class="itemData">
           <div class="title">围栏面积</div>
@@ -122,20 +122,12 @@
   control_start_time: '',
   control_end_time: '',
   geo_data: '',
-  noFlyZoneArea: '',
-
   altitude:''
 });
-
 const detailData = ref(null);
-const totalArea = ref(null);
-const totalCount = ref(null);
 const fenceArea = ref(0)
 detailData.value = layerParams.value.editDetailData;
-totalArea.value = layerParams.value.total_area;
-totalCount.value = layerParams.value.total_count;
 fenceArea.value = layerParams.value.fenceArea
-
 watch(
   () => layerParams.value.fenceArea,
   (newArea) => {
@@ -149,7 +141,6 @@
 watch(
   () => timeValue.value,
   (newTimeArr) => {
-
     if (Array.isArray(newTimeArr) && newTimeArr.length === 2) {
       const startTime = newTimeArr[0]; 
       const endTime = newTimeArr[1];   
@@ -165,11 +156,6 @@
 );
 const clearAllData = () => {
   detailData.value = {};
-  // 清空回显相关数据
-  detailData.value = {};
-  totalArea.value = null;
-  totalCount.value = null;
-  // 重置判断状态(可选,根据业务需求是否需要)
   layerParams.value.decideWhetherToAddOrEdit = 1;
   // 重置面板状态和缓存数据
   layerParams.value.addNest = false;
@@ -184,7 +170,7 @@
 };
 const submitHandle = () => {
   const params = {
-    folder_id: layerParams.value.fenceType === 1 ? 1 : 2,
+     folder_id: formData.value.folder_id,
     name: formData.value.name,
     description: formData.value.description,
     is_enabled: true,
@@ -198,7 +184,6 @@
   if (layerParams.value.decideWhetherToAddOrEdit === 2) {
     params.id = detailData.value.id;
   }
-  console.log('formData', params);
 
   if (layerParams.value.decideWhetherToAddOrEdit === 1) {
     //围栏新增
@@ -262,15 +247,8 @@
         dayjs(editData.control_end_time).toDate()
       ];
     }
-    // 回显总数和总面积(编辑时可能需要展示)
-    totalArea.value = layerParams.value.total_area || 0;
-    totalCount.value = layerParams.value.total_count || 0;
        fenceArea.value = editData.area|| 0;
-  } else {
-    // 新增状态:不回显数据,清空总数和总面积
-    totalArea.value = null;
-    totalCount.value = null;
-  }
+  } 
 });
 </script>
 
diff --git a/src/views/layerManagement/index.vue b/src/views/layerManagement/index.vue
index 969785e..6939b4e 100644
--- a/src/views/layerManagement/index.vue
+++ b/src/views/layerManagement/index.vue
@@ -11,17 +11,25 @@
       <div class="mapContainer">
         <div id="layMap" class="ztzf-cesium"></div>
         <leftList
-          v-if="!layerParams.addNest && !layerParams.editNest&& !layerParams.addFolder && activeType !== '2'"
+          v-if="
+            !layerParams.addNest &&
+            !layerParams.editNest &&
+            !layerParams.addFolder &&
+            activeType !== '2'
+          "
           @update:coverData="handleCoverDataUpdate"
           @update:deitData="handleEdit"
+          @update:editFolder="handleFolder"
           :activeName="activeName"
           @newFencesMethods="newFencesMethods"
         ></leftList>
         <rightEdit
-          v-if="layerParams.addNest || layerParams.editNest && activeType !== '2'"
+          v-if="layerParams.addNest || (layerParams.editNest && activeType !== '2')"
           @callParentMethod="parentMethod"
         ></rightEdit>
-        <folderFile  v-if="layerParams.addFolder || layerParams.editFolder && activeType !== '2'"></folderFile>
+        <folderFile
+          v-if="layerParams.addFolder || (layerParams.editFolder && activeType !== '2')"
+        ></folderFile>
         <nationalSpatialPlanning v-if="activeType === '2'" />
       </div>
     </div>
@@ -29,14 +37,14 @@
 </template>
 
 <script setup>
-import * as turf from '@turf/turf'
+import * as turf from '@turf/turf';
 import { dataFolderApi } from '@/api/layer/index';
-import folderFile from '@/views/layerManagement/components/folderFile.vue'
+import folderFile from '@/views/layerManagement/components/folderFile.vue';
 import { parseGeoDataToPositions } from '@/utils/geoParseUtil';
 import { flyVisual } from '@/utils/cesium/mapUtil';
 import rightEdit from '@/views/layerManagement/components/rightEdit.vue';
 import leftList from '@/views/layerManagement/components/leftList.vue';
-import nationalSpatialPlanning from '@/views/layerManagement/components/nationalSpatialPlanning.vue'
+import nationalSpatialPlanning from '@/views/layerManagement/components/nationalSpatialPlanning.vue';
 import { DrawPolygon } from '@/views/layerManagement/components/utils';
 import * as Cesium from 'cesium';
 import { PublicCesium } from '@/utils/cesium/publicCesium';
@@ -75,14 +83,16 @@
   editDetailData: null,
   total_count: 0,
   total_area: 0,
-  polygonPosition:null,
-  decideWhetherToAddOrEdit:null,//新增or编辑围栏
-  addAnEditingFolder:null,//新增or编辑文件夹
-  addFolder:false,
-  editFolder:false,
-  folderOption:[] ,//文件夹选项
-  fenceType:1,
-  fenceArea:0,//围栏面积
+  polygonPosition: null,
+  decideWhetherToAddOrEdit: null, //新增or编辑围栏
+  addAnEditingFolder: null, //新增or编辑文件夹
+  addFolder: false,
+  editFolder: false,
+  folderOption: [], //文件夹选项
+  fenceType: 1,
+  fenceArea: 0, //围栏面积
+  fileType: 1, //文件夹类型
+  editFolderData: null,
 });
 
 const handleClick = tab => {
@@ -90,50 +100,53 @@
 
   activeType.value = clickedTab.type;
   activeName.value = clickedTab.name;
-    getdataFolderApi();
+  getdataFolderApi();
 };
 
-const getdataFolderApi=()=>{
- let id;
+const getdataFolderApi = () => {
+  let id;
   if (activeName.value === '电子围栏') {
     id = 1;
   } else if (activeName.value === '自定义禁飞区') {
     id = 2;
   } else {
-  
     return;
   }
-  dataFolderApi(id).then(res=>{
- const originalFolderList = res.data.data || [];
-  const formattedFolderOption = originalFolderList.map(folder => ({
-        label: folder.name, 
-        value: folder.id.toString()
-      }));
-       layerParams.value.folderOption = formattedFolderOption;
-  })
-}
+  dataFolderApi(id).then(res => {
+    const originalFolderList = res.data.data || [];
+    const formattedFolderOption = originalFolderList.map(folder => ({
+      label: folder.name,
+      value: folder.id.toString(),
+    }));
+    layerParams.value.folderOption = formattedFolderOption;
+  });
+};
 // 编辑围栏区域
 const handleEdit = val => {
-viewer.entities.removeAll();
+  viewer.entities.removeAll();
   layerParams.value.editDetailData = val;
   drawPolygonExample.editThePatch(true);
-  const positions = parseGeoDataToPositions(val.geo_data, val.altitude); 
+  const positions = parseGeoDataToPositions(val.geo_data, val.altitude);
   if (positions.length < 3) return; // 少于3个点无法构成多边形
-   drawPolygonExample.drawTheArea(true)
+  drawPolygonExample.drawTheArea(true);
   drawPolygonExample.initPolygon(viewer, positions, true);
- 
+};
+// 编辑文件夹
+const handleFolder = val => {
+  layerParams.value.editFolderData = val;
+  console.log('文件夹', layerParams.value.editFolderData);
 };
 // 新增开启绘制
-const newFencesMethods =()=>{
-viewer.entities.removeAll();
-drawPolygonExample.initHandler(viewer);
-   drawPolygonExample.drawTheArea(true)
-   drawPolygonExample.startDrawing();
-}
+const newFencesMethods = () => {
+  viewer.entities.removeAll();
+  drawPolygonExample.initHandler(viewer);
+  drawPolygonExample.drawTheArea(true);
+  drawPolygonExample.startDrawing();
+};
 // 清除地图数据
 const parentMethod = () => {
-drawPolygonExample.delPolygon()
-drawPolygonExample.drawTheArea(false)
+  drawPolygonExample.delPolygon();
+  drawPolygonExample.drawTheArea(false);
 };
 // 点击显示区域
 const handleCoverDataUpdate = data => {
@@ -151,7 +164,7 @@
   tbJwdList = [];
   dataList.forEach(item => {
     let positions = parseGeoDataToPositions(item.geo_data, item.altitude);
-    positions.push(positions[0])
+    positions.push(positions[0]);
     if (positions.length < 3) {
       console.warn(`数据 ${item.name} 坐标点不足,无法绘制`);
       return;
@@ -187,7 +200,7 @@
     });
   });
   focusOnAllFeatures();
-  viewInstance.value?.addLeftClickEvent(null, handleFenceClick, );
+  viewInstance.value?.addLeftClickEvent(null, handleFenceClick);
 };
 //计算所有图斑的包围球并定位
 const focusOnAllFeatures = () => {
@@ -254,30 +267,28 @@
   viewInstance.value = publicCesiumInstance;
 
   const nanChangPosition = Cesium.Cartesian3.fromDegrees(
-    115.892151,  // 经度
-    28.676493,   // 纬度
-    15000        // 相机高度
+    115.892151, // 经度
+    28.676493, // 纬度
+    15000 // 相机高度
   );
 
   // 执行相机飞行
   viewer.camera.flyTo({
-    destination: nanChangPosition,  
-    duration: 0,                   
+    destination: nanChangPosition,
+    duration: 0,
     orientation: {
-      heading: Cesium.Math.toRadians(0),    
-      pitch: Cesium.Math.toRadians(-90),    
-      roll: 0                               
-    }
+      heading: Cesium.Math.toRadians(0),
+      pitch: Cesium.Math.toRadians(-90),
+      roll: 0,
+    },
   });
-  
 };
 
 // 编辑/绘制
 const loadPlanarRoute = async (positions = null, save = false) => {
-
   if (positions) {
     curPolygonPosition = positions.map(item => {
-      let cartographic = Cesium.Cartographic.fromCartesian(item);  
+      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); //高度
@@ -289,41 +300,33 @@
     });
   }
 
-  
   let polygon = curPolygonPosition.map(item => [item?.lng, item?.lat]);
-  
   let polygonString = JSON.stringify(polygon);
-  // polygon.push([curPolygonPosition[0]?.lng, curPolygonPosition[0]?.lat]);
-  layerParams.value.polygonPosition = polygonString
-   if (polygon.length >= 3) {
+  layerParams.value.polygonPosition = polygonString;
+  if (polygon.length >= 3) {
     //  确保多边形闭合:最后一个点与第一个点一致(避免计算偏差)
     const firstPoint = polygon[0];
     const lastPoint = polygon[polygon.length - 1];
-    const isClosed = (
+    const isClosed =
       _.round(firstPoint[0], 6) === _.round(lastPoint[0], 6) &&
-      _.round(firstPoint[1], 6) === _.round(lastPoint[1], 6)
-    );
+      _.round(firstPoint[1], 6) === _.round(lastPoint[1], 6);
     // 若未闭合,手动添加闭合点
     const closedPolygon = isClosed ? polygon : [...polygon, firstPoint];
-
     //  转换为 turf 支持的 GeoJSON 格式(Polygon 类型需外层嵌套数组)
     const turfPolygon = turf.polygon([closedPolygon]);
-
     //  计算面积(turf.area() 返回平方米,保留2位小数)
     const area = _.round(turf.area(turfPolygon), 2);
-
-    //  赋值给 layerParams,供页面显示或提交使用
+    //  赋值给 layerParams,
     layerParams.value.fenceArea = area;
-    console.log('计算的多边形面积(平方米):', layerParams.value.fenceArea);
   } else {
     // 坐标点不足3个时,清空面积
     layerParams.value.fenceArea = 0;
   }
-  };
-  const throttleLoadPlanarRoute = throttle(loadPlanarRoute, 200);
-  drawPolygonExample.subscribe('getPolygonPositions', data => {
-    throttleLoadPlanarRoute(data);
-  });
+};
+const throttleLoadPlanarRoute = throttle(loadPlanarRoute, 200);
+drawPolygonExample.subscribe('getPolygonPositions', data => {
+  throttleLoadPlanarRoute(data);
+});
 
 // 地图销毁
 const destroyMap = () => {
@@ -352,7 +355,7 @@
 onMounted(() => {
   initMap();
   cesiumContextMenu();
-  getdataFolderApi()
+  getdataFolderApi();
 });
 
 onBeforeUnmount(() => {

--
Gitblit v1.9.3