From adf22ab5619e2903a98fbda955a7708956600760 Mon Sep 17 00:00:00 2001
From: 张含笑 <zhx18749296735@163.com>
Date: Tue, 28 Oct 2025 10:46:49 +0800
Subject: [PATCH] feat:地图加载

---
 src/views/layerManagement/components/leftList.vue |  366 ++++++++++++++++++++++++++++++++-------------
 src/views/layerManagement/index.vue               |   85 ++++++---
 src/styles/element-ui.scss                        |   17 +
 3 files changed, 327 insertions(+), 141 deletions(-)

diff --git a/src/styles/element-ui.scss b/src/styles/element-ui.scss
index 16bd0a1..4a42324 100644
--- a/src/styles/element-ui.scss
+++ b/src/styles/element-ui.scss
@@ -152,15 +152,15 @@
 .ztzf-input {
 	.el-input__wrapper {
 		padding: 0 8px !important;
-		background: #012a50;
+		background: #2D2D2D;
 		box-shadow: none !important;
-		border: 1px solid #51a8ff;
-
+		border: 1px solid #fff;
+  
 		.el-input__inner {
 			color: #ffffff;
 
 			&::placeholder {
-				color: #8ac3fd;
+        color: rgba(255,255,255,0.37);
 			}
 		}
 	}
@@ -171,6 +171,15 @@
 		}
 	}
 }
+.ztzf-button {
+  background-color: transparent !important;
+  color: #fff !important;
+}
+.ztzf-el-tree {
+  background-color: transparent !important;
+  --el-tree-node-hover-bg-color:transparent !important;
+  color: #fff !important;
+}
 //======以下针对表格功能 增删查改样式和弹窗=========
 .ztzf-dialog-mange {
   .el-dialog__body {
diff --git a/src/views/layerManagement/components/leftList.vue b/src/views/layerManagement/components/leftList.vue
index 25c4356..0160499 100644
--- a/src/views/layerManagement/components/leftList.vue
+++ b/src/views/layerManagement/components/leftList.vue
@@ -1,42 +1,34 @@
 <template>
   <div class="table-overlay">
-    <div class="topBar">
-      <div
-        v-for="(item, index) in tabData"
-        :key="index"
-        :class="{ 'active-tab': activeTab === index }"
-        @click="activeTab = index"
-      >
-        {{ item.name }}
-      </div>
-    </div>
     <div class="searchBox">
       <el-input
         class="ztzf-input inputName"
         v-model="formData.dkbh"
-        placeholder="图斑名称"
+        placeholder="输入名称模糊搜索"
       ></el-input>
       <div class="searchAndReset">
-        <div class="reset" @click="reset">重置</div>
-        <div class="search" @click="search">搜索</div>
+        <el-button type="primary" icon="el-icon-search" @click="search">搜索</el-button>
+        <el-button class="ztzf-button"  icon="el-icon-refresh" @click="reset">清空</el-button>
+     
       </div>
     </div>
     <div class="btnGroups">
-      <el-button type="primary">新增围栏</el-button>
-      <el-button type="success">新增文件夹</el-button>
-      <el-button type="info" @click="selectAll">全选</el-button>
+      <el-button class="ztzf-button">新增围栏</el-button>
+      <el-button class="ztzf-button">新增文件夹</el-button>
+      <el-button class="ztzf-button" @click="selectAll">全选</el-button>
     </div>
     <div class="tableListBox">
       <el-tree
-       ref="treeRef"
+      class="ztzf-el-tree"
+        ref="treeRef"
         v-model="checkedKeys"
         :data="treeData"
         show-checkbox
         node-key="id"
         default-expand-all
- @check="handleCheck"
+        @check="handleCheck"
         :props="{
-          label: 'name',
+          label: 'dkbh',
           children: 'children',
         }"
       />
@@ -46,6 +38,7 @@
 
 <script setup>
 import { ref } from 'vue';
+const layerData = inject('layerData')
 const formData = {
   isPush: undefined,
   page: 1,
@@ -54,47 +47,242 @@
   dkbh: '',
   patchesName: '',
 };
-const tabData = ref([
-  {
-    name: '电子围栏',
-    type: '0',
-  },
-  {
-    name: '自定义禁飞区',
-    type: '1',
-  },
-  {
-    name: '国土空间规划',
-    type: '2',
-  },
-]);
-
-const activeTab = ref(0);
-const handelClick = val => {
-  activeTab.value = val.type;
-};
 const reset = () => {};
 const search = () => {};
 const treeData = ref([
   {
     id: 'group1',
-    name: '道路裂缝识别',
+    dkbh: '道路裂缝识别',
     children: [
-      { id: 'road1', name: '桃花路' },
-      { id: 'road2', name: '洪城路' },
-      { id: 'road3', name: '中山路' },
-    ],
+    {
+        "id": 519239,
+        "workspace_id": "6566662f-17c5-44f1-89d2-f09b37b81794",
+        "dock_sn": "7CTDM7100BN4J5",
+        "bsm": "77de338bc7c348ff96d37e336def1a0b",
+        "dklx": "QT",
+        "dkbh": "相对地形高度测试航线",
+        "dkfw": "POLYGON((114.824346 25.992131, 114.825211 25.991885, 114.824945 25.990836, 114.823565 25.99111, 114.824346 25.992131, 114.824346 25.992131))",
+        "create_time": 1759126987041,
+        "update_time": 1759126987041,
+        "is_plan": 0,
+        "investigate": 1,
+        "is_push": 0,
+        "user_name": "张红娟",
+        "type": 0,
+        "special_type": 0,
+        "patches_info_id": 65,
+        "create_user": "1899711781376974849",
+        "create_dept": "1916401339951845377",
+        "area_code": "360704000000",
+        "update_user": "1899711781376974849",
+        "is_deleted": 0,
+        "is_generated": 1,
+        "collection_time": "2025-09-29 14:41:03",
+        "patches_name": "自定义图斑",
+        "patches_type": "综合类"
+    },
+    {
+        "id": 517566,
+        "workspace_id": "6566662f-17c5-44f1-89d2-f09b37b81794",
+        "dock_sn": "7CTDM7100BN4J5",
+        "bsm": "baad483e5ba54dcb9c1bb311082fa9e5",
+        "dklx": "QT",
+        "dkbh": "65面状航线测试01-夏潭",
+        "dkfw": "POLYGON((114.82207 25.992745, 114.822648 25.992635, 114.822551 25.992142, 114.821895 25.992132, 114.82207 25.992745, 114.82207 25.992745))",
+        "create_time": 1758158120486,
+        "update_time": 1758158120486,
+        "is_plan": 0,
+        "investigate": 0,
+        "is_push": 0,
+        "user_name": "张红娟",
+        "type": 0,
+        "special_type": 0,
+        "patches_info_id": 65,
+        "create_user": "1899711781376974849",
+        "create_dept": "1916401339951845377",
+        "area_code": "360704000000",
+        "update_user": "1899711781376974849",
+        "is_deleted": 0,
+        "is_generated": 0,
+        "patches_name": "自定义图斑",
+        "patches_type": "综合类"
+    },
+    {
+        "id": 517567,
+        "workspace_id": "6566662f-17c5-44f1-89d2-f09b37b81794",
+        "dock_sn": "7CTDM7100BN4J5",
+        "bsm": "4bbaac90ddb04fe1ab7ad5adbb5dece7",
+        "dklx": "QT",
+        "dkbh": "65新建航线20250918094540",
+        "dkfw": "POLYGON((114.821512 25.992198, 114.823099 25.991259, 114.822046 25.990192, 114.820519 25.99109, 114.821512 25.992198, 114.821512 25.992198))",
+        "create_time": 1758159958425,
+        "update_time": 1758159958425,
+        "is_plan": 0,
+        "investigate": 0,
+        "is_push": 0,
+        "user_name": "张红娟",
+        "type": 0,
+        "special_type": 0,
+        "patches_info_id": 65,
+        "create_user": "1899711781376974849",
+        "create_dept": "1916401339951845377",
+        "area_code": "360704000000",
+        "update_user": "1899711781376974849",
+        "is_deleted": 0,
+        "is_generated": 0,
+        "patches_name": "自定义图斑",
+        "patches_type": "综合类"
+    },
+    {
+        "id": 518228,
+        "workspace_id": "6566662f-17c5-44f1-89d2-f09b37b81794",
+        "dock_sn": "7CTDM7100BN4J5",
+        "bsm": "4a7824e676404cd8a2efb11ff8ae681e",
+        "dklx": "QT",
+        "dkbh": "新建航线20250922145458",
+        "dkfw": "POLYGON((114.821696 25.993983, 114.819532 25.992569, 114.819172 25.994371, 114.820561 25.995004, 114.822089 25.994711, 114.821696 25.993983, 114.821696 25.993983))",
+        "create_time": 1758524113039,
+        "update_time": 1758524113039,
+        "is_plan": 0,
+        "investigate": 0,
+        "is_push": 0,
+        "user_name": "张含笑",
+        "type": 0,
+        "special_type": 0,
+        "patches_info_id": 65,
+        "create_user": "1909067460995813377",
+        "create_dept": "1916401339951845377",
+        "area_code": "360704000000",
+        "update_user": "1909067460995813377",
+        "is_deleted": 0,
+        "is_generated": 0,
+        "patches_name": "自定义图斑",
+        "patches_type": "综合类"
+    },
+    {
+        "id": 518229,
+        "workspace_id": "5d188623-c141-4a89-bb1a-9a191d7fb73c",
+        "dock_sn": "8UUXN5M00A08ZD",
+        "bsm": "fdd2bedf59fd4835bdc97a2bc86c3d60",
+        "dklx": "QT",
+        "dkbh": "新建航线20250922152253",
+        "dkfw": "POLYGON((115.894265 28.706264, 115.886028 28.683945, 115.874846 28.684871, 115.867501 28.697979, 115.874331 28.708741, 115.894265 28.706264, 115.894265 28.706264))",
+        "create_time": 1758525803996,
+        "update_time": 1758525803996,
+        "is_plan": 0,
+        "investigate": 0,
+        "is_push": 0,
+        "user_name": "张含笑",
+        "type": 0,
+        "special_type": 0,
+        "patches_info_id": 65,
+        "create_user": "1909067460995813377",
+        "create_dept": "1916401339951845377",
+        "area_code": "360113000000",
+        "update_user": "1909067460995813377",
+        "is_deleted": 0,
+        "is_generated": 0,
+        "patches_name": "自定义图斑",
+        "patches_type": "综合类"
+    },
+    {
+        "id": 519199,
+        "workspace_id": "6566662f-17c5-44f1-89d2-f09b37b81794",
+        "dock_sn": "7CTDM7100BN4J5",
+        "bsm": "a30c349611d546f8b1daa6a5e4c8e2a8",
+        "dklx": "QT",
+        "dkbh": "新建航线20250922162339",
+        "dkfw": "POLYGON((114.823711 25.993143, 114.823074 25.990854, 114.826097 25.990424, 114.826746 25.992621, 114.823711 25.993143, 114.823711 25.993143))",
+        "create_time": 1758529455155,
+        "update_time": 1758529455156,
+        "is_plan": 0,
+        "investigate": 0,
+        "is_push": 0,
+        "user_name": "黄秋雨",
+        "type": 0,
+        "special_type": 0,
+        "patches_info_id": 65,
+        "create_user": "1831880712850235393",
+        "create_dept": "1916401339951845377",
+        "area_code": "360704000000",
+        "update_user": "1831880712850235393",
+        "is_deleted": 0,
+        "is_generated": 0,
+        "patches_name": "自定义图斑",
+        "patches_type": "综合类"
+    },
+    {
+        "id": 519200,
+        "workspace_id": "6566662f-17c5-44f1-89d2-f09b37b81794",
+        "dock_sn": "7CTDM7100BN4J5",
+        "bsm": "d782d9cba4da403f80c4bbd93e2c765e",
+        "dklx": "QT",
+        "dkbh": "新建航线20250924092549",
+        "dkfw": "POLYGON((114.836948 25.983711, 114.841575 25.971469, 114.829782 25.972419, 114.822853 25.978449, 114.826958 25.983154, 114.836948 25.983711, 114.836948 25.983711))",
+        "create_time": 1758677163541,
+        "update_time": 1758677163541,
+        "is_plan": 0,
+        "investigate": 0,
+        "is_push": 0,
+        "user_name": "张含笑",
+        "type": 0,
+        "special_type": 0,
+        "patches_info_id": 65,
+        "create_user": "1909067460995813377",
+        "create_dept": "1916401339951845377",
+        "area_code": "360704000000",
+        "update_user": "1909067460995813377",
+        "is_deleted": 0,
+        "is_generated": 0,
+        "patches_name": "自定义图斑",
+        "patches_type": "综合类"
+    },
+    
+   
+]
   },
-  {
-    id: 'group2',
-    name: '电动车识别',
-    children: [
-      { id: 'electric1', name: '桃新大道' },
-      { id: 'electric2', name: '昌南大道' },
-    ],
-  },
+ 
 ]);
+// 提取图斑坐标
+function polygonWktToTargetArray(wktPolygon, defaultHeight = 140.6) {
+	try {
+		if (!/^POLYGON\(\([\d\s,.]+\)\)$/.test(wktPolygon)) {
+			throw new Error('输入不是有效的 WKT POLYGON 格式')
+		}
 
+		const coordStr = wktPolygon
+			.replace(/^POLYGON\(\(/, '')
+			.replace(/\)\)$/, '')
+			.trim()
+
+		const coordPairs = coordStr.split(/,\s*/).filter(pair => pair.trim() !== '')
+
+		const result = coordPairs.map(pair => {
+			const [lng, lat] = pair
+				.split(/\s+/)
+				.map(Number)
+				.filter(num => !isNaN(num))
+
+			if (lng === undefined || lat === undefined || lng < -180 || lng > 180 || lat < -90 || lat > 90) {
+				throw new Error(`无效的经纬度对:${pair}`)
+			}
+
+			return {
+				lng: lng,
+				lat: lat,
+				longitude: lng, // 与 lng 一致
+				latitude: lat, // 与 lat 一致
+			
+			}
+		})
+
+		const uniqueResult = Array.from(new Map(result.map(item => [`${item.lng}-${item.lat}`, item])).values())
+
+		return uniqueResult
+	} catch (error) {
+		return [] // 异常时返回空数组
+	}
+}
 const checkedKeys = ref([]); // 存储勾选的节点key
 const treeRef = ref(null); // 获取tree实例
 
@@ -105,9 +293,9 @@
     // 获取所有节点的key
     const allKeys = treeData.value.flatMap(item => [
       item.id,
-      ...item.children.map(child => child.id)
+      ...item.children.map(child => child.id),
     ]);
-    
+
     if (checkedKeys.value.length === allKeys.length) {
       // 如果已经全选,则取消全选
       treeRef.value.setCheckedKeys([]);
@@ -116,25 +304,21 @@
       // 否则全选
       treeRef.value.setCheckedKeys(allKeys);
       // 获取所有节点数据
-      checkedNodes.value = treeData.value.flatMap(item => [
-        item,
-        ...item.children
-      ]);
-        console.log('所有数据',checkedNodes.value);
+      checkedNodes.value = treeData.value.flatMap(item => [item, ...item.children]);
+      console.log('所有数据', checkedNodes.value);
     }
   }
 };
+const coverData = ref()
 const handleCheck = (checkedNodesData, checkedKeysData) => {
   checkedNodes.value = checkedNodesData.checkedNodes;
-
   
-//   console.log('选中的节点数据:', checkedNodesData);
-//   console.log('选中的节点keys:', checkedKeysData);
+coverData.value = checkedNodesData
+    console.log('选中的节点数据:', coverData.value);
+console.log('layerData',layerData.value.selectData);
+
 };
-const changeClick =(val)=>{
-
-}
-
+const changeClick = val => {};
 </script>
 
 <style scoped lang="scss">
@@ -142,53 +326,23 @@
   position: absolute;
   top: 0;
   left: 0;
-  height: 99%;
+  height: 95%;
   z-index: 99;
-  width: 377px;
-  height: 100%;
+  width: 392px;
+  
   overflow: hidden;
-  background: rgba(0, 0, 0, 0.8);
+  background: rgba(0, 0, 0, 0.51);
   border-radius: 8px 8px 8px 8px;
-  padding: 6px 10px 0 10px 10px 0 10px;
+  padding: 16px 12px;
 }
 
-.topBar {
-  display: flex;
-  justify-content: space-between;
-  color: #fff;
-  font-size: 16px;
-
-  div {
-    padding: 8px 12px;
-    cursor: pointer;
-    position: relative;
-    transition: all 0.3s ease;
-
-    &:hover {
-      color: #409eff; // 悬停颜色
-    }
-
-    &.active-tab {
-      color: #409eff; // 激活颜色
-
-      &::after {
-        content: '';
-        position: absolute;
-        bottom: 0;
-        left: 50%;
-        transform: translateX(-50%);
-        width: 60%;
-
-        width: 60%;
-        height: 2px;
-        background-color: #409eff;
-      }
-    }
-  }
-}
 .searchBox {
   display: flex;
   margin-top: 10px;
+  .inputName {
+  width: 184px;
+height: 32px;
+  }
   .searchAndReset {
     width: 182px;
     display: flex;
@@ -206,7 +360,7 @@
     }
 
     .reset {
-      margin-right: 7px;
+      margin-left: 12px;
       background: #0d2b38;
       border-radius: 4px 4px 4px 4px;
       border: 1px solid #84cbd3;
@@ -226,7 +380,7 @@
   }
 }
 .btnGroups {
-  margin-top: 10px;
+  margin: 12px 0 14px 0;
   display: flex;
 }
 .tableListBox {
diff --git a/src/views/layerManagement/index.vue b/src/views/layerManagement/index.vue
index 4a3c0a5..946e9bc 100644
--- a/src/views/layerManagement/index.vue
+++ b/src/views/layerManagement/index.vue
@@ -1,26 +1,54 @@
 <template>
   <basic-container>
     <div class="layerContainer">
+      <div>
+        <el-tabs v-model="activeName" @tab-click="handleClick">
+          <el-tab-pane v-for="tab in tabData" :key="tab.type" :label="tab.name" :name="tab.type">
+          </el-tab-pane>
+        </el-tabs>
+      </div>
       <!-- 地图 -->
-      <div id="layMap" class="ztzf-cesium"></div>
-      <!-- <div class="draw-control">
-        <div @click="startDraw">开始绘制多边形</div>
-      </div> -->
-   <leftList></leftList>
-
+      <div class="mapContainer">
+        <div id="layMap" class="ztzf-cesium"></div>
+        <leftList></leftList>
+      </div>
     </div>
   </basic-container>
 </template>
 
 <script setup>
-import RightEdit from '@/views/layerManagement/components/rightEdit.vue'
-import leftList from '@/views/layerManagement/components/leftList.vue'
+import RightEdit from '@/views/layerManagement/components/rightEdit.vue';
+import leftList from '@/views/layerManagement/components/leftList.vue';
 import { DrawPolygon } from '@/views/layerManagement/components/utils';
 import * as Cesium from 'cesium';
 import { PublicCesium } from '@/utils/cesium/publicCesium';
 import _, { cloneDeep, throttle } from 'lodash';
 import { ElButton } from 'element-plus';
+const activeName = ref('0');
+const tabData = ref([
+  {
+    name: '电子围栏',
+    type: '0',
+  },
+  {
+    name: '自定义禁飞区',
+    type: '1',
+  },
+  {
+    name: '国土空间规划',
+    type: '2',
+  },
+]);
 
+const handleClick = tab => {
+  const clickedTab = tabData.value.find(item => item.type === tab.paneName);
+  activeName.value = clickedTab.type;
+  // console.log('Clicked tab data:', clickedTab);
+};
+const layerData = ref({
+  selectData:[],//选中的数据
+})
+provide('layerData', layerData)
 let publicCesiumInstance = null;
 let viewer = null;
 const viewInstance = shallowRef(null);
@@ -82,46 +110,41 @@
 };
 // 阻止浏览器默认
 const preventDefault = event => {
-	event.preventDefault()
-	return
-}
+  event.preventDefault();
+  return;
+};
 const cesiumContextMenu = (isAdd = true) => {
-	let cesium = document.getElementById('layMap')
-	if (!cesium) return
-	if (isAdd) {
-		cesium.addEventListener('contextmenu', preventDefault)
-	} else {
-		cesium.removeEventListener('contextmenu', preventDefault)
-	}
-}
+  let cesium = document.getElementById('layMap');
+  if (!cesium) return;
+  if (isAdd) {
+    cesium.addEventListener('contextmenu', preventDefault);
+  } else {
+    cesium.removeEventListener('contextmenu', preventDefault);
+  }
+};
 onMounted(() => {
   initMap();
-  cesiumContextMenu()
+  cesiumContextMenu();
 });
 
 onBeforeUnmount(() => {
   destroyMap();
-  cesiumContextMenu(false)
+  cesiumContextMenu(false);
 });
 </script>
 
 <style scoped lang="scss">
 .layerContainer {
+  width: 100%;
+  height: 90vh;
+}
+.mapContainer {
   position: relative;
   width: 100%;
- height: 90vh;
+  height: 80vh;
   #layMap {
     width: 100%;
     height: 100%;
   }
-}
-
-// 绘制控制按钮样式
-.draw-control {
-  position: absolute;
-  top: 16px;
-  left: 16px;
-  z-index: 100; // 确保按钮在地图上方
-  color: red;
 }
 </style>

--
Gitblit v1.9.3