管道基础大数据平台系统开发-【前端】-新系統界面
584911253@qq.com
2023-03-13 e78397cc852166314ad0eab66008fb090d798f4a
src/views/Tools/LayerTree.vue
@@ -17,6 +17,7 @@
      @check-change="handleCheckChange"
      :default-checked-keys="handleTreeCheck"
      :expand-on-click-node="false"
      :filter-node-method="filterNode"
    >
      <span
        class="slot-t-node"
@@ -47,16 +48,28 @@
      :style="{ ...rightClickMenuStyle }"
      v-show="menuVisible"
    >
      <div @click="addSameLevelNode()" v-show="firstLevel">
      <div
        @click="addSameLevelNode()"
        v-show="firstLevel"
      >
        <i class="el-icon-plus"></i>&nbsp;&nbsp;添加图层组
      </div>
      <div class="add" @click="addChildNode()">
      <div
        class="add"
        @click="addChildNode()"
      >
        <i class="el-icon-plus"></i>&nbsp;&nbsp;添加图层
      </div>
      <div class="delete" @click="deleteNode()">
      <div
        class="delete"
        @click="deleteNode()"
      >
        <i class="el-icon-delete"></i>&nbsp;&nbsp;删除
      </div>
      <div class="edit" @click="editNode()">
      <div
        class="edit"
        @click="editNode()"
      >
        <i class="el-icon-edit"></i>&nbsp;&nbsp;重命名
      </div>
      <div
@@ -67,9 +80,27 @@
      >
        <i class="el-icon-tickets"></i>&nbsp;&nbsp;属性
      </div>
      <div class="edit" @click="positioning()" v-show="showlocal">
      <div
        class="edit"
        @click="positioning()"
        v-show="showlocal"
      >
        <i class="el-icon-tickets"></i>&nbsp;&nbsp;定位
      </div>
      <div
        class="edit"
        @click="histogram()"
        v-show="shwoHistogram"
      >
        <i class="el-icon-tickets"></i>&nbsp;&nbsp;钻孔柱状图
      </div>
      <!-- <div
        class="edit"
        v-show="showModelAttach"
        @click="modelAttach()"
      >
        <i class="el-icon-tickets"></i>&nbsp;&nbsp;模型属性
      </div> -->
      <!-- <div
        class="edit"
        @click="menuMoveF( 'up')"
@@ -91,7 +122,11 @@
      :modal="false"
      :before-close="handleClose"
    >
      <el-form ref="form" :model="addFormServer" label-width="100px">
      <el-form
        ref="form"
        :model="addFormServer"
        label-width="100px"
      >
        <el-form-item label="服务类型">
          <!-- <el-input v-model="addFormServer.type"></el-input> -->
          <el-select
@@ -123,8 +158,14 @@
          <el-slider v-model="addFormServer.opacity"></el-slider>
        </el-form-item>
      </el-form>
      <span slot="footer" class="dialog-footer">
        <el-button type="primary" @click="setAddServer">确 定</el-button>
      <span
        slot="footer"
        class="dialog-footer"
      >
        <el-button
          type="primary"
          @click="setAddServer"
        >确 定</el-button>
      </span>
    </el-dialog>
    <queryinfo ref="queryinfo" />
@@ -143,12 +184,13 @@
import View from "ol/View.js";
import { Fill, Stroke, Style } from "ol/style.js";
import { perms_selectLayers } from "../../api/api.js";
import { perms_selectLayers, inquiry_selectDomains } from "../../api/api.js";
export default {
  name: "tree",
  components: { queryinfo },
  data() {
    return {
      shwoHistogram: false,
      showlocal: false,
      eleId: "",
      isShow: false,
@@ -162,6 +204,7 @@
      rightClickMenuStyle: {},
      handleTreeCheck: [],
      dialogVisible: false,
      showModelAttach: false,
      addFormServer: {
        opacity: 100,
        serveType: "WMS",
@@ -191,6 +234,36 @@
    };
  },
  methods: {
    //转孔柱状图
    async histogram() {
      this.menuVisible = false
      var layer = this.currentData.enName.replaceAll("_", "");
      this.$store.state.mapSpaceQueryLayer = layer;
      this.$store.state.mapPopBoxFlag = "2";
      this.$refs && this.$refs.queryinfo && this.$refs.queryinfo.close();
      this.$refs &&
        this.$refs.queryinfo &&
        this.$refs.queryinfo.open("属性", null, {
          close: () => {
            if (this.$store.state.primitLayer != null) {
              sgworld.Creator.DeleteObject(this.$store.state.primitLayer);
              this.$store.state.primitLayer = null;
            }
            if (window.Viewer.scene.primitives.length != 0) {
              window.Viewer.scene.primitives.removeAll();
            }
          },
        });
    },
    modelAttach() {
      this.menuVisible = false;
      this.$store.state.attachinfo = this.currentData;
      this.$store.state.attachModel = true;
    },
    NodeBlur(Node, data) {
      if (data.label.length === 0) {
        this.$message.error("菜单名不可为空!");
@@ -204,11 +277,7 @@
        });
      }
    },
    // 查询
    filterNode(value, data) {
      if (!value) return true;
      return data.label.indexOf(value) !== -1;
    },
    allowDrop(draggingNode, dropNode, type) {
      if (dropNode.data.label === "二级 3-1") {
@@ -224,6 +293,17 @@
    rightClick(event, object, Node, element) {
      this.currentData = object;
      this.currentNode = Node;
      this.$store.state.propertiesName = this.currentData;
      if (this.currentData.serveType == "Tileset") {
        this.showModelAttach = true;
      } else {
        this.showModelAttach = false;
      }
      if (this.currentData.enName == "s_explorationpoint") {
        this.shwoHistogram = true;
      } else {
        this.shwoHistogram = false;
      }
      if (Node.level === 3) {
        this.firstLevel = false;
      } else {
@@ -260,6 +340,7 @@
    },
    // 增加同级节点事件
    addSameLevelNode() {
      this.menuVisible = false
      this.foo();
      if (this.currentNode.level == 2) {
        this.appendNodetitle = this.currentData.label;
@@ -273,6 +354,7 @@
    // 增加子级节点事件
    addChildNode() {
      this.foo();
      this.menuVisible = false
      // if (this.currentNode.level >= 2) {
      //   this.$message.error("最多只支两级!");
      //   return false;
@@ -301,6 +383,7 @@
    // 删除节点
    deleteNode() {
      this.foo();
      this.menuVisible = false
      var label = this.currentNode.data.cnName;
      if (this.currentNode.data.serveType == "WMS") {
        for (var i in window.Viewer.imageryLayers._layers) {
@@ -344,10 +427,11 @@
    //属性显示
    showLayerAttribute(data) {
      this.foo();
      this.menuVisible = false
      this.currentData = data ? data : this.currentData;
      var layer = this.currentData.enName.replaceAll("_", "");
      this.$store.state.mapSpaceQueryLayer = layer;
      // this.$store.state.mapPopBoolean = true;
      this.$store.state.mapPopBoxFlag = "2";
      this.$refs && this.$refs.queryinfo && this.$refs.queryinfo.close();
      this.$refs &&
@@ -366,11 +450,12 @@
        });
    },
    //模型定位
    positioning(){
    positioning() {
      this.menuVisible = false
      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(res.id);
        if (
          Viewer.scene.primitives._primitives[i].id == this.currentData.cnName
        ) {
          Viewer.flyTo(Viewer.scene.primitives._primitives[i]);
        }
      }
@@ -378,6 +463,7 @@
    // 编辑节点
    editNode(data) {
      this.foo();
      this.menuVisible = false
      this.currentData = data ? data : this.currentData;
      if (!this.currentData.isEdit) {
        this.$set(this.currentData, "isEdit", true);
@@ -446,10 +532,10 @@
      console.log("tree drop: ", dropNode.label, dropType);
    },
    handleCheckChange(data, checked, indeterminate) {
      if (data.type != 2) return;
      var std = [];
      if (data.serveType == "WMS") {
        var layers_ol = window.map.getAllLayers();
        for (var i = 0; i < window.Viewer.imageryLayers._layers.length; i++) {
          var val_id =
            window.Viewer.imageryLayers._layers[i].imageryProvider.name;
@@ -458,13 +544,6 @@
            const img_layer = window.Viewer.imageryLayers._layers[i];
            img_layer.show = checked;
          }
        }
        for (var i in layers_ol) {
          var layerOl = layers_ol[i];
          if (layerOl.values_.name == data.cnName) {
            layerOl.setVisible(checked); //显示图层
          }
        }
      } else if (data.serveType == "WFS") {
@@ -485,7 +564,7 @@
          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(res.id);
              // std.push(res.id);
              Viewer.flyTo(Viewer.scene.primitives._primitives[i]);
            }
          }
@@ -493,20 +572,28 @@
      }
      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);
            debugger
          }
        });
      }
      var layers_ol = window.map.getAllLayers();
      for (var i in layers_ol) {
        var layerOl = layers_ol[i];
        if (layerOl.values_.name == data.label) {
          layerOl.setVisible(checked); //显示图层
        }
      }
      // var layers_ol = window.map.getAllLayers();
      // for (var i in layers_ol) {
      //   var layerOl = layers_ol[i];
      //   if (layerOl.values_.name == data.label) {
      //     layerOl.setVisible(checked); //显示图层
      //   }
      // }
    },
    setAddLayers(res) {
      if (res.serveType == "WMS") {
        var resource = geoServerURl;
        // var resource = "http://192.168.20.205:8088/geoserver/LF/wms";
        if (res.resource != null && res.resource != undefined) {
          resource = res.resource;
        }
@@ -592,12 +679,29 @@
            skipLevelOfDetail: true, // 在遍历时候跳过详情:false
          })
        );
        tileset.readyPromise.then(function (tileset) {
        tileset.readyPromise.then((tileset) => {
          tileset.id = res.cnName;
          tileset.layerId = res.id;
          this.tileSet(tileset, parseFloat(res.elev))
          Viewer.flyTo(tileset);
        });
        window.model = tileset
      }
    },
    tileSet(tileset, height) {
      //3dtile模型的边界球体
      var boundingSphere = tileset.boundingSphere;
      //迪卡尔空间直角坐标=>地理坐标(弧度制)
      var cartographic_original = Cesium.Cartographic.fromCartesian(boundingSphere.center);
      //地理坐标(弧度制)=>迪卡尔空间直角坐标
      var Cartesian3_original = Cesium.Cartesian3.fromRadians(cartographic_original.longitude, cartographic_original.latitude, cartographic_original.height);
      var Cartesian3_offset = Cesium.Cartesian3.fromRadians(cartographic_original.longitude, cartographic_original.latitude, height);
      //获得地面和offset的转换
      var translation = Cesium.Cartesian3.subtract(Cartesian3_offset, Cartesian3_original, new Cesium.Cartesian3());
      //修改模型矩阵
      tileset.modelMatrix = Cesium.Matrix4.fromTranslation(translation);
    },
    setTreeData(source) {
      let cloneData = JSON.parse(JSON.stringify(source)); // 对源数据深度克隆
@@ -702,6 +806,12 @@
      }
      this.$refs.tree.setCheckedKeys(std);
    },
    // 查询
    filterNode(value, data) {
      if (!value) return true;
      return data.cnName.indexOf(value) !== -1;
    },
  },
  watch: {
    filterText(val) {
@@ -709,6 +819,7 @@
    },
  },
  mounted() {
    this.$bus.$on("treeDataCopy", (res) => {
      this.$store.state.treeData = this.treeData;
      this.$store.state.checkedKeys = this.$refs.tree.getCheckedKeys();
@@ -853,7 +964,7 @@
}
.tree-container /deep/ .el-tree-node {
  .is-leaf+.el-checkbox .el-checkbox__inner {
  .is-leaf + .el-checkbox .el-checkbox__inner {
    display: inline-block;
  }