管道基础大数据平台系统开发-【前端】-新系統界面
surprise
2024-05-09 e897fc3d35f8e5dfa56d5f0c80a655ccf99202cf
代码更新
已修改7个文件
803 ■■■■ 文件已修改
src/assets/lang/zh.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/chart/BaseBarChart.vue 151 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/chart/BaseLineChart.vue 101 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/navMenu.vue 332 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/Thematic/index.vue 63 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/Tools/AddOnlineMap.vue 146 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/Tools/layer.js 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/lang/zh.js
@@ -943,7 +943,7 @@
      valueexamine: "请选择目录节点所需的检查项",
      valuedirectory: "请选择所属目录",
      valuedescription: "请输入描述信息",
      valuesuffix: "请输入目录节点可存储数据类型后缀,如:.zip,.doc,.xls,.dwg,.pdf",
      valuesuffix: "请输入目录节点可存储数据类型后缀,如:.zip,.doc,.xls, ,.pdf",
      label: '请添加要查询的条件',
      queryContent: '请输入查询内容',
      geographicPosition: '请在地图上添加地理位置',
src/components/chart/BaseBarChart.vue
@@ -1,5 +1,6 @@
<template>
  <div class="barchar" ref="chart"></div>
  <div class="barchar"
       ref="chart"></div>
</template>
<script>
@@ -40,15 +41,15 @@
      default: "",
    },
  },
  data() {
  data () {
    return {
      chart: null,
      dataList: [],
    }
  },
  computed: {
    option() {
      let data = [
    option () {
      let data=[
        {
          country: "苏丹",
          count: 1,
@@ -95,22 +96,22 @@
        },
      ]
      let xAxisData = []
      let yAxisData = []
      if (this.dataList) {
        data = this.dataList
      let xAxisData=[]
      let yAxisData=[]
      if(this.dataList) {
        data=this.dataList
      }
      let count = 0
      let countVal = 0
      let count=0
      let countVal=0
      const title = this.title
      const title=this.title
      data.forEach(item => {
        let name = item.province || item.country || item.输送介质
        let value = item.count || item.站场数量
        if (title == "站场座数" && item.管道数量) {
          count += item.管道数量
        let name=item.province||item.country||item.输送介质
        let value=item.count||item.站场数量
        if(title=="站场座数"&&item.管道数量) {
          count+=item.管道数量
        } else {
          count += item.count || 0
          count+=item.count||0
        }
        // switch (title) {
@@ -125,12 +126,22 @@
        xAxisData.push(name)
        yAxisData.push(value)
      })
      console.log("管道数量", countVal)
      if (typeof count === "number") {
        this.$bus.$emit("changeCount", count)
      var obj=[];
      for(var i in xAxisData) {
        if(xAxisData[i]) {
          obj.push(xAxisData[i])
        } else {
          obj.push("其他")
        }
      }
      let option = {
      xAxisData=obj
      if(typeof count==="number") {
        this.$bus.$emit("changeCount",count)
      }
      let option={
        backgroundColor: "transparent",
        tooltip: {
          trigger: "axis",
@@ -161,24 +172,24 @@
              textStyle: {
                fontSize: 11,
              },
              formatter: function (value) {
              formatter: function(value) {
                //
                var ret = "" //拼接加\n返回的类目项
                var maxLength = 2 //每项显示文字个数
                var valLength = value.length //X轴类目项的文字个数
                var rowN = Math.ceil(valLength / maxLength) //类目项需要换行的行数
                if (xAxisData.length < 7) {
                var ret="" //拼接加\n返回的类目项
                var maxLength=2 //每项显示文字个数
                var valLength=value.length //X轴类目项的文字个数
                var rowN=Math.ceil(valLength/maxLength) //类目项需要换行的行数
                if(xAxisData.length<7) {
                  return value
                }
                if (rowN > 1) {
                if(rowN>1) {
                  //如果类目项的文字大于3,
                  for (var i = 0; i < rowN; i++) {
                    var temp = "" //每次截取的字符串
                    var start = i * maxLength //开始截取的位置
                    var end = start + maxLength //结束截取的位置
                  for(var i=0;i<rowN;i++) {
                    var temp="" //每次截取的字符串
                    var start=i*maxLength //开始截取的位置
                    var end=start+maxLength //结束截取的位置
                    //这里也可以加一个是否是最后一行的判断,但是不加也没有影响,那就不加吧
                    temp = value.substring(start, end) + "\n"
                    ret += temp //凭借最终的字符串
                    temp=value.substring(start,end)+"\n"
                    ret+=temp //凭借最终的字符串
                  }
                  return ret
                } else {
@@ -229,7 +240,7 @@
                  ],
                  false
                ),
                barBorderRadius: [20, 20, 0, 0],
                barBorderRadius: [20,20,0,0],
                shadowColor: "rgba(0,160,221,1)",
                shadowBlur: 4,
              },
@@ -242,11 +253,11 @@
                height: 14,
                backgroundColor: "rgba(0,160,221,0.1)",
                borderRadius: 200,
                position: ["-8", "-20"],
                position: ["-8","-20"],
                distance: 1,
                formatter: value => {
                  // console.log(value);
                  if (value.name == "中国") {
                  if(value.name=="中国") {
                    return [
                      `    {d|●}", " {a|${value.value}}     \n", "    {b|}`,
                    ].join(",")
@@ -283,85 +294,85 @@
  watch: {
    option: {
      deep: true,
      handler(newVal) {
      handler (newVal) {
        this.setOptions(newVal)
      },
    },
    project: {
      deep: true,
      immediate: true,
      handler(newVal) {
        let requsetFn = null
        switch (newVal) {
      handler (newVal) {
        let requsetFn=null
        switch(newVal) {
          case "全球项目":
            requsetFn = countCountryDimension
            requsetFn=countCountryDimension
            break
          case "全国项目":
            requsetFn = countProvinceDimension
            requsetFn=countProvinceDimension
            break
          case "全球管网图":
            requsetFn = countZhPipeStations
            requsetFn=countZhPipeStations
            break
          case "全国管网图":
            requsetFn = countZhPipeStations
            requsetFn=countZhPipeStations
            break
          default:
            break
        }
        requsetFn && this.initData(requsetFn)
        requsetFn&&this.initData(requsetFn)
        this.setOptions(this.option)
      },
    },
  },
  mounted() {
  mounted () {
    // this.initData()
    this.initChart()
    if (this.autoResize) {
      window.addEventListener("resize", this.resizeHandler)
    if(this.autoResize) {
      window.addEventListener("resize",this.resizeHandler)
    }
  },
  beforeDestroy() {
    if (!this.chart) {
  beforeDestroy () {
    if(!this.chart) {
      return
    }
    if (this.autoResize) {
      window.removeEventListener("resize", this.resizeHandler)
    if(this.autoResize) {
      window.removeEventListener("resize",this.resizeHandler)
    }
    this.chart.dispose()
    this.chart = null
    this.chart=null
  },
  methods: {
    resizeHandler() {
      this.chart && this.chart.resize()
    resizeHandler () {
      this.chart&&this.chart.resize()
    },
    initChart() {
      this.chart = echarts.init(this.$refs.chart, "", {
    initChart () {
      this.chart=echarts.init(this.$refs.chart,"",{
        renderer: this.type,
      })
      this.chart.setOption(this.option)
      this.chart.on("click", this.handleClick)
      this.chart.on("click",this.handleClick)
    },
    handleClick(params) {
      this.$emit("click", params)
    handleClick (params) {
      this.$emit("click",params)
    },
    setOptions(option) {
    setOptions (option) {
      this.clearChart()
      this.resizeHandler()
      if (this.chart) {
      if(this.chart) {
        this.chart.setOption(option)
      }
    },
    refresh() {
    refresh () {
      this.setOptions(this.option)
    },
    clearChart() {
      this.chart && this.chart.clear()
    clearChart () {
      this.chart&&this.chart.clear()
    },
    async initData(requsetFn = countCountryDimension) {
      const res = await requsetFn()
      if (res.code == 200) {
        this.dataList = res.result
        console.log("requsetFn", res)
    async initData (requsetFn=countCountryDimension) {
      const res=await requsetFn()
      if(res.code==200) {
        this.dataList=res.result
        console.log("requsetFn",res)
      }
    },
  },
src/components/chart/BaseLineChart.vue
@@ -1,5 +1,6 @@
<template>
  <div class="linechar" ref="chart"></div>
  <div class="linechar"
       ref="chart"></div>
</template>
<script>
@@ -54,27 +55,27 @@
      default: "",
    },
  },
  data() {
  data () {
    return {
      chart: null,
      dataList: [],
    }
  },
  computed: {
    option() {
      let xAxis = []
      let yAxis = []
      const proObj = this.dataList.find(item => item.项目名称 == this.project)
      if (proObj) {
    option () {
      let xAxis=[]
      let yAxis=[]
      const proObj=this.dataList.find(item => item.项目名称==this.project)
      if(proObj) {
        Object.keys(proObj).forEach(item => {
          if (item.toString() != '项目名称') {
          if(item.toString()!='项目名称') {
            xAxis.push(item)
            yAxis.push(proObj[item])
          }
        })
      } else {
        this.dataList.forEach(item => {
          let type = item.type || item.projtype
          let type=item.type||item.projtype
          xAxis.push(type)
          yAxis.push(item.count)
        })
@@ -88,7 +89,17 @@
      //   }
      // })
      let option = {
      var obj=[];
      for(var i in xAxis) {
        if(xAxis[i]) {
          obj.push(xAxis[i])
        } else {
          obj.push("其他")
        }
      }
      xAxis=obj
      let option={
        tooltip: {
          trigger: "axis",
        },
@@ -165,88 +176,88 @@
  watch: {
    option: {
      deep: true,
      handler(newVal) {
      handler (newVal) {
        this.setOptions(newVal)
      },
    },
    project: {
      deep: true,
      immediate: true,
      handler(newVal) {
        let requsetFn = null
        switch (newVal) {
      handler (newVal) {
        let requsetFn=null
        switch(newVal) {
          case "全球项目":
            requsetFn = countProjectTypeNumber
            requsetFn=countProjectTypeNumber
            break
          case "全国项目":
            requsetFn = countProjectTypeNumber
            requsetFn=countProjectTypeNumber
            break
          case "全球管网图":
            requsetFn = countZhPipeMapLength
            requsetFn=countZhPipeMapLength
            break
          case "全国管网图":
            requsetFn = countZhPipeMapLength
            requsetFn=countZhPipeMapLength
            break
          default:
            requsetFn = countStorageByProject
            requsetFn=countStorageByProject
            break
        }
        requsetFn && this.initData(requsetFn)
        requsetFn&&this.initData(requsetFn)
        this.setOptions(this.option)
      },
    },
  },
  mounted() {
  mounted () {
    // this.initData()
    this.initChart()
    if (this.autoResize) {
      window.addEventListener("resize", this.resizeHandler)
    if(this.autoResize) {
      window.addEventListener("resize",this.resizeHandler)
    }
  },
  beforeDestroy() {
    if (!this.chart) {
  beforeDestroy () {
    if(!this.chart) {
      return
    }
    if (this.autoResize) {
      window.removeEventListener("resize", this.resizeHandler)
    if(this.autoResize) {
      window.removeEventListener("resize",this.resizeHandler)
    }
    this.chart.dispose()
    this.chart = null
    this.chart=null
  },
  methods: {
    resizeHandler() {
      this.chart && this.chart.resize()
    resizeHandler () {
      this.chart&&this.chart.resize()
    },
    initChart() {
      this.chart = echarts.init(this.$refs.chart, "", {
    initChart () {
      this.chart=echarts.init(this.$refs.chart,"",{
        renderer: this.type,
      })
      this.chart.setOption(this.option)
      this.chart.on("click", this.handleClick)
      this.chart.on("click",this.handleClick)
    },
    handleClick(params) {
      this.$emit("click", params)
    handleClick (params) {
      this.$emit("click",params)
    },
    setOptions(option) {
    setOptions (option) {
      this.clearChart()
      this.resizeHandler()
      if (this.chart) {
      if(this.chart) {
        this.chart.setOption(option)
      }
    },
    refresh() {
    refresh () {
      this.setOptions(this.option)
    },
    clearChart() {
      this.chart && this.chart.clear()
    clearChart () {
      this.chart&&this.chart.clear()
    },
    async initData(requsetFn = GetServicesVisitsCount) {
      const res = await requsetFn(this.params)
      if (res.code == 200) {
        this.dataList = res.result
        console.log("requsetFn", res)
    async initData (requsetFn=GetServicesVisitsCount) {
      const res=await requsetFn(this.params)
      if(res.code==200) {
        this.dataList=res.result
        console.log("requsetFn",res)
      }
    },
  },
src/components/navMenu.vue
@@ -1,40 +1,28 @@
<template>
  <div
    class="NavBox"
    @click.stop
  >
  <div class="NavBox"
       @click.stop>
    <div class="topBox">
      <div class="topTitle"></div>
      <div class="topMenu">
        <div class="menuContent">
          <div
            class="contentDiv"
            @click="setMenuMove(index, item)"
            v-for="(item, index) in listMenu"
          >
          <div class="contentDiv"
               @click="setMenuMove(index, item)"
               v-for="(item, index) in listMenu">
            <div style="display: flex;align-items: center">
              <div class="ImgMenu">
                <div
                  class="menuImage"
                  :class="changeSelectStyle == index ? item.checkClass : item.css"
                ></div>
                <div class="menuImage"
                     :class="changeSelectStyle == index ? item.checkClass : item.css"></div>
              </div>
              <div
                class="menulabel"
                :class="{ changeStyle: changeSelectStyle == index }"
              >
              <div class="menulabel"
                   :class="{ changeStyle: changeSelectStyle == index }">
                <span v-show="language"> {{ item.cnName }}</span> <span v-show="!language"> {{ item.enName }}</span>
              </div>
            </div>
            <div
              class="secondMenuDiv   subpage_Div"
              v-show="index == showFlag ? true :false"
            >
              <div
                v-for="res in item.children"
                @click="setLiClick(res,index)"
                :class="{ changeLiStyle: changeliSelect == res.cnName }"
              >
            <div class="secondMenuDiv   subpage_Div"
                 v-show="index == showFlag ? true :false">
              <div v-for="res in item.children"
                   @click="setLiClick(res,index)"
                   :class="{ changeLiStyle: changeliSelect == res.cnName }">
                <span v-show="language"> {{ res.cnName }}</span> <span v-show="!language"> {{ res.enName }}</span>
              </div>
            </div>
@@ -43,25 +31,19 @@
      </div>
      <div class="topUser">
        <div class="userLanguage">
          <div
            class="userImage theme"
            @click="themeChange"
          ></div>
          <div
            class="userImage user2"
            @click="switchLang"
          ></div>
          <div class="userImage theme"
               @click="themeChange"></div>
          <div class="userImage user2"
               @click="switchLang"></div>
        </div>
        <div class="userName">
          <div class="userImage user1"></div>
          <div class="userText">
            <span>{{ this.$store.state.uname }}</span>
            <el-link
              @click="logOut"
              :underline="false"
              class="elLink"
            >{{ $t('common.logout') }}</el-link>
            <el-link @click="logOut"
                     :underline="false"
                     class="elLink">{{ $t('common.logout') }}</el-link>
          </div>
        </div>
      </div>
@@ -71,13 +53,13 @@
</template>
<script>
import { logout, selectMenuRecursive, sign_insertOpLog } from '@/api/api';
import { removeToken, getToken } from '@/utils/auth';
import { logout,selectMenuRecursive,sign_insertOpLog } from '@/api/api';
import { removeToken,getToken } from '@/utils/auth';
import customElMenu from '../components/customElMenu.vue';
import { queryMenuTree, getPerms } from '../api/api';
import { queryMenuTree,getPerms } from '../api/api';
import colorChange from '../views/maintenance/colorChange.vue';
import { containsCoordinate } from 'ol/extent';
import Vue from 'vue';
import Vue,{ nextTick } from 'vue';
import $ from 'jquery'
export default {
  name: 'navMenu',
@@ -86,7 +68,7 @@
    customElMenu,
    colorChange,
  },
  data() {
  data () {
    return {
      themeColor: true,
@@ -140,34 +122,34 @@
      ]
    };
  },
  created() { },
  mounted() {
    this.$store.state.themeflag = false;
  created () { },
  mounted () {
    this.$store.state.themeflag=false;
    $("#app").removeClass("Black_theme");
    this.getMenuTree();
    if (sessionStorage.getItem('changeliSelect')) {
      this.$set(this, 'changeliSelect', sessionStorage.getItem('changeliSelect'))
    if(sessionStorage.getItem('changeliSelect')) {
      this.$set(this,'changeliSelect',sessionStorage.getItem('changeliSelect'))
      // this.changeliSelect = sessionStorage.getItem('changeliSelect')
    }
    document.body.addEventListener('click', () => {
      this.showFlag = null;
    }, false);
    document.body.addEventListener('click',() => {
      this.showFlag=null;
    },false);
    // this.$bus.$on('closeMenuSecond', res => {
    //   this.showFlag = null;
    // })
    window.addEventListener('message', (e) => {
    window.addEventListener('message',(e) => {
      this.showFlag = null;
      this.showFlag=null;
    })
  },
  computed: {},
  methods: {
    closeSecondMenu() {
      this.showFlag = null
    closeSecondMenu () {
      this.showFlag=null
    },
    themeChange() {
      this.$store.state.themeflag = !this.$store.state.themeflag;
      if (this.$store.state.themeflag == true) {
    themeChange () {
      this.$store.state.themeflag=!this.$store.state.themeflag;
      if(this.$store.state.themeflag==true) {
        $("#app").addClass("Black_theme");
      } else {
@@ -175,32 +157,32 @@
      }
    },
    async getCookies() {
      var boolean = this.getTimeCookies();
      if (boolean != true) {
    async getCookies () {
      var boolean=this.getTimeCookies();
      if(boolean!=true) {
        this.$router.push('/login');
        return;
      }
      if (this.$store.state.permsEntity.length == 0) {
        const data = await getPerms();
        this.$store.state.permsEntity = data.result;
      if(this.$store.state.permsEntity.length==0) {
        const data=await getPerms();
        this.$store.state.permsEntity=data.result;
      }
      this.$store.state.uname = JSON.parse(
      this.$store.state.uname=JSON.parse(
        localStorage.getItem('LFToken')
      ).uname;
      this.$store.state.unid = JSON.parse(
      this.$store.state.unid=JSON.parse(
        localStorage.getItem('LFToken')
      ).userid;
      this.$router.push('/');
    },
    getTimeCookies() {
      if (!localStorage.getItem('LFToken')) {
    getTimeCookies () {
      if(!localStorage.getItem('LFToken')) {
        return false
      }
      var time1 = new Date(JSON.parse(localStorage.getItem('LFToken')).time);
      var time2 = new Date();
      if (time2 > time1) {
      var time1=new Date(JSON.parse(localStorage.getItem('LFToken')).time);
      var time2=new Date();
      if(time2>time1) {
        return false;
      } else {
        return true;
@@ -208,77 +190,81 @@
    },
    //主题切换
    setThemeColors() { },
    async signInsertOpLog(m1, m2) {
      var obj = {
    setThemeColors () { },
    async signInsertOpLog (m1,m2) {
      var obj={
        m1: m1,
        m2: m2,
      }
      const data = await sign_insertOpLog(obj);
      const data=await sign_insertOpLog(obj);
    },
    //鼠标移入菜单事件
    setMenuMove(index, item) {
    setMenuMove (index,item) {
      if (item.perms != null && item.perms != "") {
      if(item.perms!=null&&item.perms!="") {
        this.$router.push(item.url);
        if (this.showFlag != null) {
        if(this.showFlag!=null) {
          this.changeliSelect = '%%';
          this.showFlag = null;
          this.changeliSelect='%%';
          this.showFlag=null;
        }
        if (item.url == "Thematic") {
          this.signInsertOpLog("综合展示", item.cnName)
        if(item.url=="Thematic") {
          this.signInsertOpLog("综合展示",item.cnName)
          this.$nextTick(function() {
            location.reload();
          })
        }
        this.changeSelectStyle = index;
        sessionStorage.setItem('changeSelectStyle', index)
        this.changeSelectStyle=index;
        sessionStorage.setItem('changeSelectStyle',index)
      } else {
        if (this.showFlag != index) {
          this.showFlag = index;
        if(this.showFlag!=index) {
          this.showFlag=index;
        } else {
          this.showFlag = null;
          this.showFlag=null;
        }
      }
      //
      if (index === 4 || index === 5 || index === 6) {
      if(index===4||index===5||index===6) {
        sessionStorage.removeItem('changeliSelect')
        this.$set(this, 'changeliSelect', null)
        this.$set(this,'changeliSelect',null)
      }
    },
    closeAllChildren() {
      var val = this.listMenu
      for (var i = 0; i < val.length; i++) {
        let newItem = val[i];
        newItem.show = false;
    closeAllChildren () {
      var val=this.listMenu
      for(var i=0;i<val.length;i++) {
        let newItem=val[i];
        newItem.show=false;
        Vue.set(val, i, newItem);
        Vue.set(val,i,newItem);
      }
    },
    setShowFalseDiv(bolean) {
      var index = this.showFlag;
      if (index != null) {
        let newItem = this.listMenu[index];
    setShowFalseDiv (bolean) {
      var index=this.showFlag;
      if(index!=null) {
        let newItem=this.listMenu[index];
        newItem.show = bolean;
        Vue.set(this.listMenu, index, newItem);
        newItem.show=bolean;
        Vue.set(this.listMenu,index,newItem);
      }
    },
    setLiClick(res, index) {
      this.changeSelectStyle = index;
      sessionStorage.setItem('changeSelectStyle', index)
    setLiClick (res,index) {
      this.changeSelectStyle=index;
      sessionStorage.setItem('changeSelectStyle',index)
      sessionStorage.removeItem('hanleselectmochaitmo')
      sessionStorage.removeItem('hanleselectindex')
      // this.signInsertOpLog(this.listMenu[index].cnName, res.cnName)
      setTimeout(() => {
        this.changeliSelect = res.cnName;
        sessionStorage.setItem('changeliSelect', res.cnName)
        if (res.url.indexOf('{fmeHost}') != -1) {
          this.$store.reporturl = res.url;
          sessionStorage.setItem('iframehttpurl', this.$store.reporturl)
        this.changeliSelect=res.cnName;
        sessionStorage.setItem('changeliSelect',res.cnName)
        if(res.url.indexOf('{fmeHost}')!=-1) {
          this.$store.reporturl=res.url;
          sessionStorage.setItem('iframehttpurl',this.$store.reporturl)
          this.$router.push('/QualityInspection');
          // if (location.href.indexOf('/WareInspection') == -1) {
          //   this.$store.reporturl = res.url;
@@ -287,29 +273,29 @@
          //   this.$bus.$emit('changeNaveUrl', res.url);
          // }
        } else {
          this.$store.reporturl = null;
          sessionStorage.setItem('iframehttpurl', null)
          this.$store.reporturl=null;
          sessionStorage.setItem('iframehttpurl',null)
          // sessionStorage.setItem('changeliSelect', null)
          this.$router.push(res.url);
          this.$store.commit('currentPerms', res.perms);
          this.$store.commit('currentPerms',res.perms);
        }
        this.setShowFalseDiv(false)
      }, 100)
      },100)
    },
    async getMenuTree() {
    async getMenuTree () {
      this.getCookies();
      const data = await queryMenuTree();
      const data=await queryMenuTree();
      var that = this;
      if (data.code == 200) {
      var that=this;
      if(data.code==200) {
        if (data.result.length != 0) {
          let menuLists = data.result.filter((value) => {
            return value.pid == 1;
        if(data.result.length!=0) {
          let menuLists=data.result.filter((value) => {
            return value.pid==1;
          });
          that.menuList = menuLists;
          that.menuList=menuLists;
          that.setMenuTree(menuLists);
        } else {
@@ -320,22 +306,22 @@
        }
      }
    },
    async setMenuTree(res) {
    async setMenuTree (res) {
      for (var i in res) {
        res[i].checkClass = res[i].css + '1';
        res[i].show = false; //控制显隐
      for(var i in res) {
        res[i].checkClass=res[i].css+'1';
        res[i].show=false; //控制显隐
        if (res[i].perms == null || res[i].perms == "") {
          const result = await selectMenuRecursive({ id: res[i].id });
        if(res[i].perms==null||res[i].perms=="") {
          const result=await selectMenuRecursive({ id: res[i].id });
          if (result.code == 200) {
          if(result.code==200) {
            res[i].children = result.result.filter((value) => {
              return value.isShow == 1;
            res[i].children=result.result.filter((value) => {
              return value.isShow==1;
            })
              .filter((value) => {
                return value.pid == res[i].id;
                return value.pid==res[i].id;
              });
          }
@@ -353,7 +339,7 @@
          //   this.changeSelectStyle = this.listMenu.length - 1;
          // }
          this.changeSelectStyle = sessionStorage.getItem('changeSelectStyle')
          this.changeSelectStyle=sessionStorage.getItem('changeSelectStyle')
          // var strartMneu = res[i].children[0];
          // this.$store.commit('currentPerms', strartMneu.perms);
          // this.changeliSelect = strartMneu.cnName;
@@ -363,17 +349,17 @@
        }
      }
    },
    treeData(source) {
      let cloneData = JSON.parse(JSON.stringify(source)); // 对源数据深度克隆
    treeData (source) {
      let cloneData=JSON.parse(JSON.stringify(source)); // 对源数据深度克隆
      // console.log(cloneData);
      if (cloneData.length != 0) {
      if(cloneData.length!=0) {
        return cloneData.filter((father) => {
          // 循环所有项
          let branchArr = cloneData.filter((child) => father.id == child.pid); // 对比ID,分别上下级菜单,并返回数据
          branchArr.length > 0 ? (father.children = branchArr) : ''; // 给父级添加一个children属性,并赋值
          let branchArr=cloneData.filter((child) => father.id==child.pid); // 对比ID,分别上下级菜单,并返回数据
          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; // 返回一级菜单
          return father.pid==1; // 返回一级菜单
        });
      } else {
        this.$message({
@@ -382,16 +368,16 @@
        });
      }
    },
    logOut() {
      this.$confirm('确认是否退出登录?', '提示', {
    logOut () {
      this.$confirm('确认是否退出登录?','提示',{
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning',
      })
        .then(async () => {
          const data = await logout({ token: getToken() });
          const data=await logout({ token: getToken() });
          // console.log(data);
          if (data.code != 200) {
          if(data.code!=200) {
            return this.$message.error('退出登录失败');
          }
          removeToken();
@@ -408,59 +394,59 @@
          });
        });
    },
    switchLang() {
    switchLang () {
      //当前en
      if (this.lang == 'en') {
      if(this.lang=='en') {
        //语言换成zh
        this.lang = 'zh';
        this.language = true;
        this.$store.state.language = true;
        this.lang='zh';
        this.language=true;
        this.$store.state.language=true;
        //菜单换为zh
        this.$store.commit('changeLang', 'zh');
        this.$store.commit('changeLang','zh');
        //i18换成zh
        this.$i18n.locale = this.lang;
        this.$i18n.locale=this.lang;
      }
      //当前zh
      else {
        this.lang = 'en';
        this.language = false;
        this.$store.state.language = false;
        this.$i18n.locale = this.lang;
        this.$store.commit('changeLang', 'en'); //传递点击的节点
        this.lang='en';
        this.language=false;
        this.$store.state.language=false;
        this.$i18n.locale=this.lang;
        this.$store.commit('changeLang','en'); //传递点击的节点
      }
    },
    handleselect(index, indexPath, e) {
    handleselect (index,indexPath,e) {
      // console.log(e.$attrs.perms);
      this.$store.commit('currentPerms', e.$attrs.perms.perms);
      if (Window.ws != null) {
      this.$store.commit('currentPerms',e.$attrs.perms.perms);
      if(Window.ws!=null) {
        Window.ws.close();
        Window.ws.onclose = () => {
        Window.ws.onclose=() => {
          console.log('服务器关闭');
        };
        Window.ws = null;
        Window.ws=null;
      }
debugger
      if (index.indexOf('{fmeHost}') != -1) {
      debugger
      if(index.indexOf('{fmeHost}')!=-1) {
        this.$router.push('/databaseMonitoring');
        this.$store.commit('getIframe', index);
      } else if (isNaN(Number(index))) {
        this.$store.commit('getIframe',index);
      } else if(isNaN(Number(index))) {
        this.$router.push(index);
      }
    },
  },
  watch: {
    $route() {
      let str = this.$route.path;
      if (str[0] == '/') {
        this.activeIndex = str.slice(1);
    $route () {
      let str=this.$route.path;
      if(str[0]=='/') {
        this.activeIndex=str.slice(1);
      }
    },
  },
  created() {
    this.$store.reporturl = null;
    let str = this.$route.path;
    if (str[0] == '/') {
      this.activeIndex = str.slice(1);
  created () {
    this.$store.reporturl=null;
    let str=this.$route.path;
    if(str[0]=='/') {
      this.activeIndex=str.slice(1);
    }
  },
};
src/views/Thematic/index.vue
@@ -1,21 +1,20 @@
<template>
  <div class="themaic">
    <mapsdk></mapsdk>
    <top class="title" ref="title"></top>
    <left
      class="mapleft"
      :style="{ width: leftWidth, left: leftWidth == '22%' ? '-19px' : '0' }"
      ref="mapleft"
    ></left>
    <top class="title"
         ref="title"></top>
    <left class="mapleft"
          :style="{ width: leftWidth, left: leftWidth == '22%' ? '-19px' : '0' }"
          ref="mapleft"></left>
    <project-tree class="project-tree" v-show="ProjectreeDisplay"></project-tree>
    <project-tree class="project-tree"
                  v-show="ProjectreeDisplay"></project-tree>
    <right
      class="mapright"
      :style="{ width: rightWidth }"
      ref="mapright"
    ></right>
    <bottom class="mapbottom" ref="mapbottom"></bottom>
    <right class="mapright"
           :style="{ width: rightWidth }"
           ref="mapright"></right>
    <bottom class="mapbottom"
            ref="mapbottom"></bottom>
  </div>
</template>
@@ -28,8 +27,8 @@
import ProjectTree from "../../components/Screen/ProjectTree.vue"
import axios from "axios"
export default {
  components: { mapsdk, top, left, right, bottom, ProjectTree },
  data() {
  components: { mapsdk,top,left,right,bottom,ProjectTree },
  data () {
    return {
      leftWidth: "22%",
      rightWidth: "22%",
@@ -38,26 +37,28 @@
      ProjectreeDisplay: false,
    }
  },
  mounted() {},
  created() {
    this.$bus.$on("changeTree", key => {
      this.ProjectreeDisplay = key
  mounted () {
  },
  created () {
    this.$bus.$on("changeTree",key => {
      this.ProjectreeDisplay=key
    })
  },
  methods: {
    //修改左侧宽度
    ChangeWidth(parm) {
      if (parm == "left") {
        if (this.leftWidth == "22%") {
          this.leftWidth = "8px"
    ChangeWidth (parm) {
      if(parm=="left") {
        if(this.leftWidth=="22%") {
          this.leftWidth="8px"
        } else {
          this.leftWidth = "22%"
          this.leftWidth="22%"
        }
      }
      if (parm == "leftView" || parm == "leftTree") {
        this.leftWidth = "22%"
        this.rightWidth = "22%"
      if(parm=="leftView"||parm=="leftTree") {
        this.leftWidth="22%"
        this.rightWidth="22%"
      }
      // if (parm == "leftView") {
      //   this.leftTree = false
@@ -66,11 +67,11 @@
      //   this.leftTree = true
      // }
      if (parm == "right") {
        if (this.rightWidth == "22%") {
          this.rightWidth = "45px"
      if(parm=="right") {
        if(this.rightWidth=="22%") {
          this.rightWidth="45px"
        } else {
          this.rightWidth = "22%"
          this.rightWidth="22%"
        }
      }
    },
src/views/Tools/AddOnlineMap.vue
@@ -1,26 +1,47 @@
<template>
  <Popup ref="pop" :title="title" @close="close(true)" width="400px" @yes="addData" @cancel="close(false)">
  <Popup ref="pop"
         :title="title"
         @close="close(true)"
         width="400px"
         @yes="addData"
         @cancel="close(false)">
    <div id="archTopBox" class="archTopBox">
    <div id="archTopBox"
         class="archTopBox">
      <div class="boxCard" v-for="(item, index) in mapList">
      <div class="boxCard"
           v-for="(item, index) in mapList">
        <el-card class="box-card">
          <div slot="header" class="clearfix">
          <div slot="header"
               class="clearfix">
            <span style="font-size:14px">{{ item.name }}</span>
            <div style="float: right; padding: 3px 0">
              <i v-show="!item.isShow" style="margin-left:10px" class="el-icon-arrow-up" :title="$t('archiveObj.fold')"
                @click="setCardChange(item)"></i>
              <i v-show="item.isShow" style="margin-left:10px" class="el-icon-arrow-down"
                :title="$t('archiveObj.develop')" @click="setCardChange(item)"></i>
              <i v-show="!item.isShow"
                 style="margin-left:10px"
                 class="el-icon-arrow-up"
                 :title="$t('archiveObj.fold')"
                 @click="setCardChange(item)"></i>
              <i v-show="item.isShow"
                 style="margin-left:10px"
                 class="el-icon-arrow-down"
                 :title="$t('archiveObj.develop')"
                 @click="setCardChange(item)"></i>
            </div>
          </div>
          <div :id="item.id" style="margin:5px 1px" v-show="!item.isShow">
          <div :id="item.id"
               style="margin:5px 1px"
               v-show="!item.isShow">
            <div style="margin:10px;width:380px">
              <div class="map" v-for="(map, mapIndex) in item.list" @click="addImageLayer(map, item)">
                <img style="width: 60px; height: 60px" :src="map.image"></img>
                <div> <el-link :underline="false">
              <div class="map"
                   v-for="(map, mapIndex) in item.list"
                   @click="addImageLayer(map, item)">
                <img style="width: 60px; height: 60px"
                     :src="map.image"></img>
                <div>
                  <el-link :underline="false">
                    {{ map.name }}
                  </el-link></div>
                  </el-link>
                </div>
              </div>
            </div>
          </div>
@@ -44,7 +65,7 @@
    Popup,
  },
  mixins: [],
  data() {
  data () {
    return {
      title: "3D在线地图",
      left: undefined,
@@ -64,122 +85,123 @@
    };
  },
  computed: {
    activeNames() {
    activeNames () {
      return this.mapList.map((item) => {
        return item.name;
      });
    },
  },
  methods: {
    setCardChange(res) {
      res.isShow = !res.isShow
    setCardChange (res) {
      res.isShow=!res.isShow
    },
    // 关闭弹窗
    close(isCloseBtn, removeLayer = true) {
    close (isCloseBtn,removeLayer=true) {
      //   removeLayer && this.removeImageLayer();
      // 重置data值
      Object.assign(this.$data, this.$options.data());
      !isCloseBtn && this.$refs.pop.close();
      Object.assign(this.$data,this.$options.data());
      !isCloseBtn&&this.$refs.pop.close();
    },
    // 打开弹窗
    open() {
    open () {
      this.close(true);
      this.$refs.pop.open();
    },
    changeToken(token) {
      this.mapCollection.tokne = token;
    changeToken (token) {
      this.mapCollection.tokne=token;
    },
    removeImageLayer() {
    removeImageLayer () {
      //   window.BaseMapLayer && window.BaseMapLayer.deleteObject();
      //   window.BaseMapLayer = undefined;
      window.Viewer.imageryLayers.remove(
        window.BaseMapLayer
      );
    },
    addImageLayer(map, mapCollection) {
      if (
        this.data.name === map.name &&
        (this.data.urls === map.urls || this.data.urls === mapCollection.urls)
    },
    addImageLayer (map,mapCollection) {
      if(
        this.data.name===map.name&&
        (this.data.urls===map.urls||this.data.urls===mapCollection.urls)
      ) {
        return;
      }
      this.removeImageLayer();
      this.mapCollection = mapCollection;
      if (mapCollection.sourceType === "cesium") {
        return;
      } else if (mapCollection.sourceType === "tdmap") {
      this.mapCollection=mapCollection;
      if(mapCollection.sourceType==="cesium") {
        var tokne = mapCollection.tokne;
        return;
      } else if(mapCollection.sourceType==="tdmap") {
        var tokne=mapCollection.tokne;
        //添加天地图影像
        window.BaseMapLayer = Viewer.imageryLayers.addImageryProvider(new Cesium.WebMapTileServiceImageryProvider({
          url: map.urls + tokne,
        window.BaseMapLayer=Viewer.imageryLayers.addImageryProvider(new Cesium.WebMapTileServiceImageryProvider({
          url: map.urls+tokne,
          layer: "tdtImgLayer",
          style: "default",
          format: "image/jpeg",
          tileMatrixSetID: "GoogleMapsCompatible",
        }))
      } else if (mapCollection.sourceType === "gdmap") {
        window.BaseMapLayer = Viewer.imageryLayers.addImageryProvider(
      } else if(mapCollection.sourceType==="gdmap") {
        window.BaseMapLayer=Viewer.imageryLayers.addImageryProvider(
          new Cesium.UrlTemplateImageryProvider({
            url: map.urls,
            maximumLevel: 22,
          })
        );
      } else if (mapCollection.sourceType === "localmap") {
        var ulr = map.urls;
        ulr = ulr.replace("{host}", iisHost)
        window.BaseMapLayer = Viewer.imageryLayers.addImageryProvider(
      } else if(mapCollection.sourceType==="localmap") {
        var ulr=map.urls;
        console.log(iisHost)
        ulr=ulr.replace("{host}",iisHost)
        window.BaseMapLayer=Viewer.imageryLayers.addImageryProvider(
          new Cesium.UrlTemplateImageryProvider({
            url: ulr,
            maximumLevel: 22,
          })
        );
      }
      Viewer.imageryLayers.lowerToBottom(window.BaseMapLayer);//将图层移到最底层
      Viewer.imageryLayers.raise(window.BaseMapLayer);//将图层移到最底层
      if (is_production) {
      if(is_production) {
        Viewer.imageryLayers.raise(window.BaseMapLayer);//将图层上移一层
      }
    },
    // 添加数据
    addData() {
      if (this.data.urls && this.data.sourceType) {
        let data = {
    addData () {
      if(this.data.urls&&this.data.sourceType) {
        let data={
          id: window.sgworld.Core.getuid(),
          ...this.data,
          Level: [0, 26],
          Level: [0,26],
        };
        if (data.sourceType === "tdmap") {
          data.urls += "&tk=" + this.tokne;
        } else if (data.sourceType === "bdmap") {
          data.style = this.mapCollection.style;
        if(data.sourceType==="tdmap") {
          data.urls+="&tk="+this.tokne;
        } else if(data.sourceType==="bdmap") {
          data.style=this.mapCollection.style;
        }
        if (this.mapCollection.GCJ02) {
          data.GCJ02 = true;
        if(this.mapCollection.GCJ02) {
          data.GCJ02=true;
        }
        data.item = window.BaseMapLayer;
        window.BaseMapLayer = undefined;
        data.item=window.BaseMapLayer;
        window.BaseMapLayer=undefined;
        this.$emit("success", data);
        this.close(false, false);
        this.$emit("success",data);
        this.close(false,false);
      } else {
        this.$message("请选择地图");
      }
src/views/Tools/layer.js
@@ -69,22 +69,22 @@
        {
            name: "地图",
            image: require("../../assets/img/imageLayer/gdmap_map.jpg"),
            urls: "http://{host}/LFData/2d/tiles/vec/{z}/{x}/{y}.png",
            urls: "{host}/LFData/2d/tiles/vec/{z}/{x}/{y}.png",
        },
        {
            name: "影像",
            image: require("../../assets/img/imageLayer/gdmap_image.jpg"),
            urls: "http://{host}/LFData/2d/tiles/img/{z}/{x}/{y}.png",
            urls: "{host}/LFData/2d/tiles/img/{z}/{x}/{y}.png",
        },
        {
            name: "地形",
            image: require("../../assets/img/imageLayer/dixing.png"),
            urls: "http://{host}/LFData/2d/tiles/ter/{z}/{x}/{y}.png",
            urls: "{host}/LFData/2d/tiles/ter/{z}/{x}/{y}.png",
        },
        {
            name: "1:20万区域地质图",
            image: require("../../assets/img/imageLayer/25dizhi.png"),
            urls: "http://{host}/LFData/2d/tiles/20w_qydz/{z}/{x}/{y}.png",
            urls: "{host}/LFData/2d/tiles/20w_qydz/{z}/{x}/{y}.png",
        },
    ],
}