From 575582ca9ad52635548fb026c9bfc0de7938d25e Mon Sep 17 00:00:00 2001
From: 张含笑 <zhx18749296735@163.com>
Date: Wed, 29 Oct 2025 10:15:51 +0800
Subject: [PATCH] feat:全选显示

---
 src/views/layerManagement/components/leftList.vue |  202 +++++--------------------------------------------
 1 files changed, 23 insertions(+), 179 deletions(-)

diff --git a/src/views/layerManagement/components/leftList.vue b/src/views/layerManagement/components/leftList.vue
index cff1910..0c36462 100644
--- a/src/views/layerManagement/components/leftList.vue
+++ b/src/views/layerManagement/components/leftList.vue
@@ -78,172 +78,8 @@
 // 获取数据
 const gettreeDataApi = async () => {
   try {
-    // const res = await treeDataApi();
-    // treeAllData.value = res.data.data;
-    treeAllData.value = [
-      {
-        id: 1,
-        name: '电子围栏',
-        description: '用于监控特定区域的进入和离开事件',
-        area_code: '360103000000',
-        create_user: '1831880712850235393',
-        create_name: '黄秋雨',
-        create_dept: '1916401339951845377',
-        create_time: '2025-10-24 11:15:37',
-        update_user: '1831880712850235393',
-        update_dept: '1916401339951845377',
-        update_time: '2025-10-28 11:15:44',
-        level: 1,
-        children: [
-          {
-            id: 1,
-            category_id: 1,
-            name: '厂区周界',
-            description: '注意区域',
-            event_type: '进入',
-            algorithm_name: '高精度围栏算法V2',
-            area_code: '360103000000',
-            create_user: '1831880712850235393',
-            create_name: '黄秋雨',
-            create_dept: '1916401339951845377',
-            create_time: '2025-10-27 11:14:01',
-            update_user: '1831880712850235393',
-            update_dept: '1916401339951845377',
-            update_time: '2025-10-28 11:13:54',
-            level: 2,
-            children: [
-              {
-                id: 1,
-                folder_id: 1,
-                name: '一号门围栏',
-                description: '覆盖工厂一号门入口区域',
-                is_enabled: true,
-                area: 1250.5,
-                geo_data:
-                  '{"type":"Polygon","coordinates":[[[114.05,22.54],[114.06,22.54],[114.06,22.55],[114.05,22.55],[114.05,22.54]]]}',
-                control_start_time: '2025-10-24 11:14:31',
-                control_end_time: '2025-10-28 11:14:41',
-                altitude: 120,
-                area_code: '360103000000',
-                create_user: '1831880712850235393',
-                create_name: '黄秋雨',
-                create_dept: '1916401339951845377',
-                create_time: '2025-10-21 11:14:11',
-                update_user: '1831880712850235393',
-                update_dept: '1916401339951845377',
-                update_time: '2025-10-28 11:14:23',
-                level: 3,
-              },
-              {
-                id: 2,
-                folder_id: 2,
-                name: '二号门围栏',
-                description: '覆盖工厂一号门入口区域',
-                is_enabled: true,
-                area: 1250.5,
-                geo_data:
-                  '{"type":"Polygon","coordinates":[[[114.05,22.54],[114.06,22.54],[114.06,22.55],[114.05,22.55],[114.05,22.54]]]}',
-                control_start_time: '2025-10-24 11:14:31',
-                control_end_time: '2025-10-28 11:14:41',
-                altitude: 120,
-                area_code: '360103000000',
-                create_user: '1831880712850235393',
-                create_name: '黄秋雨',
-                create_dept: '1916401339951845377',
-                create_time: '2025-10-21 11:14:11',
-                update_user: '1831880712850235393',
-                update_dept: '1916401339951845377',
-                update_time: '2025-10-28 11:14:23',
-                level: 3,
-              },
-            ],
-            total_count: 1,
-            total_area: 1250.5,
-          },
-        ],
-      },
-      {
-        id: 2,
-        name: '自定义禁飞区',
-        description: '用于设置临时或永久的无人机禁飞区域',
-        area_code: '360103000000',
-        create_user: '1831880712850235393',
-        create_name: '黄秋雨',
-        create_dept: '1916401339951845377',
-        create_time: '2025-10-19 11:15:40',
-        update_user: '1831880712850235393',
-        update_dept: '1916401339951845377',
-        update_time: '2025-10-28 11:15:47',
-        level: 1,
-        children: [
-          {
-            id: 2,
-            category_id: 2,
-            name: '临时活动区',
-            description: '注意区域',
-            event_type: '注意',
-            algorithm_name: '注意活动',
-            area_code: '360103000000',
-            create_user: '1831880712850235393',
-            create_name: '黄秋雨',
-            create_dept: '1916401339951845377',
-            create_time: '2025-10-27 11:14:05',
-            update_user: '1831880712850235393',
-            update_dept: '1916401339951845377',
-            update_time: '2025-10-28 11:13:57',
-            level: 2,
-            children: [
-              {
-                id: 2,
-                folder_id: 2,
-                name: '演唱会禁飞区',
-                description: '2023年大型演唱会临时禁飞',
-                is_enabled: true,
-                area: 8800,
-                geo_data:
-                  '{"type":"Polygon","coordinates":[[[113.27,23.13],[113.28,23.13],[113.28,23.14],[113.27,23.14],[113.27,23.13]]]}',
-                control_start_time: '2025-10-16 11:14:37',
-                control_end_time: '2025-10-28 11:14:45',
-                altitude: 120,
-                area_code: '360103000000',
-                create_user: '1831880712850235393',
-                create_name: '黄秋雨',
-                create_dept: '1916401339951845377',
-                create_time: '2025-10-22 11:14:19',
-                update_user: '1831880712850235393',
-                update_dept: '1916401339951845377',
-                update_time: '2025-10-28 11:24:47',
-                level: 3,
-              },
-              {
-                id: 5,
-                folder_id: 2,
-                name: '马拉松赛道禁飞',
-                description: '城市马拉松赛道沿线禁飞',
-                is_enabled: false,
-                area: 25000,
-                geo_data:
-                  '{"type":"LineString","coordinates":[[113.30,23.15],[113.31,23.16],[113.32,23.15]]}',
-                control_start_time: '2025-10-28 11:26:43',
-                control_end_time: '2025-10-28 11:26:43',
-                altitude: 100,
-                area_code: '360000000000',
-                create_user: '1831880712850235393',
-                create_name: '黄秋雨',
-                create_dept: '1916401339951845377',
-                create_time: '2025-10-28 11:28:38',
-                update_user: '1831880712850235393',
-                update_dept: '1916401339951845377',
-                update_time: '2025-10-28 11:28:38',
-                level: 3,
-              },
-            ],
-            total_count: 2,
-            total_area: 33800,
-          },
-        ],
-      },
-    ];
+    const res = await treeDataApi();
+    treeAllData.value = res.data.data;
     console.log('接口获取数据', treeAllData.value);
     setupWatch();
   } catch (error) {
@@ -262,29 +98,37 @@
 };
 
 const handleCheck = (checkedNodesData, checkedKeysData) => {
+const filteredNodes = checkedKeysData.checkedNodes.filter(node => node.level === 3);
   checkedNodes.value = checkedNodesData.checkedNodes;
-  coverData.value = checkedKeysData.checkedNodes.filter(node => node.level === 3);
+ checkedKeys.value = filteredNodes.map(node => node.id);
+  coverData.value = filteredNodes;
   emit('update:coverData', coverData.value);
 };
 // 全选方法
 const selectAll = () => {
   if (treeRef.value) {
-    // 获取所有节点的key
-    const allKeys = treeData.value.flatMap(item => [
-      item.id,
-      ...item.children.map(child => child.id),
-    ]);
-    if (checkedKeys.value.length === allKeys.length) {
-      // 如果已经全选,则取消全选
+  
+    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 和数据
       treeRef.value.setCheckedKeys([]);
+      checkedKeys.value = [];
       checkedNodes.value = [];
+      coverData.value = [];
     } else {
-      // 否则全选
-      treeRef.value.setCheckedKeys(allKeys);
-      // 获取所有节点数据
-      checkedNodes.value = treeData.value.flatMap(item => [...item.children]);
-      console.log('所有数据', checkedNodes.value);
+      // 全选:仅设置 level 3 节点的 id
+      treeRef.value.setCheckedKeys(allFenceKeys);
+      checkedKeys.value = allFenceKeys; // 同步更新 checkedKeys
+      checkedNodes.value = allFenceNodes; // 存储 level 3 数据
+      coverData.value = allFenceNodes; // 同步 coverData
     }
+
+    emit('update:coverData', coverData.value);
   }
 };
 // 定位按钮事件

--
Gitblit v1.9.3