管道基础大数据平台系统开发-【前端】-新系統界面
584911253@qq.com
2023-03-14 b41b6bcda8d085b0c9b0f3d176e76fbed97557a8
src/views/Synthesis/LeftMenu.vue
@@ -93,17 +93,20 @@
                <el-input v-model="formInline.name"></el-input>
              </el-form-item>
              <el-form-item :label="$t('common.type')">
                <el-input v-model="formInline.type"></el-input>
                <el-select
                  v-model="formInline.type"
                  style="width:100%"
                >
                  <el-option
                    v-for="item in options"
                    :key="item.value"
                    :label="item.label"
                    :value="item.value"
                  >
                  </el-option>
                </el-select>
              </el-form-item>
              <!-- <el-form-item :label="$t('common.info')">
                <el-input v-model="formInline.info"></el-input>
              </el-form-item>
              <el-form-item label="URL">
                <el-input v-model="formInline.url"></el-input>
              </el-form-item>
              <el-form-item label="Icon">
                <el-input v-model="formInline.icon"></el-input>
              </el-form-item> -->
              <el-form-item :label="$t('common.bak')">
                <el-input v-model="formInline.bak"></el-input>
              </el-form-item>
@@ -247,8 +250,9 @@
  comprehensive_selectFiles,
  comprehensive_deletes,
  comprehensive_selectModelByPageAndCount,
  comprehensive_insertModel
} from "../../api/api.js";
  comprehensive_insertModel,
  comprehensive_updateModel, selectByBuffer
} from '../../api/api.js'
import {
  OverviewMap,
  defaults as defaultControls,
@@ -467,6 +471,12 @@
            name: "空间查询",
            css: "twoMenu_imge52",
          },
          {
            id: "e3",
            label: "synthesis.pickup",
            name: "拾取",
            css: "twoMenu_imge52",
          },
        ],
        [
          {
@@ -643,6 +653,29 @@
      },
      activeName: "first",
      isShowModel: false,
      options: [
          {
        value: '倾斜模型',
        label: '倾斜模型'
      }, {
        value: 'BIM模型',
        label: 'BIM模型'
      }, {
        value: '点云模型',
        label: '点云模型'
      }, {
        value: '地质设计模型',
        label: '地质设计模型'
      }, {
        value: '人工模型',
        label: '人工模型'
      }, {
        value: '其他模型',
        label: '其他模型'
      }],
      modelClip:false,
      clippingPlanes:null,
      showPickUp:false,
    };
  },
  methods: {
@@ -650,8 +683,8 @@
    setChangeTwoMenu(res) {
      var val = res.id[0];
      if (window.model != null) {
        window.model.deleteObject();
        window.model = null;
        // window.model.deleteObject();
        // window.model = null;
      }
      sgworld.Analysis.clearCurtainContrast();
      if (this.isMenuFlag == "d") {
@@ -1023,6 +1056,7 @@
              },
            });
            this.entityaLayers.push(entity);
            sgworld.Navigate.flyToObj(entity)
            break;
          case "point":
            let point = Viewer.entities.add({
@@ -1043,6 +1077,7 @@
            });
            this.entityaLayers.push(point);
            sgworld.Navigate.flyToObj(point)
            break;
          case "polyline":
            var std = [];
@@ -1063,6 +1098,7 @@
            });
            this.entityaLayers.push(line);
            sgworld.Navigate.flyToObj(line)
            break;
          case "label":
            const label = Viewer.entities.add({
@@ -1081,6 +1117,7 @@
              },
            });
            this.entityaLayers.push(label);
            sgworld.Navigate.flyToObj(label)
            break;
        }
      }
@@ -1116,6 +1153,8 @@
              fileReader.result,
              kmlOptions
            );
            sgworld.Navigate.flyToObj(geocachePromise)
            geocachePromise.then(function (dataSource) {
              var geocacheEntities = dataSource.entities.values;
@@ -1352,12 +1391,30 @@
    setIquery(res) {
      switch (res) {
        case "e2":
          Viewer.screenSpaceEventHandler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK);
          this.$store.state.mapMenuBoolean = !this.$store.state.mapMenuBoolean;
          this.$store.state.mapMenuBoxFlag = "1";
          break;
        case "e1":
          Viewer.screenSpaceEventHandler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK);
          this.$store.state.mapMenuBoolean = !this.$store.state.mapMenuBoolean;
          this.$store.state.mapMenuBoxFlag = "2";
          break;
          //拾取功能
        case "e3":
          this.$store.state.mapMenuBoolean = false;
          this.showPickUp = !this.showPickUp;
          if (this.showPickUp){
            let that = this;
            Viewer.screenSpaceEventHandler.setInputAction(function (event) {
              let p = sgworld.Navigate.getMouseDegrees(event);
              console.log(p);
              that.getPickUpData(p);
            }, Cesium.ScreenSpaceEventType.LEFT_CLICK);
          }else {
            this.$refs.queryinfo.closeAll();
            Viewer.screenSpaceEventHandler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK);
          }
          break;
      }
    },
@@ -1384,15 +1441,17 @@
    setAnalsy(res) {
      //this.$refs && this.$refs.queryinfo && this.$refs.queryinfo.close("queryinfo");
      this.$bus.$emit("closeMenuPop", res);
      var that = this;
      switch (res) {
        case "d1": //等高线分析
          this.closePipelinePop();
          that.isolineFlag = !that.isolineFlag;
          elevationTool.tf = that.isolineFlag;
          elevationTool.render();
          break;
        case "d2": //坡度分析
          this.closePipelinePop();
          that.isslopeFlag = !that.isslopeFlag;
          var val = {
            name: "Lengend",
@@ -1411,6 +1470,7 @@
          break;
        case "d3": //路径分析
          this.closePipelinePop();
          this.isRouter = !this.isRouter;
          let value;
          if (this.isRouter) {
@@ -1429,6 +1489,7 @@
          this.$bus.$emit("mapChangeBox", value);
          break;
        case "d4": //剖面分析
          this.closePipelinePop();
          if (window.AnalysisDXPM) {
            window.AnalysisDXPM.end && window.AnalysisDXPM.end("cancel");
            this.clear(res);
@@ -1437,6 +1498,7 @@
          }
          break;
        case "d5": //洪水淹没分析
          this.closePipelinePop();
          if (window.AnalysisFlood) {
            this.clear(res);
          } else {
@@ -1444,6 +1506,7 @@
          }
          break;
        case "d6": //土方量分析
          this.closePipelinePop();
          if (window.TFvolumetricMeasurementTool) {
            TFvolumetricMeasurementTool.cleanUp();
            if (TFvolumetricMeasurementTool._mouseHandler) {
@@ -1476,23 +1539,52 @@
          }
          break;
        case "d7": //三维截面分析
          this.closePipelinePop();
          // if(window.MXModel) {
          //   Viewer.screenSpaceEventHandler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK);
          //   window.MXModel=null;
          // } else {
          var that = this;
          window.model = sgworld.Creator.create3DTilesets(
            "",
            modelUrl + "/tileset/m/SN/tileset.json",
            {},
            {},
            "0",
            true,
            (data) => {
              sgworld.Navigate.flyToObj(data);
              that.setclippingModel();
          that.modelClip = !that.modelClip;
          if (that.modelClip){
            if (window.model){
              that.modelClipping();
            }
          );
            else {
              var tileset = Viewer.scene.primitives.add(
                  new Cesium.Cesium3DTileset({
                    name: res.cnName,
                    url: modelUrl+ "/tileset/m/SN/tileset.json",
                    maximumScreenSpaceError: 64, // 最大屏幕空间错误:16
                    maximumMemoryUsage: 768, // 最大内存:512
                    dynamicScreenSpaceError: true, // 减少离相机较远的屏幕空间错误:false
                    skipLevelOfDetail: true, // 在遍历时候跳过详情:false
                  })
              );
              tileset.readyPromise.then((tileset) => {
                tileset.id = res.cnName;
                tileset.layerId = res.id;
                Viewer.flyTo(tileset);
                that.modelClipping();
              });
              window.model = tileset
            }
          }
          else {
            Viewer.entities.removeAll();
          }
          // window.model = sgworld.Creator.create3DTilesets(
          //   "",
          //   modelUrl + "/tileset/m/SN/tileset.json",
          //   {},
          //   {},
          //   "0",
          //   true,
          //   (data) => {
          //     sgworld.Navigate.flyToObj(data);
          //     that.setclippingModel();
          //   }
          // );
          break;
        case "d9": //管道分析
@@ -1520,6 +1612,7 @@
          break;
        case "d8": //影像对比
          this.closePipelinePop();
          if (this.isContrastFlag == false) {
            this.isContrastFlag = true;
            sgworld.Analysis.createCurtainContrast(2, 1);
@@ -1529,6 +1622,7 @@
          }
          break;
        case "d10": //地面整平
          this.closePipelinePop();
          var val = {
            name: "Trrain",
            id: res,
@@ -1566,6 +1660,7 @@
          break;
        case "d11": //地形开挖
          this.closePipelinePop();
          // this.$refs &&
          //   this.$refs.terrainDig &&
          //   this.$refs.terrainDig.open("管道空间分析", null, {
@@ -1590,6 +1685,7 @@
          break;
        case "d12": //通视分析
          this.closePipelinePop();
          if (window.TSExcavation != null) {
            window.TSExcavation._SimpleGraphic.drawHandler &&
              window.TSExcavation._SimpleGraphic.drawHandler.destroy();
@@ -1606,6 +1702,7 @@
          }
          break;
        case "d13": //视域分析
          this.closePipelinePop();
          if (window.SYExcavatio) {
            window.SYExcavatio.end && window.SYExcavatio.end();
            window.SYExcavatio.close();
@@ -1625,6 +1722,7 @@
          }
          break;
        case "d14": //圆形时域分析
          this.closePipelinePop();
          if (window.YXSYExcavation) {
            window.YXSYExcavation.end && window.YXSYExcavation.end();
            window.YXSYExcavation.close();
@@ -1645,6 +1743,104 @@
          break;
      }
    },
    //模型裁切
    modelClipping() {
      const scene = Viewer.scene;
      let targetY = 0.0;
      let planeEntities = [];
      let selectedPlane;
      let clippingPlanes = new Cesium.ClippingPlaneCollection({
        planes: [ // ClippingPlane对象数组集合
          new Cesium.ClippingPlane( // 裁切面
              new Cesium.Cartesian3(0.0, 0.0, -1.0), // 法线方向
              0// 原点到平面的最短距离,设置0就好
          ),
        ],
        enabled:true,
        edgeWidth: 1.0, // 模型被裁切部分的截面线宽
      });
      let boundingSphere = window.model.boundingSphere;
      // 创建添加裁剪平面
      for (let i = 0; i < clippingPlanes.length; ++i) {
        const plane = clippingPlanes.get(i);
        const planeEntity = Viewer.entities.add({
          position: boundingSphere.center,
          plane: {
            dimensions: new Cesium.Cartesian2(
                boundingSphere.radius * 1.5,
                boundingSphere.radius * 1.5
            ),
            material: Cesium.Color.WHITE.withAlpha(0.1),
            plane: new Cesium.CallbackProperty(
                // 添加绑定事件,不断调用
                createPlaneUpdateFunction(plane),
                false
            ),
            outline: true,
            outlineColor: Cesium.Color.WHITE,
          },
        });
        planeEntities.push(planeEntity);
      }
      this.clippingPlanes = clippingPlanes;
      window.model.clippingPlanes = clippingPlanes;
      // Select plane when mouse down
      // 绑定上移动事件
      const downHandler = new Cesium.ScreenSpaceEventHandler(
          Viewer.scene.canvas
      );
      downHandler.setInputAction(function (movement) {
        const pickedObject = scene.pick(movement.position);
        if (
            Cesium.defined(pickedObject) &&
            Cesium.defined(pickedObject.id.plane)
        ) {
          selectedPlane = pickedObject.id.plane;
          selectedPlane.material = Cesium.Color.WHITE.withAlpha(0.05);
          selectedPlane.outlineColor = Cesium.Color.WHITE;
          scene.screenSpaceCameraController.enableInputs = false;
        }
      }, Cesium.ScreenSpaceEventType.LEFT_DOWN);
      // Release plane on mouse up
      // 绑定下移动事件
      const upHandler = new Cesium.ScreenSpaceEventHandler(
          Viewer.scene.canvas
      );
      upHandler.setInputAction(function () {
        if (Cesium.defined(selectedPlane)) {
          selectedPlane.material = Cesium.Color.WHITE.withAlpha(0.1);
          selectedPlane.outlineColor = Cesium.Color.WHITE;
          selectedPlane = undefined;
        }
        scene.screenSpaceCameraController.enableInputs = true;
      }, Cesium.ScreenSpaceEventType.LEFT_UP);
      // Update plane on mouse move
      const moveHandler = new Cesium.ScreenSpaceEventHandler(
          Viewer.scene.canvas
      );
      moveHandler.setInputAction(function (movement) {
        if (Cesium.defined(selectedPlane)) {
          const deltaY = movement.startPosition.y - movement.endPosition.y;
          targetY += deltaY;
        }
      }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);
      function createPlaneUpdateFunction(plane) {
        return function () {
          plane.distance = targetY;
          return plane;
        };
      }
    },
    //关闭管道信息弹窗
    closePipelinePop(){
      this.$refs &&
      this.$refs.queryinfo &&
      this.$refs.queryinfo.close("queryinfo");
    },
    setclippingModel() {
      if (window.model) {
@@ -2016,13 +2212,19 @@
    },
    async showModelCatch() {
      if (this.$store.state.catModel) {
        this.startModelData();
        this.formInline = {
          title: '',
          file: '',
          name: '',
          type: '',
          info: '',
          icon: '',
          bak: ''
        }
        this.formInline.title = this.$store.state.catModelInfo.name;
        this.formInline.Id = this.$store.state.catModelInfo.id;
        this.formInline.LayerName = this.$store.state.catModelInfo.layerName;
        this.startModelData();
        this.activeName = "first"
        this.getAttacthFlieList();
        this.dialogVisible = true;
@@ -2034,25 +2236,54 @@
    async startModelData() {
      var obj = {
        layerid: this.$store.state.catModelInfo.layerId,
        pageIndex: 1,
        pageSize: 10,
        modelid: this.$store.state.catModelInfo.id
      }
      const data = await comprehensive_selectModelByPageAndCount(obj);
      const data = await comprehensive_selectModelByGuid(obj);
      if (data.code != 200) {
        return;
      }
      if (data.count == 0) {
      if (data.result == null) {
        this.isShowModel = true;
        this.formInline.name = this.formInline.title;
      } else {
        this.isShowModel = false;
        this.formInline = data.result;
        this.isShowModel = false;
        this.formInline.title = this.formInline.name;
      }
    },
    async EditData() {
      const data = await comprehensive_updateModel(this.formInline)
      if (data.code != 200) {
        this.$message.error('修改失败');
      } else {
        this.$message({
          message: '修改成功',
          type: 'success'
        });
      }
      this.startModelData();
    },
    async InsertData() {
      const data = await comprehensive_insertModel(this.formInline)
      debugger
      var std = {
        "bak": this.formInline.bak,
        "guid": this.$store.state.catModelInfo.id,
        "layerid": this.$store.state.catModelInfo.layerId,
        "modelid": this.$store.state.catModelInfo.id,
        "name": this.formInline.name,
        "type": this.formInline.type
      }
      const data = await comprehensive_insertModel(std)
      if (data.code != 200) {
        this.$message.error('添加失败');
      } else {
        this.$message({
          message: '添加成功',
          type: 'success'
        });
      }
      this.startModelData();
    },
@@ -2101,7 +2332,7 @@
        }
      });
    },
    //附件列表查询
    //附件列表查询
    async getAttacthFlieList() {
      var obj = {
        eventid: this.$store.state.catModelInfo.id,
@@ -2189,6 +2420,34 @@
    handleAttatchChange(val) {
      this.attacgSelection = val;
    },
    //拾取数据获取
    async getPickUpData(info){
      let checkedLayers = JSON.parse(sessionStorage.getItem("checkedLayers"));
      let showPop = false;
      for (const item of checkedLayers) {
        let name = item.url.replaceAll("LF:","");
        name = name.replaceAll("_","");
        let params = {
          buffer:10,
          limit:20,
          name:name,
          wkt:`POINT (${info.lon} ${info.lat})`,
        }
        const res = await selectByBuffer(params);
        if (res.result && res.result.length > 0){
          this.$store.state.mapPopBoxFlag = "4";
          this.$store.state.pickUpPointInfo = info;
          this.$refs &&
          this.$refs.queryinfo &&
          this.$refs.queryinfo.open("拾取分析", null,);
          showPop = true;
          break;
        }
      }
      if (!showPop){
        this.$message.warning("暂无数据!");
      }
    }
  },
  mounted() {
    this.measureData = new Map();