From b4c7dc1ef3dba0aafca28993a27621d0d3ed6080 Mon Sep 17 00:00:00 2001
From: 13693261870 <252740454@qq.com>
Date: 星期六, 27 五月 2023 16:13:33 +0800
Subject: [PATCH] 1

---
 src/views/Tools/LayerTree.vue |  259 +++++++++++++--------------------------------------
 1 files changed, 66 insertions(+), 193 deletions(-)

diff --git a/src/views/Tools/LayerTree.vue b/src/views/Tools/LayerTree.vue
index f3f60e3..d1577b4 100644
--- a/src/views/Tools/LayerTree.vue
+++ b/src/views/Tools/LayerTree.vue
@@ -81,8 +81,6 @@
 </template>
 
 <script>
-import ImageWMS from "ol/source/ImageWMS";
-import Image from "ol/layer/Image";
 import GeoJSON from "ol/format/GeoJSON.js";
 import queryinfo from "./queryinfo.vue";
 import { Vector as VectorSource } from "ol/source";
@@ -95,6 +93,7 @@
   data () {
     return {
       isBusy: false, // 姝e繖
+      lastPrjCode: "", // 鏈�鍚庨�夋嫨椤圭洰缂栫爜
       showProp: false, // 灞炴��
       shwoHistogram: false, // 閽诲瓟鏌辩姸鍥�
       showLocal: false, // 瀹氫綅
@@ -131,7 +130,7 @@
     },
   },
   mounted () {
-    this.getMenus()
+    this.getMenus();
     this.$bus.$on("treeDataCopy", (res) => {
       this.$store.state.treeData = this.treeData;
       this.$store.state.checkedKeys = this.$refs.tree.getCheckedKeys();
@@ -455,15 +454,15 @@
     addTMSLayers (layers) {
       for (let i in layers) {
         let res = layers[i];
-        let url = res.url.indexOf("{host}") > -1 ? res.url.replace("{host}", iisHost) : res.url;
+        res.url = res.url.indexOf("{host}") > -1 ? res.url.replace("{host}", iisHost) : res.url;
 
         if (res.pubid) {
-          this.setQueryPubid(res);
+          this.setTMSLayerByPubid(res);
           continue;
         }
 
         let layer = Viewer.imageryLayers.addImageryProvider(new Cesium.UrlTemplateImageryProvider({
-          url: url,
+          url: res.url,
           maximumLevel: 22,
         }));
         layer.id = res.id;
@@ -572,208 +571,82 @@
       tileset._root.transform = matrix;
       // Viewer.flyTo(tileset);
     },
-    async setQueryPubid (res) {
-      const data = await comprehensive_selectPubById({ id: res.pubid })
-      if (data.code != 200) {
-        //
-      } else {
-        let url = data.result.url;
-        if (res.url.indexOf("{host}") != -1) {
-          url = res.url.replace("{host}", iisHost);
-        }
-        let min = data.result.min;
-        let max = data.result.max;
-        let layer;
-        if (max > 0) {
-          layer = Viewer.imageryLayers.addImageryProvider(
-            new Cesium.UrlTemplateImageryProvider({
-              url: url,
-              minimumLevel: min,
-              maximumLevel: max,
-            })
-          );
-        } else {
-          layer = Viewer.imageryLayers.addImageryProvider(
-            new Cesium.UrlTemplateImageryProvider({
-              url: url,
-              minimumLevel: min,
-            })
-          );
-        }
+    // 鏍规嵁Pubid璁剧疆TMS鍥惧眰
+    async setTMSLayerByPubid (res) {
+      const data = await comprehensive_selectPubById({ id: res.pubid });
+      if (!data || data.code != 200) return;
 
-        layer.name = res.cnName;
-        if (data.result.geom) {
-          // let wkt = this.$wkt.parse(data.result.geom);
-          // Viewer.camera.flyTo({
-          //   destination: Cesium.Cartesian3.fromDegrees(wkt.coordinates[1], wkt.coordinates[0], 2000),
-          // });
-        }
-        this.setChangeWMS();
-      }
+      let provider = data.result.max > 0 ?
+        new Cesium.UrlTemplateImageryProvider({
+          url: res.url,
+          minimumLevel: data.result.min,
+          maximumLevel: data.result.max
+        }) :
+        new Cesium.UrlTemplateImageryProvider({
+          url: res.url,
+          minimumLevel: data.result.min
+        });
+
+      let layer = Viewer.imageryLayers.addImageryProvider(provider);
+      layer.name = res.cnName;
+
+      // if (data.result.geom) {
+      //   let wkt = this.$wkt.parse(data.result.geom);
+      //   Viewer.camera.flyTo({
+      //     destination: Cesium.Cartesian3.fromDegrees(wkt.coordinates[1], wkt.coordinates[0], 2000)
+      //   });
+      // }
     },
     // 鍒囨崲椤圭洰
-    async prjChanged (res) {
+    prjChanged (code) {
+      this.$store.state.pigCode = code;
+      if (code) {
+        this.isBusy = true;
+        let checkedLayers = this.getCheckedLayersByCode(code);
 
-    },
-
-    async setproChange (res) {
-      if (res) {
-        this.setCheeckedLayer = this.$refs.tree.getCheckedKeys();
-        this.$store.state.pigCode = res;
-        let st_code = this.menus.filter(rs => {
-          if (rs.code == res) {
-            return rs
-          }
-        })
-
-        let val = this.$store.state.oldTree.filter(rs => {
-          if (rs.enName == st_code[0].code) {
-            return rs
-          }
-        })
-        this.removeAllLayer();
-        let obj = {
-          dirid: res,
-          pageIndex: 1,
-          pageSize: 10,
+        let checkedKeys = [];
+        for (let i in checkedLayers) {
+          checkedKeys.push(checkedLayers[i].id);
         }
 
-        const data = await project_selectByDirid(obj);
-        if (data.code != 200) {
-          this.$message.error("鍒楄〃鑾峰彇澶辫触");
-          return;
-        }
+        this.$refs.tree.setCheckedKeys(checkedKeys);
+        sessionStorage.setItem("checkedLayers", JSON.stringify(checkedLayers));
+        this.isBusy = false;
+      }
 
-        if (data.result[0]) {
-          let geom = data.result[0].geom
-          if (geom) {
-            let wkt = this.$wkt.parse(geom)
-            Viewer.camera.flyTo({
-              destination: Cesium.Cartesian3.fromDegrees(wkt.coordinates[0].toFixed(6), wkt.coordinates[1].toFixed(6), 5000),
-            });
-          }
-        }
-        //this.cannelTerrainLayer();
-        //this.setTerrainMptLayer();
-        //娓呯┖鍥惧眰鏍戦�変腑鐘舵��
-        this.$refs.tree.setCheckedKeys([]);
-        if (val.length > 0) {
-          if (val[0].type == 1 && val[0].isProject == 1) {//椤圭洰鍒嗙被
-            let std_check = [];
-            for (let i in val) {
-              let std_val = this.getNewTree([this.$refs.tree.getNode(val[i].id).data], [])
-              for (let j in std_val) {
-                std_check.push(std_val[j])
-              }
-            }
-            let value = this.$store.state.isProjectLayer;
-            for (let i in value) {
-
-              std_check.push(value[i])
-            }
-            this.setProjectLayer(std_check);
-          } else {
-            this.setChangeProLayer();
-          }
-        } else {
-          this.setChangeProLayer();
-        }
-      } else {
-        this.removeAllLayer();
-        this.$store.state.pigCode = null;
-        this.$refs.tree.setCheckedKeys(this.setCheeckedLayer);
-        let std = [];
-        for (let i in this.setCheeckedLayer) {
-          std.push(this.$refs.tree.getNode(this.setCheeckedLayer[i]).data)
-        }
-        this.setProjectLayer(std);
+      for (let i = 0, c = this.treeData.length; i < c; i++) {
+        this.handleCheckChange(this.treeData[i], true);
       }
     },
-    removeAllLayer () {
-      for (let j in Viewer.scene.primitives._primitives) {
-        Viewer.scene.primitives.remove(Viewer.scene.primitives._primitives[j])
+    // 鏍规嵁椤圭洰缂栫爜鑾峰彇閫変腑鍥惧眰
+    getCheckedLayersByCode (code) {
+      let layers = [];
+      for (let i = 0, c = this.treeData.length; i < c; i++) {
+        this.getCheckedChildLayersByCode(this.treeData[i], code, layers, false);
       }
-      for (let i in window.Viewer.dataSources._dataSources) {
-        window.Viewer.dataSources.remove(
-          window.Viewer.dataSources._dataSources[i]
-        );
-      }
-      for (let i = 0; i < window.Viewer.imageryLayers._layers.length; i++) {
-        let val_id = window.Viewer.imageryLayers._layers[i].id;
-        if (val_id == 'TMS') {
-          window.Viewer.imageryLayers.remove(
-            window.Viewer.imageryLayers._layers[i]
-          );
-        }
-      }
-      for (let i in this.mptLayer) {
-        this.mptLayer[i].deleteObject();
-        this.mptLayer.splice(i, 1)
-      }
-      this.mptLayer = [];
+
+      return layers;
     },
-    setProjectLayer (res) {
-      let layerid = [];
-      for (let j in res) {
-        layerid.push(res[j].id)
-      }
-      this.$refs.tree.setCheckedKeys(layerid);
-      // let value = this.$refs.tree.getCheckedNodes();
-      // this.$bus.$emit("showMenuLayer", value);
-      let listWMS = [];
-      let listWFS = [];
-      let listTileset = [];
-      let listTMS = [];
-      let listMpt = [];
-      for (let i in res) {
-        if (res[i].type == 2) {
-          switch (res[i].serveType) {
-            case 'WMS':
-              listWMS.push(res[i])
-              break;
-            case 'WFS':
-              listWFS.push(res[i])
-              break;
-            case '3DML':
-            case 'Tileset':
-              listTileset.push(res[i])
-              break;
-            case 'Mpt':
-              listMpt.push(res[i])
-              break;
-            case 'TMS':
-              listTMS.push(res[i])
-              break;
+    // 鏍规嵁椤圭洰缂栫爜鑾峰彇閫変腑瀛愬浘灞�
+    getCheckedChildLayersByCode (data, code, layers, isPrj) {
+      if (data.children && data.children.length) {
+        for (let i = 0, c = data.children.length; i < c; i++) {
+          let layer = data.children[i];
+          if (layer.children && layer.children.length) {
+            let flag = layer.type == 1 && layer.isProject && layer.enName == code;
+            this.getCheckedChildLayersByCode(layer, code, layers, flag);
+            continue;
+          }
+
+          if (layer.type == 2 && (layer.isProject || isPrj)) {
+            layers.push(layer);
           }
         }
+        return;
       }
-      // this.setChangeProLayer();
-      this.setChangeWMS(listWMS, true);
-      this.setChangeWFS(listWFS, true);
-      this.setChangeTileset(listTileset, true);
-      this.setChangeTMS(listTMS, true);
-      this.setChangeMpt(listMpt, true);
-    },
-    getNewTree (obj, result) {
-      for (const i in obj) {
-        console.log(obj[i].cnName)
-        result.push(obj[i])
-        if (obj[i].children && obj[i].children.length > 0) {
-          this.getNewTree(obj[i].children, result)
-        }
-      }
-      return result
-    },
-    setChangeProLayer () {
-      let value = this.$store.state.isProjectLayer;
-      if (value.length != 0) {
 
-        let std = [];
-        for (let i in value) {
-          std.push(value[i].id)
-        }
-        this.$refs.tree.setCheckedKeys(std);
-        this.$bus.$emit("showMenuLayer", value);
+      if (data.type == 2 && (data.isProject || isPrj)) {
+        layers.push(data);
       }
     },
     // 娣诲姞WFS鍥惧眰 *

--
Gitblit v1.9.3