소스 검색

标题动态配置

彭宇 2 년 전
부모
커밋
d5ced37529
5개의 변경된 파일483개의 추가작업 그리고 79개의 파일을 삭제
  1. 8 0
      src/api/system/config.js
  2. 4 8
      src/components/v-fastmenu.vue
  3. 16 64
      src/router/index.js
  4. 453 0
      src/views/tianzhang.vue
  5. 2 7
      vue.config.js

+ 8 - 0
src/api/system/config.js

@@ -58,3 +58,11 @@ export function refreshCache() {
     method: 'delete'
   })
 }
+
+//获取配置信息
+export function selectConfigKey(configKey) {
+  return request({
+    url: '/system/config/selectConfigKey/' + configKey,
+    method: 'get'
+  })
+}

+ 4 - 8
src/components/v-fastmenu.vue

@@ -39,6 +39,7 @@
 <script>
 import resetPwd from "../views/system/user/profile/resetPwd";
 import { getUserProfile } from "@/api/system/user";
+import { selectConfigKey } from "@/api/system/config";
 	export default {
     components: {resetPwd },
 		data() {
@@ -70,14 +71,9 @@ import { getUserProfile } from "@/api/system/user";
     },
 		methods: {
       backToMainPage(){
-        let href = window.location.href
-        let protacal = href.substr(0,href.indexOf("://")+3)
-        let mo = href.lastIndexOf(":") > 6  ? href.lastIndexOf(":") : href.lastIndexOf("/")
-        let ip = href.substr(href.indexOf("://")+3,mo);
-        let url =href.substr(0,mo)
-        // let toUrl = url +":15001/newpage"
-        let toUrl = "http://10.6.52.1:15001/newpage"
-        window.location.href = toUrl
+        selectConfigKey('backToMainPage').then(res => {
+          window.location.href = res.data;
+        })
       },
       getUser(){
         getUserProfile().then(response => {

+ 16 - 64
src/router/index.js

@@ -60,14 +60,6 @@ export const constantRoutes = [{
 			title: '监控中心'
 		}
 	},
-  // {
-	// 	path: '/disaster',
-	// 	name: 'disaster',
-	// 	component: () => import('@/views/disaster'),
-	// 	meta: {
-	// 		title: '灾后评估'
-	// 	}
-	// },
   {
 		path: '/leader',
 		name: 'leader',
@@ -76,30 +68,14 @@ export const constantRoutes = [{
 			title: '网格化'
 		}
 	},
-  // {
-	// 	path: '/afforestation',
-	// 	name: 'afforestation',
-	// 	component: () => import('@/views/afforestation'),
-	// 	meta: {
-	// 		title: '植树造林'
-	// 	}
-	// },
-  // {
-  //   path: '/',
-  //   name: '',
-  //   component: () => import('@/views/animal'),
-  //   meta: {
-  //     title: '动物保护'
-  //   }
-  // },
-  // {
-  //   path: '/',
-  //   name: '',
-  //   component: () => import('@/views/animal'),
-  //   meta: {
-  //     title: '珍惜古树'
-  //   }
-  // },
+  {
+		path: '/tianzhang',
+		name: 'tianzhang',
+		component: () => import('@/views/tianzhang'),
+		meta: {
+			title: '田长制'
+		}
+	},
   {
     path: '/bigdata',
     name: 'bigdata',
@@ -144,14 +120,6 @@ export const constantRoutesNew = [{
 			title: '监控中心'
 		}
 	},
-	// {
-	// 	path: '/disaster',
-	// 	name: 'disaster',
-	// 	component: () => import('@/views/disaster'),
-	// 	meta: {
-	// 		title: '灾后评估'
-	// 	}
-	// },
 	{
 		path: '/leader',
 		name: 'leader',
@@ -160,30 +128,14 @@ export const constantRoutesNew = [{
 			title: '网格化'
 		}
 	},
-	// {
-	// 	path: '/afforestation',
-	// 	name: 'afforestation',
-	// 	component: () => import('@/views/afforestation'),
-	// 	meta: {
-	// 		title: '植树造林'
-	// 	}
-	// },
-  // {
-  //   path: '/',
-  //   name: '',
-  //   component: () => import('@/views/animal'),
-  //   meta: {
-  //     title: '动物保护'
-  //   }
-  // },
-  // {
-  //   path: '/',
-  //   name: '',
-  //   component: () => import('@/views/animal'),
-  //   meta: {
-  //     title: '珍惜古树'
-  //   }
-  // },
+  {
+    path: '/tianzhang',
+    name: 'tianzhang',
+    component: () => import('@/views/tianzhang'),
+    meta: {
+      title: '田长制'
+    }
+  },
   {
     path: '/bigdata',
     name: 'bigdata',

+ 453 - 0
src/views/tianzhang.vue

@@ -0,0 +1,453 @@
+<template>
+  <div class="visual-con">
+    <!--头部-->
+    <vheader></vheader>
+    <!--主体-->
+    <div class="visual-body">
+      <!-- 左侧 -->
+      <div class="leftbar" :class="indentleft" ref="left">
+        <div class="forthis">
+          <dv-border-box-13 backgroundColor="rgba(12, 19, 38, .90)" style="padding-bottom: 1rem;">
+            <img src="../assets/images/integrated/light.png" style="width: 100%; margin-top: .4rem;"/>
+            <div class="this-title">
+              <span>网格列表</span>
+              <dv-decoration-3 style="width:150px;height:15px;margin-right: 1rem;"/>
+            </div>
+            <div class="i-list-con h-25">
+              <div class="d-l-con-icon">
+                <div class="icon-con" :class="{on:listCurrentIndex1==item.userId}"
+                     v-for="(item,index) in peopleList" @click="getLeaderTrack(item.userId)">
+                  <div class="icon icon-mid el-icon-user"></div>
+                  <div class="icon-text personnel-name">
+                    <h6>{{ item.nickName }}</h6>
+                    <h5>{{ item.deptName }}</h5>
+                  </div>
+                </div>
+              </div>
+            </div>
+          </dv-border-box-13>
+        </div>
+        <div class="forthis">
+          <dv-border-box-13 backgroundColor="rgba(12, 19, 38, .90)" style="padding-bottom: 1rem;">
+            <img src="../assets/images/integrated/light.png" style="width: 100%; margin-top: .4rem;"/>
+            <div class="this-title">
+              <span>网格长</span>
+              <dv-decoration-3 style="width:150px;height:15px;margin-right: 1rem;"/>
+            </div>
+            <div class="i-list-con h-27">
+              <div class="d-l-con-icon">
+                <div class="icon-con" :class="{on:listCurrentIndex1==item.userId}"
+                     v-for="(item,index) in peopleList" @click="getLeaderTrack(item.userId)">
+                  <div class="icon icon-mid el-icon-user"></div>
+                  <div class="icon-text personnel-name">
+                    <h6>{{ item.nickName }}</h6>
+                    <h5>{{ item.deptName }}</h5>
+                  </div>
+                </div>
+              </div>
+            </div>
+          </dv-border-box-13>
+        </div>
+      </div>
+      <!-- 地图 -->
+      <supermap ref="supermap" style="width: 100%;height: 100vh;" :mapDiv="'forestMap'" class="indexSupermapClass"
+                :mapSite="{doubleClickZoom:false}" :codes="['9fa5']" :isSideBySide="false"></supermap>
+      <!-- 右侧 -->
+      <div class="rightbar" :class="indentright" ref="right">
+        <div class="forthis">
+          <dv-border-box-13 backgroundColor="rgba(12, 19, 38, .90)" style="padding-bottom: 1rem;">
+            <img src="../assets/images/integrated/light.png" style="width: 100%; margin-top: .4rem;"/>
+            <div class="this-title">
+              <span>田长列表</span>
+              <dv-decoration-3 style="width:150px;height:15px;margin-right: 1rem;"/>
+            </div>
+            <div class="i-list-con h-27">
+              <div class="h-19 overflow-y">
+                <div class="d-l-con" :class="{on:listCurrentIndex2==item.planName}"
+                     v-for="(item,index) in xunLinListOne"
+                     @click="getPointList(item.id)">
+                  <div class="d-l-l-text">
+                    <i class="i-small"></i>
+                    <h4>{{ item.timeBegin }} - {{ item.timeEnd }}</h4>
+                  </div>
+                </div>
+              </div>
+            </div>
+          </dv-border-box-13>
+        </div>
+        <div class="forthis">
+          <dv-border-box-13 backgroundColor="rgba(12, 19, 38, .90)" style="padding-bottom: 1rem;">
+            <img src="../assets/images/integrated/light.png" style="width: 100%; margin-top: .4rem;"/>
+            <div class="this-title">
+              <span>巡查时段</span>
+              <dv-decoration-3 style="width:150px;height:15px;margin-right: 1rem;"/>
+            </div>
+            <div class="i-list-con h-27">
+              <div class="h-19 overflow-y">
+                <div class="d-l-con" :class="{on:listCurrentIndex2==item.planName}"
+                     v-for="(item,index) in xunLinListOne"
+                     @click="getPointList(item.id)">
+                  <div class="d-l-l-text">
+                    <i class="i-small"></i>
+                    <h4>{{ item.timeBegin }} - {{ item.timeEnd }}</h4>
+                  </div>
+                </div>
+              </div>
+            </div>
+          </dv-border-box-13>
+        </div>
+
+      </div>
+      <vBottomMenu ref="bottomMenu"></vBottomMenu>
+<!--      <el-tooltip :content="indentText" placement="top" :disabled="indentdisabled">-->
+<!--        <div class="mascot" ref="mascot" :class="indentStyle" @click="indent">-->
+<!--          <img src="@/assets/images/mascot.png"/>-->
+<!--        </div>-->
+<!--      </el-tooltip>-->
+    </div>
+    <eventLocation ref="eventLocation"></eventLocation>
+    <TVWall ref="TVWall"></TVWall>
+  </div>
+</template>
+
+<script>
+import {
+  getForestLeader,
+  getLeaderTrack,
+  getTrackList,
+  getPointList,
+  getPlanList,
+  getRy
+} from '@/api/leader'
+
+import supermap from '@/components/supermap' //超图
+import vheader from '@/components/v-header.vue' //一体化共用头部
+import vBottomMenu from '@/components/vBottomMenu.vue' //一体化公共底部菜单
+import eventLocation from '@/components/eventLocation.vue' //事件定位弹窗
+import TVWall from '@/components/TVWall.vue' //电视墙弹窗
+
+let echarts = require('echarts')
+export default {
+  components: {
+    supermap,
+    vheader,
+    vBottomMenu,
+    eventLocation,
+    TVWall
+  },
+  data() {
+    return {
+      iconCurrentIndex1: '1',
+      listCurrentIndex1: '',
+      listCurrentIndex2: '',
+      //左右缩进
+      indentStyle: '',
+      indentleft: '',
+      indentright: '',
+      indentText: '收起左右栏',
+      indentdisabled: false,
+      visuForestCloudRYBO: [], //人员类型列表
+      peopleList: [], //人员列表
+      connectList: [], //画线
+      xunLinListOne: [], //巡林计划
+      zrs: 0, //总人数
+      zxrs: 0 //在线人数
+    }
+  },
+  created() {
+    this.getInit()
+    /** ----------------------------------底部按钮公用组件开始------------------------------------- */
+    window.showDialog = this.showDialog
+    window.choseLayerSwitching = this.choseLayerSwitching
+    window.choseLayerSwitchingList = this.choseLayerSwitchingList
+    /** ----------------------------------底部按钮公用组件结束------------------------------------- */
+  },
+  methods: {
+    /** ----------------------------------底部按钮公用组件开始------------------------------------- */
+    showDialog(click) {
+      if (click == 'eventLocation') {
+        this.$refs.eventLocation.showEventLocation()
+        this.$refs.supermap.isEditableLayers = false
+        this.$refs.bottomMenu.showChild = false
+        this.$refs.bottomMenu.showBanChild = false
+        this.$refs.bottomMenu.showChangChild = false
+      } else if (click == 'editableLayers') {
+        this.$refs.bottomMenu.showChild = false
+        this.$refs.bottomMenu.showBanChild = false
+        this.$refs.bottomMenu.showChangChild = false
+        if (!this.$refs.supermap.isEditableLayers) {
+          this.$refs.supermap.isEditableLayers = true
+        } else {
+          this.$refs.supermap.isEditableLayers = false
+        }
+      } else if (click == 'layerSwitching') {
+        this.$refs.supermap.isEditableLayers = false
+        this.$refs.bottomMenu.showBanChild = false
+        this.$refs.bottomMenu.showChangChild = false
+        if (!this.$refs.bottomMenu.showChild) {
+          this.$refs.bottomMenu.showChild = true
+        } else {
+          this.$refs.bottomMenu.showChild = false
+        }
+      } else if (click == 'TVWall') {
+        this.$refs.TVWall.showTVWall()
+        this.$refs.supermap.isEditableLayers = false
+        this.$refs.bottomMenu.showChild = false
+        this.$refs.bottomMenu.showBanChild = false
+        this.$refs.bottomMenu.showChangChild = false
+      } else if (click == 'forestban') {
+        this.$refs.supermap.isEditableLayers = false
+        this.$refs.bottomMenu.showChild = false
+        this.$refs.bottomMenu.showChangChild = false
+        if (!this.$refs.bottomMenu.showBanChild) {
+          this.$refs.bottomMenu.showBanChild = true
+        } else {
+          this.$refs.bottomMenu.showBanChild = false
+        }
+      } else if (click == 'forestchang') {
+        this.$refs.supermap.isEditableLayers = false
+        this.$refs.bottomMenu.showBanChild = false
+        this.$refs.bottomMenu.showChild = false
+        if (!this.$refs.bottomMenu.showChangChild) {
+          this.$refs.bottomMenu.showChangChild = true
+        } else {
+          this.$refs.bottomMenu.showChangChild = false
+        }
+      }
+
+    },
+    //选择图层
+    choseLayerSwitching(url, isClear) {
+      this.$refs.supermap.layerSwitching(url, isClear)
+    },
+    //选择图层(传递数组)
+    choseLayerSwitchingList(urlList) {
+      this.$refs.supermap.layerSwitchingList(urlList)
+    },
+    /** ----------------------------------底部按钮公用组件结束------------------------------------- */
+
+    //初始化
+    getInit() {
+      let that = this
+      this.iconCurrentIndex1 = '1'
+      this.listCurrentIndex1 = ''
+      this.listCurrentIndex2 = ''
+      //获取左侧菜单列表
+      getRy().then(res => {
+        that.visuForestCloudRYBO = res.data.visuForestCloudRYBO
+        that.zrs = res.data.visuForestCloudRyZxBO.zrs
+        that.zxrs = res.data.visuForestCloudRyZxBO.zxrs
+        this.personnelChart()
+      })
+      //获取巡林计划
+      // getPlanList().then(res => {
+      //   this.xunLinListOne = res.data
+      // })
+      // // 获取轨迹列表
+      // getTrackList().then(res => {
+      //   this.xunLinListOne = res.data
+      // })
+      // 获取人员列表
+      // getForestLeader(linJob, linType).then(res => {
+      getForestLeader().then(res => {
+        this.peopleList = res.data;
+        console.log("人员",res.data)
+      })
+      this.connectList = []
+      // this.$refs.supermap.clearC() //clearC undefined
+    },
+    //获取左侧人员列表
+    getForestLeader(linJob, linType) {
+      this.listCurrentIndex1 = ''
+      this.listCurrentIndex2 = ''
+      this.iconCurrentIndex1 = linJob
+      this.peopleList = []
+      getForestLeader(linJob, linType).then(res => {
+        this.peopleList = res.data;
+      })
+      this.connectList = []
+      this.$refs.supermap.clearC()
+    },
+    //点击左侧人员列表获取轨迹
+    getLeaderTrack(personId) {
+      getTrackList(personId).then(res => {
+        console.log("轨迹",res.data);
+        if(res.data.length > 0){// 当前资源人员有巡查轨迹 获取最新一条轨迹
+          this.xunLinListOne = res.data;
+          this.getPointList(res.data[0].id);
+        }else {// 清空上一用户落点
+          this.xunLinListOne = [{"timeBegin": "当前资源人员", "timeEnd": "暂无巡查轨迹"}];
+          this.$refs.supermap.clearC()
+        }
+      })
+    },
+    getLeaderTrack_original(userId) {
+      this.listCurrentIndex1 = userId
+      let that = this
+      this.connectList = []
+      getLeaderTrack(userId).then(res => {
+        // this.xunLinListOne = res.data;
+        // 获取右侧轨迹列表
+        // getPlanList().then(res => {
+        //   this.xunLinListOne = res.data
+        // })
+
+        if (res.data != null && res.data.length > 0) {
+          for (let i = 0; i < res.data.length; i++) {
+            let latlng = {
+              lat: res.data[i].latitude,
+              lng: res.data[i].longitude
+            }
+            this.connectList.push(latlng)
+          }
+          setTimeout(() => {
+            that.$refs.supermap.clearC()
+            that.$refs.supermap.setConnectList(this.connectList, 'red')
+          }, 1000)
+        } else {
+          that.$refs.supermap.clearC()
+        }
+      })
+    },
+
+    getPointList(trackId) {
+      let that = this;
+      this.connectList = [];
+      getPointList(trackId).then(res => {
+        console.log("落点",res.data)
+        if (res.data != null && res.data.length > 0) {
+          for (let i = 0; i < res.data.length; i++) {
+            let latlng = {
+              lat: res.data[i].latitude,
+              lng: res.data[i].longitude
+            }
+            this.connectList.push(latlng)
+          }
+          setTimeout(() => {
+            that.$refs.supermap.clearC()
+            that.$refs.supermap.setConnectList(this.connectList, 'red')
+          }, 1000)
+        } else {
+          that.$refs.supermap.clearC()
+        }
+      })
+    },
+    setConnectList(points, planName) {
+      this.listCurrentIndex2 = planName
+      this.connectList = []
+      if (points != null && points != '') {
+        this.connectList = JSON.parse(points)
+        this.$refs.supermap.setConnectTwoList(this.connectList, 'red')
+      }
+    },
+
+    //吉祥物收起左右框
+    indent() {
+      let list = document.getElementsByClassName('el-tooltip__popper')
+      list[list.length - 1].style.display = 'none'
+      if (this.indentStyle == '') {
+        this.indentStyle = 'indent-style'
+        this.indentleft = 'indent-left'
+        this.indentright = 'indent-right'
+        this.indentText = '展开左右栏'
+      } else if (this.indentText == '展开左右栏') {
+        this.indentStyle = ''
+        this.indentleft = ''
+        this.indentright = ''
+        this.indentText = '收起左右栏'
+      }
+    },
+    //人员chart
+    personnelChart() {
+      // 基于准备好的dom,初始化echarts实例
+      let myChart = echarts.init(document.getElementById('personnel-chart'))
+      // 绘制图表
+      const handred = this.zrs
+      let point = this.zxrs
+      myChart.setOption({
+        title: [{
+          text: '总人数:' + handred + '人' + '\n' + '\n' + '在线人数:' + point + '人',
+          x: '48%',
+          y: '25%',
+          textStyle: {
+            fontWeight: 'normal',
+            color: '#02d6fc',
+            fontSize: '14'
+          }
+        }],
+        series: [{
+          name: 'circle',
+          type: 'pie',
+          center: ['22%', '50%'],
+          radius: ['60%', '70%'],
+          clockWise: true,
+          label: {
+            normal: {
+              position: 'center'
+
+            }
+          },
+          itemStyle: {
+            normal: {
+              label: {
+                show: false
+              },
+              labelLine: {
+                show: false
+              }
+            }
+          },
+          data: [{
+            value: point,
+            name: '当前在线',
+            label: {
+              show: true, //单独显示该数据项
+              formatter: '{c}人',
+              labelLayout: {
+                top: '50%'
+              },
+              textStyle: {
+                color: '#02d6fc',
+                fontSize: 14
+              }
+            },
+            itemStyle: {
+              normal: {
+                color: { // 完成的圆环的颜色
+                  colorStops: [{
+                    offset: 0,
+                    color: '#02d6fc' // 0% 处的颜色
+                  }, {
+                    offset: 1,
+                    color: '#367bec' // 100% 处的颜色
+                  }]
+                },
+                label: {
+                  show: false
+                },
+                labelLine: {
+                  show: false
+                }
+              }
+            }
+          }, {
+            value: handred - point,
+            itemStyle: {
+              color: '#666'
+            }
+          }]
+        }]
+      })
+    }
+  }
+
+}
+</script>
+
+<style rel="stylesheet/scss" lang="scss" scoped>
+@import '@/assets/styles/base.scss';
+
+.h-27 {
+  height: 27rem;
+}
+</style>

+ 2 - 7
vue.config.js

@@ -52,13 +52,8 @@ module.exports = {
     proxy: {
       // detail: https://cli.vuejs.org/config/#devserver-proxy
       [process.env.VUE_APP_BASE_API]: {
-        // target: `http://192.168.2.118:3031`,
-        //  target: `http://117.78.49.164:3031`,
-         // target: `http://192.168.1.122:3031`,
-         target: `http://127.0.0.1:3031`,
-         // target: `http://192.168.1.137:3031`,
-         // target: `https://117.78.49.164:3031`,
-         // target: `https://36.49.108.22:3031`,
+        target: `http://192.168.3.11:3031`,
+        //  target: `http://127.0.0.1:3031`,
         changeOrigin: true,
         pathRewrite: {
           ['^' + process.env.VUE_APP_BASE_API]: ''