From e50196bff10f0196307b2567ed6c0829eadd8ff6 Mon Sep 17 00:00:00 2001
From: wujingjing <gersonwu@qq.com>
Date: 星期一, 10 二月 2025 12:12:25 +0800
Subject: [PATCH] 设备显示隐藏

---
 src/components/chat/chatComponents/summaryCom/components/recordSetTable/map/LayerControl.vue |  113 +++++++++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 91 insertions(+), 22 deletions(-)

diff --git a/src/components/chat/chatComponents/summaryCom/components/recordSetTable/map/LayerControl.vue b/src/components/chat/chatComponents/summaryCom/components/recordSetTable/map/LayerControl.vue
index 8ea5098..fd70f7b 100644
--- a/src/components/chat/chatComponents/summaryCom/components/recordSetTable/map/LayerControl.vue
+++ b/src/components/chat/chatComponents/summaryCom/components/recordSetTable/map/LayerControl.vue
@@ -14,7 +14,6 @@
 				:style="layerControlCardStyle"
 				@mousedown="startDrag"
 			>
-
 				<el-icon class="absolute top-2 right-2 cursor-pointer z-10" @click="closePanel">
 					<Close />
 				</el-icon>
@@ -27,13 +26,31 @@
 					<el-tab-pane label="搴曞浘" name="components"
 						><div class="flex flex-col gap-2">
 							<el-radio-group v-model="activeSourceType" class="flex flex-col gap-2" @change="changeSourceType">
-								<el-radio class="w-full mr-0" v-for="item in Object.keys(gaoDeSourceTypeMap)" :key="item" :label="parseInt(item)">
+								<el-radio class="w-full mr-0" v-for="item in layerList" :key="item" :label="item">
 									<span>{{ gaoDeSourceTypeMap[item] }}</span>
 								</el-radio>
 							</el-radio-group>
 						</div></el-tab-pane
 					>
-					<el-tab-pane label="瑕嗙洊灞�" name="overlays">
+					<el-tab-pane label="瑕嗙洊鐗�" name="overlays">
+						<el-tree
+							class="w-full"
+							:data="treeData"
+							:props="defaultProps"
+							show-checkbox
+							node-key="id"
+							default-expand-all
+							:filter-node-method="filterNode"
+							ref="overlayTreeRef"
+							@check="handleCheck"
+							@node-click="handleNodeClick"
+						>
+							<template #default="{ node, data }">
+								<span>{{ node.label }}</span>
+							</template>
+						</el-tree>
+					</el-tab-pane>
+					<!-- <el-tab-pane label="瑕嗙洊灞�" name="overlays">
 						<el-tree
 							class="w-full"
 							:data="treeData"
@@ -49,7 +66,7 @@
 								<span>{{ node.label }}</span>
 							</template>
 						</el-tree>
-					</el-tab-pane>
+					</el-tab-pane> -->
 				</el-tabs>
 			</el-card>
 		</div>
@@ -57,48 +74,94 @@
 </template>
 
 <script setup lang="ts">
-import { Close, Folder, FolderOpened, Search } from '@element-plus/icons-vue';
-import { onMounted, ref, watch } from 'vue';
-import { useDrag } from '/@/hooks/useDrag';
-import type { GaoDeSourceType, OLMap } from '/@/model/map/OLMap';
-import { gaoDeSourceTypeMap } from '/@/model/map/OLMap';
+import { Close } from '@element-plus/icons-vue';
 import { ElTree } from 'element-plus';
+import { computed, onMounted, ref, watch } from 'vue';
+import { useDrag } from '/@/hooks/useDrag';
+import type { OLMap } from '/@/model/map/OLMap';
+import { GaoDeSourceType, gaoDeSourceTypeMap, OverlayType } from '/@/model/map/OLMap';
+import { sleep } from '/@/utils/util';
 const searchText = ref('');
 const activeTab = ref('components');
 const treeRef = ref();
-
+const layerList = [GaoDeSourceType.Vector, GaoDeSourceType.Satellite, GaoDeSourceType.SatelliteRoad];
 const props = defineProps<{
 	olMap: OLMap;
 }>();
-
+enum ROOT_OVERLAY_TYPE {
+	Marker = 'marker',
+}
+type TreeData = {
+	id: string;
+	label: string;
+	checked?: boolean;
+	children?: TreeData[];
+};
 const activeSourceType = ref(props.olMap.activeSourceType);
 
 const changeSourceType = (val: GaoDeSourceType) => {
-	props.olMap.setSourceUrl(val);
+	props.olMap.applySourceType(val);
 };
 
 const overlayTreeRef = ref<InstanceType<typeof ElTree>>();
 
-const treeData = [
+const treeData = ref<TreeData[]>([
 	{
-		id: 1,
+		id: ROOT_OVERLAY_TYPE.Marker,
 		label: '璁惧',
-		checked: props.olMap.overlayIsVisible.value,
 	},
-];
+]);
 const initTreeChecked = () => {
-	treeData.forEach((item) => {
+	treeData.value.forEach((item) => {
 		if (item.checked) {
 			overlayTreeRef.value?.setCheckedKeys([item.id]);
 		}
 	});
 };
-const handleCheck = (data: any, node: any) => {
-	const checkedKeys = node.checkedKeys;
-	const isVisible = checkedKeys.includes(1);
-	props.olMap.toggleMarkerOverlayVisible(isVisible);
+
+const setTreeChecked = (checked: boolean) => {
+	treeData.value.forEach((item) => {
+		if (checked) {
+			overlayTreeRef.value?.setCheckedKeys([ROOT_OVERLAY_TYPE.Marker]);
+		} else {
+			overlayTreeRef.value?.setCheckedKeys([]);
+		}
+	});
 };
 
+let isHumanCheckTrigger = false;
+
+
+const handleNodeClick = (data: any, node: any) => {
+	if (data.id === ROOT_OVERLAY_TYPE.Marker) {
+		props.olMap.adjustViewToMarkers();
+	}
+};
+
+const iniTreeData = async () => {
+	await sleep(0.4);
+	const foundMarker = treeData.value.find((item) => item.id === ROOT_OVERLAY_TYPE.Marker);
+	if (!foundMarker) {
+		return;
+	}
+	foundMarker.children = props.olMap.map
+		.getOverlays()
+		.getArray()
+		.map((item) => {
+			const extData = item.get('extData');
+			return {
+				id: item.getId() as string,
+				label: extData?.name,
+				// checked: item.getVisible(),
+			};
+		});
+};
+const handleCheck = (data: any, node: any) => {
+	const checkedKeys = node.checkedKeys;
+	isHumanCheckTrigger = true;
+	const isVisible = checkedKeys.includes(ROOT_OVERLAY_TYPE.Marker);
+	props.olMap.toggleMarkerOverlayVisible(isVisible);
+};
 
 const layerControlCard = ref<HTMLDivElement>(null);
 
@@ -126,8 +189,10 @@
 	treeRef.value?.filter(val);
 });
 onMounted(() => {
-
 	initTreeChecked();
+	// iniTreeData();
+	// window.olMap = props.olMap;
+	// window.map = props.olMap.map;
 });
 defineEmits(['close']);
 </script>
@@ -163,4 +228,8 @@
 :deep(.el-card) {
 	cursor: inherit;
 }
+
+:deep(.el-tree-node__expand-icon.is-leaf) {
+	display: none;
+}
 </style>

--
Gitblit v1.9.3