月球大数据地理空间分析展示平台-【中台】
Surpriseplus
2023-08-31 d88143708375c191f1e9f0bc567ef1e18dbeaa1e
src/views/resourceQuery/resourceQuery.vue
@@ -1,6 +1,18 @@
<template>
  <div class="resourceQuery">
    <moon-map></moon-map>
    <div class="bottom_btn_TWO">
      <div
        v-show="mapFlag == '2D'"
        class="ChangeMap twoImg"
        @click="setMapImg('2D')"
      ></div>
      <div
        v-show="mapFlag != '2D'"
        class="ChangeMap threeImg"
        @click="setMapImg('3D')"
      ></div>
    </div>
    <div
      class="left_menu"
      @click="leftDialog =true"
@@ -57,7 +69,7 @@
            <el-form-item label="时间范围">
              <el-date-picker
                style="width: 100%"
                v-model="form.acqTime"
                v-model="acqTime"
                type="datetimerange"
                range-separator="至"
                start-placeholder="开始日期"
@@ -104,7 +116,7 @@
                @click="setDrawMenu(5)"
              >
                <span>清除</span>
                <div class="btn_bg db"></div>
                <div class="btn_bg qc"></div>
              </div>
            </div>
          </div>
@@ -166,19 +178,19 @@
              <span class="attribute_content">{{ e.name }}</span>
            </div>
            <div class="attribute">
              <span class="attribute_title">存情位量:</span>
              <span class="attribute_content">{{ e.time }}</span>
              <span class="attribute_title">存储位置:</span>
              <span class="attribute_content">{{ e.path }}</span>
            </div>
            <div class="attribute">
              <span class="attribute_title">生产时间:</span>
              <span class="attribute_content">{{ e.data }}</span>
              <span class="attribute_content">{{ e.createTime }}</span>
            </div>
            <div
              class="attribute"
              style="margin: 0"
            >
              <span class="attribute_title">数据大小:</span>
              <span class="attribute_content">dsadas</span>
              <span class="attribute_content">{{ e.sizes }}M</span>
            </div>
          </div>
          <div
@@ -193,7 +205,7 @@
        class="bottom_box"
        v-show="listDialog"
      >
        <span class="msg_box">显示第{{ (( (form.pageIndex - 1)*form.pageSize)+1 )}}到{{(form.pageIndex*form.pageSize)
        <span class="msg_box">显示第{{ (( (form.pageIndex - 1)* form.pageSize) + 1 )}}到{{(form.pageIndex*form.pageSize)
            
          }}条,共{{ list.length }}条记录,已选择{{
            listChecked.length
@@ -224,18 +236,19 @@
        ></i>
      </div>
      <div class="details_table">
        <div class="table_header">
          <div class="table_td">属性</div>
          <div class="table_td">属性值</div>
        </div>
        <div style="height: 430px;overflow: auto;">
          <div class="table_header">
            <div class="table_td">属性</div>
            <div class="table_td">属性值</div>
          </div>
          <div
            class="table_tr"
            v-for="(e,key, i) in tableList"
            v-for="(e, i) in tableList"
            :key="i"
          >
            <div class="table_td">{{ key}}</div>
            <div class="table_td">{{ e }}</div>
            <div class="table_td">{{ e.alias}}</div>
            <div class="table_td">{{ e.value }}</div>
          </div>
        </div>
@@ -280,7 +293,7 @@
import * as turf from "@turf/turf"
import moonMap from "../../components/MapView/moonMap.vue"; //地图
import { meta_type, sensor_type } from "../datamanage/js/layerManage";
import { select_meta_ByPageAndCount, encr } from '../../api/api'
import { select_meta_ByPageAndCount, encr, selectByPageAndCount } from '../../api/api'
export default {
  components: {
    moonMap,
@@ -291,24 +304,22 @@
        pageNo: 1,
        pageSize: 10,
      },
      tableList: [
      ],
      tableList: [],
      listChecked: [],
      list: [
      ],
      list: [],
      currentPage4: 4,
      form: {
        name: "",
        sensorType: 0,
        mataType: 0,
        acqTime: null,
        wkt: null,
        pageIndex: 1,
        pageSize: 100,
        count: 0,
        startDate: null,
        endDate: null
      },
      acqTime: '',
      sensorOption: [],
      metaOption: [],
      detailsBox: false,
@@ -318,34 +329,100 @@
      dialogVisible: false,
      bufferNumber: 100,
      geoWkt: null,
      wktEntity: null
      wktEntity: null,
      mapFlag: '2D'
    };
  },
  methods: {
    setMapImg(res) {
      if (res == "2D") {
        this.mapFlag = "3D";
        window.earthCtrl.coreMap.scene.mode = SmartEarth.Cesium.SceneMode.SCENE2D;
      } else if (res == "3D") {
        this.mapFlag = "2D";
        window.earthCtrl.coreMap.scene.mode = SmartEarth.Cesium.SceneMode.SCENE3D;
      }
    },
    setListCheckAll() {
      for (var i in this.list) {
        var checked = this.list[i].checked
        if (!checked) {
          this.list[i].checked = true;
          this.listChecked.push(this.list[i]);
          this.setAddCheckLayer(this.list[i]);
        }
      }
    },
    setListRemoveCheckAll() {
      for (var i in this.list) {
        this.list[i].checked = false;
        if (this.list[i].checked) {
          this.list[i].checked = false;
          this.setRemoveCheckLayer(this.list[i]);
        }
      }
      this.listChecked = [];
    },
    details(e) {
    async details(e) {
      const data = await selectByPageAndCount({
        ns: 'lf',
        pageIndex: 1,
        pageSize: 100000,
        tab: 'sys_meta'
      })
      if (data.code != 200) return
      var std = [];
      var result = data.result;
      e.createUser = e.createName;
      e.depcode = e.depName
      e.dircode = e.dirName;
      e.updateUser = e.updateName;
      e.verid = e.verName;
      if (e.sensortype > 0) {
        for (var i in this.sensorOption) {
          if (this.sensorOption[i].value == e.sensortype) {
            e.sensortype = this.sensorOption[i].name
          }
        }
      } else {
        e.sensortype = null
      }
      if (e.mataType > 0) {
        for (var i in this.metaOption) {
          if (this.metaOption[i].value == e.mataType) {
            e.mataType = this.metaOption[i].name
          }
        }
      } else {
        e.mataType = null
      }
      for (var i in result) {
        for (var key in e) {
          if (result[i].field == key) {
            result[i].value = e[key]
          }
          if (result[i].field == 'gid' && key == 'id') {
            result[i].value = e[key]
          }
        }
      }
      this.detailsBox = true;
      this.tableList = e;
      this.tableList = result;
    },
    setQueryRestRetrieval() {
      this.listDialog = false;
      this.setFromStart();
      this.setDrawMenu(5);
      this.listChecked = [];
      Viewer.entities.removeAll()
    },
    async setQueryRetrieval() {
      if (this.geoWkt) {
@@ -353,13 +430,66 @@
      } else {
        this.form.wkt = null;
      }
      if (this.acqTime) {
        this.form.endDate = this.setFromDate(this.acqTime[0])
        this.form.startDate = this.setFromDate(this.acqTime[1])
      } else {
        this.form.endDate = null
        this.form.startDate = null
      }
      const data = await select_meta_ByPageAndCount(this.form);
      if (data.code != 200) return;
      if (data.code != 200) return
      this.form.count = data.count;
      this.list = data.result;
      var result = data.result;
      for (var i in result) {
        if (result[i].createTime) {
          result[i].createTime = this.setFromDate(result[i].createTime)
        }
        if (result[i].updateTime) {
          result[i].updateTime = this.setFromDate(result[i].updateTime)
        }
        if (result[i].acqTime) {
          result[i].acqTime = this.setFromDate(result[i].acqTime)
        }
      }
      if (result) {
        this.list = result;
      } else {
        this.list = [];
      }
      this.listDialog = true;
    },
    setFromDate(res) {
      var time = new Date(res);
      var y = time.getFullYear();
      var m = time.getMonth() + 1;
      var d = time.getDate();
      var h = time.getHours();
      var mm = time.getMinutes();
      var s = time.getSeconds();
      return (
        y +
        '-' +
        this.add0(m) +
        '-' +
        this.add0(d) +
        ' ' +
        this.add0(h) +
        ':' +
        this.add0(mm) +
        ':' +
        this.add0(s)
      );
    },
    //格式化时间
    add0(m) {
      return m < 10 ? "0" + m : m;
    },
    //大小值改变
    handleSizeChange(val) {
      this.form.pageIndex = 1;
      this.form.pageSize = val;
@@ -376,6 +506,7 @@
      val.checked = !val.checked;
      if (val.checked) {
        this.listChecked.push(val);
        this.setAddCheckLayer(val);
      }
      if (this.listChecked.length > 0) {
@@ -383,10 +514,46 @@
          this.listChecked.forEach((e, i) => {
            if (e.id == val.id) {
              this.listChecked.splice(i, 1);
              this.setRemoveCheckLayer(val);
            }
          });
        }
      }
    },
    setAddCheckLayer(res) {
      if (!res.geom) return
      var wkt = this.$wkt.parse(res.geom).coordinates[0]
      var geom = [];
      for (var i in wkt) {
        geom.push(Cesium.Cartesian3.fromDegrees(wkt[i][0], wkt[i][1]))
      }
      Viewer.entities.add({
        name: res.name + "&&" + res.id,
        polygon: {
          hierarchy: geom,
          material: Cesium.Color.WHITE.withAlpha(0.1),
          // heightReference: Cesium.HeightReference.CLAMP_TO_GROUND,
          outline: true,
          outlineColor: Cesium.Color.fromCssColorString("rgba(130,167,33, 1)"),
          outlineWidth: 10,
          classificationType: Cesium.ClassificationType.BOTH,//贴地形和3dtile
          clampToGround: true,//开启贴地
          height: 0,
        },
      });
    },
    setRemoveCheckLayer(res) {
      var name = res.name + "&&" + res.id;
      var entity = Viewer.entities._entities._array
      for (var i = 0; i < entity.length; i++) {
        if (entity[i].name == name) {
          Viewer.entities.remove(entity[i])
          i--;
        }
      }
    },
    setDrawMenu(res) {
      this.bufferNumber = 100;
@@ -433,7 +600,7 @@
      }
      var that = this;
      sgworld.Creator.createSimpleGraphic(this.drawType, config, (entity) => {
        sgworld.Creator.SimpleGraphic.clear()
        that.querySatialQuery(entity);
      });
    },
@@ -453,10 +620,12 @@
          res_val = res.polygon.hierarchy.getValue().positions;
          break;
      }
      sgworld.Creator.SimpleGraphic.clear()
      this.geoWkt = this.getEntityGeometry(res_val, this.drawType)
      if (this.geoWkt) {
        this.setAddWktEntity(this.geoWkt)
        this.$nextTick(() => {
          this.setAddWktEntity(this.geoWkt)
        })
      }
    },
@@ -464,18 +633,17 @@
      var wkt = this.$wkt.parse(res).coordinates[0];
      var geom = [];
      for (var i in wkt) {
        geom.push(Cesium.Cartesian3.fromDegrees(wkt[i][0], wkt[i][1], wkt[i][2] ?? 0))
      }
      this.wktEntity = Viewer.entities.add({
        name: '资源查询',
        polygon: {
          hierarchy: geom,
          material: Cesium.Color.BLUE.withAlpha(0),
          heightReference: Cesium.HeightReference.CLAMP_TO_GROUND,
          material: Cesium.Color.WHITE.withAlpha(0.2),
          //heightReference: Cesium.HeightReference.CLAMP_TO_GROUND,
          outline: true,
          outlineColor: Cesium.Color.GREEN,
          outlineWidth: 5,
          outlineColor: Cesium.Color.RED,
          outlineWidth: 10,
          classificationType: Cesium.ClassificationType.BOTH,//贴地形和3dtile
          clampToGround: true,//开启贴地
          height: 0,
@@ -535,7 +703,7 @@
    },
    setTurfBuffer(geom, distance, type) {
      return turf.buffer(geom, distance, { units: 'miles' });
      return turf.buffer(geom, distance, { units: 'meters' });
    },
    fixToPositon(restVal, digits = 6) {
      restVal.geometry.coordinates.forEach(coord => {
@@ -568,12 +736,14 @@
        name: "",
        sensorType: 0,
        mataType: 0,
        acqTime: null,
        wkt: null,
        pageIndex: 1,
        pageSize: 100,
        count: 0,
        startDate: null,
        endDate: null
      }
      this.acqTime = ''
    }
  },
  created() { },
@@ -684,6 +854,10 @@
          }
          .db {
            background: url("../../assets/img/db.png") no-repeat center;
            background-size: 100% 100%;
          }
          .qc {
            background: url("../../assets/img/清除.png") no-repeat center;
            background-size: 100% 100%;
          }
        }
@@ -862,4 +1036,27 @@
.dialogContent /deep/.el-icon-plus {
  color: #606266 !important;
}
.bottom_btn_TWO {
  position: absolute;
  z-index: 39;
  /*  prettier-ignore */
  bottom: 68PX;
  /*  prettier-ignore */
  right: 70PX;
  .ChangeMap {
    /*  prettier-ignore */
    width: 30PX;
    /*  prettier-ignore */
    height: 30PX;
    /*  prettier-ignore */
    border: 1PX solid rgba(255, 255, 255, 0.1);
  }
  .twoImg {
    background: url("../../assets/img/2D.png") no-repeat;
  }
  .threeImg {
    background: url("../../assets/img/3D.png") no-repeat;
  }
}
</style>