管道基础大数据平台系统开发-【前端】-新系統界面
Surpriseplus
2022-12-14 ea52386a7c7b3ef91784280e3033f190ac39caee
综合展示,导入导出,三维截面分析,影像对比分析
已修改6个文件
600 ■■■■ 文件已修改
public/config/config.js 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/api.js 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/mapsdk.vue 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/Archive/index.vue 358 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/Synthesis/LeftMenu.vue 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/datamanage/metadataManage.vue 126 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
public/config/config.js
@@ -7,6 +7,8 @@
var wnsUrl = 'http://192.168.20.39:9055/gisserver/wnsserver/beijingdaohang_wns';
//gisserver
var gisServerUrl = 'http://192.168.20.39:9055/gisserver';
//模型加载地址
var modelUrl = 'http://183.162.245.49:8099/pcdata/JC_MAX_MX/SN/tileset.json';
//综合展示
window.sceneConfig = {
  // sdk许可
@@ -15,7 +17,7 @@
  baseURL: 'http://183.162.245.49:8888/',
  positionBtn: [],
  mpt: {
    url: 'http://183.162.245.49:82/SG/Elevation',
    name: 'zhufeng.397336.mpt',
    url: 'http://192.168.20.39/SG/Elevation',
    name: 'china_5m.Ei.402586.mpt',
  },
};
src/api/api.js
@@ -442,7 +442,7 @@
//数据入库=>查询字段信息
export function meta_selectFields(params) {
  return request.get('/meta/selectFields', { params: params });
  return request.get('/meta/selectTabFields', { params: params });
}
//数据入库=>查询表中数据
export function meta_selectByPageForUpload(params) {
@@ -603,6 +603,15 @@
//   return request.post('/dataUpload/insertFiles', params);
// }
//资料馆=>查询所有表格
export function dataLib_selectTabs(params) {
  return request.get('/dataLib/selectTabs', { params: params });
}
//资料馆=>查询所有表格
export function dataLib_selectTabFields(params) {
  return request.get('/dataLib/selectTabs', { params: params });
}
//请求站场点内容
export function querySitePoint(size, index, name) {
  return service.get(
src/components/mapsdk.vue
@@ -122,10 +122,11 @@
          </div>
          <div class="box-body">
            <el-form ref="form" :model="pathFrom" label-width="50px">
              <el-form-item label="经度:">
              <el-form-item label="起点:">
                <el-input
                  style="width: 300px"
                  style="width: 250px"
                  v-model="pathFrom.lon"
                  :disabled="true"
                ></el-input>
                <el-link
                  :underline="false"
@@ -134,10 +135,11 @@
                  ><i style="color: white" class="el-icon-plus"></i
                ></el-link>
              </el-form-item>
              <el-form-item label="纬度:">
              <el-form-item label="终点:">
                <el-input
                  style="width: 300px"
                  style="width: 250px"
                  v-model="pathFrom.lat"
                  :disabled="true"
                ></el-input>
                <el-link
                  :underline="false"
@@ -197,8 +199,8 @@
      showPathAnalysisBoxDialog: false,
      comprehensive: {},
      pathFrom: {
        lon: '116.086746,39.937314',
        lat: '116.086000,39.936289',
        lon: ' ',
        lat: ' ',
      },
      bufFrom: {
        val: 50,
@@ -340,21 +342,6 @@
        })
      );
      // sgworld.Navigate.jumpTo({
      //   //跳转视角
      //   destination: {
      //     x: 311837.3471863137,
      //     y: 5628280.936629815,
      //     z: 2992581.921482893,
      //   },
      //   orientation: {
      //     heading: 2.5028896264234364,
      //     pitch: -0.2201285642360813,
      //     roll: 0.0,
      //   },
      // });
      // Viewer.scene.globe.depthTestAgainstTerrain = true;
      Viewer._enableInfoOrSelection = false;
      //显示fps
      Viewer.scene.debugShowFramesPerSecond = false;
@@ -362,20 +349,21 @@
      window.sgworld.navControl('nav', false);
      //比例尺
      window.sgworld.navControl('scale', false);
      //开启深度检测
      sgworld.Analysis.depthTestAgainstTerrain(true);
      //影像对比设置
      var base = {
        url: 'https://a.tile.openstreetmap.org/',
      };
      window.openStreetMap = sgworld.Creator.createImageryProvider(
        'OpenStreetMap',
        'OpenStreetMap',
        base,
        '0',
        undefined,
        true,
        ''
      );
      // var base = {
      //   url: 'https://a.tile.openstreetmap.org/',
      // };
      // window.openStreetMap = sgworld.Creator.createImageryProvider(
      //   'OpenStreetMap',
      //   'OpenStreetMap',
      //   base,
      //   '0',
      //   undefined,
      //   true,
      //   ''
      // );
      openStreetMap.item.show = false;
      //mpt加载
      var option = {
src/views/Archive/index.vue
@@ -1,240 +1,190 @@
<template>
  <div class="archive">
    <div class="left_active">
      <el-card class="arch_card">
        <div class="title_active">{{ $t('archive.name') }}</div>
        <el-divider />
        <el-tree
          :data="tree"
          :props="defaultProps"
          show-checkbox
          default-expand-all="true"
        />
      </el-card>
    </div>
    <div class="right_active">
      <el-card class="arch_card">
        <el-row :gutter="20">
          <el-col :span="6"></el-col>
          <el-col :span="4"
            ><div style="text-align: right; margin-top: 6px">
              {{ $t('archive.keyword') }}:
            </div>
          </el-col>
          <el-col :span="4">
    <div class="top_header">
      <div class="top_left">
        <label>{{ $t('synthesis.synthesis') }}</label>
        <span>/</span>
        <label>{{ $t('synthesis.archive') }}</label>
      </div>
      <div class="top_right">
        <el-form :inline="true" :model="formInline" class="demo-form-inline">
          <el-form-item>
            <el-input
              v-model="input"
              style="color: #fff"
              v-model="formInline.user"
              suffix-icon="el-icon-search"
              :placeholder="$t('common.pleaseInput')"
          /></el-col>
          <el-col :span="4"
            ><el-button class="primary">{{ $t('common.iquery') }}</el-button>
            <el-button v-if="archStatus.download" type="success">{{
              $t('common.download')
            }}</el-button>
          </el-col>
          <el-col :span="6"> </el-col>
        </el-row>
        <el-divider />
        <el-card shadow="never" class="middle_card">
          <el-table :data="tableData" style="width: 10000px" stripe>
            <el-table-column
              prop="name"
              :label="$t('archive.uname')"
              width="180"
            />
            <el-table-column
              prop="type"
              sortable
              :label="$t('archive.type')"
              width="180"
            />
            <el-table-column
              prop="count"
              sortable
              :label="$t('archive.modifications')"
              width="180"
            />
            <el-table-column
              prop="timer"
              sortable
              :label="$t('archive.creationtime')"
            />
            <el-table-column
              prop="state"
              :label="$t('archive.state')"
              width="180"
            />
          </el-table>
        </el-card>
        <el-divider />
        <el-pagination
          :currentPage="currentPage4"
          :page-size="pageSize4"
          :page-sizes="[10, 20, 50, 100]"
          :small="small"
          :disabled="disabled"
          :background="background"
          layout="total, sizes, prev, pager, next, jumper"
          :total="400"
          @size-change="handleSizeChange"
          @current-change="handleCurrentChange"
        />
      </el-card>
            ></el-input>
          </el-form-item>
          <el-form-item>
            <el-button class="primaries">{{ $t('common.iquery') }}</el-button>
          </el-form-item>
          <el-form-item>
            <el-button class="primaries">{{ $t('common.download') }}</el-button>
          </el-form-item>
          <el-form-item>
            <el-button class="primaries">{{ $t('common.iquery') }}</el-button>
          </el-form-item>
        </el-form>
      </div>
    </div>
    <div class="bottom_content">
      <div class="left_bottom">
        <div class="left_tree">
          <el-tree
            :data="tree"
            :props="defaultProps"
            :default-expanded-keys="[1]"
            node-key="id"
            @node-click="handleNodeClick"
          ></el-tree>
        </div>
      </div>
      <div class="right_bottom"></div>
    </div>
  </div>
</template>
<script>
import { dataLib_selectTabs, dataLib_selectTabFields } from '../../api/api';
import MyBread from '../../components/MyBread.vue';
export default {
  components: {
    MyBread,
  },
  data() {
    return {
      input: '',
      listdata: {
        name: null,
        pageSize: 10,
        pageIndex: 1,
      },
      count: 0,
      formInline: {},
      tree: [
        {
          label: '文献',
          children: [
            {
              label: '管道标准文献',
              url: '',
            },
            {
              label: '工业管道工程施工及验收规范',
              url: '',
            },
            {
              label: '综合管线设计标准',
              url: '',
            },
          ],
          tabDesc: '基础数据',
          label: '基础数据',
          value: 'BD',
          children: [],
        },
        {
          label: '图纸', //label对应父级标签
          children: [
            {
              label: 'XXX管线设计图纸',
              url: ' ',
            },
            {
              label: 'XXXXXX管线设计图',
              url: ' ',
            },
            {
              label: 'XXXXX管线设计图',
              url: ' ',
            },
          ],
        },
        {
          label: '数据', //label对应父级标签
          children: [
            {
              label: '管道',
              url: ' ',
            },
            {
              label: '阀门',
              url: ' ',
            },
            {
              label: '消费设备',
              url: ' ',
            },
          ],
          tabDesc: '业务数据',
          label: '业务数据',
          value: 'BS',
          children: [],
        },
      ],
      defaultProps: {
        chilren: 'children', //"children"内的每个对象解析为一个子项;
        label: 'label', //所有"label"所在的对象解析为一个父项
      },
      tableData: [],
      archStatus: {
        download: false,
        children: 'children',
        label: 'label',
      },
    };
  },
  methods: {
    showArchMenu(res) {
      switch (res.tag) {
        case '/download':
          this.archStatus.download = true;
          break;
    //树节点点击事件
    handleNodeClick(data) {
      if (data.children != null) return;
      this.listData.name = data.entity; //要查询表格类型;
      this.filedsLayer = this.getDataLibSelectTabFields(data); //获取每个表字段名称及阈值
    },
    async getDataLibSelectTabFields(res) {
      const data = await dataLib_selectTabFields({
        ns: res.ns,
        tab: res.entity,
      });
      if (data.code != 200) {
        this.$message.error('列表调用失败');
        return;
      }
      debugger;
    },
    //获取所有表格数据
    async getDataLibSelectTabs() {
      const data = await dataLib_selectTabs();
      if (data.code != 200) {
        this.$message.error('列表调用失败');
        return;
      }
      var option = data.result;
      for (var i in option) {
        var val_Data = option[i];
        val_Data.id = '1' + i;
        val_Data.label = val_Data.tabDesc + '(' + val_Data.tab + ')';
        if (option[i].ns == 'bd') {
          this.tree[0].children.push(val_Data);
        } else {
          this.tree[1].children.push(val_Data);
        }
      }
    },
  },
  created() {
    var val = this.$store.state.currentPerms;
    var permsEntity = this.$store.state.permsEntity;
    for (var i = 0; i < permsEntity.length; i++) {
      if (permsEntity[i].perms == val) {
        // this.showMenuChange(permsEntity[i], permsEntity);
        this.showArchMenu(permsEntity[i]);
      }
    }
  mounted() {
    this.getDataLibSelectTabs();
  },
};
</script>
<style>
<style lang="less" scoped>
.archive {
  width: 100%;
  height: 100%;
  position: relative;
}
.archive .left_active {
  width: 21%;
  height: 100%;
  float: left;
}
  margin: 0;
  overflow: hidden;
  background: black;
  .top_header {
    width: calc(100% - 60px);
    height: 70px;
    background: #353539;
    display: flex;
    padding: 0 30px;
    justify-content: space-between;
.archive .right_active {
  width: 78.5%;
  height: 100%;
  float: right;
}
.archive .arch_card {
  width: 100%;
  height: 100%;
  background: #303030;
}
.archive .arch_card .el-card__body {
  padding: 10px;
}
.archive .el-divider--horizontal {
  margin: 10px 0 !important;
}
.archive .left_active .title_active {
  font-size: 22px;
  font-family: Microsoft YaHei;
  font-weight: bold;
  color: #3b4d6e;
}
.archive .middle_div {
  border: 1px solid red;
}
.archive .middle_card {
  width: 100%;
  height: 81vh;
  border: transparent;
  background: #303030;
}
.archive .el-table .warning-row {
  --el-table-tr-bg-color: var(--el-color-warning-light-9);
}
.el-form-item__label {
  color: white;
}
.el-input__inner {
  background-color: transparent !important ;
  border: 1px solid;
}
.primary {
  background: #409eff;
  border: #409eff;
  color: white;
    label {
      font-size: 21px;
      font-family: Source Han Sans SC;
      font-weight: 400;
      color: #009cff;
      line-height: 70px;
    }
    span {
      color: gray;
      margin: 0 5px;
    }
    /deep/.el-form--inline .el-form-item__content {
      line-height: 70px;
    }
    /deep/.el-form--inline .el-form-item__label {
      line-height: 70px;
    }
  }
  .bottom_content {
    width: 100%;
    height: calc(100% - 70px);
    display: flex;
    justify-content: space-between;
    .left_bottom {
      width: 224px;
      height: calc(100% - 64px);
      background: #303030;
      padding: 32px 23px;
      .left_tree {
        width: 100%;
        height: 100%;
        overflow: auto;
      }
    }
    .right_bottom {
      width: calc(100% - 20px);
      height: calc(100% - 20px);
      padding: 10px;
    }
  }
  .primaries {
    background: linear-gradient(180deg, #002992, #080472);
    border: 1px solid #000000;
    box-shadow: 0px 3px 5px 0px rgba(0, 0, 0, 0.21);
    color: white;
  }
}
</style>
src/views/Synthesis/LeftMenu.vue
@@ -309,6 +309,7 @@
      isNaviget: false,
      isolineFlag: false,
      isslopeFlag: false,
      isContrastFlag: false,
    };
  },
  methods: {
@@ -320,6 +321,10 @@
      this.$store.state.mapPopBoolean = false;
      this.$store.state.mapPopBoxFlag = null;
      var val = res.id[0];
      if (window.model != null) {
        window.model.deleteObject();
        window.model = null;
      }
      switch (val) {
        case 'a': //图层管理
          this.setCoverage(res.id);
@@ -386,6 +391,7 @@
          break;
        case 'h7':
          sgworld.Creator.SimpleGraphic.clear();
          break;
      }
    },
@@ -434,7 +440,6 @@
        let files = evt.target.files;
        if (files.length > 0) {
          let file = evt.target.files[0];
          let fileReader = new FileReader();
          fileReader.readAsDataURL(file);
          fileReader.onload = () => {
@@ -693,6 +698,30 @@
            }
          );
          break;
        case 'd7':
          var that = this;
          window.model = sgworld.Creator.create3DTilesets(
            '',
            modelUrl,
            {},
            {},
            '0',
            true,
            (data) => {
              sgworld.Navigate.flyToObj(data);
              that.setclippingModel();
            }
          );
          break;
        case 'd8':
          if (this.isContrastFlag == false) {
            this.isContrastFlag = true;
            sgworld.Analysis.createCurtainContrast(2, 1);
          } else {
            this.isContrastFlag = false;
            sgworld.Analysis.clearCurtainContrast();
          }
          break;
        case 'd10':
          if (window.TerrainFlattening) {
            window.TerrainFlattening.remove();
@@ -731,6 +760,18 @@
          break;
      }
    },
    setclippingModel() {
      if (window.model) {
        setTimeout(() => {
          window.model.clippingModel({
            direction: 'z',
          });
        }, 1000);
        // window.model.clippingModel({
        //   direction: 'z',
        // });
      }
    },
    clear(res) {
      switch (res) {
        case 'd4':
src/views/datamanage/metadataManage.vue
@@ -330,7 +330,7 @@
            border
          style="width: 100%"
          >
            <el-table-column width="60" type="index" :label="$t('common.index')" />
            <el-table-column width="60"  align="center" type="index" :label="$t('common.index')" />
            <el-table-column
              v-for="(item, index) in attributeData"
              :key="index"
@@ -338,6 +338,7 @@
              :prop="item.field"
              show-overflow-tooltip
              align="center"
            ></el-table-column>
          </el-table>
            <div style="margin-top: 10px" class="pagination_box">
@@ -463,7 +464,7 @@
        ],
      },
      tableData: [],
      dbTableData:[],
      dbTableData: [],
      count: 0,
      currentPage: 1,
      pageSize: 10,
@@ -489,14 +490,14 @@
        checkStrictly: true,
        emitPath: false,
      },
      dialogVisible:false,
        listLoader:{
        id:null,
        pageSize:1,
        pageSize:10,
      dialogVisible: false,
      listLoader: {
        id: null,
        pageSize: 1,
        pageSize: 10,
      },
      count1:0,
            attributeData:[],
      count1: 0,
      attributeData: [],
    };
  },
  created() {
@@ -508,53 +509,72 @@
  },
  methods: {
    async detail(res){
    async detail(res) {
      var val = res.tab.split(".");
      const data = await meta_selectFields({
        ns:val[0],
        tab:val[1]
        ns: val[0],
        tab: val[1]
      })
      if(data.code != 200){
          this.$message.error('字段列表调用失败');
      if (data.code != 200) {
        this.$message.error('字段列表调用失败');
        return
      }
      this.dialogVisible = true;
      this.attributeData =data.result;
      this.listLoader={
      id:res.id,
        pageIndex:1,
        pageSize:10,
      this.attributeData = data.result;
      this.listLoader = {
        id: res.id,
        pageIndex: 1,
        pageSize: 10,
      }
     this.getDataLoaderSelectDbData();
      this.getDataLoaderSelectDbData();
    },
      async getDataLoaderSelectDbData (){
       const data1 = await meta_selectByPageForUpload(this.listLoader);
     if(data1.code != 200){
          this.$message.error('字段列表调用失败');
    async getDataLoaderSelectDbData() {
      const data1 = await meta_selectByPageForUpload(this.listLoader);
      if (data1.code != 200) {
        this.$message.error('字段列表调用失败');
        return
      }
 this.dbTableData =data1.result;
 this.count1 = data1.count;
    },
       handleLoaderSizeChange(val){
      this.listLoader.pageIndex= 1;
      this.listLoader.pageSize =val;
            this.getDataLoaderSelectDbData();
    },
handleLoaderCurrentChange(val){
  this.listLoader.pageIndex= val;
   this.getDataLoaderSelectDbData();
},
  async signGetPublicKey(){
      const res = await sign_getPublicKey();
       if (res && res.code == 200) {
          window.encrypt = new JSEncrypt();
          encrypt.setPublicKey(res.result);
      debugger
      var option = data1.result;
      for (var i in option) {
        option[i].dirid = option[i].dirName;
        option[i].depid = option[i].depName;
        option[i].createuser = option[i].createName;
        option[i].updateuser = option[i].updateName;
        option[i].verid = option[i].verName;
        if (option[i].createtime != null) {
          option[i].createtime = this.setInfoBoxTime(option[i].createtime)
        }
        if (option[i].updatetime != null) {
          option[i].updatetime = this.setInfoBoxTime(option[i].updatetime)
        }
      }
      this.dbTableData = data1.result;
      this.count1 = data1.count;
    },
    handleLoaderSizeChange(val) {
      this.listLoader.pageIndex = 1;
      this.listLoader.pageSize = val;
      this.getDataLoaderSelectDbData();
    },
    handleLoaderCurrentChange(val) {
      this.listLoader.pageIndex = val;
      this.getDataLoaderSelectDbData();
    },
    async signGetPublicKey() {
      const res = await sign_getPublicKey();
      if (res && res.code == 200) {
        window.encrypt = new JSEncrypt();
        encrypt.setPublicKey(res.result);
      }
    },
    //单位列表获取
    async getQueryDepTree() {
@@ -863,25 +883,25 @@
        pwd: encrypt.encrypt(this.codeForm.repassword),
        ids: std
      };
        const res = await meta_downloadReq(JSON.stringify(obj))
      const res = await meta_downloadReq(JSON.stringify(obj))
       if(res.code!=200){
      if (res.code != 200) {
        this.$message.error('下载请求失败');
        return
       }
      }
       var downObj={
        guid :res.result,
        pwd :encodeURIComponent(encrypt.encrypt(this.codeForm.repassword))
       }
      var downObj = {
        guid: res.result,
        pwd: encodeURIComponent(encrypt.encrypt(this.codeForm.repassword))
      }
      const data = await meta_selectDownloadFile(downObj)
      if(data.code !=200){
      if (data.code != 200) {
        this.$message.error('下载请求失败');
        return
       }
       var token = getToken()
       var url = BASE_URL+"/meta/downloadFile?token=" +token+ "&guid=" + res.result + "&pwd=" +encodeURIComponent(encrypt.encrypt(this.codeForm.repassword));
      }
      var token = getToken()
      var url = BASE_URL + "/meta/downloadFile?token=" + token + "&guid=" + res.result + "&pwd=" + encodeURIComponent(encrypt.encrypt(this.codeForm.repassword));
      $("#downFrame").attr("src", url).click();
      this.closeDown();