From eb5a5c24c25de74c828ac8d445105f10a8e47cc7 Mon Sep 17 00:00:00 2001
From: wangjuncheng <1>
Date: 星期一, 21 四月 2025 17:00:04 +0800
Subject: [PATCH] change

---
 src/components/tools/LayerTree.vue |  288 ++++++++++++++++++++++++++++++++-------------------------
 1 files changed, 163 insertions(+), 125 deletions(-)

diff --git a/src/components/tools/LayerTree.vue b/src/components/tools/LayerTree.vue
index 6105ceb..fa787b1 100644
--- a/src/components/tools/LayerTree.vue
+++ b/src/components/tools/LayerTree.vue
@@ -1,69 +1,143 @@
 <template>
   <div class="layer-tree">
-    <el-tree ref="treeRef" style="max-width: 600px" show-checkbox 
-      :default-checked-keys="defaultSelectedKeys" @check-change="handleCheckChange" :data="treeData" />
+    <el-tree
+      ref="treeRef"
+      style="max-width: 600px"
+      show-checkbox
+      node-key="label"
+      :default-checked-keys="defaultSelectedKeys"
+      @check-change="handleCheckChange"
+      :data="treeData"
+    />
   </div>
 </template>
 
 <script setup>
-import { ref, onMounted, onBeforeUnmount, watch, onUnmounted } from "vue";
+import { ref, onMounted, watch, nextTick,onUnmounted } from "vue";
 import { createPoint, removeEntities, addTileset } from "@/utils/map";
 import { deviceDictList, getDictName } from "@/constant/dict.js";
 import { useRoute } from "vue-router";
 import { loadAreaPolygon, clearAreaPolygon } from "@/utils/area";
 import { checkedKeys } from "@/store/index";
 import { getDuanMainData, getDevicetListData, getDistrictListData } from "@/api/index.js";
+
 const route = useRoute();
+
+// 鏍戝舰缁撴瀯鏁版嵁
 const treeData = ref([
   {
     label: "涓夌淮鏈嶅姟",
     children: [
       { label: "妯″瀷鏁版嵁" },
-      { label: "鍦板舰鏁版嵁" },
+      { label: "鍦板舰鏁版嵁" }, // 纭繚杩欓噷鐨� label 鏄� "鍦板舰鏁版嵁"
       { label: "褰卞儚鏁版嵁" },
     ],
   },
   {
     label: "鍥惧眰鏁版嵁",
     children: [
-      {
-        label: "鍖椾含甯傞殣鎮g偣",
-      },
-      {
-        label: "瀛欒儭娌熼殣鎮g偣",
-      },
-      // {
-      // 	label: "娉ョ煶娴侀殣鎮g偣闈㈡暟鎹�",
-      // },
-      {
-        label: "缁煎悎鐩戞祴璁惧淇℃伅",
-      },
-      {
-        label: "瀛欒儭娌熸柇闈�",
-      },
-      {
-        label: "閬块櫓鐐�",
-      },
+      { label: "鍖椾含甯傞殣鎮g偣" },
+      { label: "瀛欒儭娌熼殣鎮g偣" },
+      { label: "缁煎悎鐩戞祴璁惧淇℃伅" },
+      { label: "瀛欒儭娌熸柇闈�" },
+      { label: "閬块櫓鐐�" },
     ],
   },
 ]);
+
+// 榛樿閫変腑鐨勮妭鐐�
+const defaultSelectedKeys = ref(["鍦板舰鏁版嵁"]); // 纭繚涓� treeData 鐨� label 瀹屽叏鍖归厤
+
+// Tree 瀹炰緥寮曠敤
 const treeRef = ref(null);
+
+// 瀛樺偍鍥惧眰瀹炰綋鐨� Map
 const treeMap = new Map();
-const defaultSelectedKeys = ref(["妯″瀷鏁版嵁", "褰卞儚鏁版嵁", "鍦板舰鏁版嵁"]);
+
+/**
+ * 鍒濆鍖栧湴鍥�
+ */
+function initMap() {
+  // 鍒濆鍖栧湴褰㈡暟鎹�
+  let TerrainLayer = earthCtrl.factory.createTerrainLayer({
+    sourceType: "ctb",
+    url: "http://106.120.22.26:9103/gisserver/ctsserver/sungugoudem",
+  });
+  treeMap.set("鍦板舰鏁版嵁", TerrainLayer);
+    // 鍒濆鍖栨ā鍨嬫暟鎹�
+  // let modelPromise = addTileset(
+  //   "http://106.120.22.26:9103/gisserver/c3dserver/sunhugou3d/tileset.json"
+  // );
+  // modelPromise.then((model) => {
+  //   treeMap.set("妯″瀷鏁版嵁", model);
+  // });
+
+  // 鍒濆鍖栧奖鍍忔暟鎹�
+  // let ImageryLayer = earthCtrl.factory.createImageryLayer({
+  //   sourceType: "tms",
+  //   url: "http://106.120.22.26:9103/gisserver/tmsserver/sunhugoudom",
+  // });
+  // treeMap.set("褰卞儚鏁版嵁", ImageryLayer);
+}
+
+/**
+ * 澶勭悊澶嶉�夋鐘舵�佸彉鍖�
+ */
 function handleCheckChange(data, checked, indeterminate) {
   const label = data.label;
-  const list = treeMap.get(label);
+  if (label === "褰卞儚鏁版嵁") {
+    if (checked) {
+      // 鍔犺浇褰卞儚鏁版嵁
+      console.log("寮�濮嬪姞杞藉奖鍍忔暟鎹�...");
+      let ImageryLayer = earthCtrl.factory.createImageryLayer({
+        sourceType: "tms",
+        url: "http://106.120.22.26:9103/gisserver/tmsserver/sunhugoudom",
+      });
+      treeMap.set("褰卞儚鏁版嵁", ImageryLayer);
+      toggleLayerVisible("褰卞儚鏁版嵁", true); // 鏄剧ず褰卞儚鏁版嵁
+    } else {
+      // 绉婚櫎褰卞儚鏁版嵁
+      const layer = treeMap.get("褰卞儚鏁版嵁");
+      if (layer) {
+        toggleLayerVisible("褰卞儚鏁版嵁", false); // 闅愯棌褰卞儚鏁版嵁
+        ImageryLayer.removeFromMap(); // 浠� Map 涓Щ闄�
+        console.log("褰卞儚鏁版嵁宸茬Щ闄�");
+      }
+    }
+    return;
+  }
+  if (label === "妯″瀷鏁版嵁") {
+    if (checked) {
+      // 鍔ㄦ�佸姞杞芥ā鍨嬫暟鎹�
+      console.log("寮�濮嬪姞杞芥ā鍨嬫暟鎹�...");
+      let modelPromise = addTileset(
+        "http://106.120.22.26:9103/gisserver/c3dserver/sunhugou3d/tileset.json"
+      );
 
+      modelPromise.then((model) => {
+        console.log("妯″瀷鏁版嵁鍔犺浇瀹屾垚");
+        treeMap.set("妯″瀷鏁版嵁", model); // 灏嗘ā鍨嬫暟鎹瓨鍌ㄥ埌 treeMap
+        toggleLayerVisible("妯″瀷鏁版嵁", true); // 鏄剧ず妯″瀷鏁版嵁
+      }).catch((error) => {
+        console.error("妯″瀷鏁版嵁鍔犺浇澶辫触:", error);
+      });
+    } else {
+      // 闅愯棌妯″瀷鏁版嵁
+      toggleLayerVisible("妯″瀷鏁版嵁", false);
+    }
+    return;
+  }
+
+  // 鍏朵粬鍥惧眰鐨勫鐞嗛�昏緫
+  const list = treeMap.get(label);
   if (list) {
     toggleLayerVisible(label, checked);
     return;
   }
+
   switch (label) {
-    case "妯″瀷鏁版嵁":
     case "褰卞儚鏁版嵁":
     case "鍦板舰鏁版嵁":
-      console.warn(`鏈垵濮嬪寲 ${label} 鐨勫浘灞俙);
-      break;
     case "鍖椾含甯傞殣鎮g偣":
     case "瀛欒儭娌熼殣鎮g偣":
     case "娉ョ煶娴侀殣鎮g偣闈㈡暟鎹�":
@@ -74,35 +148,39 @@
       break;
   }
 }
-function initMap() {
-  // 鍒濆鍖栨ā鍨嬫暟鎹�
-  let modelPromise = addTileset(
-    "http://106.120.22.26:9103/gisserver/c3dserver/sunhugou3d/tileset.json"
-  );
-  modelPromise.then((model) => {
-    treeMap.set("妯″瀷鏁版嵁", model);
-  });
 
-  // 鍒濆鍖栧奖鍍忔暟鎹�
-  // let ImageryLayer = earthCtrl.factory.createImageryLayer({
-  //   sourceType: "tms",
-  //   url: "http://106.120.22.26:9103/gisserver/tmsserver/sunhugoudom",
-  // });
-  // treeMap.set("褰卞儚鏁版嵁", ImageryLayer);
+/**
+ * 鍒囨崲鍥惧眰鍙鎬�
+ */
+function toggleLayerVisible(name, checked) {
+  const entityList = treeMap.get(name);
 
-  // 鍒濆鍖栧湴褰㈡暟鎹�
-  // let TerrainLayer = earthCtrl.factory.createTerrainLayer({
-  //   sourceType: "ctb",
-  //   url: "http://106.120.22.26:9103/gisserver/ctsserver/sungugoudem",
-  // });
-  // treeMap.set("鍦板舰鏁版嵁", TerrainLayer);
+  console.log(`Toggling visibility for ${name}:`, checked);
+
+  if (Array.isArray(entityList)) {
+    entityList.forEach((entity) => {
+      console.log(`Setting entity show to:`, checked);
+      entity.show = checked;
+    });
+  } else if (entityList && typeof entityList.show !== 'undefined') {
+    console.log(`Setting layer show to:`, checked);
+    entityList.show = checked;
+  } else {
+    console.error(`鏃犳硶璁剧疆鍥惧眰 ${name} 鐨勫彲瑙佹�);
+  }
 }
+
+// 璁惧鍒楄〃
 const devicetList = ref([]);
+
+/**
+ * 鑾峰彇璁惧鍒楄〃骞跺垵濮嬪寲璁惧鐐�
+ */
 const getDevicetList = async () => {
   await getDevicetListData().then((res) => {
     console.log(res.data, 'devicetList.value2');
     devicetList.value = res.data;
-  })
+  });
 };
 
 async function initDevicePoint() {
@@ -122,15 +200,21 @@
   treeMap.set("缁煎悎鐩戞祴璁惧淇℃伅", list);
 }
 
+// 鍖哄煙鍒楄〃
 const districtList = ref([]);
+
+/**
+ * 鑾峰彇鍖哄煙鍒楄〃骞跺垵濮嬪寲鍖哄煙鐐�
+ */
 const getDistrictList = async () => {
   await getDistrictListData().then((res) => {
     districtList.value = res.data;
-  })
+  });
 };
+
 async function initDistrictPoint() {
   let list = [];
-  await getDistrictList()
+  await getDistrictList();
   districtList.value.forEach((item) => {
     item.showBillboard = true;
     item.className = "district";
@@ -144,6 +228,9 @@
 
 let divPointList = [];
 
+/**
+ * 鍒濆鍖栨柇闈㈢偣
+ */
 function initDuanmianPoint() {
   getDuanMainData().then((res) => {
     const duanmianList = res.data;
@@ -159,96 +246,41 @@
       const entity = createPoint(item);
       entity.show = false;
       list.push(entity);
-      return;
-      const divPoint = earthCtrl.factory.createDivPoint(
-        item.alias,
-        { lon: longitude, lat: latitude },
-        {
-          type: "custom",
-          offset: ["c", 60],
-          description: `
-			<div class="divPoint-custom">
-				<p>${item.alias}</p>
-			</div>
-		  `,
-          near: 0,
-          far: 500000,
-        }
-      );
-      divPoint.item.show = false;
-      console.log(divPoint);
-
-      divPointList.push(divPoint.item);
     });
     treeMap.set("瀛欒儭娌熸柇闈�", list);
   });
 }
 
+/**
+ * 娣诲姞閬块櫓鐐�
+ */
 function addTetrahedron(visible) {
   const emergencyAreaList = [];
-  //  杩欓噷鏄坊鍔犻伩闄╃偣搴曞眰闈㈢墖
+  // 鍔犺浇閬块櫓鐐瑰簳灞傞潰鐗�
   loadAreaPolygon("/json/emergency_area.geojson", true).then((entities) => {
     emergencyAreaList.push(...entities);
-  });
-  // console.log('polygon', polygon);
 
-  let list = [
-    {
-      name: "灏瑰缓鍗庡",
-      longitude: 116.593517,
-      latitude: 40.568391,
-      altitude: 528.45,
-    },
-    // {
-    //   name: "鑼冩尟姹熷",
-    //   longitude: 116.591059,
-    //   latitude: 40.574068,
-    //   altitude: 528,
-    // },
-    // {
-    //   name: "鍚庡潯",
-    //   longitude: 116.597975,
-    //   latitude: 40.558199,
-    //   altitude: 528,
-    // },
-  ];
-  // 杩欓噷鏄坊鍔犻伩闄╃偣瀵屾枃鏈珮浜樉绀�
-  list.forEach((item) => {
-    let point = earthCtrl.factory.createRichTextPoint("閬块櫓鐐�", [item.longitude, item.latitude, item.altitude - 10], {
-      distanceDisplayCondition: new SmartEarth.Cesium.DistanceDisplayCondition(0, 2000),
-      fontColor: "#ffffff",
-      fontSize: 20
-    }, "0");
-    console.log("point", point);
-    emergencyAreaList.push(point);
-  });
-  treeMap.set("閬块櫓鐐�", emergencyAreaList);
-}
-function toggleLayerVisible(name, checked) {
-  const entityList = treeMap.get(name);
-
-  console.log(`Toggling visibility for ${name}:`, checked);
-
-  if (Array.isArray(entityList)) {
-    entityList.forEach((entity) => {
-      console.log(`Setting entity show to:`, checked);
-      entity.show = checked;
+    // 榛樿闅愯棌閬块櫓鐐�
+    entities.forEach((entity) => {
+      entity.show = false;
     });
-  } else if (entityList && typeof entityList.show !== 'undefined') {
-    console.log(`Setting layer show to:`, checked);
-    entityList.show = checked;
-  } else {
-    console.error(`鏃犳硶璁剧疆鍥惧眰 ${name} 鐨勫彲瑙佹�);
-  }
+
+    // 灏嗛伩闄╃偣瀹炰綋瀛樺偍鍒� treeMap
+    treeMap.set("閬块櫓鐐�", entities);
+  });
 }
 
+/**
+ * 鍒濆鍖栨墍鏈夋暟鎹�
+ */
 function getData() {
   initDevicePoint();
   initDistrictPoint();
   initDuanmianPoint();
+  addTetrahedron();
 }
 
-// 閫氳繃 store 浼犻�掗渶瑕侀�変腑鐨刱ey
+// 鐩戝惉 store 涓殑 checkedKeys 鍙樺寲
 watch(
   () => checkedKeys.value,
   (keys) => {
@@ -261,6 +293,7 @@
   }
 );
 
+// 鐩戝惉璺敱鍙樺寲
 watch(
   () => route.fullPath,
   (path) => {
@@ -291,10 +324,18 @@
     }
   }
 );
+
+// 缁勪欢鎸傝浇鏃跺垵濮嬪寲
 onMounted(() => {
   initMap();
   getData();
+  nextTick(() => {
+    // 纭繚鏍戠粍浠舵覆鏌撳畬鎴愬悗璁剧疆榛樿閫変腑椤�
+    treeRef.value.setCheckedKeys(defaultSelectedKeys.value, true);
+  });
 });
+
+// 缁勪欢鍗歌浇鏃舵竻鐞嗚祫婧�
 onUnmounted(() => {
   viewer.entities.removeAll();
 });
@@ -302,12 +343,9 @@
 
 <style lang="less" scoped>
 .layer-tree {
-  // position: absolute;
-  // top: 11%;
-  // right: 25%;
   background: url("@/assets/img/tools/plotting_new.png");
   width: 200px;
   height: 200px;
   z-index: 99;
 }
-</style>
+</style>
\ No newline at end of file

--
Gitblit v1.9.3