管道基础大数据平台系统开发-【前端】-新系統界面
Surpriseplus
2023-03-22 3f3adb45c6c8c37567122dd9e361f14d88516b3b
综合展示图层管理页面及数据加载优化
已修改4个文件
387 ■■■■ 文件已修改
src/api/api.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/preview_map.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/Synthesis/LeftMenu.vue 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/Tools/LayerTree.vue 369 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/api.js
@@ -1106,4 +1106,8 @@
  return service.post('/publish/insertForPub', params);
}
//综合展示 => 根据ID查询发布清单
export function comprehensive_selectPubById(params) {
  return service.get('/comprehensive/selectPubById', { params: params });
}
src/components/preview_map.vue
@@ -86,7 +86,7 @@
          Viewer.imageryLayers.removeAll();
          var url = res.url.split(';')
          console.log(url)
          sgworld.Creator.createImageryProvider('mpt影像', "wms", {
            url: url[0],
src/views/Synthesis/LeftMenu.vue
@@ -2256,6 +2256,7 @@
      });
    },
    setAddLayers(res) {
      this.setClearWmsLayer()
      var std = [[]];
      for (var i in res) {
        switch (res[i].serveType) {
@@ -2268,8 +2269,7 @@
        this.setAddWmsLayer(std[0])
      }
    },
    setAddWmsLayer(res) {
    setClearWmsLayer() {
      for (var i = 0; i < window.Viewer.imageryLayers._layers.length; i++) {
        var val_id = window.Viewer.imageryLayers._layers[i].imageryProvider.name;
        if (val_id == "Wms_Layer") {
@@ -2285,10 +2285,15 @@
          window.map.removeLayer(layers_ol[i]); //显示图层
        }
      }
    },
    setAddWmsLayer(res) {
      var url = [];
      for (var i in res) {
        url.push(res[i].url)
        if (res[i].url) {
          url.push(res[i].url)
        }
      }
      url = url.reverse();
      var that = this;
      var getFeatureInfoFormat = new Cesium.GetFeatureInfoFormat("html", null, function (html) {
@@ -2707,6 +2712,7 @@
      }
    });
    this.$bus.$on("showMenuLayer", ((res) => {
      this.setAddLayers(res);
    }));
    this.$store.state.showAllLayers = true;
src/views/Tools/LayerTree.vue
@@ -14,7 +14,7 @@
      :props="defaultProps"
      @node-click="handleLeftclick"
      @node-contextmenu="rightClick"
      @check-change="handleCheckChange"
      @check="handleCheckChange"
      :default-checked-keys="handleTreeCheck"
      :expand-on-click-node="false"
      :filter-node-method="filterNode"
@@ -185,7 +185,7 @@
import View from "ol/View.js";
import { Fill, Stroke, Style } from "ol/style.js";
import { perms_selectLayers, inquiry_selectDomains } from "../../api/api.js";
import { perms_selectLayers, inquiry_selectDomains, comprehensive_selectPubById } from "../../api/api.js";
export default {
  name: "tree",
  components: { queryinfo },
@@ -232,6 +232,8 @@
          label: "WFS",
        },
      ],
      childOption: [],
      mptLayer: [],
    };
  },
  methods: {
@@ -501,69 +503,105 @@
      console.log("tree drop: ", dropNode.label, dropType);
    },
    handleCheckChange(data, checked, indeterminate) {
      if (data.type == 1) {
        this.childOption = [];
        this.getchilds(data);
        var listWMS = [];
        var listWFS = [];
        var listTileset = [];
        var listTMS = [];
        var listMpt = [];
        for (var i in this.childOption) {
          switch (this.childOption[i].serveType) {
            case 'WMS':
              listWMS.push(this.childOption[i])
              break;
            case 'WFS':
              listWFS.push(this.childOption[i])
              break;
            case 'Tileset':
              listTileset.push(this.childOption[i])
              break;
            case 'Mpt':
              listMpt.push(this.childOption[i])
              break;
            case 'TMS':
              listTMS.push(this.childOption[i])
              break;
      if (data.type != 2) return;
      var value = this.$refs.tree.getCheckedNodes();
      this.$bus.$emit("showMenuLayer", value);
      if (data.serveType == "WFS") {
        if (window.Viewer.dataSources._dataSources.length == 0) {
          this.setAddLayers(data);
        } else {
          for (var i in window.Viewer.dataSources._dataSources) {
            if (window.Viewer.dataSources._dataSources[i].name == data.cnName) {
              window.Viewer.dataSources._dataSources[i].show = checked;
              std.push(data.label);
            }
          }
        }
      } else if (data.serveType == "Tileset") {
        if (Viewer.scene.primitives._primitives.length == 0) {
          this.setAddLayers(data);
        } else {
          var std = [];
          for (var i in Viewer.scene.primitives._primitives) {
            Viewer.scene.primitives._primitives[i].show = checked;
            if (Viewer.scene.primitives._primitives[i].id == data.cnName) {
              std.push(data.id);
              Viewer.flyTo(Viewer.scene.primitives._primitives[i]);
            }
          }
        this.setChangeWMS(listWMS, checked);
        this.setChangeWFS(listWFS, checked);
        this.setChangeTileset(listTileset, checked);
        this.setChangeTMS(listTMS, checked);
        this.setChangeMpt(listMpt, checked);
      } else if (data.type == 2) {
        if (data.serveType == "WMS") {
          this.setChangeWMS([data], checked);
        } else if (data.serveType == "Tileset") {
          this.setChangeTileset([data], checked);
        } else if (data.serveType == "TMS") {
          this.setChangeTMS([data], checked);
        } else if (data.serveType == "Mpt") {
          this.setChangeMpt([data], checked);
        }
        if (std.length == 0 && checked == true) {
          this.setAddLayers(data);
        } else {
          window.map.getLayers().getArray().forEach(item => {
            if (item.get("name") == data.cnName) {
              item.setVisible(checked);
            }
          });
        }
      } else if (data.serveType == "TMS") {
        debugger
        if (data.pubid) {
          debugger
        } else {
          var res;
          if (data.url.indexOf("{host}") != -1) {
            res = data.url.replace("{host}", iisHost);
          } else {
            res = data.url
          }
          var url = res.split(';')
          debugger
          window.sgworld.Creator.createImageryProvider('mpt影像', "wms", {
            url: url[0],
            layers: url[1]
          }, "0", undefined, true, "");
        }
      }
      // if (data.type != 2) return;
      // if (data.serveType == "WFS") {
      //   if (window.Viewer.dataSources._dataSources.length == 0) {
      //     this.setAddLayers(data);
      //   } else {
      //   }
      // } else if (data.serveType == "Tileset") {
      //   if (Viewer.scene.primitives._primitives.length == 0) {
      //     this.setAddLayers(data);
      //   } else {
      //     var std = [];
      //     for (var i in Viewer.scene.primitives._primitives) {
      //       Viewer.scene.primitives._primitives[i].show = checked;
      //       if (Viewer.scene.primitives._primitives[i].id == data.cnName) {
      //         std.push(data.id);
      //         Viewer.flyTo(Viewer.scene.primitives._primitives[i]);
      //       }
      //     }
      //   }
      //   if (std.length == 0 && checked == true) {
      //     this.setAddLayers(data);
      //   } else {
      //     window.map.getLayers().getArray().forEach(item => {
      //       if (item.get("name") == data.cnName) {
      //         item.setVisible(checked);
      //       }
      //     });
      //   }
      // } else if (data.serveType == "TMS") {
      //   if (data.pubid) {
      //   } else {
      //     var res;
      //     if (data.url.indexOf("{host}") != -1) {
      //       res = data.url.replace("{host}", iisHost);
      //     } else {
      //       res = data.url
      //     }
      //     var url = res.split(';')
      //     window.sgworld.Creator.createImageryProvider('mpt影像', "wms", {
      //       url: url[0],
      //       layers: url[1]
      //     }, "0", undefined, true, "");
      //   }
      // }
@@ -576,7 +614,155 @@
      //   }
      // }
    },
    setChangeWMS(result, checked) {
      var value = this.$refs.tree.getCheckedNodes();
      this.$bus.$emit("showMenuLayer", value);
    },
    setChangeWFS(result, checked) {
      var value = this.$refs.tree.getCheckedNodes();
      var std = [];
      for (var i in value) {
        std.push(value[i].id)
      }
      for (var i in result) {
        var tile = result[i]
        if (std.indexOf(tile.id) != -1) {
          this.setAddLayers(tile)
        } else {
          for (var i in window.Viewer.dataSources._dataSources) {
            if (window.Viewer.dataSources._dataSources[i].name == tile.cnName) {
              window.Viewer.dataSources.remove(window.Viewer.dataSources._dataSources[i]);
            }
          }
          var layers_ol = window.map.getAllLayers();
          for (var i in layers_ol) {
            var layerOl = layers_ol[i];
            if (layerOl.values_.name == tile.cnName) {
              window.map.removeLayer(layerOl)
            }
          }
        }
      }
    },
    setChangeTileset(result, checked) {
      var value = this.$refs.tree.getCheckedNodes();
      var std = [];
      for (var i in value) {
        std.push(value[i].id)
      }
      for (var i in result) {
        var tile = result[i]
        if (std.indexOf(tile.id) != -1) {
          this.setAddLayers(tile)
        } else {
          for (var j in Viewer.scene.primitives._primitives) {
            if (Viewer.scene.primitives._primitives[j].id == tile.cnName) {
              Viewer.scene.primitives.remove(Viewer.scene.primitives._primitives[j])
            }
          }
        }
      }
      // if (checked.checkedKeys) {
      //   for (var i in result) {
      //
      //   }
      // } else {
      //   for (var j in result) {
      //     console.log(result[j])
      //     //
      //   }
      // }
    },
    setChangeMpt(result, checked) {
      var value = this.$refs.tree.getCheckedNodes();
      var std = [];
      for (var i in value) {
        std.push(value[i].id)
      }
      for (var i in result) {
        var tile = result[i]
        if (std.indexOf(tile.id) != -1) {
          this.setAddLayers(tile)
        } else {
          for (var i in this.mptLayer) {
            if (this.mptLayer[i].treeobj.name == tile.cnName) {
              this.mptLayer[i].deleteObject();
              this.mptLayer.splice(i, 1)
            }
          }
        }
      }
    },
    setChangeTMS(result, checked) {
      var value = this.$refs.tree.getCheckedNodes();
      var std = [];
      for (var i in value) {
        std.push(value[i].id)
      }
      for (var i in result) {
        var tile = result[i]
        if (std.indexOf(tile.id) != -1) {
          this.setAddLayers(tile)
        } else {
          for (var i = 0; i < window.Viewer.imageryLayers._layers.length; i++) {
            var val_id = window.Viewer.imageryLayers._layers[i].name;
            if (val_id == tile.cnName) {
              window.Viewer.imageryLayers.remove(
                window.Viewer.imageryLayers._layers[i]
              );
            }
          }
        }
      }
    },
    getchilds(source) {
      if (source.children) {
        var child = source.children
        for (var i in child) {
          if (child[i].children) {
            this.getchilds(child[i])
          } else {
            this.childOption.push(child[i])
          }
        }
      } else {
        this.childOption.push(source)
      }
      // let cloneData = JSON.parse(JSON.stringify(source)); // 对源数据深度克隆
      // var std = [];
      // if (cloneData.children) {
      //   var child = cloneData.children;
      //   child.filter((father) => {
      //     if (father.children) {
      //       father.father
      //     } else {
      //     }
      //   })
      // }
      // cloneData.filter((father) => {
      //   // 循环所有项
      //   console.log(father)
      //   // let branchArr = cloneData.filter((child) => father.id == child.pid); // 对比ID,分别上下级菜单,并返回数据
      //   // branchArr.length > 0 ? (father.children = branchArr) : ""; // 给父级添加一个children属性,并赋值
      //   // // 属于同一对象问题,例如:令 a=b、c=1 ,然后再令 b.c=c , 那么 a.c=b.c=c=1 ;同理,后续令 c.d=2 ,那么 a.c.d 也是=2;
      //   // // 由此循环多次后,就能形成相应的树形数据结构
      //   // return father.pid == 0; // 返回一级菜单
      // });
    },
    setAddLayers(res) {
      if (res.serveType == "WMS") {
        var resource = geoServerURl;
        if (res.resource != null && res.resource != undefined) {
@@ -677,9 +863,70 @@
          Viewer.flyTo(tileset);
        });
        window.model = tileset
      } else if (res.serveType == "TMS") {
        var url = res.url;
        if (res.url.indexOf("{host}") != -1) {
          url = res.url.replace("{host}", iisHost);
        }
        if (res.pubid) {
          this.setQueryPubid(res);
        } else {
          var layer = Viewer.imageryLayers.addImageryProvider(
            new Cesium.UrlTemplateImageryProvider({
              url: url,
              maximumLevel: 18,
            })
          );
          layer.name = res.cnName;
          this.setChangeWMS();
        }
      } else if (res.serveType == "Mpt") {
        if (res.url.indexOf("{host}") != -1) {
          res.url = res.url.replace("{host}", iisHost);
        }
        var url = res.url.split(';')
        var layer = sgworld.Creator.createImageryProvider(res.cnName, "wms", {
          url: url[0],
          layers: url[1]
        }, "0", undefined, true, "");
        this.mptLayer.push(layer)
        setTimeout(() => {
          this.setChangeWMS();
        }, 500);
      }
    },
    async setQueryPubid(res) {
      const data = await comprehensive_selectPubById({ id: res.pubid })
      if (data.code != 200) {
      } else {
        var url = data.result.url;
        if (res.url.indexOf("{host}") != -1) {
          url = res.url.replace("{host}", iisHost);
        }
        var layer = Viewer.imageryLayers.addImageryProvider(
          new Cesium.UrlTemplateImageryProvider({
            url: url,
            maximumLevel: 18,
          })
        );
        layer.name = res.cnName;
        if (data.result.geom) {
          var wkt = this.$wkt.parse(data.result.geom);
          Viewer.camera.flyTo({
            destination: Cesium.Cartesian3.fromDegrees(wkt.coordinates[1], wkt.coordinates[0], 2000),
          });
        }
        this.setChangeWMS();
      }
    },
    tileSet(tileset, height) {
      //3dtile模型的边界球体