Surpriseplus
2022-11-12 50f52beb0ed100105166f62027cd0b15e6b596dc
重新
已添加6个文件
已修改23个文件
2919 ■■■■■ 文件已修改
public/config/config.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
public/index.html 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/JS/drag.js 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/api.js 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/lang/en.js 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/lang/zh.js 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/MapView/mapExportApply.vue 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/MapView/mapExportBox.vue 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/MapView/mapExportLayer.vue 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/MapView/mapMenuPop.vue 44 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/MapView/mapMenuTop.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/MapView/mapSpacePop.vue 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/login.vue 36 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/mapsdk.vue 129 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/navMenu.vue 196 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/router/index.js 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/Archive/index.vue 407 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/Home.vue 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/Synthesis/coverage.vue 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/Synthesis/index.vue 245 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/Synthesis/measurement.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/Synthesis/plotting.vue 324 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/datamanage/SpatialData.vue 696 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/datamanage/metadataManage.vue 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/exportMap/index.vue 527 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/maintenance/menuSettings.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/maintenance/mochaitmo.vue 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/userManage/userInfoManage.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
public/config/config.js
@@ -16,7 +16,7 @@
window.sceneConfig = {
  // sdk许可
  licenseServer: 'http://192.168.20.39/LFServer',
  // licenseServer: 'http://192.168.20.55:9055',
  // licenseServer: 'http://192.168.20.39:9055',
  // æœåŠ¡åœ°å€
  baseURL: 'http://183.162.245.49:8888/',
public/index.html
@@ -7,10 +7,6 @@
  <meta name="viewport" content="width=device-width,initial-scale=1.0">
  <title>
  </title>
  <link rel="stylesheet" href="./SmartEarthSDK/Workers/css/smartearth.css">
  <link rel="stylesheet" href="./SmartEarthSDK/Workers/layui/css/layui.css">
  <script src="./SmartEarthSDK/Workers/polyfill.min.js"></script>
  <script src="./SmartEarthSDK/Cesium/Cesium.js"></script>
  <script src="./SmartEarthSDK/SmartEarth.min.js"></script>
@@ -18,12 +14,10 @@
  <script src="./config/config.js"></script>
  <script src="./config/rsa.min.js"></script>
  <script src="./config/rollups.js"></script>
  <style>
    .esriControlsBR {
      display: none;
    }
    .ol-overlaycontainer-stopevent {
      display: none;
    }
@@ -31,8 +25,6 @@
</head>
<body>
  <div id="app"></div>
</body>
src/JS/drag.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,28 @@
import Vue from 'vue';
// ä½¿ç”¨Vue.directive()定义一个全局指令
// 1.参数一:指令的名称,定义时指令前面不需要写v-
// 2.参数二:是一个对象,该对象中有相关的操作函数
// 3.在调用的时候必须写v-
const drag = Vue.directive('drag', {
  // 1.指令绑定到元素上回立刻执行bind函数,只执行一次
  // 2.每个函数中第一个参数永远是el,表示绑定指令的元素,el参数是原生js对象
  // 3.通过el.focus()是无法获取焦点的,因为只有插入DOM后才生效
  bind: function (el) {},
  // inserted表示一个元素,插入到DOM中会执行inserted函数,只触发一次
  inserted: function (el) {
    el.onmousedown = function (e) {
      var disx = e.pageX - el.offsetLeft;
      var disy = e.pageY - el.offsetTop;
      document.onmousemove = function (e) {
        el.style.left = e.pageX - disx + 'px';
        el.style.top = e.pageY - disy + 'px';
      };
      document.onmouseup = function () {
        document.onmousemove = document.onmouseup = null;
      };
    };
  },
  // å½“VNode更新的时候会执行updated,可以触发多次
  updated: function (el) {},
});
export default drag;
src/api/api.js
@@ -198,10 +198,6 @@
export function queryMenuTree() {
  return request.get('/perms/selectMenus');
}
//请求编辑菜单栏数据
export function queryMenuAll() {
  return request.get('/menu/selectMenuAll');
}
//菜单递归查询数据
export function selectMenuRecursive(params) {
  return request.get('/menu/selectMenuRecursive', { params: params });
@@ -444,17 +440,54 @@
  return request.get('/inquiry/selectWktById', { params: params });
}
//数据管理=>数据检索=>查询字段信息
export function inquiry_selectFields(params) {
  return request.get('/inquiry/selectFields', { params: params });
export function dataQuery_selectFields(params) {
  return request.get('/dataQuery/selectFields', { params: params });
}
//数据管理=>数据检索=>查询值域信息
export function inquiry_selectDomains(params) {
  return request.get('/inquiry/selectDomains', { params: params });
export function dataQuery_selectDomains(params) {
  return request.get('/dataQuery/selectDomains', { params: params });
}
//数据管理=>数据检索 =>分页查询
export function dataQuery_selectByPage(params) {
  return request.get('/dataQuery/selectByPage', { params: params });
}
//数据管理=>数据检索=>查询所有表
export function dataQuery_selectTabs(params) {
  return request.get('/dataQuery/selectTabs', { params: params });
}
//综合展示=>列表查询=>查询所有表
export function inquiry_SelectTabs(params) {
  return request.get('/inquiry/selectTabs', { params: params });
}
//综合展示=>列表查询=>查询字段信息
export function inquiry_selectFields(params) {
  return request.get('/inquiry/selectFields', { params: params });
}
//综合展示=>列表查询=>查询值域信息
export function inquiry_selectDomains(params) {
  return request.get('/inquiry/selectDomains', { params: params });
}
//综合展示=>列表查询=>分页查询
export function inquiry_selectByPage(params) {
  return request.get('/inquiry/selectByPage', { params: params });
}
//综合展示=>列表查询=>根据ID查询WKT
export function inquiry_selectWktById(params) {
  return request.get('/inquiry/selectWktById', { params: params });
}
//资料馆=>分页查询
export function dataLib_selectByPage(params) {
  return request.get('/dataLib/selectByPage', { params: params });
}
//资料馆=>查询字段信息
export function dataLib_selectFields(params) {
  return request.get('/dataLib/selectFields', { params: params });
}
//资料馆=>查询阈值
export function dataLib_selectDomains(params) {
  return request.get('/dataLib/selectDomains', { params: params });
}
//请求站场点内容
@@ -555,23 +588,4 @@
// æŸ¥è¯¢å½“前用户的权限授权实体集合
export function getPerms() {
  return request.get('perms/selectPermsEntity');
}
// æŸ¥è¯¢å€¼åŸŸè¡¨ç»“构树
export function getDomainTabs() {
  return request.get('domain/selectTabs');
}
//分页查询
export function getSingleTab(params) {
  return request.get('domain/selectByPageAndCount', { params: params });
}
//更新值域数据
export function updateDomain(params) {
  return request.post('domain/update', params);
}
export function deleteDomain(params) {
  return request.get('domain/deletes', { params: params });
}
//插入值域数据
export function insertDomain(params) {
  return request.post('domain/insert', params);
}
src/assets/lang/en.js
@@ -78,17 +78,6 @@
      modifySuccessfully: 'modify successfully',
      tipsUp: 'Are you sure to save the changes?',
    },
    domainManage: {
      index:'index',
      bak: "bak",
      bsm: "bsm",
      codeDesc: "codeDesc",
      domCode: "domCode",
      domDesc: "domDesc",
      domName: "domName",
      level: "level",
      orderid: "orderid",
    },
    styleManage: 'Style Manage',
    styleObj: {
      index: 'Index',
@@ -361,8 +350,6 @@
    flatterrain: 'Flat Terrain',
    terrainexcavation: 'Terrain Excavation',
    removepaint: 'Remove Paint',
    openFile: 'open File',
    saveFile: 'save File',
    synthobj: {
      m1: 'Horizontal distance',
      m2: 'Spatial distance',
src/assets/lang/zh.js
@@ -78,18 +78,6 @@
      modifySuccessfully: '修改成功',
      tipsUp: '是否确定保存修改内容?',
    },
    domainManage: {
      index: '序号',
      bak: "备注",
      bsm: "标识码",
      codeDesc: "编码描述",
      domCode: "编码",
      domDesc: "值域表描述",
      domName: "值域名称",
      level: "层级",
      orderid: "序号",
    },
    styleManage: '样式管理',
    styleObj: {
      index: '序号',
@@ -360,8 +348,6 @@
    flatterrain: '地形平整',
    terrainexcavation: '地形开挖',
    removepaint: '清除绘制',
    openFile: '打开',
    saveFile: '保存',
    synthobj: {
      m1: '水平距离',
      m2: '空间距离',
src/components/MapView/mapExportApply.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
<template></template>
<script>
export default {};
</script>
<style></style>
src/components/MapView/mapExportBox.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,57 @@
<template>
  <div class="exportBox">
    <map-layer-info ref="mapLayerInfo" />
  </div>
</template>
<script>
import mapLayerInfo from '../../views/Tools/mapinfo.vue';
export default {
  components: {
    mapLayerInfo,
  },
  data() {
    return {
      formInline: {},
      options: [
        {
          value: '1:100万图幅',
          label: '1:100万图幅',
        },
        {
          value: '1:500万图幅',
          label: '1:500万图幅',
        },
        {
          value: '1:1000万图幅',
          label: '1:1000万图幅',
        },
        {
          value: '1:1500万图幅',
          label: '1:1500万图幅',
        },
      ],
      value: '1:100万图幅',
    };
  },
  mounted() {},
  methods: {
    showExport(res) {
      var value = { name: 'exportLayer', id: res };
      this.$bus.$emit('mapChangeBox', value);
    },
  },
};
</script>
<style lang="less">
.exportBox {
  width: 100%;
  height: 100%;
  position: relative;
  background: rgba(0, 0, 0, 0.5);
  margin: 0;
  padding: 0;
  padding: 1%;
}
</style>
src/components/MapView/mapExportLayer.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
<template>
  <div class="exportLayerBox"></div>
</template>
<script>
export default {
  data() {
    return {};
  },
  methods: {
    changeRowType() {
      this.rowtype = !this.rowtype;
    },
  },
};
</script>
<style lang="less">
.exportLayerBox {
  width: 100%;
  height: 100%;
  border: 1px solid gray;
  overflow: hidden;
  margin: 0;
}
</style>
src/components/MapView/mapMenuPop.vue
@@ -14,11 +14,19 @@
    <div class="rightBox">
      <div class="rightTitle">
        <span>管道</span>
        <el-link :underline="false" class="boxClose"
        <el-link :underline="false" @click="closeMenPop" class="boxClose"
          ><i class="el-icon-close"></i>
        </el-link>
        <el-link :underline="false" class="boxClose"
          ><i class="el-icon-download"></i>
        </el-link>
      </div>
      <el-table :data="tableData" height="220">
      <el-table
        :data="tableData"
        @selection-change="handleSelectionChange"
        height="240"
      >
        <el-table-column type="selection" width="55" />
        <el-table-column align="center" type="index" label="序号" width="50" />
        <el-table-column label="定位" width="100" align="center">
          <template slot-scope="scope">
@@ -39,16 +47,16 @@
        ></el-table-column>
      </el-table>
      <div class="rightPage">
        <!-- <el-pagination
        <el-pagination
          @size-change="handleSizeChange"
          @current-change="handleCurrentChange"
          :current-page="listPage.pageIndex"
          :page-sizes="[10, 20, 30, 40]"
          :page-size="listPage.pageSize"
          layout="total, sizes, prev, pager, next, jumper"
          :total="listPage.pageCount"
          :total="count"
        >
        </el-pagination> -->
        </el-pagination>
      </div>
    </div>
  </div>
@@ -68,8 +76,8 @@
      listPage: {
        pageSize: 10,
        pageIndex: 1,
        pageCount: 0,
      },
      count: 0,
      attributeData: [],
      option: [],
      tableData: [],
@@ -86,14 +94,33 @@
      domainsLayer: [],
      optionx: [],
      imagePoint: null,
      multipleSelection: [],
    };
  },
  methods: {
    handleSelectionChange(val) {
      this.multipleSelection = val;
    },
    handleSizeChange(val) {
      this.listdata.pageSize = val;
      this.listdata.pageIndex = 1;
      this.getTableData();
    },
    handleCurrentChange(val) {
      this.listdata.pageIndex = val;
      this.getTableData();
    },
    closeMenPop() {
      sgworld.Creator.SimpleGraphic.clear();
      this.$store.state.mapPopBoolean = false;
      this.$store.state.mapPopBoxFlag = null;
    },
    startTableMssage() {
      this.listdata.pageIndex = 1;
      this.listdata.pageSize = 10;
      this.listdata.name = null;
      this.option = [];
      this.multipleSelection = [];
    },
    setTableAll() {
      this.startTableMssage();
@@ -101,7 +128,6 @@
      this.querylayer = this.$store.state.mapSpaceQueryLayer;
      this.option = this.$store.state.mapSpaceQueryLayer;
      this.listdata.name = this.option[0].entity;
      this.getTableDateHidder();
    },
    async getTableDateHidder() {
@@ -174,6 +200,7 @@
      }
    },
    setTableChange(res) {
      this.multipleSelection = [];
      this.listdata.pageIndex = 1;
      this.listdata.pageSize = 10;
      this.listdata.name = res.entity;
@@ -181,13 +208,12 @@
    },
    async getTableData() {
      this.tableData = [];
      const data = await dataQuerySelectByPage(this.listdata);
      if (data.code != 200) {
        this.$message.error('列表调用失败');
      }
      debugger;
      var val_Data = data.result;
      this.count = data.count;
      for (var i in val_Data) {
        var valste = val_Data[i];
        for (var j in this.optionx) {
src/components/MapView/mapMenuTop.vue
@@ -153,6 +153,7 @@
    },
    //获取选择树的节点
    getCheckedNodes() {
      this.treeChange = [];
      var valTree = this.$refs.tree.getCheckedNodes();
      if (valTree.length == 0) return;
src/components/MapView/mapSpacePop.vue
@@ -97,8 +97,8 @@
<script>
import {
  dataQuerySelectByPage,
  dataQuerySelectWktById,
  inquiry_selectByPage,
  inquiry_selectWktById,
  inquiry_selectFields,
  inquiry_selectDomains,
  decr,
@@ -289,7 +289,7 @@
          ' ' +
          this.formInline.input;
      }
      const data = await dataQuerySelectByPage(this.listdata);
      const data = await inquiry_selectByPage(this.listdata);
      if (data.code != 200) {
        this.$message.error('列表调用失败');
      }
@@ -314,7 +314,7 @@
        gid: row.gid,
        name: this.spaceLayer,
      };
      const data = await dataQuerySelectWktById(param);
      const data = await inquiry_selectWktById(param);
      if (data.code != 200) {
        this.$message.error('列表调用失败');
      }
src/components/login.vue
@@ -153,15 +153,15 @@
<script>
// import { login } from '../utils/api'
import validCode from "./verificationCode.vue";
import { mapActions } from "vuex";
import validCode from './verificationCode.vue';
import { mapActions } from 'vuex';
export default {
  components: { validCode },
  data() {
    let validUserName = (rule, value, callback) => {
      if (!value) {
        return callback(new Error("用户名不能为空"));
        return callback(new Error('用户名不能为空'));
      } else {
        callback();
      }
@@ -169,7 +169,7 @@
    let validPassword = (rule, value, callback) => {
      if (!value) {
        return callback(new Error("密码不能为空"));
        return callback(new Error('密码不能为空'));
      } else {
        callback();
      }
@@ -177,25 +177,25 @@
    const checkValidCode = (rule, value, callback) => {
      if (!value) {
        callback(new Error("请输入验证码"));
        callback(new Error('请输入验证码'));
      } else if (value.toUpperCase() !== this.validCode.toUpperCase()) {
        callback(new Error("验证码不正确"));
        callback(new Error('验证码不正确'));
      } else {
        callback();
      }
    };
    return {
      validCode: "",
      validCode: '',
      loading: false,
      loginForm: {
        uid: "admin",
        pwd: "Admin@123",
        uid: 'admin',
        pwd: 'Admin@123',
      },
      rules: {
        uid: [{ validator: validUserName, trigger: "blur" }],
        pwd: [{ validator: validPassword, trigger: "blur" }],
        validCode: [{ validator: checkValidCode, trigger: "blur" }],
        uid: [{ validator: validUserName, trigger: 'blur' }],
        pwd: [{ validator: validPassword, trigger: 'blur' }],
        validCode: [{ validator: checkValidCode, trigger: 'blur' }],
      },
    };
  },
@@ -204,7 +204,7 @@
  },
  methods: {
    //   èŽ·å–vuex中Actions里的方法
    ...mapActions(["login", "getpublickey"]),
    ...mapActions(['login', 'getpublickey']),
    getCode(data) {
      console.log(data);
      this.validCode = data; //在data中定义一个 validCode:'',用来记录验证码。
@@ -214,20 +214,20 @@
        if (valid) {
          this.loading = true;
          this.login(this.loginForm)
            .then(response => {
             this.$router.push("/")
            .then((response) => {
              this.$router.push('/');
              
              this.loading = false;
              //调用录接口
            })
            .catch(response => {
            .catch((response) => {
              this.loading = false;
            });
          //如果登录失败,需要刷新验证码的
          this.$refs.refresh.createdCode();
          this.validCode = ""; //清空验证码输入框的内容
          this.validCode = ''; //清空验证码输入框的内容
        } else {
          console.log("error submit!!");
          console.log('error submit!!');
          return false;
        }
      });
src/components/mapsdk.vue
@@ -1,5 +1,4 @@
<template>
  <div class="mapBox">
    <div id="mapdiv">
      <div class="menu_Top" v-if="$store.state.mapMenuBoolean">
        <map-menu-top v-if="$store.state.mapMenuBoxFlag == '1'" />
@@ -123,10 +122,7 @@
          <div class="box-body">
            <el-form ref="form" :model="pathFrom" label-width="50px">
              <el-form-item label="经度:">
                <el-input
                  style="width: 300px"
                  v-model="pathFrom.lon"
                ></el-input>
              <el-input style="width: 300px" v-model="pathFrom.lon"></el-input>
                <el-link
                  :underline="false"
                  @click="showMouseLeftClick(1)"
@@ -135,10 +131,7 @@
                ></el-link>
              </el-form-item>
              <el-form-item label="纬度:">
                <el-input
                  style="width: 300px"
                  v-model="pathFrom.lat"
                ></el-input>
              <el-input style="width: 300px" v-model="pathFrom.lat"></el-input>
                <el-link
                  :underline="false"
                  @click="showMouseLeftClick(2)"
@@ -166,7 +159,6 @@
        ></div>
      </div>
    </div>
  </div>
</template>
<script>
@@ -175,6 +167,7 @@
import mapMenuPop from './MapView/mapMenuPop.vue';
import mapSpaceTop from './MapView/mapSpaceTop.vue';
import mapSpacePop from './MapView/mapSpacePop.vue';
import {
  select_Comprehensive_ByPageAndCount,
  select_Comprehensive_SelectWktById,
@@ -403,24 +396,38 @@
    },
    //显示弹窗
    showChangeBox(res) {
      if (res.name == 'Query') {
      switch (res.name) {
        case 'Query':
        if (res.id == '6') {
        } else if (res.id == '7') {
        } else {
          this.showBufferBoxDialog = true;
        }
      } else if (res.name == 'Coord') {
          break;
        case 'Coord':
        if (res.id == '1') {
          this.showCoordLocalBoxDialog = true;
        } else if (res.id == '2') {
          this.showToponymicLocalBoxDialog = true;
          this.getToponymicData();
        }
      } else if (res.name == 'Analysis') {
          break;
        case 'Analysis':
        if (res.id == '3') {
          this.showPathAnalysisBoxDialog = true;
        }
          break;
        case 'exportLayer':
          if (res.id == 1) {
          } else if (res.id == 2) {
            this.changeMenulayer();
      }
          break;
      }
      // if (res.name == 'Query') {
      // } else if (res.name == 'Coord') {
      // } else if (res.name == 'Analysis') {
      // }
    },
    handleSizeChange(val) {
      this.listData.pageSize = val;
@@ -731,12 +738,12 @@
</script>
<style scoped lang="less">
.mapBox {
  width: 100%;
  height: 100%;
  overflow: hidden;
  margin: 0;
  padding: 0;
// .mapBox {
//   width: 100%;
//   height: 100%;
//   overflow: hidden;
//   margin: 0;
//   padding: 0;
  #mapdiv {
    width: 100%;
@@ -744,7 +751,7 @@
    overflow: hidden;
    margin: 0;
    padding: 0;
    position: absolute;
  position: relative;
    .toponymicLocalBox {
      width: 750px;
@@ -772,11 +779,23 @@
    }
    .pathAnalysisBox {
      width: 412px;
      z-index: 40;
      position: absolute;
      right: 1%;
      bottom: 1%;
  }
  .exportBoxLayer {
    z-index: 40;
    position: absolute;
    top: 3%;
    left: 20%;
  }
  .exportMenuLayer {
    z-index: 40;
    position: absolute;
    top: 15%;
    left: 2%;
    width: 15%;
    }
    .box-body {
      padding: 18px;
@@ -851,7 +870,7 @@
      z-index: 40;
    }
  }
}
// }
// /deep/
// /deep/ .el-input__inner {
@@ -896,23 +915,23 @@
// ::v-deep .el-pagination__jump {
//   color: white;
// }
// .center {
//   left: 1%;
// }
// .CenDiv {
//   position: absolute;
//   bottom: 1%;
//   height: 40px;
//   width: 60px;
//   z-index: 101;
//   display: flex;
//   flex-direction: column;
//   justify-content: space-between;
//   box-shadow: 3px 3px 6px #666;
//   border: 1px solid rgba(204, 204, 204, 0.76);
//   border-radius: 5px;
//   cursor: pointer;
// }
.center {
  left: 1%;
}
.CenDiv {
  position: absolute;
  bottom: 1%;
  height: 40px;
  width: 60px;
  z-index: 101;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  box-shadow: 3px 3px 6px #666;
  border: 1px solid rgba(204, 204, 204, 0.76);
  border-radius: 5px;
  cursor: pointer;
}
// .center1 {
//   right: 1%;
// }
@@ -930,22 +949,22 @@
// .CenDiv:hover {
//   border: 1px solid #409eff;
// }
// .active {
//   width: 100%;
//   height: 100%;
//   background: url('../assets/img/Layer/imgLayer2.png') no-repeat center;
//   position: absolute;
//   background-size: 100% 100%;
//   border-radius: 5px;
// }
// .menuLayer {
//   width: 100%;
//   height: 100%;
//   background: url('../assets/img/Layer/imgLayer1.png') no-repeat center;
//   position: absolute;
//   background-size: 100% 100%;
//   border-radius: 5px;
// }
.active {
  width: 100%;
  height: 100%;
  background: url('../assets/img/Layer/imgLayer2.png') no-repeat center;
  position: absolute;
  background-size: 100% 100%;
  border-radius: 5px;
}
.menuLayer {
  width: 100%;
  height: 100%;
  background: url('../assets/img/Layer/imgLayer1.png') no-repeat center;
  position: absolute;
  background-size: 100% 100%;
  border-radius: 5px;
}
// .menuSelect .el-input__inner {
//   background: rgba(255, 255, 255, 0.2) !important;
src/components/navMenu.vue
@@ -1,16 +1,23 @@
<template>
  <div class="topMenu">
  <div class="leftMenu">
    <div class="leftTopWrapper">
    <div class="logo">
      <img src="../assets/img/www.terra-it.cn.png" alt="" />
    </div>
    <div class="rightWrapper">
      <div class="menu">
        <ul>
          <li v-for="item in menuList" :key="item.id">
            {{ item.cnName }}
          </li>
        </ul>
        <el-menu
          active-text-color="#ffd04b"
          class="el-menu-vertical-demo"
          :default-active="activeIndex"
          background-color="#586884"
          text-color="#fff"
          @select="handleselect"
        >
          <customElMenu :menuData="menuList"></customElMenu>
        </el-menu>
      </div>
    </div>
    <div class="leftBotWrapper">
      <div class="userInfo">
        <img src="../assets/img/user.png" alt="" />
        <span>admin</span>
@@ -18,18 +25,22 @@
        &nbsp;
        <span @click="switchLang"> åˆ‡æ¢è¯­è¨€</span>
      </div>
      <div class="btnBox">
        <div><img src="../assets/img/leftBtn.png" alt="" /></div>
        <div><img src="../assets/img/rightBtn.png" alt="" /></div>
      </div>
    </div>
  </div>
</template>
<script>
import { logout } from "@/api/api";
import { removeToken, getToken } from "@/utils/auth";
import customElMenu from "../components/customElMenu.vue";
import { queryMenuTree, getPerms } from "../api/api";
import { logout } from '@/api/api';
import { removeToken, getToken } from '@/utils/auth';
import customElMenu from '../components/customElMenu.vue';
import { queryMenuTree, getPerms } from '../api/api';
export default {
  name: "navMenu",
  name: 'navMenu',
  //import引入的组件需要注入到对象中才能使用
  components: {
    customElMenu,
@@ -39,10 +50,10 @@
      oriData: [], //原始树数据
      dirData: [], //el树数据
      newData: [], //拖动后数据
      lang: "zh",
      activeIndex: "/",
      lang: 'zh',
      activeIndex: '/',
      menuList: [],
      editTitle: "",
      editTitle: '',
      showPopover: false,
      showEditInfoWrapper: false,
      showEdit: false,
@@ -50,7 +61,7 @@
      editCatalogue: false,
      editUnit: false,
      itemdetail: {},
      formLabelWidth: "70px",
      formLabelWidth: '70px',
    };
  },
  mounted() {
@@ -82,15 +93,14 @@
        if (res.code == 200) {
          if (res.result.length != 0) {
            let menuLists = res.result.filter((value) => {
              return value.pid == 1;
              return value.type == 1;
            });
            // console.log(menuLists);
            this.menuList = menuLists;
            this.menuList = this.treeData(menuLists);
          } else {
            alert("暂无菜单栏数据");
            alert('暂无菜单栏数据');
          }
        } else {
          console.log("接口报错");
          console.log('接口报错');
        }
      });
    },
@@ -101,93 +111,93 @@
        return cloneData.filter((father) => {
          // å¾ªçŽ¯æ‰€æœ‰é¡¹
          let branchArr = cloneData.filter((child) => father.id == child.pid); // å¯¹æ¯”ID,分别上下级菜单,并返回数据
          branchArr.length > 0 ? (father.children = branchArr) : ""; // ç»™çˆ¶çº§æ·»åŠ ä¸€ä¸ªchildren属性,并赋值
          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 == 1; // è¿”回一级菜单
        });
      } else {
        alert("暂无菜单栏数据");
        alert('暂无菜单栏数据');
      }
    },
    logOut() {
      this.$confirm("确认是否退出登录?", "提示", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning",
      this.$confirm('确认是否退出登录?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning',
      })
        .then(async () => {
          const data = await logout({ token: getToken() });
          // console.log(data);
          console.log(data);
          if (data.code != 200) {
            return this.$message.error("退出登录失败");
            return this.$message.error('退出登录失败');
          }
          removeToken();
          this.$router.push("/login");
          this.$router.push('/login');
          this.$message({
            message: "退出登录成功",
            type: "success",
            message: '退出登录成功',
            type: 'success',
          });
        })
        .catch(() => {
          this.$message({
            type: "info",
            message: "已取消",
            type: 'info',
            message: '已取消',
          });
        });
    },
    switchLang() {
      //当前en
      if (this.lang == "en") {
      if (this.lang == 'en') {
        //语言换成zh
        this.lang = "zh";
        this.lang = 'zh';
        //菜单换为zh
        this.$store.commit("changeLang", "zh");
        this.$store.commit('changeLang', 'zh');
        //i18换成zh
        this.$i18n.locale = this.lang;
      }
      //当前zh
      else {
        this.lang = "en";
        this.lang = 'en';
        this.$i18n.locale = this.lang;
        this.$store.commit("changeLang", "en"); //传递点击的节点
        this.$store.commit('changeLang', 'en'); //传递点击的节点
      }
    },
    handleselect(index, indexPath, e) {
      // console.log(e.$attrs.perms);
      this.$store.commit("currentPerms", e.$attrs.perms.perms);
      console.log(e.$attrs.perms);
      this.$store.commit('currentPerms', e.$attrs.perms.perms);
      if (Window.ws != null) {
        Window.ws.close();
        Window.ws.onclose = () => {
          console.log("服务器关闭");
          console.log('服务器关闭');
        };
        Window.ws = null;
      }
      if (index.indexOf("http") != -1) {
        this.$router.push("/databaseMonitoring");
        this.$store.commit("getIframe", index);
      if (index.indexOf('http') != -1) {
        this.$router.push('/databaseMonitoring');
        this.$store.commit('getIframe', index);
      } else if (isNaN(Number(index))) {
        this.$router.push(index);
      }
    },
    getUserPerms() {
      getPerms().then((res) => {
        if (res.code == 200) this.$store.commit("getPermsEntity", res.result);
        if (res.code == 200) this.$store.commit('getPermsEntity', res.result);
      });
    },
  },
  watch: {
    $route() {
      let str = this.$route.path;
      if (str[0] == "/") {
      if (str[0] == '/') {
        this.activeIndex = str.slice(1);
      }
    },
  },
  created() {
    let str = this.$route.path;
    if (str[0] == "/") {
    if (str[0] == '/') {
      this.activeIndex = str.slice(1);
    }
  },
@@ -195,58 +205,66 @@
</script>
<style lang="less" scoped>
//@import url(); å¼•入公共cssç±»
.topMenu {
.leftMenu {
  // width: 300px;
  height: 99%;
  // background-color: #bfa;
}
.leftTopWrapper {
  width: 100%;
  height: 100%;
  background-image: linear-gradient(rgb(34, 33, 33), rgb(27, 31, 78));
  .logo {
    // background-color: rgb(139, 0, 0);
    width: 249px;
    height: 52px;
    img {
      width: 100%;
    }
  }
  .menu {
    height: 90%;
    margin-top: 22px;
    overflow: auto;
    // background-color: rgb(120, 121, 120);
    .el-menu {
      height: 100%;
      width: 280px;
      border-right: none;
      /deep/ .el-submenu {
        margin-bottom: 10px;
        .el-submenu__title {
          background-color: transparent !important;
        }
      }
      .faSub {
        background-color: #586884;
      }
    }
  }
}
.leftBotWrapper {
  width: 258px;
  position: absolute;
  left: 19px;
  bottom: 17px;
  display: flex;
  justify-content: space-between;
  .logo {
    width: 500px;
    height: 100%;
    position: relative;
    img {
      width: 70%;
      position: absolute;
      top: 0;
      bottom: 0;
      left: 0;
      right: 0;
      margin: auto;
    }
  }
  .rightWrapper {
    width: 70%;
    height: 100%;
    display: flex;
    .menu {
      height: 100%;
      width: 80%;
      background-color: rgb(120, 121, 120);
      ul {
        display: flex;
        justify-content: space-around;
        li {
          width: 120px;
          height: 120px;
          background: #bfa;
        }
      }
    }
  align-items: center;
    .userInfo {
      background-color: pink;
      // width: 138px;
      font-size: 16px;
      font-family: Microsoft YaHei;
      font-weight: 400;
      color: #fcfcfc;
      // display: flex;
      // justify-content: space-between;
      // align-items: center;
      // cursor: pointer;
    display: flex;
    justify-content: space-between;
    align-items: center;
    cursor: pointer;
    }
  .btnBox {
    width: 65px;
    display: flex;
    justify-content: space-between;
  }
}
</style>
src/main.js
@@ -12,6 +12,7 @@
import 'element-ui/lib/theme-chalk/index.css';
Vue.prototype.$echarts = echarts;
import * as echarts from 'echarts';
import drag from './JS/drag';
Vue.use(ElementUI, { locale });
Vue.prototype.$http = axios;
Vue.prototype.$bus = new Vue();
src/router/index.js
@@ -6,6 +6,7 @@
import Synthesis from '../views/Synthesis/index.vue'; //综合展示
import Thematic from '../views/Thematic/index.vue'; //专题地图
import Archive from '../views/Archive/index.vue'; //资料馆
import ExportMap from '../views/exportMap/index.vue';
import menuSettings from '@/views/maintenance/menuSettings.vue'; //菜单设置
import rests from '@/views/maintenance/rests.vue'; //其他
import authorityManagement from '@/views/maintenance/authorityManagement.vue'; //权限管理
@@ -27,7 +28,6 @@
import SpatialData from '../views/datamanage/SpatialData.vue'; //数据管理-空间数据
import versionManage from '../views/datamanage/versionManage.vue'; //数据管理-版本管理
import dictionaryManage from '../views/datamanage/dictionaryManage.vue'; //数据管理-字典管理
import domainManage from '../views/datamanage/domainManage.vue'; //数据管理-值域管理
import styleManage from '../views/datamanage/styleManage.vue'; //数据管理-样式管理
import addStyle from '../views/datamanage/addStyle.vue'; //数据管理-样式管理-添加样式
@@ -71,6 +71,15 @@
        component: Synthesis,
        meta: {
          title: '综合展示',
          requireAuth: true, // æ ‡è¯†è¯¥è·¯ç”±æ˜¯å¦éœ€è¦ç™»å½•
        },
      },
      {
        path: '/ExportMap',
        name: 'ExportMap',
        component: ExportMap,
        meta: {
          title: '在线制图',
          requireAuth: true, // æ ‡è¯†è¯¥è·¯ç”±æ˜¯å¦éœ€è¦ç™»å½•
        },
      },
@@ -154,15 +163,6 @@
        name: 'dictionaryManage',
        meta: {
          title: '字典管理',
          requireAuth: true, // æ ‡è¯†è¯¥è·¯ç”±æ˜¯å¦éœ€è¦ç™»å½•
        },
      },
      {
        path: '/domainManage',
        component: domainManage,
        name: 'domainManage',
        meta: {
          title: '值域管理',
          requireAuth: true, // æ ‡è¯†è¯¥è·¯ç”±æ˜¯å¦éœ€è¦ç™»å½•
        },
      },
src/views/Archive/index.vue
@@ -5,6 +5,7 @@
        <div class="title_active">{{ $t('archive.name') }}</div>
        <el-divider />
        <el-tree
          ref="tree"
          :data="tree"
          :props="defaultProps"
          show-checkbox
@@ -14,165 +15,299 @@
    </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-form :inline="true" :model="formInline" class="demo-form-inline">
            <el-form-item>
              <el-input
                v-model="formInline.name"
                placeholder="请输入"
              ></el-input>
            </el-form-item>
            <el-form-item>
              <el-button plain @click="getArchTableData">查询</el-button>
            </el-form-item>
            <el-form-item>
              <el-button plain>重置</el-button>
            </el-form-item>
            <el-form-item>
              <el-button plain>下载</el-button>
            </el-form-item>
            <el-form-item>
              <el-button plain @click="showDialogBox">空间查询</el-button>
            </el-form-item>
          </el-form>
            </div>
          </el-col>
          <el-col :span="4">
            <el-input :placeholder="$t('common.pleaseInput')"
          /></el-col>
          <el-col :span="4"
            ><el-button type="primary">{{ $t('common.iquery') }}</el-button>
            <el-button v-if="archStatus.download" type="primary">{{
              $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>
        <div class="centerBox">
          <el-collapse v-model="activeNames" @change="handleChange" accordion>
            <el-collapse-item
              v-for="(item, index) in companyList"
              :key="index"
              :name="item.entity"
              :title="item.tabDesc"
            >
              <div class="centerTable">
                <el-table :data="tableData" height="550" border stripe>
                  <el-table-column type="selection" width="55" />
            <el-table-column
              prop="name"
              :label="$t('archive.uname')"
              width="180"
                    align="center"
                    type="index"
                    label="序号"
                    width="50"
            />
            <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"
            />
                    v-for="(item, index) in attributeData"
                    :key="index"
                    :label="item.alias"
                    :prop="item.field"
                    show-overflow-tooltip
                    align="center"
                  ></el-table-column>
          </el-table>
        </el-card>
        <el-divider />
        <el-pagination
          :currentPage="currentPage4"
          :page-size="pageSize4"
          :page-sizes="[10, 20, 50, 100]"
                  :current-page="listdata.pageIndex"
                  :page-sizes="[10, 20, 30, 40]"
                  :page-size="listdata.pageSize"
          :small="small"
          :disabled="disabled"
          :background="background"
          layout="total, sizes, prev, pager, next, jumper"
          :total="400"
                  :total="count"
          @size-change="handleSizeChange"
          @current-change="handleCurrentChange"
        />
              </div>
            </el-collapse-item>
          </el-collapse>
        </div>
      </el-card>
    </div>
    <el-dialog
      title="空间查询"
      :visible.sync="dialogVisible"
      width="92%"
      style="margin-left: 16%"
      top="5vh"
      :before-close="handleClose"
    >
      <div style="height: 720px; width: 100%">
        <mapsdk></mapsdk>
      </div>
    </el-dialog>
  </div>
</template>
<script>
import mapsdk from '../../components/mapsdk.vue';
import {
  inquiry_SelectTabs,
  dataLib_selectFields,
  dataLib_selectByPage,
  dataLib_selectDomains,
} from '../../api/api.js';
export default {
  components: {
    mapsdk,
  },
  data() {
    return {
      dialogVisible: false,
      activeNames: null,
      listdata: {
        pageIndex: 1,
        pageSize: 10,
        filter: null,
        name: null,
        wkt: null,
      },
      companyList: [],
      formInline: {},
      count: 0,
      tree: [
        {
          label: '文献',
          children: [
            {
              label: '管道标准文献',
              url: '',
          tabDesc: '基础数据',
          value: 'BD',
          children: [],
            },
            {
              label: '工业管道工程施工及验收规范',
              url: '',
            },
            {
              label: '综合管线设计标准',
              url: '',
            },
          ],
        },
        {
          label: '图纸', //label对应父级标签
          children: [
            {
              label: 'XXX管线设计图纸',
              url: ' ',
            },
            {
              label: 'XXXXXX管线设计图',
              url: ' ',
            },
            {
              label: 'XXXXX管线设计图',
              url: ' ',
            },
          ],
        },
        {
          label: '数据', //label对应父级标签
          children: [
            {
              label: '管道',
              url: ' ',
            },
            {
              label: '阀门',
              url: ' ',
            },
            {
              label: '消费设备',
              url: ' ',
            },
          ],
          tabDesc: '业务数据',
          value: 'BS',
          children: [],
        },
      ],
      defaultProps: {
        chilren: 'children', //"children"内的每个对象解析为一个子项;
        label: 'label', //所有"label"所在的对象解析为一个父项
        label: 'tabDesc', //所有"label"所在的对象解析为一个父项
      },
      tableData: [
        {
          timer: '2016-05-01',
          name: 'Tom',
          count: '3',
          type: '业务图层',
          state: 'x',
        },
        {
          timer: '2016-05-02',
          name: 'Tom',
          count: '2',
          type: '业务图层',
          state: 'x',
        },
        {
          timer: '2016-05-03',
          name: 'Tom',
          count: '1',
          type: '业务图层',
          state: 'x',
        },
      ],
      attributeData: [],
      tableData: [],
      archStatus: {
        download: false,
      },
      archOption: [],
      queryLayer: null,
    };
  },
  methods: {
    handleClose() {
      this.dialogVisible = false;
      this.$store.state.mapMenuBoolean = false;
      this.$store.state.mapMenuBoxFlag = null;
      this.$store.state.mapPopBoolean = false;
      this.$store.state.mapPopBoxFlag = null;
    },
    showDialogBox() {
      this.$store.state.mapMenuBoolean = true;
      this.$store.state.mapMenuBoxFlag = '1';
      this.dialogVisible = true;
    },
    //获取表格数据
    getArchTableData() {
      this.companyList = [];
      this.activeNames = null;
      var valTree = this.$refs.tree.getCheckedNodes();
      if (valTree.length == 0) {
        this.$message.error('请选择要查询的图层资料!');
        return;
      }
      for (var i in valTree) {
        this.listdata.name = valTree[i].entity;
        var filedData = this.getCollapseDomFiled();
        this.archOption.push({
          name: valTree[i].entity,
          fileds: filedData,
          table: this.getCollapseTable(filedData),
        });
      }
      this.companyList = valTree;
    },
    //获取每个表字段名称及阈值
    async getCollapseDomFiled() {
      //查询字段信息;
      const fileds = await dataLib_selectFields({
        name: this.listdata.name,
      });
      if (fileds.code != 200) {
        this.$message.error('调用列表失败,请联系工作人员!');
        return;
      }
      //查询阈值信息;
      const domains = await dataLib_selectDomains({
        name: this.listdata.name,
      });
      if (domains.code != 200) {
        this.$message.error('调用列表失败,请联系工作人员!');
        return;
      }
      var data1 = fileds.result;
      var data2 = domains.result;
      var std = [];
      for (var i in data1) {
        if (data1[i].showtype == 1) {
          if (data1[i].domainNa != null) {
            data1[i].domainNa = this.getDomainNaFild(data1[i].domainNa, data2);
          }
          std.push(data1[i]);
        }
      }
      return std;
    },
    //值域字段匹配
    getDomainNaFild(res, result) {
      for (var i in result) {
        if (result[i].domName == res) {
          return result[i].codeDesc;
        }
      }
      return null;
    },
    //获取每个表的table
    async getCollapseTable(res) {
      var res_val;
      res.then((val) => {
        res_val = val;
      });
      if (this.formInline.name != null) {
        this.listdata.filter = 'name like ' + this.formInline.name;
      }
      const fileds = await dataLib_selectByPage(this.listdata);
      if (fileds.code != 200) {
        this.$message.error('调用列表失败,请联系工作人员!');
        return;
      }
      for (var i in fileds.result) {
        let val_Data = fileds.result[i];
        for (var j in res_val) {
          if (res_val[j].domainNa != null && res_val[j].domainNa != undefined) {
            val_Data[res_val[j].field] = res_val[j].domainNa;
          }
        }
      }
      return fileds;
    },
    //折叠面板切换事件
    handleChange(val) {
      if (val == '') return;
      var that = this;
      this.listdata.name = val;
      this.listdata.pageSize = 10;
      this.listdata.pageIndex = 1;
      for (var i in this.archOption) {
        if (this.archOption[i].name == val) {
          this.queryLayer = this.archOption[i].fileds;
          this.archOption[i].fileds.then((res) => {
            that.attributeData = res;
          });
          this.archOption[i].table.then((res) => {
            this.count = res.count;
            this.tableData = res.result;
          });
        }
      }
    },
    //分页点击事件
    handleSizeChange(val) {
      this.listdata.pageSize = val;
      this.listdata.pageIndex = 1;
      var res = this.getCollapseTable(this.queryLayer);
      res.then((res) => {
        this.tableData = res.result;
      });
    },
    handleCurrentChange(val) {
      this.listdata.pageIndex = val;
      var res = this.getCollapseTable(this.queryLayer);
      res.then((res) => {
        this.tableData = res.result;
      });
    },
    //获取树
    async getTreeData() {
      const data = await inquiry_SelectTabs();
      if (data.code != 200) {
        this.$message.error('列表调用失败');
      }
      var option = data.result;
      for (var i in option) {
        var val_Data = option[i];
        val_Data.id = '1' + i;
        if (option[i].ns == 'bd') {
          this.tree[0].children.push(val_Data);
        } else {
          this.tree[1].children.push(val_Data);
        }
      }
    },
    //权限管理
    showArchMenu(res) {
      switch (res.tag) {
        case '/download':
@@ -190,16 +325,18 @@
        this.showArchMenu(permsEntity[i]);
      }
    }
    this.getTreeData();
  },
};
</script>
<style>
<style scped lang="less">
.archive {
  width: 100%;
  height: 100%;
  position: relative;
}
.archive .left_active {
  width: 21%;
  height: 100%;
@@ -215,9 +352,37 @@
  width: 100%;
  height: 100%;
}
.archive .centerBox {
  max-height: 800px;
  overflow: auto;
}
.archive .centerBox::-webkit-scrollbar {
  /*滚动条整体样式*/
  width: 10px; /*高宽分别对应横竖滚动条的尺寸*/
  height: 1px;
}
.archive .centerBox::-webkit-scrollbar-thumb {
  /*滚动条里面小方块*/
  border-radius: 10px;
  -webkit-box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2);
  background: #e5e5e5;
}
.archive .centerBox::-webkit-scrollbar-track {
  /*滚动条里面轨道*/
  -webkit-box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2);
  border-radius: 10px;
  background: #ffffff;
}
.archive .centerTable {
  height: 600px;
}
.archive .arch_card .el-card__body {
  padding: 10px;
  overflow-y: auto;
}
.archive .el-divider--horizontal {
  margin: 10px 0 !important;
}
src/views/Home.vue
@@ -1,13 +1,17 @@
<template>
  <div class="home">
    <el-container>
      <el-header>
      <el-container>
        <el-aside>
        <nav-menu></nav-menu>
      </el-header>
        </el-aside>
      <el-main>
          <!-- <synthesis class="showsynthesis" v-show="shwomMapview"></synthesis> -->
        <router-view />
      </el-main>
    </el-container>
    </el-container>
    <!-- <iframe src="http://localhost/LFWeb/test.html" width="100%" height="100%"></iframe> -->
  </div>
</template>
@@ -18,30 +22,35 @@
  name: "Home",
  components: {
    navMenu,
  },
  data() {
    return {
      shwomMapview: true,
    };
  },
  methods: {},
  methods: {
  },
};
</script>
<style lang="less">
.home {
  height: 100vh;
  position: relative;
  background-color: #3b4d6e;
  .el-aside {
    margin: 26px 0 0 27px;
    width: 249px;
    // background-color: #bfa;
  }
  .el-container {
    height: 100%;
    .el-header {
      padding: 0;
      height: 160px !important;
    }
    .el-main {
      margin: 0px;
      padding: 10px;
      background-color: rgb(53, 53, 57);
    }
    background: rgb(61, 76, 112);
  }
}
</style>
src/views/Synthesis/coverage.vue
@@ -31,12 +31,12 @@
        //   class: "a2",
        // },
        {
          id: '3',
          id: '2',
          name: 'synthesis.release',
          class: 'a3',
        },
        {
          id: '2',
          id: '3',
          name: 'synthesis.export',
          class: 'a4',
        },
@@ -61,8 +61,11 @@
    checkCourvage(res) {
      switch (res.id) {
        case '1': //图层管理
          // æ‰“开工程树弹窗
          break;
        case '2': //场景发布
          break;
        case '3': //场景导出!
          this.$store.state.exportLayer != this.$store.state.exportLayer;
          break;
      }
    },
src/views/Synthesis/index.vue
@@ -23,44 +23,26 @@
        <measurement />
      </el-tab-pane>
      <el-tab-pane v-if="menuStatus.menu8" :label="$t('synthesis.plotting')">
        <plotting @drawing="showBtn" />
        <plotting />
      </el-tab-pane>
    </el-tabs>
    <el-card class="box-card">
      <map-div></map-div>
    </el-card>
    <div class="plotBox">
      <el-collapse-transition>
        <div class="transition-box" v-show="showBtnBox">
          <ul>
            <li
              @click="changePlot(item)"
              v-for="item in itemsOne"
              :key="item.id"
            >
              <div class="divli">
                <div :class="item.class" class="backimge8"></div>
              </div>
              <div class="div_li">{{ $t(item.name) }}</div>
            </li>
          </ul>
        </div>
      </el-collapse-transition>
    </div>
  </div>
</template>
<script>
import coverage from "./coverage.vue"; //图层
import viewport from "./viewport.vue"; //视图
import wander from "./wander.vue"; //漫游
import analyse from "./analyse.vue"; //分析
import iqyery from "./inquire.vue"; //查询
import orientation from "./orientation.vue"; //定位
import measurement from "./measurement.vue"; //测量
import plotting from "./plotting.vue"; //标绘
import MapDiv from "../../components/MapDiv";
import { getPerms } from "../../api/api";
import coverage from './coverage.vue'; //图层
import viewport from './viewport.vue'; //视图
import wander from './wander.vue'; //漫游
import analyse from './analyse.vue'; //分析
import iqyery from './inquire.vue'; //查询
import orientation from './orientation.vue'; //定位
import measurement from './measurement.vue'; //测量
import plotting from './plotting.vue'; //标绘
import MapDiv from '../../components/MapDiv';
import { getPerms } from '../../api/api';
export default {
  components: {
    coverage,
@@ -75,59 +57,6 @@
  },
  data() {
    return {
      showBtnBox: false,
      itemsOne: [
        {
          id: "1",
          name: "synthesis.point",
          class: "h1",
        },
        {
          id: "2",
          name: "synthesis.line",
          class: "h2",
        },
        // {
        //   id: "3",
        //   name: "synthesis.rectangle",
        //   class: "h3",
        // },
        {
          id: "4",
          name: "synthesis.polygon",
          class: "h4",
        },
        // {
        //   id: "7",
        //   name: "synthesis.symboliclabel",
        //   class: "h7",
        // },
        // {
        //   id: "5",
        //   name: "synthesis.flatterrain",
        //   class: "h5",
        // },
        // {
        //   id: "6",
        //   name: "synthesis.terrainexcavation",
        //   class: "h6",
        // },
        {
          id: "8",
          name: "synthesis.removepaint",
          class: "h8",
        },
        // {
        //   id: "9",
        //   name: "synthesis.openFile",
        //   class: "h6",
        // },
        // {
        //   id: "10",
        //   name: "synthesis.saveFile",
        //   class: "h8",
        // },
      ],
      iframeSrc: null,
      messageName: null,
      permsId: null,
@@ -144,88 +73,14 @@
    };
  },
  watch: {},
  created() {},
  methods: {
    showBtn() {
      this.showBtnBox = !this.showBtnBox;
    },
    changePlot(res) {
      sgworld.Creator.SimpleGraphic.edit(true, { editProp: true });
      switch (res.id) {
        case "1":
          sgworld.Creator.createSimpleGraphic(
            "point",
            {},
            function (entity) {}
          );
          break;
        case "2":
          sgworld.Creator.createSimpleGraphic(
            "polyline",
            {},
            function (entity) {}
          );
          break;
        case "3":
          sgworld.Creator.createSimpleGraphic(
            "rectangle",
            {},
            function (entity) {}
          );
          break;
        case "4":
          sgworld.Creator.createSimpleGraphic(
            "polygon",
            {},
            function (entity) {}
          );
          break;
        case "6":
          if (window.Excavation) {
            window.Excavation.clear();
            window.Excavation = null;
          } else {
            this.$refs.terrainDig.open();
          }
          break;
        case "5":
          if (window.TerrainFlattening) {
            window.TerrainFlattening.remove();
            window.TerrainFlattening = null;
          } else {
            this.$refs.modelPress.open();
          }
          break;
        case "7":
          sgworld.Creator.createModelLibrary();
          break;
        case "8":
          this.clearAll();
          break;
        case "10":
          break;
      }
    },
    clearAll() {
      sgworld.Creator.SimpleGraphic.clear();
      if (window.Excavation) {
        window.Excavation.clear();
        window.Excavation = null;
      }
      if (window.TerrainFlattening) {
        window.TerrainFlattening.remove();
        window.TerrainFlattening = null;
      }
    },
    tepostmessage(res) {
      const msg = {
        message: "changeTool",
        message: 'changeTool',
        data: res,
      };
      document
        .getElementById("sunIframe")
        .getElementById('sunIframe')
        .contentWindow.postMessage(msg, this.iframeSrc);
    },
    showMenuChange(res, result) {
@@ -239,28 +94,28 @@
    },
    showMenuStatus(res) {
      switch (res.cnName) {
        case "图层":
        case '图层':
          this.menuStatus.menu1 = true;
          break;
        case "视图":
        case '视图':
          this.menuStatus.menu2 = true;
          break;
        case "漫游":
        case '漫游':
          this.menuStatus.menu3 = true;
          break;
        case "分析":
        case '分析':
          this.menuStatus.menu4 = true;
          break;
        case "查询":
        case '查询':
          this.menuStatus.menu5 = true;
          break;
        case "定位":
        case '定位':
          this.menuStatus.menu6 = true;
          break;
        case "测量":
        case '测量':
          this.menuStatus.menu7 = true;
          break;
        case "标绘":
        case '标绘':
          this.menuStatus.menu8 = true;
          break;
      }
@@ -270,7 +125,7 @@
      if (this.$store.state.currentPerms) {
        val = this.$store.state.currentPerms;
      } else {
        val = "/comprehensive";
        val = '/comprehensive';
      }
      var permsEntity = this.$store.state.permsEntity;
@@ -294,7 +149,7 @@
  },
  mounted() {
    //this.messageName = this.$store.state.teNmme;
    this.$bus.$on("changetool", (e) => {
    this.$bus.$on('changetool', (e) => {
      this.tepostmessage(e);
    });
  },
@@ -306,7 +161,7 @@
</script>
<style >
.synthesis .el-card {
.el-card {
  border: transparent !important;
}
.synthesis {
@@ -335,14 +190,13 @@
}
.synthesis .box-card {
  height: 88%;
  position: relative;
  border-radius: 0px;
}
.synthesis .el-card .el-card__body {
  padding: 0px;
}
.synthesis .cardbox {
.cardbox {
  width: 98%;
  height: 86%;
  position: absolute;
@@ -350,54 +204,5 @@
.synthesis .el-tabs--border-card {
  border: transparent;
  background: transparent;
}
.synthesis .divli {
  width: 100%;
  height: 50%;
  position: relative;
}
.synthesis li {
  list-style: none;
  float: left;
  height: 60px;
  text-align: center;
  margin: 2px;
  position: relative;
  cursor: pointer;
  margin-top: 5px;
}
.synthesis .backimge8 {
  width: 30px;
  height: 30px;
  position: absolute;
  background-size: 100% 100%;
  margin: 0% 30%;
}
.synthesis .plotBox {
  width: 160px;
  /* height:; */
  position: absolute;
  top: 115px;
  left: 5px;
  background-color: #596882;
}
.synthesis .plotBox .transition-box ul {
  display: flex;
  flex-wrap: wrap;
  justify-content: space-evenly;
  align-items: center;
  width: 100%;
  border-radius: 4px;
  text-align: center;
  color: #fff;
  /* background-color: #bfa; */
  box-sizing: border-box;
}
.synthesis .plotBox .transition-box li {
  margin: 5px;
  width: 46%;
  margin-left: 0;
  /* background-color: #fff; */
  justify-content: space-between;
}
</style>
src/views/Synthesis/measurement.vue
@@ -82,7 +82,6 @@
  methods: {
    showViewMenu(res) {
      if (res.cnName != '测量') return;
      console.log('测量', res.tag);
    },
    clearMeasure(id) {
      if (id) {
src/views/Synthesis/plotting.vue
@@ -1,47 +1,41 @@
<template>
  <div class="box">
    <div class="tooltip"></div>
    <input type="file" accept=".kml" class="file" style="display: none" />
    <ul>
      <li style="margin-left: 20px" @click="drawing">
      <li
        style="margin-left: 20px"
        @click="changePlot(item)"
        v-for="item in itemsOne"
      >
        <div class="divli">
          <div class="backimge8 h1"></div>
          <div :class="item.class" class="backimge8"></div>
        </div>
        <div class="div_li">标绘</div>
        <div class="div_li">{{ $t(item.name) }}</div>
      </li>
      <li style="margin-left: 20px" id="open">
      <li v-if="plotStatus.delete" style="margin-left: 20px">
        <div class="divli">
          <div class="backimge8 h1"></div>
          <div class="backimge8"><i class="el-icon-delete"></i></div>
        </div>
        <div class="div_li">打开json</div>
        <div class="div_li">删除</div>
      </li>
      <li style="margin-left: 20px" @click="save">
      <li v-if="plotStatus.upload" style="margin-left: 20px">
        <div class="divli">
          <div class="backimge8 h1"></div>
          <div class="backimge8"><i class="el-icon-upload2"></i></div>
        </div>
        <div class="div_li">保存json</div>
        <div class="div_li">上传</div>
      </li>
      <li style="margin-left: 20px" @click="kmlopen">
      <li v-if="plotStatus.upload" style="margin-left: 20px">
        <div class="divli">
          <div class="backimge8 h1"></div>
          <div class="backimge8"><i class="el-icon-plus"></i></div>
        </div>
        <div class="div_li">原生kml</div>
        <div class="div_li">新增</div>
      </li>
      <li style="margin-left: 20px" @click="handleOpenClick">
      <li v-if="plotStatus.upload" style="margin-left: 20px">
        <div class="divli">
          <div class="backimge8 h1"></div>
          <div class="backimge8"><i class="el-icon-edit"></i></div>
        </div>
        <div class="div_li">导入KML文件</div>
      </li>
      <li style="margin-left: 20px" @click="handleSaveClick">
        <div class="divli">
          <div class="backimge8 h1"></div>
        </div>
        <div class="div_li">导出KML文件</div>
        <div class="div_li">修改</div>
      </li>
    </ul>
    <terrainDig ref="terrainDig" />
    <modelPress ref="modelPress" />
  </div>
@@ -49,19 +43,60 @@
<script>
// æµ‹é‡-信息弹窗
import terrainDig from "../Tools/terrainDig.vue";
import modelPress from "../Tools/modelPress.vue";
import terrainDig from '../Tools/terrainDig.vue';
import modelPress from '../Tools/modelPress.vue';
export default {
  components: { terrainDig, modelPress },
  data() {
    return {
      id: "",
      plotStatus: {
        delete: true,
        upload: true,
        insert: true,
        update: true,
        delete: false,
        upload: false,
        insert: false,
        update: false,
      },
      itemsOne: [
        {
          id: '1',
          name: 'synthesis.point',
          class: 'h1',
        },
        {
          id: '2',
          name: 'synthesis.line',
          class: 'h2',
        },
        {
          id: '3',
          name: 'synthesis.rectangle',
          class: 'h3',
        },
        {
          id: '4',
          name: 'synthesis.polygon',
          class: 'h4',
        },
        {
          id: '7',
          name: 'synthesis.symboliclabel',
          class: 'h7',
        },
        {
          id: '5',
          name: 'synthesis.flatterrain',
          class: 'h5',
        },
        {
          id: '6',
          name: 'synthesis.terrainexcavation',
          class: 'h6',
        },
        {
          id: '8',
          name: 'synthesis.removepaint',
          class: 'h8',
        },
      ],
    };
  },
  created() {
@@ -73,170 +108,80 @@
        this.showViewMenu(cover_perms[i]);
      }
    }
    layui.use("upload", function () {
      var upload = layui.upload;
      upload.render({
        elem: "#open",
        accept: "file", //普通文件
        auto: false,
        choose: function (obj) {
          var files = obj.pushFile();
          for (var key in files) {
            sgworld.Creator.SimpleGraphic.open(files[key]);
            break;
          }
        },
      });
    });
  },
  methods: {
    handleSaveClick() {
      let funDownload = function (content, filename) {
        let eleLink = document.createElement("a");
        eleLink.download = filename;
        eleLink.style.display = "none";
        // å­—符内容转变成blob地址
        let blob = new Blob([content]);
        eleLink.href = URL.createObjectURL(blob);
        // è§¦å‘点击
        document.body.appendChild(eleLink);
        eleLink.click();
        // ç„¶åŽç§»é™¤
        document.body.removeChild(eleLink);
      };
      let entities = new Cesium.EntityCollection();
      let dataSources = sgworld.Viewer.dataSources;
      for (let i = 0, j = dataSources.length; i < j; i++) {
        for (let v of dataSources.get(i).entities.values) {
          entities.add(v);
        }
      }
      for (let v of sgworld.Viewer.entities.values) {
        entities.add(v);
      }
      if (entities.values.length) {
        console.log(sgworld.Viewer.entities);
        let promise = Cesium.exportKml({ entities: sgworld.Viewer.entities });
        console.log(entities);
        // let promise = Cesium.exportKml({ entities: entities });
        promise.then(function (e) {
          funDownload(e.kml, new Date().getTime() + ".kml");
        });
      } else {
        alert("当前场景没有entities实体");
      }
    },
    handleOpenClick() {
      // let that = this;
      let fileInput = document.querySelector(".file");
      fileInput.onchange = function (evt) {
        let files = evt.target.files;
        if (files.length > 0) {
          let file = evt.target.files[0];
          let fileReader = new FileReader();
          fileReader.readAsDataURL(file);
          fileReader.onload = () => {
            sgworld.Viewer.dataSources
              .add(
                Cesium.KmlDataSource.load(fileReader.result, {
                  camera: sgworld.Viewer.scene.camera,
                  canvas: sgworld.Viewer.scene.canvas,
                })
              )
              .then((KmlDataSource) => {
                console.log(KmlDataSource);
                // let entities = kmlDataSource.entities;
              });
          };
          // let fileReader = new FileReader();
          // fileReader.onload = function () {
          // sgworld.Viewer.dataSources
          // .add(
          //       Cesium.KmlDataSource.load(new Blob([this.result]), {
          //         camera: sgworld.Viewer.scene.camera,
          //         canvas: sgworld.Viewer.scene.canvas,
          //         clampToGround: false,
          //       })
          // )
          //     .then(function (kmlDataSource) {
          //       let entities = kmlDataSource.entities;
          //       let item = entities.values[entities.values.length - 1];
          //       sgworld.Viewer.zoomTo(entities);
          //     });
          //   fileInput = null;
          //   fileReader = null;
          // };
          // fileReader.readAsText(file);
        }
        // fileInput.value = null;
      };
      fileInput.click();
    },
    preview(event) {
      var reader = new FileReader();
      reader.readAsDataURL(file);
      //监听文件读取结束后事件
      reader.onloadend = function (e) {
        $(".img").attr("src", e.target.result); //e.target.result就是最后的路径地址
      };
      // let files = document.getElementById(this.id).files[0];
      // this.imgDataUrl = this.getObjectURL(files);
      // // this.$emit("sendImgUrl", this.imgDataUrl, this.id);
      // console.log("sendImgUrl", this.imgDataUrl, this.id);
    },
    getObjectURL(file) {
      let url = null;
      if (window.createObjectURL != undefined) {
        // basic
        url = window.createObjectURL(file);
      } else if (window.webkitURL != undefined) {
        // webkit or chrome
        url = window.webkitURL.createObjectURL(file);
      } else if (window.URL != undefined) {
        // mozilla(firefox)
        url = window.URL.createObjectURL(file);
      }
      return url;
    },
    showViewMenu(res) {
      if (res.cnName != "标绘") return;
      if (res.cnName != '标绘') return;
      switch (res.tag) {
        case "/delete":
        case '/delete':
          this.plotStatus.delete = true;
          break;
        case "/upload":
        case '/upload':
          this.plotStatus.upload = true;
          break;
        case "/insert":
        case '/insert':
          this.plotStatus.insert = true;
          break;
        case "/update":
        case '/update':
          this.plotStatus.update = true;
          break;
      }
    },
    save() {
      // var val_result = sgworld.Viewer.entities._entities._array;
      // console.log(val_result[0]);
      // console.log(sgworld.Core);
      // console.log(sgworld.Core.getEntityPropValue(val_result[0], show));
      sgworld.Creator.SimpleGraphic.save();
    },
    kmlopen() {
      sgworld.Creator.addKmlLayer(
        "kml数据",
        "http://183.162.245.49:82/sdkdemo_2022/demo/kml/facilities/facilities.kml",
        true
    changePlot(res) {
      switch (res.id) {
        case '1':
          sgworld.Creator.createSimpleGraphic(
            'point',
            {},
            function (entity) {}
      );
    },
    drawing() {
      this.$emit("drawing");
          break;
        case '2':
          sgworld.Creator.createSimpleGraphic(
            'polyline',
            {},
            function (entity) {}
          );
          break;
        case '3':
          sgworld.Creator.createSimpleGraphic(
            'rectangle',
            {},
            function (entity) {}
          );
          break;
        case '4':
          sgworld.Creator.createSimpleGraphic(
            'polygon',
            {},
            function (entity) {}
          );
          break;
        case '6':
          if (window.Excavation) {
            window.Excavation.clear();
            window.Excavation = null;
          } else {
            this.$refs.terrainDig.open();
          }
          break;
        case '5':
          if (window.TerrainFlattening) {
            window.TerrainFlattening.remove();
            window.TerrainFlattening = null;
          } else {
            this.$refs.modelPress.open();
          }
          break;
        case '7':
          sgworld.Creator.createModelLibrary();
          break;
        case '8':
          this.clearAll();
          break;
      }
    },
    clearAll() {
      sgworld.Creator.SimpleGraphic.clear();
@@ -259,7 +204,6 @@
  height: 100%;
  position: relative;
}
.box li {
  list-style: none;
  float: left;
@@ -274,34 +218,34 @@
  margin: 0px;
}
.h1 {
  background: url("../../assets/img/synthesis/椭圆 5 æ‹·è´ 3.png") no-repeat
  background: url('../../assets/img/synthesis/椭圆 5 æ‹·è´ 3.png') no-repeat
    center;
}
.h2 {
  background: url("../../assets/img/synthesis/椭圆 3 æ‹·è´ 16.png") no-repeat
  background: url('../../assets/img/synthesis/椭圆 3 æ‹·è´ 16.png') no-repeat
    center;
}
.h3 {
  background: url("../../assets/img/synthesis/椭圆 3 æ‹·è´ 20.png") no-repeat
  background: url('../../assets/img/synthesis/椭圆 3 æ‹·è´ 20.png') no-repeat
    center;
}
.h4 {
  background: url("../../assets/img/synthesis/椭圆 3 æ‹·è´ 23.png") no-repeat
  background: url('../../assets/img/synthesis/椭圆 3 æ‹·è´ 23.png') no-repeat
    center;
}
.h5 {
  background: url("../../assets/img/synthesis/矩形 14 æ‹·è´.png") no-repeat
  background: url('../../assets/img/synthesis/矩形 14 æ‹·è´.png') no-repeat
    center;
}
.h6 {
  background: url("../../assets/img/synthesis/矩形 14 æ‹·è´ 7.png") no-repeat
  background: url('../../assets/img/synthesis/矩形 14 æ‹·è´ 7.png') no-repeat
    center;
}
.h7 {
  background: url("../../assets/img/synthesis/文本风格.png") no-repeat center;
  background: url('../../assets/img/synthesis/文本风格.png') no-repeat center;
}
.h8 {
  background: url("../../assets/img/synthesis/清除.png") no-repeat center;
  background: url('../../assets/img/synthesis/清除.png') no-repeat center;
}
.backimge8 {
  width: 30px;
src/views/datamanage/SpatialData.vue
@@ -1,6 +1,6 @@
<template>
  <div class="authorityManagement_box">
    <My-bread :list="['数据管理', '空间数据']"></My-bread>
    <My-bread :list="['数据管理', '数据检索']"></My-bread>
    <el-divider />
    <div class="searchComp">
      <el-form ref="ruleForm" :model="ruleForm" :inline="true">
@@ -16,39 +16,37 @@
            >查询</el-button
          >
          <el-button
            @click="resetForm('ruleForm')"
            icon="el-icon-refresh"
            type="info"
            size="small"
            >重置</el-button
          >
          <el-button
          <!-- <el-button
          v-if="btnStatus.delete"
            @click="DelFormData"
            icon="el-icon-delete"
            type="danger"
            size="small"
            >删除</el-button
          >
          > -->
          <el-button
            v-if="!FBtest"
            @click="testfb()"
            v-if="btnStatus.download"
            icon="el-icon-position"
            type="success"
            size="small"
            >发布</el-button
            >下载</el-button
          >
          <el-button
          <!-- <el-button
            v-else
            @click="testfb()"
            icon="el-icon-position"
            type="success"
            size="small"
            >取消</el-button
          >
          > -->
        </el-form-item>
        <el-form-item>
        <!-- <el-form-item>
          <span v-if="FBtest">
            <i class="dotClass" style="background-color: springgreen"></i>
          </span>
@@ -58,13 +56,13 @@
        </el-form-item>
        <el-form-item v-if="FBtest">
          å‘布地址:http://192.168.20.39/SG/default/streamer.ashx
        </el-form-item>
        </el-form-item> -->
      </el-form>
    </div>
    <div class="bottom">
      <div class="leftTree">
        <el-tree
          :data="data"
          :data="tree"
          :props="defaultProps"
          :default-expanded-keys="[1]"
          node-key="id"
@@ -83,75 +81,23 @@
          >
            <el-table-column type="selection" width="55" />
            <el-table-column width="50" type="index" label="序号" />
            <el-table-column min-width="150" prop="pipename" label="管道名称" />
            <el-table-column
              min-width="150"
              v-if="tableType == '场站点'"
              prop="sitename"
              label="场站名称"
            />
            <el-table-column
              min-width="150"
              v-if="tableType == '场站点'"
              prop="type"
              label="场站类型"
            />
            <el-table-column
              min-width="150"
              v-if="tableType == '管道中心线'"
              prop="seriesname"
              label="站列名称"
            />
            <el-table-column
              min-width="50"
              v-if="tableType == '管道中心线'"
              prop="stationvalue"
              label="站列里程"
            />
            <el-table-column
              min-width="50"
              v-if="tableType == '管道中心线'"
              prop="transportm"
              label="输送介质"
            />
            <el-table-column
              min-width="50"
              v-if="tableType == '管道中心线'"
              prop="diameter"
              label="管径"
            />
            <el-table-column
              min-width="150"
              v-if="tableType == '标桩'"
              prop="name"
              label="标桩名称"
            />
            <el-table-column
              min-width="150"
              v-if="tableType == '标桩'"
              prop="type"
              label="标桩类型"
            />
            <el-table-column
              min-width="70"
              prop="create_user"
              label="入库人员"
            />
            <el-table-column
              min-width="100"
              prop="create_time"
              label="入库时间"
            />
              v-for="(item, index) in attributeData"
              :key="index"
              :label="item.alias"
              :prop="item.field"
              show-overflow-tooltip
              align="center"
            ></el-table-column>
            <el-table-column min-width="80" label="操作">
              <template slot-scope="scope">
                <el-link @click="showDetail(scope.$index, scope.row)"
                  >查看</el-link
                >
                <el-link
                  @click="handleEdit(scope.$index, scope.row)"
                  @click="dialogFormVisible = true"
                  style="margin-left: 10px"
                  >修改</el-link
                  >附件</el-link
                >
              </template>
            </el-table-column>
@@ -165,9 +111,9 @@
            v-if="changePag"
            @size-change="handleSizeChange"
            @current-change="handleCurrentChange"
            :current-page="currentPage"
            :current-page="this.listData.pageIndex"
            :page-sizes="[10, 20, 50, 100]"
            :page-size="10"
            :page-size="this.listData.pageSize"
            layout="total, sizes, prev, pager, next, jumper"
            :total="count"
          >
@@ -184,179 +130,113 @@
          </div>
        </div>
        <div class="contentBox">
          <p>管道名称:{{ itemdetail.pipename }}</p>
          <ul>
            <li v-for="(item, index) in itemdetail">
              <p>
                <label> {{ item.label }}:</label>
                <label class="boxlabel">{{ item.value }}</label>
              </p>
          <el-divider></el-divider>
          <div v-if="tableType == '场站点'">
            <p>场站名称:{{ itemdetail.sitename }}</p>
            <el-divider></el-divider>
            <p>场站类型:{{ itemdetail.type }}</p>
            <el-divider></el-divider>
          </div>
          <div v-if="tableType == '管道中心线'">
            <p>站列名称:{{ itemdetail.seriesname }}</p>
            <el-divider></el-divider>
            <p>站列里程:{{ itemdetail.stationvalue }}</p>
            <el-divider></el-divider>
            <p>输送介质:{{ itemdetail.transportm }}</p>
            <el-divider></el-divider>
            <p>管径:{{ itemdetail.diameter }}</p>
            <el-divider></el-divider>
          </div>
          <div v-if="tableType == '标桩'">
            <p>标桩名称:{{ itemdetail.name }}</p>
            <el-divider></el-divider>
            <p>标桩类型:{{ itemdetail.type }}</p>
            <el-divider></el-divider>
          </div>
          <p>入库人员:{{ itemdetail.create_user }}</p>
          <el-divider></el-divider>
          <p>入库时间:{{ itemdetail.create_time }}</p>
            </li>
          </ul>
        </div>
      </el-card>
    </div>
    <el-dialog title="修改详情" :visible.sync="dialogFormVisible">
      <el-form :model="upform">
        <el-form-item label="管道名称" :label-width="formLabelWidth">
          <el-input v-model="upform.pipename" autocomplete="off"></el-input>
    <el-dialog title="附件挂接" width="30%" :visible.sync="dialogFormVisible">
      <el-form :model="formInline" class="demo-form-inline">
        <el-form-item label="添加数据">
          <el-input
            v-model="formInline.file"
            style="width: 300px; margin-right: 20px"
            placeholder="请选择"
            disabled
          ></el-input>
          <input
            name="file1"
            type="file"
            id="insertFile"
            multiple="multiple"
            style="display: none"
              @change="insertFile( )"
          />
          <el-link  @click="getInsertFile( )" :underline="false"
            ><i class="el-icon-folder-opened"></i
          ></el-link>
        </el-form-item>
        <el-form-item
          v-if="tableType == '场站点'"
          label="场站名称"
          :label-width="formLabelWidth"
        >
          <el-input v-model="upform.sitename" autocomplete="off"></el-input>
        <el-form-item>
          <el-row  >
            <el-col :span="2"> <el-link  type="primary" :underline="false" >添加</i></el-link></el-col>
            <el-col :span="2">   <el-link  type="primary" :underline="false" >删除</i></el-link></el-col>
            <el-col :span="2">  <el-link  type="primary" :underline="false" >清空</i></el-link></el-col>
          </el-row>
        </el-form-item>
        <el-form-item
          v-if="tableType == '场站点'"
          label="场站类型"
          :label-width="formLabelWidth"
        <el-form-item>
 <el-table
            ref="filterTable"
            height="99%"
            border
            style="width: 100%"
        >
          <el-input v-model="upform.type" autocomplete="off"></el-input>
          <el-table-column width="50" type="index" label="序号" />
              <el-table-column  prop="date"
        label="文件路径"
         />
      <el-table-column
        prop="name"
        label="文件名称"
        />
           </el-table>
        </el-form-item>
        <el-form-item
          v-if="tableType == '管道中心线'"
          label="站列名称"
          :label-width="formLabelWidth"
        >
          <el-input v-model="upform.seriesname" autocomplete="off"></el-input>
        </el-form-item>
        <el-form-item
          v-if="tableType == '管道中心线'"
          label="站列里程"
          :label-width="formLabelWidth"
        >
          <el-input v-model="upform.stationvalue" autocomplete="off"></el-input>
        </el-form-item>
        <el-form-item
          v-if="tableType == '管道中心线'"
          label="输送介质"
          :label-width="formLabelWidth"
        >
          <el-input v-model="upform.transportm" autocomplete="off"></el-input>
        </el-form-item>
        <el-form-item
          v-if="tableType == '管道中心线'"
          label="管径"
          :label-width="formLabelWidth"
        >
          <el-input v-model="upform.diameter" autocomplete="off"></el-input>
        </el-form-item>
        <el-form-item
          v-if="tableType == '标桩'"
          label="标桩名称"
          :label-width="formLabelWidth"
        >
          <el-input v-model="upform.name" autocomplete="off"></el-input>
        </el-form-item>
        <el-form-item
          v-if="tableType == '标桩'"
          label="标桩类型"
          :label-width="formLabelWidth"
        >
          <el-input v-model="upform.type" autocomplete="off"></el-input>
        <el-form-item>
<el-row :gutter="20">
  <el-col :span="12" :offset="8">  <el-button plain>确认</el-button>  <el-button plain>取消</el-button></el-col>
</el-row>
        </el-form-item>
      </el-form>
      <div slot="footer" class="dialog-footer">
        <el-button type="primary" @click="updateForm">ç¡® å®š</el-button>
        <el-button @click="dialogFormVisible = false">取 æ¶ˆ</el-button>
      </div>
    </el-dialog>
  </div>
</template>
<script>
import $ from 'jquery';
import {
  querySitePointCount,
  querySitePoint,
  queryMarkerCount,
  queryMarker,
  queryStationSeries,
  queryStationSeriesCount,
  UpdateSitePoint,
  UpdateStationSeries,
  UpdatgeMarker,
  dltSitePoint,
  dltStationSeries,
  dltMarker,
} from "../../api/api";
  dataQuery_selectTabs,
  dataQuery_selectDomains,
  dataQuery_selectFields,
  dataQuery_selectByPage,
} from '../../api/api';
import catalogueTree from "../../components/catalogueTree.vue";
import MyBread from "../../components/MyBread.vue";
import catalogueTree from '../../components/catalogueTree.vue';
import MyBread from '../../components/MyBread.vue';
export default {
  //import引入的组件需要注入到对象中才能使用
  name: "dataSearch",
  name: 'dataSearch',
  components: { MyBread, catalogueTree },
  data() {
    return {
      data: [
      formInline: {
        file:''
      },
      tree: [
        {
          id: 1,
          label: "空间入库数据",
          children: [
            {
              label: "场站点",
          tabDesc: '基础数据',
          value: 'BD',
          children: [],
            },
            {
              label: "管道中心线",
            },
            {
              label: "标桩",
          tabDesc: '业务数据',
          value: 'BS',
          children: [],
            },
          ],
        },
      ],
      FBtest: false,
      formLabelWidth: "120px",
      dialogFormVisible: false,
      upform: {
        gid: "",
        pipename: "",
        sitename: "",
        type: "",
        seriesname: "",
        stationvalue: "",
        transportm: "",
        diameter: "",
        name: "",
      },
      tableType: null,
      defaultProps: {
        children: "children",
        label: "label",
        children: 'children',
        label: 'tabDesc',
      },
      changePag: true,
      showinfoBox: false,
      itemdetail: {},
      ruleForm: {
        name: "",
      },
      count: 0,
      pageSize: 10,
      pageNum: 1,
      tableData: [],
      currentPage: 1,
      searchName: "",
      multipleSelection: [],
      btnStatus: {
        select: false,
        delete: false,
@@ -365,60 +245,168 @@
        insert: false,
        update: false,
      },
      tableType: null,
      ruleForm: {
        name: '',
      },
      FBtest: false,
      tableData: [],
      formLabelWidth: '120px',
      dialogFormVisible: false,
      upform: {
        gid: '',
        pipename: '',
        sitename: '',
        type: '',
        seriesname: '',
        stationvalue: '',
        transportm: '',
        diameter: '',
        name: '',
      },
      changePag: true,
      showinfoBox: false,
      itemdetail: {},
      tableData: [],
      attributeData: [],
      currentPage: 1,
      searchName: '',
      multipleSelection: [],
      filedsLayer: null,
      count: 0,
      listData: {
        pageSize: 10,
        pageIndex: 1,
        name: null,
        filter: null,
        wkt: null,
      },
    };
  },
  created() {
    // this.getSPData(10, 1, "");
    // this.getSPCount("");
    this.showPermsBtn();
    this.getTreeDataAll();
  },
  methods: {
    //附件=>文件选择
    getInsertFile(){
      $("#insertFile").click();
    },
    insertFile(){
      var val = document.getElementById("insertFile").files;
        if (!val || !val.length) return;
        this.formInline.file = val[0].name;
    },
    //获取目录树数据
    async getTreeDataAll() {
      const data = await dataQuery_selectTabs();
      if (data.code != 200) {
        this.$message.error('列表调用失败');
      }
      var option = data.result;
      for (var i in option) {
        var val_Data = option[i];
        val_Data.id = '1' + i;
        if (option[i].ns == 'bd') {
          this.tree[0].children.push(val_Data);
        } else {
          this.tree[1].children.push(val_Data);
        }
      }
    },
    //授权管理
    showPermsBtn() {
      let currentPerms = this.$store.state.currentPerms;
      let permsEntity = this.$store.state.permsEntity;
      permsEntity
        .filter((item) => item.perms == currentPerms)
        .map((item) => (this.btnStatus[item.tag.substr(1)] = true));
    },
    handleNodeClick(data) {
      this.closeDetial();
      this.changePag = false;
      this.tableData = [];
      this.currentPage = 1;
      switch (data.label) {
        case "空间入库数据":
          this.tableType = null;
          // this.$nextTick(() => {
          //   this.changePag = true;
          // });
          break;
        case "场站点":
          this.tableType = "场站点";
          this.getSPData(10, 1, "");
          this.getSPCount("");
          // this.$nextTick(() => {
          //   this.changePag = true;
          // });
          break;
        case "管道中心线":
          this.tableType = "管道中心线";
          this.getSSData(10, 1, "");
          this.getSSCount("");
          // this.$nextTick(() => {
          //   this.changePag = true;
          // });
          break;
        case "标桩":
          this.tableType = "标桩";
          this.getMData(10, 1, "");
          this.getMCount("");
          break;
      }
      this.$nextTick(() => {
        this.changePag = true;
        .map((item) => {
          console.log(item);
          this.btnStatus[item.tag.substr(1)] = true;
      });
    },
    //树点击事件
    handleNodeClick(data) {
      //判断点击是否为子节点
      if (data.children != null) return;
      this.listData.name = data.entity; //要查询表格类型;
      this.filedsLayer = this.getCollapseDomFiled(); //获取每个表字段名称及阈值
      //获取table信息
      this.getCollapseTable(this.filedsLayer);
    },
    //获取表格信息
    async getCollapseTable(res) {
      res.then((val) => {
        this.attributeData = val;
      });
      if (this.ruleForm.name != null) {
        this.listData.filter = 'name like ' + this.ruleForm.name;
      }
      const data = await dataQuery_selectByPage(this.listData);
      if (data.code != 200) {
        this.$message.error('调用列表失败,请联系工作人员!');
        return;
      }
      var res_val = this.attributeData;
      this.count = data.count;
      for (var i in data.result) {
        let val_Data = data.result[i];
        for (var j in res_val) {
          if (res_val[j].domainNa != null && res_val[j].domainNa != undefined) {
            val_Data[res_val[j].field] = res_val[j].domainNa;
          }
        }
      }
      this.tableData = data.result;
    },
    //获取每个表字段名称及阈值
    async getCollapseDomFiled() {
      //查询字段信息;
      const fileds = await dataQuery_selectFields({
        name: this.listData.name,
      });
      if (fileds.code != 200) {
        this.$message.error('调用列表失败,请联系工作人员!');
        return;
      }
      //查询阈值信息;
      const domains = await dataQuery_selectDomains({
        name: this.listData.name,
      });
      if (domains.code != 200) {
        this.$message.error('调用列表失败,请联系工作人员!');
        return;
      }
      var data1 = fileds.result;
      var data2 = domains.result;
      var std = [];
      for (var i in data1) {
        if (data1[i].showtype == 1) {
          if (data1[i].domainNa != null) {
            data1[i].domainNa = this.getDomainNaFild(data1[i].domainNa, data2);
          }
          std.push(data1[i]);
        }
      }
      return std;
    },
    //值域字段匹配
    getDomainNaFild(res, result) {
      for (var i in result) {
        if (result[i].domName == res) {
          return result[i].codeDesc;
        }
      }
      return null;
    },
    // è¯·æ±‚场站点内容
    getSPData(size, num, name) {
      querySitePoint(size, num, name).then((res) => {
@@ -458,48 +446,30 @@
    },
    // å…³é”®å­—查询
    submitForm(formName) {
      this.$refs[formName].validate((valid) => {
        if (valid) {
          this.searchName = this.ruleForm.name.trim();
          switch (this.tableType) {
            case "场站点":
              this.getSPData(10, 1, this.searchName);
              this.getSPCount(this.searchName);
              break;
            case "管道中心线":
              this.getSSData(10, 1, this.searchName);
              this.getSSCount(this.searchName);
              break;
            case "标桩":
              this.getMData(10, 1, this.searchName);
              this.getMCount(this.searchName);
              break;
          }
        } else {
          console.log("error submit!!");
          return false;
        }
      });
    submitForm() {
      this.listData.pageIndex = 1;
      this.listData.pageSize = 10;
      //获取table信息
      this.getCollapseTable(this.filedsLayer);
    },
    //分页点击事件
    handleSizeChange(val) {
      this.listdata.pageSize = val;
      this.listdata.pageIndex = 1;
      //获取table信息
      this.getCollapseTable(this.filedsLayer);
    },
    handleCurrentChange(val) {
      this.listdata.pageIndex = val;
      //获取table信息
      this.getCollapseTable(this.filedsLayer);
    },
    // é‡ç½®æŸ¥è¯¢
    resetForm(formName) {
      this.searchName = "";
      this.searchName = '';
      this.$refs[formName].resetFields();
      switch (this.tableType) {
        case "场站点":
          this.getSPData(10, 1, "");
          this.getSPCount("");
          break;
        case "管道中心线":
          this.getSSData(10, 1, "");
          this.getSSCount("");
          break;
        case "标桩":
          this.getMData(10, 1, "");
          this.getMCount("");
          break;
      }
      //获取table信息
      this.getCollapseTable(this.filedsLayer);
    },
    // å‘布按钮
@@ -513,9 +483,9 @@
      //     .then(() => {
      const loading = this.$loading({
        lock: true,
        text: "Loading",
        spinner: "el-icon-loading",
        background: "rgba(0, 0, 0, 0.7)",
        text: 'Loading',
        spinner: 'el-icon-loading',
        background: 'rgba(0, 0, 0, 0.7)',
      });
      setTimeout(() => {
        loading.close();
@@ -527,9 +497,18 @@
    },
    // æŸ¥çœ‹ç•Œé¢
    showDetail(index, row) {
      // console.log(index, row);
      console.log(index, row);
      console.log(this.attributeData);
      this.showinfoBox = true;
      this.itemdetail = row;
      var std = [];
      for (var i in this.attributeData) {
        std.push({
          label: this.attributeData[i].alias,
          value: row[this.attributeData[i].field],
        });
      }
      this.itemdetail = std;
    },
    // å…³é—­æŸ¥çœ‹
    closeDetial() {
@@ -545,15 +524,15 @@
    // æäº¤ä¿®æ”¹
    updateForm() {
      let params = {};
      this.$confirm("是否确定编辑?", "提示", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning",
      this.$confirm('是否确定编辑?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning',
      })
        .then(() => {
          this.dialogFormVisible = false;
          switch (this.tableType) {
            case "场站点":
            case '场站点':
              params = {
                gid: this.upform.gid,
                pipename: this.upform.pipename,
@@ -563,15 +542,15 @@
              UpdateSitePoint(params).then((res) => {
                if (res.data == 1) {
                  this.$message({
                    message: "修改成功",
                    type: "success",
                    message: '修改成功',
                    type: 'success',
                  });
                }
                this.getSPData(10, 1, "");
                this.getSPCount("");
                this.getSPData(10, 1, '');
                this.getSPCount('');
              });
              break;
            case "管道中心线":
            case '管道中心线':
              params = {
                gid: this.upform.gid,
                pipename: this.upform.pipename,
@@ -583,15 +562,15 @@
              UpdateStationSeries(params).then((res) => {
                if (res.data == 1) {
                  this.$message({
                    message: "修改成功",
                    type: "success",
                    message: '修改成功',
                    type: 'success',
                  });
                }
                this.getSSData(10, 1, "");
                this.getSSCount("");
                this.getSSData(10, 1, '');
                this.getSSCount('');
              });
              break;
            case "标桩":
            case '标桩':
              params = {
                gid: this.upform.gid,
                pipename: this.upform.pipename,
@@ -601,12 +580,12 @@
              UpdatgeMarker(params).then((res) => {
                if (res.data == 1) {
                  this.$message({
                    message: "修改成功",
                    type: "success",
                    message: '修改成功',
                    type: 'success',
                  });
                }
                this.getMData(10, 1, "");
                this.getMCount("");
                this.getMData(10, 1, '');
                this.getMCount('');
              });
              break;
          }
@@ -633,47 +612,47 @@
      for (var i in this.multipleSelection) {
        std.push(this.multipleSelection[i].gid);
      }
      this.$confirm("确定是否删除所选内容?", "提示", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning",
      this.$confirm('确定是否删除所选内容?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning',
      })
        .then(() => {
          switch (this.tableType) {
            case "场站点":
            case '场站点':
              dltSitePoint(std).then((res) => {
                if (res.data !== 0) {
                  this.$message({
                    message: "删除成功",
                    type: "success",
                    message: '删除成功',
                    type: 'success',
                  });
                }
                this.getSPData(10, 1, "");
                this.getSPCount("");
                this.getSPData(10, 1, '');
                this.getSPCount('');
              });
              break;
            case "管道中心线":
            case '管道中心线':
              dltStationSeries(std).then((res) => {
                if (res.data !== 0) {
                  this.$message({
                    message: "删除成功",
                    type: "success",
                    message: '删除成功',
                    type: 'success',
                  });
                }
                this.getSSData(10, 1, "");
                this.getSSCount("");
                this.getSSData(10, 1, '');
                this.getSSCount('');
              });
              break;
            case "标桩":
            case '标桩':
              dltMarker(std).then((res) => {
                if (res.data !== 0) {
                  this.$message({
                    message: "删除成功",
                    type: "success",
                    message: '删除成功',
                    type: 'success',
                  });
                }
                this.getMData(10, 1, "");
                this.getMCount("");
                this.getMData(10, 1, '');
                this.getMCount('');
              });
              break;
          }
@@ -687,47 +666,6 @@
          // });
        })
        .catch(() => {});
    },
    // æ¡æ•°ä¿®æ”¹
    handleSizeChange(val) {
      this.pageSize = val;
      switch (this.tableType) {
        case "空间入库数据":
          break;
        case "场站点":
          this.getSPData(this.pageSize, 1, "");
          this.getSPCount("");
          break;
        case "管道中心线":
          this.getSSData(this.pageSize, 1, "");
          this.getSSCount("");
          break;
        case "标桩":
          this.getMData(this.pageSize, 1, "");
          this.getMCount("");
          break;
      }
    },
    // é¡µæ•°ä¿®æ”¹
    handleCurrentChange(val) {
      this.pageNum = val;
      switch (this.tableType) {
        case "空间入库数据":
          break;
        case "场站点":
          this.getSPData(this.pageSize, this.pageNum, "");
          this.getSPCount("");
          break;
        case "管道中心线":
          this.getSSData(this.pageSize, this.pageNum, "");
          this.getSSCount("");
          break;
        case "标桩":
          this.getMData(this.pageSize, this.pageNum, "");
          this.getMCount("");
          break;
      }
    },
  },
};
src/views/datamanage/metadataManage.vue
@@ -10,10 +10,7 @@
    <div class="inquire">
      <el-form ref="queryForm" :model="queryForm" :inline="true">
        <el-form-item label="关键字" prop="name">
          <el-input
            v-model="queryForm.name"
            :placeholder="$t('common.pleaseInput')"
          />
          <el-input v-model="queryForm.name" placeholder="请输入" />
        </el-form-item>
        <el-form-item>
          <el-button
@@ -648,6 +645,7 @@
  }
  .infoBox {
    width: 500px;
    border: 1px solid #eee;
    position: absolute;
    z-index: 100;
src/views/exportMap/index.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,527 @@
<template>
  <div class="exportmap">
    <div id="mapView" class="mapView">
      <div class="topMenu">
        <el-form :inline="true" :model="formInline" class="demo-form-inline">
          <el-form-item>
            <el-link
              style="color: white"
              @click="setLeftMenu"
              :underline="false"
              >图层</el-link
            >
          </el-form-item>
          <el-form-item>
            <el-link
              style="color: white"
              @click="changeMenulayer"
              :underline="false"
              ><i class="el-icon-menu"></i>底图</el-link
            >
          </el-form-item>
          <el-form-item>
            <el-select v-model="value" placeholder="请选择">
              <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>
            <el-link style="color: white" :underline="false"
              ><i class="el-icon-rank"></i>
            </el-link>
          </el-form-item>
          <el-form-item>
            <el-link
              style="color: white"
              @click="showMapApply = !showMapApply"
              :underline="false"
              >出图申请
            </el-link></el-form-item
          >
          <el-form-item>
            <el-link
              style="color: white"
              @click="showMapList = true"
              :underline="false"
              >出图列表</el-link
            ></el-form-item
          >
          <el-form-item label="旋转">
            <el-input
              v-model="formInline.role"
              placeholder="请输入内容"
            ></el-input>
          </el-form-item>
          <el-form-item>
            <el-button plain size="mini" @click="setMapRole">旋转</el-button>
            <el-button plain size="mini" @click="setMapAddDraw()"
              >绘制</el-button
            >
            <el-button plain size="mini" @click="setMapRemoveDraw()"
              >清除</el-button
            >
          </el-form-item>
        </el-form>
      </div>
      <div class="leftMeu" v-if="showleftMenu">
        <div class="topHeader">
          <div style="float: left">图层</div>
          <div style="float: right">
            <el-link @click="showleftMenu = false" :underline="false"
              ><i class="el-icon-close"></i
            ></el-link>
          </div>
          <div style="float: right; margin-right: 5%">
            <el-link :underline="false" @click="changeRowType"
              ><i
                :class="
                  rowtype == true ? 'el-icon-arrow-down' : 'el-icon-arrow-up'
                "
              ></i
            ></el-link>
          </div>
        </div>
        <div class="topContent" v-if="rowtype">
          <el-link
            @click="dialogVisible = true"
            style="color: white"
            :underline="false"
          >
            <i class="el-icon-plus">添加</i></el-link
          >
          <el-divider />
          <el-tree
            :data="data"
            show-checkbox
            node-key="id"
            :props="defaultProps"
            :default-expanded-keys="[1]"
            @check-change="handleTreeNodeClick"
          >
          </el-tree>
        </div>
      </div>
      <div v-drag class="mapApplay" v-if="showMapApply">
        <label>出图申请</label>
        <el-divider />
        <el-form ref="form" :model="form" label-width="80px">
          <el-form-item label="出图名称">
            <el-input v-model="form.name"></el-input>
          </el-form-item>
          <el-form-item>
            <el-table
              ref="singleTable"
              :data="tableData"
              style="width: 100%"
              height="200"
            >
              <el-table-column type="index" width="50"> </el-table-column>
              <el-table-column property="date" label="日期" width="120">
              </el-table-column>
              <el-table-column property="name" label="姓名" width="120">
              </el-table-column>
              <el-table-column property="address" label="地址">
              </el-table-column>
            </el-table>
          </el-form-item>
          <el-form-item>
            <el-button type="primary" @click="setMapApply">立即创建</el-button>
            <el-button @click="showMapApply = false">取消</el-button>
          </el-form-item>
        </el-form>
      </div>
      <div v-drag class="mapApplay" v-if="showMapList">
        <div>
          <label>出图列表</label>
          <div style="float: right">
            <el-link @click="showMapList = false" :underline="false"
              ><i class="el-icon-close"></i
            ></el-link>
          </div>
          <div style="float: right; margin-right: 20px">
            <el-button type="warning" size="mini" plain>批量下载</el-button>
          </div>
        </div>
        <el-divider />
        <el-table
          ref="singleTable"
          :data="tableData"
          style="width: 100%"
          height="200"
        >
          <el-table-column type="index" width="50"> </el-table-column>
          <el-table-column property="date" label="日期" width="120">
          </el-table-column>
          <el-table-column property="name" label="姓名" width="120">
          </el-table-column>
          <el-table-column property="address" label="地址"> </el-table-column>
        </el-table>
      </div>
      <div
        @click="changeMenulayer"
        class="center CenDiv"
        :class="{ center1: centerFlag }"
      >
        <div
          id="cenBg"
          v-bind:class="{ active: isActive, menuLayer: isMenuLayer }"
        ></div>
      </div>
    </div>
    <el-dialog
      title="提示"
      :visible.sync="dialogVisible"
      width="30%"
      :before-close="handleClose"
    >
      <el-form ref="layerform" :model="layerform" label-width="80px">
        <el-form-item label="服务名称">
          <el-input v-model="layerform.name"></el-input>
        </el-form-item>
        <el-form-item label="服务类型">
          <el-radio-group v-model="layerform.type">
            <el-radio label="WMS"></el-radio>
          </el-radio-group>
        </el-form-item>
        <el-form-item label="服务地址">
          <el-input type="textarea" v-model="layerform.resource"></el-input>
        </el-form-item>
      </el-form>
      <span slot="footer" class="dialog-footer">
        <el-button @click="dialogVisible = false">取 æ¶ˆ</el-button>
        <el-button type="primary" @click="setAddMapLayer">ç¡® å®š</el-button>
      </span>
    </el-dialog>
  </div>
</template>
<script>
import ImageWMS from 'ol/source/ImageWMS';
import Map from 'ol/Map';
import XYZ from 'ol/source/XYZ';
import View from 'ol/View';
import Image from 'ol/layer/Image';
import TileLayer from 'ol/layer/Tile';
import { transform } from 'ol/proj';
import Draw, { createRegularPolygon, createBox } from 'ol/interaction/Draw.js';
import { OSM, Vector as VectorSource } from 'ol/source';
import { Vector as VectorLayer } from 'ol/layer';
import LayerVector from 'ol/layer/Vector';
import Style from 'ol/style/Style';
import Fill from 'ol/style/Fill';
import Stroke from 'ol/style/Stroke';
import Circle from 'ol/style/Circle';
import mapviewVue from '../../components/mapview.vue';
export default {
  data() {
    return {
      dialogVisible: false,
      showleftMenu: false,
      showMapApply: false,
      showMapList: false,
      centerFlag: false,
      isActive: true,
      isMenuLayer: false,
      rowtype: true,
      form: {},
      formInline: { role: '' },
      layerform: {},
      tableData: [],
      options: [{}],
      value: '',
      data: [
        {
          id: 1,
          label: '图层',
          children: [],
        },
      ],
      defaultProps: {
        children: 'children',
        label: 'label',
      },
      draw: null,
      vector: null,
      source: null,
    };
  },
  mounted() {
    this.initMap();
  },
  methods: {
    setMapRemoveDraw() {
      if (this.draw != null) {
        mapView.removeLayer(this.vector);
      }
    },
    setMapAddDraw() {
      this.setMapRemoveDraw();
      this.source = new VectorSource({ wrapX: false });
      this.vector = new VectorLayer({
        source: this.source,
      });
      mapView.addLayer(this.vector);
      let type = 'Circle';
      let geometryFunction = createBox();
      this.draw = new Draw({
        source: this.source,
        type,
        geometryFunction,
      });
      mapView.addInteraction(this.draw);
      this.draw.on('drawend', (e) => {
        let feature = e.feature;
        let geom = feature.getGeometry();
        var extent = geom.getExtent();
        var a1 = transform([extent[0], extent[1]], 'EPSG:3857', 'EPSG:4326');
        var a2 = transform([extent[2], extent[3]], 'EPSG:3857', 'EPSG:4326');
        var std = [a1, a2];
        console.log(std);
        mapView.removeInteraction(this.draw);
      });
    },
    setMapRole() {
      var value = parseFloat(this.formInline.role);
      var role = (Math.PI / 180) * value;
      mapView.getView().setRotation(role);
    },
    setMapApply() {},
    handleClose() {},
    handleTreeNodeClick(data, nodes) {
      if (data.label == '图层') return;
      if (nodes == true) {
        var wmsLayer = new Image({
          source: new ImageWMS({
            ratio: 1,
            url: data.resource,
            crossOrigin: 'anonymous',
            //serverType: 'geoserver',
            params: {
              VERSION: '1.3.0',
              FORMAT: 'image/png',
              LAYERS: '',
              srs: 'EPSG:900913',
              tiled: true,
              styles: '',
            },
          }),
        });
        wmsLayer.name = data.label;
        mapView.addLayer(wmsLayer);
      } else {
        var len = mapView.getAllLayers();
        for (var i in len) {
          var layer = mapView.getLayers().item(i);
          if (layer.name == data.label) {
            mapView.removeLayer(layer);
          }
        }
      }
    },
    setAddMapLayer() {
      this.dialogVisible = false;
      this.data[0].children.push({
        label: this.layerform.name,
        type: this.layerform.type,
        resource: this.layerform.resource,
      });
    },
    setLeftMenu() {
      this.showleftMenu = true;
      this.rowtype = true;
    },
    //左侧菜单点击事件
    changeRowType() {
      this.rowtype = !this.rowtype;
    },
    //地图初始化
    initMap() {
      var vectorLayer = new TileLayer({
        source: new XYZ({
          url: 'http://wprd0{1-4}.is.autonavi.com/appmaptile?lang=zh_cn&size=1&style=7&x={x}&y={y}&z={z}',
        }),
      });
      var imageLayer = new TileLayer({
        source: new XYZ({
          url: 'http://wprd0{1-4}.is.autonavi.com/appmaptile?lang=zh_cn&size=1&style=6&x={x}&y={y}&z={z}',
        }),
      });
      window.mapView = new Map({
        target: 'mapView',
        layers: [imageLayer, vectorLayer],
        view: new View({
          center: transform([105.02, 34.9], 'EPSG:4326', 'EPSG:3857'),
          zoom: 4,
          projection: 'EPSG:3857',
        }),
      });
      this.formInline.role = mapView.getView().getRotation();
    },
    //切换底图
    changeMenulayer() {
      this.isActive = !this.isActive;
      this.isMenuLayer = !this.isMenuLayer;
      this.setLayerVisible();
    },
    setLayerVisible() {
      if (this.isActive == true) {
        mapView.getLayers().item(0).setVisible(false);
        mapView.getLayers().item(1).setVisible(true);
      } else {
        mapView.getLayers().item(0).setVisible(true);
        mapView.getLayers().item(1).setVisible(false);
      }
    },
  },
};
</script>
<style lang="less">
.exportmap {
  width: 100%;
  height: 100%;
  background: white;
  margin: 0;
  padding: 0;
  overflow: hidden;
  .mapView {
    width: 100%;
    height: 100%;
    .topMenu {
      background: rgba(0, 0, 0, 0.5);
      z-index: 40;
      position: absolute;
      left: 40%;
      top: 3%;
      padding-top: 1%;
      padding-left: 1%;
      padding-right: 1%;
    }
    .mapApplay {
      width: 40%;
      position: absolute;
      background: rgba(0, 0, 0, 0.5);
      z-index: 40;
      top: 15%;
      margin-left: 20%;
      padding: 1%;
      label {
        color: white;
      }
    }
    .mapList {
      width: 40%;
      position: absolute;
      background: rgba(0, 0, 0, 0.5);
      z-index: 40;
      top: 15%;
      margin-left: 20%;
      padding: 1%;
    }
    .leftMeu {
      position: absolute;
      width: 13%;
      z-index: 40;
      top: 10%;
      margin-left: 1%;
      border-radius: 5px;
      padding: 1%;
    }
    .topHeader {
      padding: 5%;
      background: rgba(0, 0, 0, 0.5);
      width: 100%;
      border-radius: 5px;
      color: white;
      height: 25px;
      border: 1px solid gray;
    }
    .topContent {
      background: rgba(0, 0, 0, 0.5);
      width: 100%;
      padding: 5%;
      border-radius: 5px;
      border: 1px solid gray;
    }
    .el-icon-close {
      color: white;
    }
    .el-icon-arrow-down {
      color: white;
    }
    .el-icon-arrow-up {
      color: white;
    }
    .contentHeader {
      border-top: 1px solid gray;
      padding: 3%;
      width: 94%;
      color: white;
    }
    .center {
      margin-left: 1%;
    }
    .CenDiv {
      position: absolute;
      bottom: 3%;
      height: 40px;
      width: 60px;
      z-index: 101;
      display: flex;
      flex-direction: column;
      justify-content: space-between;
      box-shadow: 3px 3px 6px #666;
      border: 1px solid rgba(204, 204, 204, 0.76);
      border-radius: 5px;
      cursor: pointer;
    }
    .center1 {
      margin-left: 1%;
    }
    .right {
      position: absolute;
      top: 50px;
      right: 0;
      width: 20%;
      height: calc(100% - 50px);
      display: flex;
      flex-direction: column;
      justify-content: space-between;
    }
    .CenDiv:hover {
      border: 1px solid #409eff;
    }
    .active {
      width: 100%;
      height: 100%;
      background: url('../../assets/img/Layer/imgLayer2.png') no-repeat center;
      position: absolute;
      background-size: 100% 100%;
      border-radius: 5px;
    }
    .menuLayer {
      width: 100%;
      height: 100%;
      background: url('../../assets/img/Layer/imgLayer1.png') no-repeat center;
      position: absolute;
      background-size: 100% 100%;
      border-radius: 5px;
    }
  }
}
</style>
src/views/maintenance/menuSettings.vue
@@ -183,7 +183,7 @@
<script>
import MyBread from '../../components/MyBread.vue';
import {
  queryMenuAll,
  queryMenuTree,
  updateMenuTree,
  updateMenuTrees,
  queryMaxId,
@@ -296,7 +296,7 @@
      // queryMaxId().then((res) => {
      //   this.id = res.data;
      // });
      queryMenuAll().then((res) => {
      queryMenuTree().then((res) => {
        if (res.code == 200) {
          this.menuList = this.treeData(res.result);
          this.oriData = res.result;
src/views/maintenance/mochaitmo.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
<template>
  <div class="mochaitmo_Box"></div>
</template>
<script>
export default {};
</script>
<style lang="less">
.mochaitmo_Box {
  width: 100%;
  height: 100%;
}
</style>
src/views/userManage/userInfoManage.vue
@@ -1013,6 +1013,7 @@
      this.queryInfo();
    },
    showPermsMenu(res) {
      console.log(res.tag);
      switch (res.tag) {
        case "/delete":
          this.menuStatus.delete = true;