Ver código fonte

Merge remote-tracking branch 'origin/visu_environment' into visu_environment

wangzhe 2 anos atrás
pai
commit
0dac8fc4bf

+ 2 - 2
src/api/event.js

@@ -1,9 +1,9 @@
 import request from '@/utils/request'
 
 //获取附近事件
-export function getNearEvent(longitude,latitude,day,loading) {
+export function getNearEvent(longitude, latitude, day, loading, eventTypeIdDl, eventTypeId) {
   return request({
-    url: '/center-environment/VisuForestEventCenterController/getNearEvent?longitude='+longitude+"&latitude="+latitude+"&day="+day,
+    url: '/center-environment/VisuForestEventCenterController/getNearEvent?longitude=' + longitude + "&latitude=" + latitude + "&day=" + day + "&eventTypeIdDl=" + eventTypeIdDl + "&eventTypeId=" + eventTypeId,
     method: 'get',
     headers: {
       loading: loading

+ 21 - 53
src/api/forest.js

@@ -8,25 +8,19 @@ export function getBaseInfo() {
   })
 }
 // 左侧获取事件信息统计
-export function getTodayEvents(param,loading) {
+export function getTodayEvents(param) {
   return request({
     url: '/center-environment/VisuForestCloudMapController/getTodayEvents',
     method: 'post',
-    data: param,
-    headers: {
-      loading: loading
-    },
+    data: param
   })
 }
 // 左侧获取事件部门数量
-export function getDeptEventCount(param,loading) {
+export function getDeptEventCount(param) {
   return request({
     url: '/center-environment/VisuForestCloudMapController/getDeptEventCount',
     method: 'post',
-    data: param,
-    headers: {
-      loading: loading
-    },
+    data: param
   })
 }
 // 右侧获取天气
@@ -38,26 +32,21 @@ export function getWeather(param) {
   })
 }
 
+
 // 右侧获取事件列表
-export function getEventList(param,loading) {
+export function getEventList(param) {
   return request({
     url: '/center-environment/VisuForestCloudMapController/getEventList',
     method: 'post',
-    data: param,
-    headers: {
-      loading: loading
-    },
+    data: param
   })
 }
 // 右侧获取曝光台列表
-export function getExposureStage(param,loading) {
+export function getExposureStage(param) {
   return request({
     url: 'center-environment/VisuForestCloudMapController/getExposureStage',
     method: 'post',
-    data: param,
-    headers: {
-      loading: loading
-    },
+    data: param
   })
 }
 
@@ -78,25 +67,19 @@ export function getEventByCalendar(param) {
   })
 }
 // 获取事件分类
-export function getEventByEventType(param,loading) {
+export function getEventByEventType(param) {
   return request({
     url: '/center-environment/VisuForestCloudMapController/getEventByEventType',
     method: 'post',
-    data: param,
-    headers: {
-      loading: loading
-    },
+    data: param
   })
 }
 // 获取上报排名
-export function getEventByReportorOrder(param,loading) {
+export function getEventByReportorOrder(param) {
   return request({
     url: '/center-environment/VisuForestCloudMapController/getEventByReportorOrder',
     method: 'post',
-    data: param,
-    headers: {
-      loading: loading
-    },
+    data: param
   })
 }
 // 日志文件上传
@@ -208,7 +191,6 @@ export function uploadBase64(param) {
     data:param
   })
 }
-
 // 通过事件code查询事件责任部门
 export function centereventtdepteventList(param) {
   return request({
@@ -243,33 +225,19 @@ export function dutysystemRemove(param) {
   })
 }
 
-// 通过部门id获取责任
+// 事件短信联系
 export function userFeginlist(param) {
   return request({
-    url: '/system/user/selectUserWithPostByDeptId',
-    method: 'get',
-    params:param
+    url: '/center-environment/VisuForestCloudMapController/userFeginlist',
+    method: 'post'
   })
 }
 
-// 获取消息个数
-export function selectMessageCount(userId) {
+// 会议添加联系人并发送短信
+export function sendMessage(param) {
   return request({
-    url: '/center-message/centerMessageFeign/selectMessageCount/'+userId,
-    method: 'get'
-  })
-}
-// 获取消息列表
-export function selectMessageList(userId) {
-  return request({
-    url: '/center-message/centerMessageFeign/selectMessageList/'+userId,
-    method: 'get'
-  })
-}
-// 获取消息详情
-export function selectMessageById(messageId) {
-  return request({
-    url: '/center-message/centerMessageFeign/selectMessageById/'+messageId,
-    method: 'get'
+    url: '/center-fire/VisuForestCloudMapController/sendMeetingMsg',
+    method: 'post',
+    data:param
   })
 }

+ 16 - 12
src/api/leader.js

@@ -9,30 +9,34 @@ export function getRy() {
 }
 
 // 获取左侧人员列表
-export function getForestLeader() {
+export function getForestLeader(linJob, linType) {
   return request({
-    url: '/center-environment/VisuForestLeaderController/getPersonList',
+    url: '/center-environment/VisuForestLeaderController/getPersonList?environmentJob='+linJob+"&linType="+linType,
     method: 'get',
   })
 }
-// 点击左侧人员列表获取轨迹
-export function getLeaderTrack(trackById) {
+
+// 巡林任务
+export function getPlanList(userId) {
   return request({
-    url: '/center-environment/VisuForestLeaderController/getLeaderTrack?trackById='+trackById,
-    method: 'get',
+    url: '/center-data/task/getPlanList',
+    method: 'post',
+    data: {userId:userId,type:'4'}
   })
 }
-// 点击左侧人员列表获取时段
-export function getTrackList(personId) {
+
+// 巡林记录
+export function getRecordList(taskId) {
   return request({
-    url: '/center-environment/VisuForestLeaderController/getTrackList?personId='+personId,
+    url: '/center-data/record/list?taskId='+taskId,
     method: 'get',
   })
 }
-// 点击右侧时段列表获取落点
-export function getPointList(trackId) {
+
+// 巡林轨迹
+export function getPointList(recordId) {
   return request({
-    url: '/center-environment/VisuForestLeaderController/getPointList?trackId='+trackId,
+    url: '/center-data/patrolTrack/getTrack/'+recordId.toString(),
     method: 'get',
   })
 }

+ 21 - 0
src/api/monitor.js

@@ -38,7 +38,28 @@ export function selectListDevice(param) {
     params:param
   })
 }
+//转到固定点位
+export function rotation(lng,lat,list) {
+  // lng = '124.41986560821533';
+  // lat = '43.08817137032747';
+  return request({
+    url: '/center-environment/VisuForestMonitorCenterController/rotation',
+    method: 'post',
+    data:{
+      lng:lng,
+      lat:lat,
+      list:list
+    }
+  })
+}
 
+//根据部门ID获取具有查看权限的摄像头
+export function getCamerasByDeptId(deptId) {
+  return request({
+    url: '/center-environment/VisuForestMonitorCenterController/getCamerasByDeptId?deptId=' + deptId,
+    method: 'get',
+  })
+}
 /***********************************和上面方法目前一样只是入参不一样以后可能有不一样的地方 start  所以下面三个方法暂时没用到**********************/
 // // 获取环保污染源设备列表
 // export function selectListDevice(param) {

+ 1 - 1
src/assets/styles/base.scss

@@ -1360,7 +1360,7 @@ div::-webkit-scrollbar {
 
       .d-l-l-text {
         width: 100%;
-        white-space: nowrap;
+        //white-space: nowrap;
 
         h4 {
           display: flex;

+ 134 - 11
src/components/TVWall.vue

@@ -35,6 +35,7 @@
 /** ----------------------------------摄像头预览开始------------------------------------- */
 import { getDahuaVideoServer, getTVWallList } from '@/api/dahua/dahua'
 import { tvCameraList } from '@/api/haikang/haikang'
+import { rotation } from '@/api/monitor'
 import DHWs from '@/dahua/lib/DHWs'
 
 /** ----------------------------------摄像头预览结束------------------------------------- */
@@ -281,6 +282,135 @@ export default {
           })
       }
     },
+    //火点联动电视墙调用
+    showTVWall1(longitude,latitude,tvListJson) {
+      // let that=this;
+      /** ----------------------------------大华摄像头预览开始------------------------------------- */
+      this.ws.addEventListener('connectStateChange', data => {
+        if (data) {
+          console.log('连接成功')
+        } else {
+          console.log('连接失败,下载客户端')
+          this.alertReinstall()
+          this.isShowTipe && this.$modal.confirm({
+            title: '下载客户端',
+            content: '检测到您未安装部分插件,将影响部分功能使用,请下载后使用?',
+            onOk: () => {
+              //这里写下载方法
+              this.isShowTipe = false
+            },
+            onCancel: () => {
+              this.isShowTipe = false
+            }
+          });
+        }
+      })
+      getDahuaVideoServer().then(newResponse => {
+        this.ws.detectConnectQt().then(res => {
+          if (res) { // 连接客户端成功
+            this.alertLogin()
+            this.ws.login({
+              loginIp: newResponse.loginIp,
+              loginPort: newResponse.loginPort,
+              userName: newResponse.userName,
+              userPwd: newResponse.userPwd,
+              // loginIp: '192.168.100.100',
+              // loginPort: 8314,
+              // userName: 'system',
+              // userPwd: 'Admin@123',
+              token: '',
+              https: 1
+            })
+            this.ws.on('loginState', (res) => {
+              this.isLogin = res
+              console.log('---res-----', res)
+              if (res) {
+                this.alertLoginSuccess()
+                this.activePanel = 'key2'
+                console.log(tvListJson)
+                const array=[]
+                const array1=[]
+                tvListJson[0].treeLabels.forEach((item,index)=>
+                {
+                  if (index!=0)
+                  {
+                    const param =Object.assign({})
+                    param.channelId=item.labelCode
+                    array.push(param)
+                    array1.push(item.labelCode)
+                  }
+
+                })
+                this.create1(longitude,latitude,tvListJson,array,array1)
+                // var obj=JSON.parse(tvListJson)
+              } else {
+                this.alertLoginFailed()
+              }
+            })
+          } else { // 连接客户端失败
+            this.alertReinstall()
+          }
+        })
+
+      })
+      /** ----------------------------------大华摄像头预览结束------------------------------------- */
+      /** ----------------------------------海康摄像头预览开始------------------------------------- */
+      // tvCameraList().then(response => {
+      //   this.cameraList=response.data
+      // })
+      // that.initPlugin()
+      // setTimeout(function() {
+      //   that.playhk();
+      // }, 5000)
+      // /** ----------------------------------海康摄像头预览结束------------------------------------- */
+      this.TVWallVisible = true
+
+    },
+    create1(longitude,latitude,tvListJson,array,array1) { // 调用创建控件接口
+      let _this = this
+      const params = [
+        {
+          'ctrlType': 'realMonitorUI',
+          'ctrlCode': 'ctrl1',
+          'ctrlProperty': {
+            'displayMode': 1,
+            'splitNum': 1,
+            'channelList': [
+              {
+                'channelId': ''
+              }
+            ]
+          },
+          'visible': true,
+          'domId': 'dom1'
+        }
+      ]
+      this.setPos()
+      this.customizeTree(tvListJson);
+      _this.ws.createCtrl(params);
+      _this.playRealMonitorVideo(array)
+      setTimeout(() => {
+        _this.rotation(longitude,latitude,array1)
+      }, 5000)
+
+    },
+    playRealMonitorVideo(array) { // 自定义设备树自动播放指定通道编码视频
+      const config = this.ws.config
+      const { loginIp, userCode } = config
+      this.ws.postMessage('playRealMonitorVideo', {
+        loginIp,
+        userCode,
+        params: {
+          ctrlCode: "ctrl1",
+          array: array
+        }
+      })
+
+    },
+    rotation(lng,lat,list){
+      rotation(lng,lat,list).then(res => {
+      })
+    },
     showTVWall() {
       // let that=this;
       /** ----------------------------------大华摄像头预览开始------------------------------------- */
@@ -388,17 +518,10 @@ export default {
         }
       ]
       this.setPos()
-      _this.ws.createCtrl(params).then(res => {
-        this.customizeTree(tvListJson)
-      }).catch(e => {
-        console.log(e)
-      })
-      _this.ws.on('createCtrlResult', (res) => {
-        this.customizeTree(tvListJson)
-        _this.ws.on('createCtrlResult', (res) => {
-          this.customizeTree(tvListJson)
-        })
-      })
+      this.customizeTree(tvListJson);
+      setTimeout(function () {
+        _this.ws.createCtrl(params);
+      }, 3000);
     },
     setPos() {
       let target = document.getElementById(this.domId)

+ 756 - 0
src/components/TVWalls.vue

@@ -0,0 +1,756 @@
+<template>
+  <div>
+    <el-dialog title="电视墙" :visible.sync="TVWallVisible" v-if="TVWallVisible" customClass="TVWallCustomWidth"
+               @close="cancelEventLocationShow()">
+      <!--<div @click="findCameraByEventCoordinate()">视频联动</div>-->
+      <!--<div class="forthis" style="width: 22%; position: absolute;left: 0;z-index: 9999999999999;">-->
+      <!--<div class="i-list-con" style="height: 46vh; overflow-y: scroll;">-->
+      <!--<span v-for="(item,index) in cameraList" :key="index">-->
+      <!--<div class="d-l-con" @click="playhk(item.channelCode)">-->
+      <!--<div class="d-l-l-text">-->
+      <!--<i class="i-small"></i>-->
+      <!--<h4>{{ item.cameraName }}</h4>-->
+      <!--</div>-->
+      <!--</div>-->
+      <!--</span>-->
+      <!--</div>-->
+      <!--</div>-->
+      <!--<div style="width:70%;height:400px;position:absolute;">-->
+      <!--&lt;!&ndash;视频窗口展示-&#45;&#45;大华&ndash;&gt;-->
+      <!--<div id="dom1" class="dom1"></div>-->
+      <!--&lt;!&ndash;视频窗口展示-&#45;&#45;海康&ndash;&gt;-->
+      <!--<div id="playWnd" class="playWnd" style="left: 0px; top: 0px;"></div>-->
+      <!--</div>-->
+
+      <div id="dom1" class="dom1"></div>
+    </el-dialog>
+  </div>
+
+</template>
+
+<script>
+/** ----------------------------------摄像头预览开始------------------------------------- */
+import {getDahuaVideoServer, getTVWallList} from '@/api/dahua/dahua'
+import {tvCameraList} from '@/api/haikang/haikang'
+import {findCameraByEventCoordinate, rotation} from '@/api/monitor'
+import DHWs from '@/dahua/lib/DHWs'
+
+/** ----------------------------------摄像头预览结束------------------------------------- */
+export default {
+  dicts: ['event_source'],
+  components: {},
+  data() {
+    return {
+      tvListJson: [
+        {
+          'switchTab': '1',
+          'treeLabels': [
+            {
+              'labelCode': '123456',
+              'labelName': '视频场景',
+              'parentLabelCode': null
+            },
+            {
+              'labelCode': '5a81d1bd499b4940a21fc63ca51f4dfa',
+              'labelName': '标签2',
+              'parentLabelCode': 123456
+            },
+            {
+              'labelCode': 'd941adbbd3e64dac92cc448dec5293cd',
+              'labelName': '标签1',
+              'parentLabelCode': 123456
+            }
+          ],
+          'labelChannels': [{
+            'channelDates': [{
+              'channelCode': '6044981090191552',
+              'channelName': '复兴大桥中段-交通事故',
+              'channelSn': null,
+              'cameraType': 0,
+              'online': 1
+            },
+              {
+                'channelCode': 'ZgVzqsjwA1DTF561VGHK5E',
+                'channelName': '北京7青羊东二路77号2通道1',
+                'channelSn': null,
+                'cameraType': 1,
+                'online': 1
+              }
+            ],
+            'labelCode': 'd941adbbd3e64dac92cc448dec5293cd'
+          },
+            {
+              'channelDates': [{
+                'channelCode': 'ZgVzqsjwA1DTF561VGHKK7',
+                'channelName': '北京7青羊东二路77号2通道2',
+                'channelSn': null,
+                'cameraType': 2,
+                'online': 0
+              }],
+              'labelCode': '5a81d1bd499b4940a21fc63ca51f4dfa'
+            }
+          ]
+        },
+        {
+          'switchTab': '2',
+          'labelChannels': [{
+            'channelDates': [{
+              'channelCode': 'ZgVzqsjwA1DTF561VGHK5E',
+              'channelName': '北京7青羊东二路77号2通道1',
+              'channelSn': null,
+              'cameraType': 1,
+              'online': 1
+            },
+              {
+                'channelCode': 'ZgVzqsjwA1DTF561VGHKK7',
+                'channelName': '北京7青羊东二路77号2通道2',
+                'channelSn': null,
+                'cameraType': 2,
+                'online': 0
+              }
+            ]
+          }]
+        }
+      ],
+      TVWallVisible: false,
+      activeName: 'tv',
+      channelId: ['ZgVzqsjwA1DTF561VHG69F'],
+      /** ----------------------------------摄像头预览开始------------------------------------- */
+      showModal: true,
+      activePanel: 'key1',
+      isLogin: false,
+      loginType: '1',
+      token: '',
+      ctrlType: 'playerWin',
+      https: 1,
+      httpsList: [
+        {
+          value: 0,
+          label: 0
+        },
+        {
+          value: 1,
+          label: 1
+        }
+      ],
+      ctrlTypeList: [{
+        value: 'playerWin',
+        label: '播放控件'
+      }, {
+        value: 'realMonitorUI',
+        label: '带设备树实时预览控件'
+      }, {
+        value: 'playbackUI',
+        label: '带设备树视频回放控件'
+      }, {
+        value: 'TVWallUI',
+        label: '视频上墙'
+      }],
+      ctrlList: [
+        {
+          value: 'ctrl1',
+          label: '控件1'
+        },
+        {
+          value: 'ctrl2',
+          label: '控件2'
+        },
+        {
+          value: 'ctrl3',
+          label: '控件3'
+        }
+      ],
+      splitList: [
+        {
+          value: 1,
+          label: '1 * 1'
+        },
+        {
+          value: 4,
+          label: '2 * 2'
+        },
+        {
+          value: 9,
+          label: '3 * 3'
+        }
+      ],
+      displayModeList: [
+        {
+          value: 1,
+          label: '播放器预览模式'
+        },
+        {
+          value: 2,
+          label: '播放器回放模式'
+        }
+      ],
+      mixedVideoDisplayModeList: [
+        {
+          value: 1,
+          label: '播放实时视频'
+        },
+        {
+          value: 2,
+          label: '播放回放视频'
+        }
+      ],
+      ctrl: 'ctrl1',
+      splitNum: 1,
+      displayMode: 1,
+      displayTimeRange: [],
+      modalDisplayTimeRange: [],
+      mixedVideoTime: null,
+      recordPath: 'C:\\DSS LightWeight\\DSS LightWeight Client\\Record\\',
+      downloadName: '',
+      downTimeRange: [],
+      downloadFormat: 0,
+      downloadFormatList: [{
+        value: 0,
+        label: 'dav'
+      },
+        {
+          value: 1,
+          label: 'avi'
+        }, {
+          value: 2,
+          label: 'mp4'
+        }],
+      downloadSource: 3,
+      downloadSourceList: [
+        {
+          value: 3,
+          label: '中心录像'
+        }, {
+          value: 2,
+          label: '设备录像'
+        }],
+      showDownloadStreamType: false,
+      downloadStreamType: 1,
+      downloadStreamTypeList: [{
+        value: 1,
+        label: '主码流'
+      },
+        {
+          value: 2,
+          label: '辅码流'
+        },
+        {
+          value: 3,
+          label: '三码流'
+        }],
+      downloadIsShow: true,
+      downloadIsShowList: [{
+        value: true,
+        label: '是'
+      },
+        {
+          value: false,
+          label: '否'
+        }],
+      crtPosX: 0,
+      crtPosY: 0,
+      crtWidth: 1148,
+      crtHeight: 650,
+      domId: 'dom1',
+      mixedVideoDisplayMode: 2,
+      isShowTipe: true,
+      autoList: [],
+      stringList: [],
+      data: null,
+      /** ----------------------------------摄像头预览结束------------------------------------- */
+      cameraList: [],
+      initCount: 0,
+      pubKey: '',
+      oWebControl: null
+    }
+  },
+  created() {
+    const DHWsInstance = DHWs.getInstance()
+    this.ws = DHWsInstance
+  },
+  methods: {
+    cancelEventLocationShow() {
+      // this.activeName = 'tv'
+      this.TVWallVisible = false
+      this.destroy()
+
+      if (this.oWebControl != null) {
+        this.oWebControl.JS_HideWnd()   // 先让窗口隐藏,规避可能的插件窗口滞后于浏览器消失问题
+        this.oWebControl.JS_Disconnect().then(function () {  // 断开与插件服务连接成功
+          },
+          function () {  // 断开与插件服务连接失败
+          })
+      }
+    },
+    showTVWall(data, val) {
+      this.tvListJson = data
+      this.data = val
+      this.autoList = []
+      this.stringList = []
+      for (let i = 1; i < data[0].treeLabels.length; i++) {
+        this.autoList.push({"channelId": data[0].treeLabels[i].labelCode})
+        this.stringList.push(data[0].treeLabels[i].labelCode)
+      }
+      console.log("this.autoList",this.autoList);
+      console.log("this.stringList",this.stringList);
+      // let that=this;
+      /** ----------------------------------大华摄像头预览开始------------------------------------- */
+      this.ws.addEventListener('connectStateChange', data => {
+        if (data) {
+          console.log('连接成功')
+        } else {
+          console.log('连接失败,下载客户端')
+          this.alertReinstall()
+          this.isShowTipe && this.$modal.confirm({
+            title: '下载客户端',
+            content: '检测到您未安装部分插件,将影响部分功能使用,请下载后使用?',
+            onOk: () => {
+              //这里写下载方法
+              this.isShowTipe = false
+            },
+            onCancel: () => {
+              this.isShowTipe = false
+            }
+          });
+        }
+      })
+      this.preview()
+      /** ----------------------------------大华摄像头预览结束------------------------------------- */
+      /** ----------------------------------海康摄像头预览开始------------------------------------- */
+      // tvCameraList().then(response => {
+      //   this.cameraList=response.data
+      // })
+      // that.initPlugin()
+      // setTimeout(function() {
+      //   that.playhk();
+      // }, 5000)
+      // /** ----------------------------------海康摄像头预览结束------------------------------------- */
+      this.TVWallVisible = true
+    },
+    /** ----------------------------------大华摄像头预览开始------------------------------------- */
+    alertLogin: function () {
+      this.$modal.msg('登录中....')
+    },
+    alertLoginSuccess: function () {
+      this.$modal.msgSuccess('登录成功!')
+    },
+    alertLoginFailed: function () {
+      this.$modal.msgError('登陆失败!')
+    },
+    alertReinstall: function () {
+      this.$modal.msgWarning('请重新安装客户端')
+    },
+    /** 预览按钮操作 */
+    preview() {
+      getDahuaVideoServer().then(newResponse => {
+        this.ws.detectConnectQt().then(res => {
+          if (res) { // 连接客户端成功
+            this.alertLogin()
+            this.ws.login({
+              loginIp: newResponse.loginIp,
+              loginPort: newResponse.loginPort,
+              userName: newResponse.userName,
+              userPwd: newResponse.userPwd,
+              // loginIp: '192.168.100.100',
+              // loginPort: 8314,
+              // userName: 'system',
+              // userPwd: 'Admin@123',
+              token: '',
+              https: 1
+            })
+            this.ws.on('loginState', (res) => {
+              this.isLogin = res
+              console.log('---res-----', res)
+              if (res) {
+                this.alertLoginSuccess()
+                this.activePanel = 'key2'
+                this.create(this.tvListJson)
+              } else {
+                this.alertLoginFailed()
+              }
+            })
+          } else { // 连接客户端失败
+            this.alertReinstall()
+          }
+        })
+      })
+    },
+    playRealMonitorVideo() { // 自定义设备树自动播放指定通道编码视频
+      const config = this.ws.config
+      const {loginIp, userCode} = config
+      this.ws.postMessage('playRealMonitorVideo', {
+        loginIp,
+        userCode,
+        params: {
+          ctrlCode: "ctrl1",
+          array: this.autoList
+        }
+      })
+    },
+    create(tvListJson) { // 调用创建控件接口
+      let _this = this
+      const params = [
+        {
+          'ctrlType': 'realMonitorUI',
+          'ctrlCode': 'ctrl1',
+          'ctrlProperty': {
+            'displayMode': 1,
+            'splitNum': 1,
+            'channelList': [
+              {
+                'channelId': ''
+              }
+            ]
+          },
+          'visible': true,
+          'domId': 'dom1'
+        }
+      ]
+      this.setPos()
+      this.customizeTree(tvListJson);
+      _this.ws.createCtrl(params);
+      _this.playRealMonitorVideo();
+      if (_this.data != undefined && _this.data != null) {
+        setTimeout( _this.rotation(_this.data.longitude, _this.data.latitude, _this.stringList),5000)
+      }
+    },
+    rotation(lng,lat,list){
+      rotation(lng,lat,list);
+    },
+    setPos() {
+      let target = document.getElementById(this.domId)
+      console.log(target, 'target')
+      target.style.right = `${this.crtPosX}px`
+      target.style.top = `${this.crtPosY}px`
+      target.style.width = `${this.crtWidth}px`
+      target.style.height = `${this.crtHeight}px`
+      if (document.createEvent) {
+        var event = document.createEvent('HTMLEvents')
+        event.initEvent('resize', true, true)
+        window.dispatchEvent(event)
+      } else if (document.createEventObject) {
+        window.fireEvent('onresize')
+      }
+    },
+    destroy() { // 调用销毁控件接口
+      if (!this.isLogin) {
+        this.$modal.msgWarning('正在登陆客户端,请稍等......')
+        return false
+      }
+      const ctrls = this.ws.ctrls.map(i => {
+        if (i.ctrlCode === this.ctrl) {
+          return i.ctrlCode
+        }
+      })
+      this.ws.destroyCtrl(ctrls)
+    },
+    customizeTree(tvListJson) { // 调用控件接口树
+      const config = this.ws.config
+      const {loginIp, userCode} = config
+      this.ws.postMessage('customizeTree', {
+        loginIp,
+        userCode,
+        params: {
+          array: tvListJson
+        }
+      })
+    },
+    /** ----------------------------------大华摄像头预览结束------------------------------------- */
+    /** ----------------------------------海康摄像头预览开始------------------------------------- */
+    // 创建播放实例
+    initPlugin() {
+      let that = this
+      that.oWebControl = new WebControl({
+        szPluginContainer: 'playWnd',                       // 指定容器id
+        iServicePortStart: 15900,                           // 指定起止端口号,建议使用该值
+        iServicePortEnd: 15909,
+        szClassId: '23BF3B0A-2C56-4D97-9C03-0CB103AA8F11',   // 用于IE10使用ActiveX的clsid
+        cbConnectSuccess: function () {                     // 创建WebControl实例成功
+          that.oWebControl.JS_StartService('window', {         // WebControl实例创建成功后需要启动服务
+            dllPath: './VideoPluginConnect.dll'         // 值"./VideoPluginConnect.dll"写死
+          }).then(function () {                           // 启动插件服务成功
+            that.oWebControl.JS_SetWindowControlCallback({   // 设置消息回调
+              cbIntegrationCallBack: cbIntegrationCallBack
+            })
+
+            that.oWebControl.JS_CreateWnd('playWnd', 850, 615).then(function () { //JS_CreateWnd创建视频播放窗口,宽高可设定
+              that.init()  // 创建播放实例成功后初始化
+            })
+          }, function () { // 启动插件服务失败
+          })
+        },
+        cbConnectError: function () { // 创建WebControl实例失败
+          that.oWebControl = null
+          $('#playWnd').html('插件未启动,正在尝试启动,请稍候...<a href="./hk/VideoWebPlugin.exe">点击下载插件</a>')
+          WebControl.JS_WakeUp('VideoWebPlugin://') // 程序未启动时执行error函数,采用wakeup来启动程序
+          initCount++
+          if (initCount < 3) {
+            setTimeout(function () {
+              that.initPlugin()
+            }, 3000)
+          } else {
+            $('#playWnd').html('插件启动失败,请检查插件是否安装!<a href="./hk/VideoWebPlugin.exe">点击下载插件</a>')
+          }
+        },
+        cbConnectClose: function (bNormalClose) {
+          // 异常断开:bNormalClose = false
+          // JS_Disconnect正常断开:bNormalClose = true
+          console.log('cbConnectClose')
+          that.oWebControl = null
+        }
+      })
+    },
+    //初始化
+    init() {
+      let that = this
+      this.getPubKey(function () {
+        ////////////////////////////////// 请自行修改以下变量值	////////////////////////////////////
+        var appkey = '24699060'                           //综合安防管理平台提供的appkey,必填
+        var secret = that.setEncrypt('tt1pMbsrlwGZUWucdAPw')   //综合安防管理平台提供的secret,必填
+        var ip = '36.49.108.22'                           //综合安防管理平台IP地址,必填
+        var playMode = 0                                  //初始播放模式:0-预览,1-回放
+        var port = 1443                                    //综合安防管理平台端口,若启用HTTPS协议,默认443
+        var snapDir = 'D:\\SnapDir'                       //抓图存储路径
+        var videoDir = 'D:\\VideoDir'                     //紧急录像或录像剪辑存储路径
+        var layout = '3x3'                                //playMode指定模式的布局
+        var enableHTTPS = 1                               //是否启用HTTPS协议与综合安防管理平台交互,这里总是填1
+        var encryptedFields = 'secret'					   //加密字段,默认加密领域为secret
+        var showToolbar = 1                               //是否显示工具栏,0-不显示,非0-显示
+        var showSmart = 1                                 //是否显示智能信息(如配置移动侦测后画面上的线框),0-不显示,非0-显示
+        var buttonIDs = '0,16,256,257,258,259,260,512,513,514,515,516,517,768,769'  //自定义工具条按钮
+        ////////////////////////////////// 请自行修改以上变量值	////////////////////////////////////
+
+        that.oWebControl.JS_RequestInterface({
+          funcName: 'init',
+          argument: JSON.stringify({
+            appkey: appkey,                            //API网关提供的appkey
+            secret: secret,                            //API网关提供的secret
+            ip: ip,                                    //API网关IP地址
+            playMode: playMode,                        //播放模式(决定显示预览还是回放界面)
+            port: port,                                //端口
+            snapDir: snapDir,                          //抓图存储路径
+            videoDir: videoDir,                        //紧急录像或录像剪辑存储路径
+            layout: layout,                            //布局
+            enableHTTPS: enableHTTPS,                  //是否启用HTTPS协议
+            encryptedFields: encryptedFields,          //加密字段
+            showToolbar: showToolbar,                  //是否显示工具栏
+            showSmart: showSmart,                      //是否显示智能信息
+            buttonIDs: buttonIDs                       //自定义工具条按钮
+          })
+        }).then(function (oData) {
+          that.oWebControl.JS_Resize(850, 615)  // 初始化后resize一次,规避firefox下首次显示窗口后插件窗口未与DIV窗口重合问题
+        })
+      })
+    },
+    //获取公钥
+    getPubKey(callback) {
+      let that = this
+      that.oWebControl.JS_RequestInterface({
+        funcName: 'getRSAPubKey',
+        argument: JSON.stringify({
+          keyLength: 1024
+        })
+      }).then(function (oData) {
+        console.log(oData)
+        if (oData.responseMsg.data) {
+          that.pubKey = oData.responseMsg.data
+          callback()
+        }
+        125
+      })
+    },
+//RSA加密
+    setEncrypt(value) {
+      var encrypt = new JSEncrypt()
+      encrypt.setPublicKey(this.pubKey)
+      return encrypt.encrypt(value)
+    },
+    //播放海康摄像头
+    playhk(channelCode) {
+      var cameraIndexCode = channelCode     //获取输入的监控点编号值,必填
+      var streamMode = 0                                     //主子码流标识:0-主码流,1-子码流
+      var transMode = 1                                      //传输协议:0-UDP,1-TCP
+      var gpuMode = 0                                        //是否启用GPU硬解,0-不启用,1-启用
+      var wndId = -1                                         //播放窗口序号(在2x2以上布局下可指定播放窗口)
+
+      cameraIndexCode = cameraIndexCode.replace(/(^\s*)/g, '')
+      cameraIndexCode = cameraIndexCode.replace(/(\s*$)/g, '')
+
+      this.oWebControl.JS_RequestInterface({
+        funcName: 'startPreview',
+        argument: JSON.stringify({
+          cameraIndexCode: cameraIndexCode,                //监控点编号
+          streamMode: streamMode,                         //主子码流标识
+          transMode: transMode,                           //传输协议
+          gpuMode: gpuMode,                               //是否开启GPU硬解
+          wndId: wndId                                     //可指定播放窗口
+        })
+      })
+    }
+    /** ----------------------------------海康摄像头预览结束------------------------------------- */
+  }
+}
+
+// 推送消息
+function cbIntegrationCallBack(oData) {
+  console.log(JSON.stringify(oData.responseMsg))
+}
+</script>
+
+<style rel="stylesheet/scss" lang="scss" scoped>
+@import '@/assets/styles/base.scss';
+
+.event-info-con {
+  width: 100%;
+  display: flex;
+
+  .e-left {
+    width: 32%;
+  }
+
+  .e-center {
+    width: 30%;
+    margin-left: 1%;
+
+    .img-company {
+      width: 100%;
+      height: 18.3vh;
+
+      img {
+      }
+    }
+  }
+
+  .e-right {
+    margin-left: 1%;
+    width: 45%;
+  }
+
+  .e-location-left {
+    width: 28%;
+    margin-top: 1rem;
+  }
+
+  .e-location-right {
+    width: 71%;
+    margin-top: 1.3rem;
+    margin-left: 1rem;
+  }
+}
+
+.el-dialog:not(.is-fullscreen) {
+  margin-top: 5.5vh !important;
+}
+
+.bottom-menu-normal {
+  max-width: 90%;
+  padding: 0 3rem;
+  position: absolute;
+  left: 50%;
+  transform: translateX(-50%);
+  bottom: 0;
+  z-index: 100000;
+  border-radius: 5px;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  background: url(../assets/images/integrated/btm-menu.png) center no-repeat;
+  background-size: cover;
+  overflow: hidden;
+
+  .btm-m-con {
+    position: relative;
+    color: $inBlue;
+    font-size: .5rem;
+    padding: 1rem 1.5rem;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    -webkit-transform: translateY(0);
+    transform: translateY(0);
+    transition: all 0.2s ease-in-out;
+    cursor: pointer;
+    white-space: nowrap;
+
+    i {
+      font-size: 1rem;
+      color: $inBlue;
+      text-shadow: 0 0 10px rgba($color: $inBlue, $alpha: .6);
+      margin-right: 0.2rem;
+    }
+  }
+
+  .btm-m-con:hover {
+    text-shadow: 0 0 20px rgba($color: $inBlueHover, $alpha: 1.0);
+    filter: brightness(2.3);
+    -webkit-transform: translateX(0.2rem);
+    transform: translateX(0.2rem);
+    transition: all 0.2s ease-in-out;
+
+    i {
+      color: $inBlueHover;
+      text-shadow: 0 0 20px rgba($color: $inBlueHover, $alpha: 1.0);
+    }
+  }
+
+  .m-l-none {
+    .el-input__inner {
+      margin-left: 0 !important;
+    }
+  }
+
+}
+
+/*海康*/
+html, body {
+  padding: 0;
+  margin: 0;
+}
+
+.playWnd {
+  margin: -13px 0 0 255px;
+  width: 850px; /*播放容器的宽和高设定*/
+  height: 615px;
+  border: 1px solid red;
+}
+
+.operate {
+  margin-top: 24px;
+}
+
+.operate::after {
+  content: '';
+  display: block;
+  clear: both;
+}
+
+.module {
+  float: left;
+  width: 340px;
+  /*min-height: 320px;*/
+  margin-left: 16px;
+  padding: 16px 8px;
+  box-sizing: border-box;
+  border: 1px solid #e5e5e5;
+}
+
+.module .item {
+  margin-bottom: 4px;
+}
+
+.module input[type="text"] {
+  box-sizing: border-box;
+  display: inline-block;
+  vertical-align: middle;
+  margin-left: 0;
+  width: 150px;
+  min-height: 20px;
+}
+
+.module .btn {
+  min-width: 80px;
+  min-height: 24px;
+  margin-top: 100px;
+  margin-left: 80px;
+}
+</style>

+ 5 - 0
src/components/supermap.vue

@@ -1226,6 +1226,11 @@ export default {
     dropLocation: function(lat, lng) { //落点定位
       this.map.flyTo([lat, lng], 13, { duration: 2 })
     },
+    dropLocation: function(lat, lng,leve) { //落点定位
+      this.map.flyTo([lat, lng], leve, {
+        duration: 2
+      })
+    },
     dropLocation10: function(lat, lng) { //落点定位
       this.map.flyTo([lat, lng], 10, { duration: 2 })
     },

+ 1 - 0
src/components/v-fastmenu.vue

@@ -83,6 +83,7 @@ import Cookies from 'js-cookie';
           this.phonenumber=response.data.phonenumber
           this.userId=response.data.userId
           Cookies.set('userId',response.data.userId);
+          Cookies.set('nickName',response.data.nickName);
         });
       },
       resetPwd(){

+ 11 - 11
src/components/vBottomMenu.vue

@@ -435,17 +435,17 @@
 						icon: 'iconfont sj-icon-clgj',
 						click: 'editableLayers'
 					},
-					{
-						name: '林班',
-						icon: 'iconfont sj-icon-lbzy',
-						click: 'forestban'
-					},
-
-					{
-						name: '林场',
-						icon: 'iconfont sj-icon-lczy',
-						click: 'forestchang'
-					},
+					// {
+					// 	name: '林班',
+					// 	icon: 'iconfont sj-icon-lbzy',
+					// 	click: 'forestban'
+					// },
+          //
+					// {
+					// 	name: '林场',
+					// 	icon: 'iconfont sj-icon-lczy',
+					// 	click: 'forestchang'
+					// },
 					{
 						name: '电视墙',
 						icon: 'el-icon-s-grid',

+ 62 - 61
src/router/index.js

@@ -60,37 +60,38 @@ export const constantRoutes = [
 		meta: {
 			title: '监控中心'
 		}
-	}, {
-		path: '/soil',
-		name: 'soil',
-		component: () => import('@/views/soil'),
-		meta: {
-			title: '土壤墒情'
-		}
 	},
-  {
-		path: '/pollutionsource',
-		name: 'pollutionsource',
-		component: () => import('@/views/pollutionsource'),
-		meta: {
-			title: '污染源'
-		}
-	}, {
-		path: '/waterquality',
-		name: 'waterquality',
-		component: () => import('@/views/waterquality'),
-		meta: {
-			title: '水质环境'
-		}
-	},
-  {
-    path: '/atmosphere',
-    name: 'atmosphere',
-    component: () => import('@/views/atmosphere'),
-    meta: {
-      title: '大气环境'
-    }
-  },
+  // {
+	// 	path: '/soil',
+	// 	name: 'soil',
+	// 	component: () => import('@/views/soil'),
+	// 	meta: {
+	// 		title: '土壤墒情'
+	// 	}
+	// },
+  // {
+	// 	path: '/pollutionsource',
+	// 	name: 'pollutionsource',
+	// 	component: () => import('@/views/pollutionsource'),
+	// 	meta: {
+	// 		title: '污染源'
+	// 	}
+	// }, {
+	// 	path: '/waterquality',
+	// 	name: 'waterquality',
+	// 	component: () => import('@/views/waterquality'),
+	// 	meta: {
+	// 		title: '水质环境'
+	// 	}
+	// },
+  // {
+  //   path: '/atmosphere',
+  //   name: 'atmosphere',
+  //   component: () => import('@/views/atmosphere'),
+  //   meta: {
+  //     title: '大气环境'
+  //   }
+  // },
   {
     //环保人员
     path: '/leader',
@@ -144,37 +145,37 @@ export const constantRoutesNew = [{
 			title: '监控中心'
 		}
 	},
-  , {
-    path: '/soil',
-    name: 'soil',
-    component: () => import('@/views/soil'),
-    meta: {
-      title: '土壤墒情'
-    }
-  },
-  {
-    path: '/pollutionsource',
-    name: 'pollutionsource',
-    component: () => import('@/views/pollutionsource'),
-    meta: {
-      title: '污染源'
-    }
-  }, {
-    path: '/waterquality',
-    name: 'waterquality',
-    component: () => import('@/views/waterquality'),
-    meta: {
-      title: '水质环境'
-    }
-  },
-  {
-    path: '/atmosphere',
-    name: 'atmosphere',
-    component: () => import('@/views/atmosphere'),
-    meta: {
-      title: '大气环境'
-    }
-  },
+  // {
+  //   path: '/soil',
+  //   name: 'soil',
+  //   component: () => import('@/views/soil'),
+  //   meta: {
+  //     title: '土壤墒情'
+  //   }
+  // },
+  // {
+  //   path: '/pollutionsource',
+  //   name: 'pollutionsource',
+  //   component: () => import('@/views/pollutionsource'),
+  //   meta: {
+  //     title: '污染源'
+  //   }
+  // }, {
+  //   path: '/waterquality',
+  //   name: 'waterquality',
+  //   component: () => import('@/views/waterquality'),
+  //   meta: {
+  //     title: '水质环境'
+  //   }
+  // },
+  // {
+  //   path: '/atmosphere',
+  //   name: 'atmosphere',
+  //   component: () => import('@/views/atmosphere'),
+  //   meta: {
+  //     title: '大气环境'
+  //   }
+  // },
   {
     //环保人员
     path: '/leader',

+ 1 - 0
src/store/getters.js

@@ -7,6 +7,7 @@ const getters = {
   token: state => state.user.token,
   avatar: state => state.user.avatar,
   name: state => state.user.name,
+  userId: state => state.user.id,
   introduction: state => state.user.introduction,
   roles: state => state.user.roles,
   permissions: state => state.user.permissions,

+ 6 - 1
src/store/modules/user.js

@@ -5,6 +5,7 @@ const user = {
   state: {
     token: getToken(),
     name: '',
+    userId: '',
     avatar: '',
     roles: [],
     permissions: []
@@ -28,6 +29,9 @@ const user = {
     },
     SET_PERMISSIONS: (state, permissions) => {
       state.permissions = permissions
+    },
+    SET_USERID: (state, userId) => {
+      state.userId = userId
     }
   },
 
@@ -65,6 +69,7 @@ const user = {
             commit('SET_ROLES', ['ROLE_DEFAULT'])
           }
           commit('SET_NAME', user.userName)
+          commit('SET_USERID', user.id)
           commit('SET_AVATAR', avatar)
           resolve(res)
         }).catch(error => {
@@ -85,7 +90,7 @@ const user = {
         })
       })
     },
-    
+
     // 退出系统
     LogOut({ commit, state }) {
       return new Promise((resolve, reject) => {

+ 1 - 1
src/utils/request.js

@@ -20,7 +20,7 @@ const service = axios.create({
   // axios中请求配置有baseURL选项,表示请求URL公共部分
   baseURL: process.env.VUE_APP_BASE_API,
   // 超时
-  timeout: 10000
+  timeout: 20000
 })
 
 // request拦截器

+ 365 - 367
src/views/bigdata/chart-equipmentDistribution.vue

@@ -1,395 +1,393 @@
 <!-- **************************************NO.16 摄像头*************************************** -->
 <template>
-	<div class="chart-container">
-		<!-- <div id="camera1" style="width: 100%; height:25vh; ">
-		</div> -->
-		<div id="camera2" style="width: 100%; height:85vh; ">
-		</div>
-		<!-- <div id="camera3" style="width: 100%; height:30vh; ">
-		</div> -->
-	</div>
+  <div class="chart-container">
+    <!-- <div id="camera1" style="width: 100%; height:25vh; ">
+        </div> -->
+    <div id="camera2" style="width: 100%; height:85vh; ">
+    </div>
+    <!-- <div id="camera3" style="width: 100%; height:30vh; ">
+        </div> -->
+  </div>
 </template>
 
 <script>
-	import * as echarts from 'echarts';
+  import * as echarts from 'echarts';
   import {getSbfb} from '@/api/bigdata'
-	export default {
-		name: 'camera',
-		data() {
-			return {
-				count: 0,
-        data_sbfb:[]
-			}
-		},
-		mounted() {
-			// this.myEcharts1();
-			this.sbfb();
-			// this.myEcharts3();
 
-		},
+  export default {
+    name: 'camera',
+    data() {
+      return {
+        source: []
+      }
+    },
+    mounted() {
+      // this.myEcharts1();
+      // this.myEcharts2();
+      // this.myEcharts3();
+      this.getSbfb()
+    },
 
-		methods: {
-		  sbfb(){
-		    let that = this
-		    getSbfb().then(resp =>{
-         that.data_sbfb = resp.data
+    methods: {
+      getSbfb() {
+        let that = this
+        getSbfb().then(res => {
+          this.source = res.data
           that.myEcharts2()
         })
       },
-			// 出处 http://192.144.199.210:8080/editor/index.html?chart_id=TMyJh73uiXkeu3_v
-			myEcharts1() {
-				var chartDom = document.getElementById('camera1');
-				var myChart = echarts.init(chartDom);
-				var option;
-				const dfColor = ['#92E1FF', '#0097FB', '#30ECA6', '#FFC227', '#FF4848'];
-				option = {
-					dataset: {
-						dimensions: ['name', '摄像头'],
-						source: [{
-								name: '双辽市',
-								'摄像头': 50
-							},
-							{
-								name: '梨树县',
-								'摄像头': 40
-							},
-							{
-								name: '伊通县',
-								'摄像头': 30
-							},
-							{
-								name: '铁东区',
-								'摄像头': 20
-							},
-							{
-								name: '铁西区',
-								'摄像头': 30
-							}
-						]
-					},
-					tooltip: {
-						trigger: 'item',
-						position: function(point, params, dom, rect, size) {
-							const x = point[0];
-							const y = point[1];
-				 		const viewWidth = size.viewSize[0];
-							const viewHeight = size.viewSize[1];
-							const boxWidth = size.contentSize[0];
-				 		const boxHeight = size.contentSize[1];
-							let posX = 0;
-							let posY = 0;
-				 		if (x < boxWidth) {
-								// 左边放不开
-								posX = 5;
-							} else {
-								// 左边放的下
-								posX = x - boxWidth;
-							}
-							if (y < boxHeight) {
-								// 上边放不开
-								posY = 5;
-							} else {
-								// 上边放得下
-								posY = y - boxHeight;
-							}
-							return [posX, posY];
-						},
-					},
-					angleAxis: {
-						max(value) {
-							return value.max * 1.1;
-						},
-						axisLabel: {
-							show: false
-						},
-						axisTick: {
-							show: false
-						},
-				  axisLine: {
-							show: false
-						},
-						splitLine: {
-							show: false
-						},
-						startAngle: 270
-					},
-					radiusAxis: {
-						type: 'category',
-						minorTick: {
-							show: false
-						},
-						axisLine: {
-							show: false
-						},
-						axisTick: {
-							show: false
-						},
-						axisLabel: {
-							show: false
-						},
-					},
-					polar: {
-				 	radius: ['40%', '90%'],
-				 },
-					// angleAxis:{
-					//     clockwise:false
-					// },
-					series: [{
-						type: 'bar',
-						coordinateSystem: 'polar',
-						itemStyle: {
-				  	color(params) {
-								const idx = params.dataIndex;
-								return dfColor[idx];
-							},
-						},
-						barWidth: 5,
-						roundCap: true,
-						showBackground: true,
-						backgroundStyle: {
-							color: 'RGBA(0, 69, 117, 0.5)',
-						},
-					}],
-				};
-				option && myChart.setOption(option);
-			},
-
-			// 出处 http://192.144.199.210:8080/editor/index.html?chart_id=pAD_0lcRq_zOGf_k
-			myEcharts2() {
-        let that = this
-				var chartDom = document.getElementById('camera2');
-				var myChart = echarts.init(chartDom);
-				var option;
-				const dfColor = ['#92E1FF', '#0097FB', '#30ECA6', '#FFC227', '#FF4848'];
-				option = {
-					dataset: {
-						source: that.data_sbfb,
-					},
-					tooltip: {
-						trigger: 'item',
+      // 出处 http://192.144.199.210:8080/editor/index.html?chart_id=TMyJh73uiXkeu3_v
+      myEcharts1() {
+        var chartDom = document.getElementById('camera1');
+        var myChart = echarts.init(chartDom);
+        var option;
+        const dfColor = ['#92E1FF', '#0097FB', '#30ECA6', '#FFC227', '#FF4848'];
+        option = {
+          dataset: {
+            dimensions: ['name', '摄像头'],
+            source: [{
+              name: '双辽市',
+              '摄像头': 50
+            },
+              {
+                name: '梨树县',
+                '摄像头': 40
+              },
+              {
+                name: '伊通县',
+                '摄像头': 30
+              },
+              {
+                name: '铁东区',
+                '摄像头': 20
+              },
+              {
+                name: '铁西区',
+                '摄像头': 30
+              }
+            ]
+          },
+          tooltip: {
+            trigger: 'item',
+            position: function (point, params, dom, rect, size) {
+              const x = point[0];
+              const y = point[1];
+              const viewWidth = size.viewSize[0];
+              const viewHeight = size.viewSize[1];
+              const boxWidth = size.contentSize[0];
+              const boxHeight = size.contentSize[1];
+              let posX = 0;
+              let posY = 0;
+              if (x < boxWidth) {
+                // 左边放不开
+                posX = 5;
+              } else {
+                // 左边放的下
+                posX = x - boxWidth;
+              }
+              if (y < boxHeight) {
+                // 上边放不开
+                posY = 5;
+              } else {
+                // 上边放得下
+                posY = y - boxHeight;
+              }
+              return [posX, posY];
+            },
+          },
+          angleAxis: {
+            max(value) {
+              return value.max * 1.1;
+            },
+            axisLabel: {
+              show: false
+            },
+            axisTick: {
+              show: false
+            },
+            axisLine: {
+              show: false
+            },
+            splitLine: {
+              show: false
+            },
+            startAngle: 270
+          },
+          radiusAxis: {
+            type: 'category',
+            minorTick: {
+              show: false
+            },
+            axisLine: {
+              show: false
+            },
+            axisTick: {
+              show: false
+            },
+            axisLabel: {
+              show: false
+            },
+          },
+          polar: {
+            radius: ['40%', '90%'],
+          },
+          // angleAxis:{
+          //     clockwise:false
+          // },
+          series: [{
+            type: 'bar',
+            coordinateSystem: 'polar',
+            itemStyle: {
+              color(params) {
+                const idx = params.dataIndex;
+                return dfColor[idx];
+              },
+            },
+            barWidth: 5,
+            roundCap: true,
+            showBackground: true,
+            backgroundStyle: {
+              color: 'RGBA(0, 69, 117, 0.5)',
+            },
+          }],
+        };
+        option && myChart.setOption(option);
+      },
 
-					},
-					grid: {
-						top: "0%",
-						left: "6%",
-						// right: "4%",
-						bottom: "5%",
-						width: '75%',
-						containLabel: true,
-					},
-					xAxis: {
-						show: false,
-						type: "value",
-					},
-					yAxis: {
-						type: "category", // 不设置类目轴,抽离的dataset数据展示不出来
-						inverse: true,
-						axisLabel: {
-							show: true,
-							textStyle: {
-								color: '#5deaff',
-								fontSize: '12'
-							}
-						},
-				  splitLine: {
-							show: false
-						},
-						axisTick: {
-							show: false
-						},
-						axisLine: {
-							show: false
-						},
-					},
+      // 出处 http://192.144.199.210:8080/editor/index.html?chart_id=pAD_0lcRq_zOGf_k
+      myEcharts2() {
+        var chartDom = document.getElementById('camera2');
+        var myChart = echarts.init(chartDom);
+        var option;
+        const dfColor = ['#92E1FF', '#0097FB', '#30ECA6', '#FFC227', '#FF4848'];
+        option = {
+          dataset: {
+            source: this.source,
+          },
+          tooltip: {
+            trigger: 'item',
 
-					series: [{
+          },
+          grid: {
+            top: "0%",
+            left: "6%",
+            // right: "4%",
+            bottom: "5%",
+            width: '75%',
+            containLabel: true,
+          },
+          xAxis: {
+            show: false,
+            type: "value",
+          },
+          yAxis: {
+            type: "category", // 不设置类目轴,抽离的dataset数据展示不出来
+            inverse: true,
+            axisLabel: {
+              show: true,
+              textStyle: {
+                color: '#5deaff',
+                fontSize: '12'
+              }
+            },
+            splitLine: {
+              show: false
+            },
+            axisTick: {
+              show: false
+            },
+            axisLine: {
+              show: false
+            },
+          },
 
-						type: "bar",
-						animationCurve: "easeOutBack",
-						barWidth: 8,
-						label: {
-							show: true,
-							position: "right",
-							offset: [0, 0],
-							color: "#88dfd5",
-							// fontSize: "12",
-							style: {
-				   	fill: "#fff"
-							},
-						},
-						backgroundBar: {
-							show: true,
-							style: {
-								fill: "rgba(97,152,255,0.30)",
-							},
-						},
-						barStyle: {
-							stroke: "rgba(41,244,236,1)",
-						},
-						gradient: {
-							color: ["rgba(41,244,236,1)", "rgba(41,244,236,0)"],
-						},
-						itemStyle: {
-							label: {
-								show: true
-							},
-							labelLine: {
-								show: false,
-							},
-							color: new echarts.graphic.LinearGradient(0, 1, 0, 0, [{
-				 				offset: 0,
-									color: "rgba(41,244,236,0)"
-								},
-								{
-									offset: 1,
-									color: "rgba(41,244,236,1)"
-								},
-							]),
-							borderColor: "#a2f9f7",
-							shadowBlur: 16,
-							shadowColor: "#a2f9f7",
-						},
-					}, ],
-				};
-				option && myChart.setOption(option);
-			},
-			// 出处 http://192.144.199.210:8080/editor/index.html?chart_id=ELjN7o3m72tLtmbv
-			myEcharts3() {
-				var chartDom = document.getElementById('camera3');
-				var myChart = echarts.init(chartDom);
-				var option;
-				option = {
-					color: ['#3D91F7', '#61BE67'],
-					tooltip: {},
-					legend: {
-						show: true,
-						icon: "circle",
-						bottom: 30,
-						center: 0,
-						itemWidth: 14,
-						itemHeight: 14,
-						itemGap: 21,
-						orient: "horizontal",
-						data: ['a', 'b'],
-						textStyle: {
-							color: '#8C8C8C'
-						},
-					},
+          series: [{
 
-					radar: {
-						// shape: 'circle',
-						radius: '80%',
-						triggerEvent: true,
-						name: {
-							textStyle: {
-								color: '#fff',
-								fontSize: '10',
-								borderRadius: 3,
-								padding: [3, 5]
-							}
-						},
-						nameGap: '2',
-						indicator: [{ //[4300, 10000, 28000, 35000, 50000, 19000, 21000]
-								name: '型号1',
-								max: 6500
-							},
-							{
-								name: '型号2',
-								max: 16000
-							},
-							{
-								name: '型号3',
-								max: 30000
-							},
-							{
-								name: '型号4',
-								max: 38000
-							},
-							{
-								name: '型号5',
-								max: 52000
-							},
-							{
-								name: '型号6',
-								max: 25000
-							},
-							{
-								name: '型号7',
-								max: 25000
-							}
-						],
-						splitArea: {
-							areaStyle: {
-								color: [
-									'rgba(222,134,85, 0.1)', 'rgba(222,134,85, 0.2)',
-									'rgba(222,134,85, 0.4)', 'rgba(222,134,85, 0.6)',
-									'rgba(222,134,85, 0.8)', 'rgba(222,134,85, 1)'
-								].reverse()
-							}
-						},
-						// axisLabel:{//展示刻度
-						//     show: true
-						// },
-						axisLine: { //指向外圈文本的分隔线样式
-							lineStyle: {
-								color: 'rgba(0,0,0,0)'
-							}
-						},
-						splitLine: {
-							lineStyle: {
-								width: 2,
-								color: [
-									'rgba(224,134,82, 0.1)', 'rgba(224,134,82, 0.2)',
-									'rgba(224,134,82, 0.4)', 'rgba(224,134,82, 0.6)',
-									'rgba(224,134,82, 0.8)', 'rgba(224,134,82, 1)'
-								].reverse()
-							}
-						},
+            type: "bar",
+            animationCurve: "easeOutBack",
+            barWidth: 8,
+            label: {
+              show: true,
+              position: "right",
+              offset: [0, 0],
+              color: "#88dfd5",
+              // fontSize: "12",
+              style: {
+                fill: "#fff"
+              },
+            },
+            backgroundBar: {
+              show: true,
+              style: {
+                fill: "rgba(97,152,255,0.30)",
+              },
+            },
+            barStyle: {
+              stroke: "rgba(41,244,236,1)",
+            },
+            gradient: {
+              color: ["rgba(41,244,236,1)", "rgba(41,244,236,0)"],
+            },
+            itemStyle: {
+              label: {
+                show: true
+              },
+              labelLine: {
+                show: false,
+              },
+              color: new echarts.graphic.LinearGradient(0, 1, 0, 0, [{
+                offset: 0,
+                color: "rgba(41,244,236,0)"
+              },
+                {
+                  offset: 1,
+                  color: "rgba(41,244,236,1)"
+                },
+              ]),
+              borderColor: "#a2f9f7",
+              shadowBlur: 16,
+              shadowColor: "#a2f9f7",
+            },
+          },],
+        };
+        option && myChart.setOption(option);
+      },
+      // 出处 http://192.144.199.210:8080/editor/index.html?chart_id=ELjN7o3m72tLtmbv
+      myEcharts3() {
+        var chartDom = document.getElementById('camera3');
+        var myChart = echarts.init(chartDom);
+        var option;
+        option = {
+          color: ['#3D91F7', '#61BE67'],
+          tooltip: {},
+          legend: {
+            show: true,
+            icon: "circle",
+            bottom: 30,
+            center: 0,
+            itemWidth: 14,
+            itemHeight: 14,
+            itemGap: 21,
+            orient: "horizontal",
+            data: ['a', 'b'],
+            textStyle: {
+              color: '#8C8C8C'
+            },
+          },
 
-					},
+          radar: {
+            // shape: 'circle',
+            radius: '80%',
+            triggerEvent: true,
+            name: {
+              textStyle: {
+                color: '#fff',
+                fontSize: '10',
+                borderRadius: 3,
+                padding: [3, 5]
+              }
+            },
+            nameGap: '2',
+            indicator: [{ //[4300, 10000, 28000, 35000, 50000, 19000, 21000]
+              name: '型号1',
+              max: 6500
+            },
+              {
+                name: '型号2',
+                max: 16000
+              },
+              {
+                name: '型号3',
+                max: 30000
+              },
+              {
+                name: '型号4',
+                max: 38000
+              },
+              {
+                name: '型号5',
+                max: 52000
+              },
+              {
+                name: '型号6',
+                max: 25000
+              },
+              {
+                name: '型号7',
+                max: 25000
+              }
+            ],
+            splitArea: {
+              areaStyle: {
+                color: [
+                  'rgba(222,134,85, 0.1)', 'rgba(222,134,85, 0.2)',
+                  'rgba(222,134,85, 0.4)', 'rgba(222,134,85, 0.6)',
+                  'rgba(222,134,85, 0.8)', 'rgba(222,134,85, 1)'
+                ].reverse()
+              }
+            },
+            // axisLabel:{//展示刻度
+            //     show: true
+            // },
+            axisLine: { //指向外圈文本的分隔线样式
+              lineStyle: {
+                color: 'rgba(0,0,0,0)'
+              }
+            },
+            splitLine: {
+              lineStyle: {
+                width: 2,
+                color: [
+                  'rgba(224,134,82, 0.1)', 'rgba(224,134,82, 0.2)',
+                  'rgba(224,134,82, 0.4)', 'rgba(224,134,82, 0.6)',
+                  'rgba(224,134,82, 0.8)', 'rgba(224,134,82, 1)'
+                ].reverse()
+              }
+            },
 
-					series: [{
-						name: '型号统计',
-						type: 'radar',
-						//areaStyle: {normal: {}},
-						areaStyle: {
-							normal: {
-								color: 'rgba(252,211,3, 0.3)'
-							}
-						},
-						symbolSize: 0,
-						lineStyle: {
-							normal: {
-								color: 'rgba(252,211,3, 1)',
-								width: 1
-				  	}
-						},
-						data: [{
-							value: [4300, 10000, 28000, 35000, 50000, 19000, 21000],
-							name: '型号统计',
+          },
 
+          series: [{
+            name: '型号统计',
+            type: 'radar',
+            //areaStyle: {normal: {}},
+            areaStyle: {
+              normal: {
+                color: 'rgba(252,211,3, 0.3)'
+              }
+            },
+            symbolSize: 0,
+            lineStyle: {
+              normal: {
+                color: 'rgba(252,211,3, 1)',
+                width: 1
+              }
+            },
+            data: [{
+              value: [4300, 10000, 28000, 35000, 50000, 19000, 21000],
+              name: '型号统计',
 
 
-						}]
-					}]
-				};
-				option && myChart.setOption(option);
-			},
+            }]
+          }]
+        };
+        option && myChart.setOption(option);
+      },
 
 
-		},
+    },
 
 
-	}
+  }
 </script>
 
 <style rel="stylesheet/scss" lang="scss" scoped>
-	.chart-container {
-		width: 100%;
-		height: auto;
-		position: relative;
-		padding-bottom: 10px;
-		display: flex;
-		flex-direction: column;
-	}
+  .chart-container {
+    width: 100%;
+    height: auto;
+    position: relative;
+    padding-bottom: 10px;
+    display: flex;
+    flex-direction: column;
+  }
 </style>

+ 11 - 20
src/views/bigdata/tabbar.vue

@@ -1,29 +1,13 @@
 <template>
   <div class="bigdata-map-tabbar">
     <el-row :gutter="20">
-      <el-col :span="4" v-for="(item,index) in data_zhxx_data" :key="index">
+      <el-col :span="4" v-for="(item,index) in regionNum" :key="index">
         <div class="list-content">
           <span>{{item.value}}</span>
           <h5>{{item.name}}</h5>
         </div>
       </el-col>
     </el-row>
-    <el-row :gutter="20">
-      <el-col :span="4" v-for="(item,index) in data_zhxx_event" :key="index">
-        <div class="list-content">
-          <span>{{item.value}}</span>
-          <h5>{{item.name}}</h5>
-        </div>
-      </el-col>
-    </el-row>
-    <el-row :gutter="20">
-      <el-col :span="4">
-        <div class="list-content">
-          <span>{{data_zhxx_device}}</span>
-          <h5>设备</h5>
-        </div>
-      </el-col>
-    </el-row>
   </div>
 </template>
 
@@ -153,9 +137,16 @@
         let that = this
         getZhxx().then(resp => {
           console.log(resp)
-          that.data_zhxx_device = resp.data.device
-          that.data_zhxx_data = resp.data.data
-          that.data_zhxx_event = resp.data.event
+          // that.data_zhxx_device = resp.data.device
+          // that.data_zhxx_data = resp.data.data
+          // that.data_zhxx_event = resp.data.event
+          that.regionNum = [];
+          that.regionNum.push(...resp.data.event)
+          that.regionNum.push(...resp.data.data)
+          for(let i in resp.data.device){
+            that.regionNum.push({value: resp.data.device[i].deviceCount,name: resp.data.device[i].deviceName})
+          }
+
         })
       },
 

+ 260 - 92
src/views/eventdetailsdialog.vue

@@ -33,32 +33,33 @@
                 </div>
                 <!-- 应急预案end -->
                 <!-- 左侧资源 -->
-                <div class="leftbar" style="width:fit-content !important;bottom:0rem;left: 1rem; top: unset;">
-                  <div class="forthis">
-                    <dv-border-box-7 backgroundColor="#040b1f" :color="['#0e7957', '#0da24c']">
-                      <div class="i-list-con">
-                        <div class="d-l-con-icon" style="flex-direction:row;flex-wrap: nowrap;">
-                          <div class="icon-con" style="width: fit-content !important;"
-                               v-for="(item,index) in resourcesList" @click="listResourceByWz(item.type)">
-                            <div class="iconfont icon icon-normal" :class="item.icon"></div>
-                            <div class="icon-text">
-                              <h5>{{ item.resourceName }}</h5>
-                            </div>
-                          </div>
-                          <el-input type="number" v-model="radius" style="width: 80px;" placeholder="请输入搜索半径"/>
-                        </div>
-                      </div>
-
-                    </dv-border-box-7>
-                  </div>
-
-                </div>
+                <!--<div class="leftbar" style="width:fit-content !important;bottom:0rem;left: 1rem; top: unset;">-->
+                  <!--<div class="forthis">-->
+                    <!--<dv-border-box-7 backgroundColor="#040b1f" :color="['#0e7957', '#0da24c']">-->
+                      <!--<div class="i-list-con">-->
+                        <!--<div class="d-l-con-icon" style="flex-direction:row;flex-wrap: nowrap;">-->
+                          <!--<div class="icon-con" style="width: fit-content !important;"-->
+                               <!--v-for="(item,index) in resourcesList" @click="listResourceByWz(item.type)">-->
+                            <!--<div class="iconfont icon icon-normal" :class="item.icon"></div>-->
+                            <!--<div class="icon-text">-->
+                              <!--<h5>{{ item.resourceName }}</h5>-->
+                            <!--</div>-->
+                          <!--</div>-->
+                          <!--<el-input type="number" v-model="radius" style="width: 80px;" placeholder="请输入搜索半径"/>-->
+                        <!--</div>-->
+                      <!--</div>-->
+
+                    <!--</dv-border-box-7>-->
+                  <!--</div>-->
+
+                <!--</div>-->
                 <!-- 左侧资源end -->
                 <!-- 底部工具栏 -->
                 <!--   <div class="dia-left-btm-tool">
                    </div> -->
                 <!-- 底部工具栏end -->
                 <div class="fire-m">
+                  <el-button size="small" icon="el-icon-s-grid" @click="showTVWallDiaLog()">火点联动</el-button>
                   <el-button size="small" icon="el-icon-upload" @click="showheatPlotting()">火灾蔓延
                   </el-button>
                 </div>
@@ -156,9 +157,12 @@
                                 </el-button>
                                 <el-button size="small" icon="el-icon-download" @click="showResponsibility()">责任制
                                 </el-button>
+                                <el-button v-if="eventStatusValue=='forest_event_status_2' && statusFlag=='1' && dataStatus=='0'"
+                                  size="small" icon="el-icon-download" @click="updateCentereventTEventcatalogueStatus('cz',true)">处置
+                                </el-button>
                               </div>
                               <div class="z-info-btm-grp-right">
-                                <el-button size="small" icon="el-icon-mic" @click="joinMeeting()">会议
+                                <el-button size="small" icon="el-icon-mic" @click="Meeting()">会议
                                 </el-button>
                               </div>
                             </div>
@@ -225,7 +229,7 @@
                                              @click="updateCentereventTEventcatalogueStatus('ld',false)">
                                     联动
                                   </el-button>
-                                  <el-button size="small" v-if="dataStatus=='1'"
+                                  <el-button size="small" v-if="statusFlag=='1'"
                                              icon="el-icon-success" style="text-align:left"
                                              @click="updateCentereventTEventcatalogueStatus('bj',true)">
                                     办结
@@ -235,12 +239,17 @@
                                 </el-button>
                               </div>
                               <div class="z-info-btm-input-btn"
-                                   v-else-if="eventStatusValue=='forest_event_status_5'&&dataStatus=='1'">
+                                   v-else-if="eventStatusValue=='forest_event_status_5'&&statusFlag=='1'">
                                 <el-button size="small"
-                                           icon="el-icon-success" style="text-align:left"
+                                           icon="el-icon-success" style="text-align:left" v-if="eventType == 1"
                                            @click="updateCentereventTEventcatalogueStatus('gd',false)">
                                   填报
                                 </el-button>
+                                <el-button size="small"
+                                           icon="el-icon-success" style="text-align:left" v-if="eventType != 1"
+                                           @click="updateCentereventTEventcatalogueStatus('gd',true)">
+                                  归档
+                                </el-button>
                                 <el-button size="small" icon="el-icon-chat-dot-square" @click="sendEventLog()">发送
                                 </el-button>
                               </div>
@@ -269,7 +278,7 @@
                class="top-dialog"
                @close="cancelEventConfirm()">
       <el-form label-width="80px">
-        <el-form-item label="火灾半径" v-if="eventStatusButton=='qs'">
+        <el-form-item label="火灾半径" v-if="eventStatusButton=='qs'&&eventTypeXl==null">
           <el-input type="number" v-model="sendHuoZaiBanJing" placeholder="请输入火灾半径"/>
         </el-form-item>
         <el-form-item :label="deptNameitem">
@@ -285,7 +294,7 @@
             </el-option>
           </el-select>
         </el-form-item>
-        <el-form-item label="事件类型" v-if="eventStatusButton=='qs'">
+        <el-form-item label="事件类型" v-if="eventStatusButton=='qs'&& eventTypeXl == null">
           <el-select v-model="sendEventType" placeholder="请选择事件类型!" clearable>
             <el-option
               v-for="item in eventTypeList"
@@ -463,6 +472,84 @@
         <div style="clear: both;"></div>
       </el-form>
     </el-dialog>
+    <!--    会议弹窗  start -->
+    <el-dialog title="视频会议" :visible.sync="showMeetingMsgDialog" v-if="showMeetingMsgDialog" width="65%"
+               @close="closeMeetingMsgDialog()">
+      <el-form label-width="1500px">
+        <div class="bottom">
+          <!-- 左侧菜单栏 -->
+          <div class="bottomLeft">
+            <div class="leftItem d-l-con padding-box nowrap" v-for="(item,index) in depteventList">
+              <div class="bgt-info">
+                <div class="bgt-info-name" :class="{on:iconCurrentIndex==item.deptId}"
+                     @click="dutysystemSelect(item.deptId,item.deptName,item.id)">{{ item.deptName }}
+                </div>
+              </div>
+            </div>
+          </div>
+          <!-- 左侧菜单栏对应的右侧的内容 -->
+          <div class="bottomRight" ref="wrapper">
+            <el-button
+              size="mini"
+              type="danger"
+              v-if="depteventId!=null&&depteventId!=''"
+              @click="addLine">添加
+            </el-button>
+            <el-button
+              size="mini"
+              type="danger"
+              v-if="depteventId!=null&&depteventId!=''"
+              @click="finUserByDept">选择
+            </el-button>
+            <el-table
+              :data="dutysystemTableData"
+              style="width: 100%"
+              :rules="rules">
+              <el-table-column prop="id" label="主键" v-if="false">
+                <template slot-scope="scope" hidden>
+                  <el-input v-model="scope.row.id" readonly placeholder="主键"></el-input>
+                </template>
+              </el-table-column>
+              <el-table-column prop="name" label="姓名">
+                <template slot-scope="scope">
+                  <el-input v-model="scope.row.name" placeholder="姓名" οninput="value=value.replace(/^[\u4e00-\u9fa5]{2,4}$/,'')"></el-input>
+                </template>
+              </el-table-column>
+              <el-table-column prop="post" label="岗位">
+                <template slot-scope="scope">
+                  <el-input v-model="scope.row.post" placeholder="岗位"></el-input>
+                </template>
+              </el-table-column>
+              <el-table-column prop="telphone" label="手机号码">
+                <template slot-scope="scope">
+                  <el-input v-model="scope.row.telphone" placeholder="手机号码" οninput="value=value.replace(/^((13[0-9])|(14[5-9])|(15([0-3]|[5-9]))|(16[6-7])|(17[1-8])|(18[0-9])|(19[1|3])|(19[5|6])|(19[8|9]))\d{8}$/,'')"></el-input>
+                </template>
+              </el-table-column>
+              <el-table-column prop="bookbuytime" label="操作">
+                <template slot-scope="scope">
+                  <el-button
+                    size="mini"
+                    type="danger"
+                    icon="el-icon-delete"
+                    @click="handleDelete(scope.$index, scope.row)">删除
+                  </el-button>
+                  <!--<el-button-->
+                  <!--size="mini"-->
+                  <!--type="danger"-->
+                  <!--icon="el-icon-save"-->
+                  <!--@click="handleSave(scope.$index, scope.row)">保存-->
+                  <!--</el-button>-->
+                </template>
+              </el-table-column>
+            </el-table>
+          </div>
+        </div>
+        <el-button size="mini" type="primary" class="fr_button" @click="sendMsg">发送短信
+        </el-button>
+        <div style="clear: both;"></div>
+      </el-form>
+    </el-dialog>
+    <!--    会议弹窗  end   -->
     <el-dialog title="火险报告" :visible.sync="showEventConfirm_gd" v-if="showEventConfirm_gd" width="100%"
                class="top-dialog"
                @close="cancelEventConfirm_gd()">
@@ -977,6 +1064,7 @@
     <el-dialog title="人员选择" :visible.sync="showFindUserByDept" width="40%">
       <findUserByDept v-if="showFindUserByDept" ref="findUserByDept" :deptId="iconCurrentIndex" @addSelection="addSelection"></findUserByDept>
     </el-dialog>
+    <TVWall ref="TVWall"></TVWall>
   </div>
 </template>
 
@@ -1004,7 +1092,10 @@ import {
   dutysystemList,
   dutysystemAdd,
   dutysystemRemove,
-  userFeginlist
+  userFeginlist,
+  sendMessage,
+  eventHandling,
+  initByCameras
 } from '@/api/forest'
 import {
   treeselectAll as deptTreeselect
@@ -1020,6 +1111,9 @@ import {
   getDahuaVideoServer
 } from '@/api/dahua/dahua'
 import DHWs from '@/dahua/lib/DHWs'
+import { selectConfigKey } from "@/api/system/config";
+import TVWall from '@/components/TVWall.vue' //电视墙弹窗
+import Cookies from 'js-cookie';
 export default {
   dicts: ['task_source'],
   watch: {
@@ -1029,6 +1123,7 @@ export default {
   },
   components: {
     vheader,
+    TVWall,
     vBottomMenu,
     supermapDialog,
     eventLogUpload,
@@ -1060,7 +1155,7 @@ export default {
       sendDeptId: null,//签收部门/发起部门
       sendDeptName: null,//签收部门/发起部门
       sendEventType: null,//事件类型
-      sendHuoZaiBanJing: null,//火灾报告
+      sendHuoZaiBanJing: 0,//火灾半径
       sendGuanLianYuAn: null,//关联预案
       sendUserFegin: [],//联系人
       sendTaskSource: null,//任务来源
@@ -1174,7 +1269,9 @@ export default {
       eventStatusValue: null,//事件状态
       eventId: null,//事件ID
       eventType: null,//事件类型-大类
-      dataStatus: null,//事件流程按钮
+      eventTypeXl: null,//事件类型-小类
+      statusFlag: null,//事件流程按钮
+      dataStatus: null,//事件处置按钮
       deptId: null,//事件流程部门
       eventCode: null,
       eventName: null,
@@ -1185,6 +1282,7 @@ export default {
       visuForestCloudYuAnBo: null,
       eventDialog: false,
       showResponsibilityDialog: false,//责任制弹窗
+      showMeetingMsgDialog: false,//发送会议短信弹窗
       depteventList: [],//责任制部门列表
       iconCurrentIndex: '',
       dutysystemDeptName: '',
@@ -1257,6 +1355,10 @@ export default {
   },
   methods: {
     /************************************责任制-开始****************************************/
+    //初始化责任制数据列表
+    initDutysystemTableData(){
+      this.dutysystemTableData = [];
+    },
     addLine: function() {//添加负责人行数
       var newValue = {
         id: '',//主键
@@ -1337,6 +1439,13 @@ export default {
       this.iconCurrentIndex = ''
       this.showResponsibilityDialog = false
     },
+    closeMeetingMsgDialog() {//会议弹窗关闭
+      this.dutysystemTableData = []
+      this.dutysystemDeptName = ''
+      this.depteventId = ''
+      this.iconCurrentIndex = ''
+      this.showMeetingMsgDialog = false
+    },
     addResponsibilityDialog() {//责任制保存
       let reg_user = /^[\u4e00-\u9fa5]{2,4}$/;    //2-4个中文字符正则
       let reg_tel = /^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/;    //11位手机号码正则
@@ -1421,7 +1530,7 @@ export default {
                 click: '',
                 parameter: '',
                 keepBindPopup: false,
-                isAggregation: false
+                isAggregation: true
               }
               if (res.data.length > 50) {
                 markersMap.isAggregation = true
@@ -1508,7 +1617,7 @@ export default {
       this.sendDeptName = null
       this.sendUserFegin = []
       this.sendEventType = null
-      this.sendHuoZaiBanJing = null
+      this.sendHuoZaiBanJing = 0
       this.sendGuanLianYuAn = null
       this.longitude = null
       this.latitude = null
@@ -1531,7 +1640,7 @@ export default {
       this.sendDeptName = null
       this.sendUserFegin = []
       this.sendEventType = null
-      this.sendHuoZaiBanJing = null
+      this.sendHuoZaiBanJing = 0
       this.sendGuanLianYuAn = null
       this.sendTaskTitle = null
       this.sendTaskSource = null
@@ -1645,6 +1754,29 @@ export default {
         cityAudit: null
       }
     },
+
+    showTVWallDiaLog() {
+      this.initByCameras()
+      // this.$refs.TVWall.showTVWall();
+
+    },
+    initByCameras()
+    {
+      const params=Object.assign({})
+      params.longitude=this.longitude;
+      params.latitude=this.latitude;
+      params.type='4'
+      initByCameras(params).then(res=>
+      {
+        this.$refs.TVWall.showTVWall1(this.longitude,this.latitude,res.data);
+        this.$refs.supermap.isEditableLayers = false
+        this.$refs.bottomMenu.showChild = false
+        this.$refs.bottomMenu.showBanChild = false
+        this.$refs.bottomMenu.showChangChild = false
+      })
+
+    },
+
     /**
      * eventStatusValue 事件状态
      * isSend 是否办理
@@ -1656,12 +1788,16 @@ export default {
         if (eventStatus == 'qs') {//签收
           that.eventConfirmTitle = '事件签收'
           let param = { parentId: that.eventType }
-          await listSJfl(param).then(res => {
-            //事件类型
-            if (res.code == 200) {
-              that.eventTypeList = res.data
-            }
-          })
+          if(that.eventTypeXl != null){
+            that.sendEventType = that.eventTypeXl;
+          }else{
+            await listSJfl(param).then(res => {
+              //事件类型
+              if (res.code == 200) {
+                that.eventTypeList = res.data
+              }
+            })
+          }
           await listYuAn().then(res => {
             //关联预案
             if (res.code == 200) {
@@ -1765,28 +1901,30 @@ export default {
           })
 
         } else if (eventStatus == 'gd') {
-          let double = /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/;    //数字和两位小数
-          let number = /^[+]{0,1}(\d+)$/g;    //正整数
+          if(that.eventType == 1){
+            let double = /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/;    //数字和两位小数
+            let number = /^[+]{0,1}(\d+)$/g;    //正整数
 
-          if(!double.test(that.table2.areaTotal)){
-            that.$message.error(`面积只能填写到小数后两位!`)
-            return
-          }
-          if(!number.test(that.table2.peopleTotal)){
-            that.$message.error(`人员请填写正整数!`)
-            return
-          }
-          if(that.table2.forestComposition == '' || that.table2.forestComposition==null){
-            that.$message.error(`林木组成不能为空!`)
-            return
-          }
-          if(that.table2.forestToken == '' || that.table2.forestToken==null){
-            that.$message.error(`林令不能为空!`)
-            return
-          }
+            if(!double.test(that.table2.areaTotal)){
+              that.$message.error(`面积只能填写到小数后两位!`)
+              return
+            }
+            if(!number.test(that.table2.peopleTotal)){
+              that.$message.error(`人员请填写正整数!`)
+              return
+            }
+            if(that.table2.forestComposition == '' || that.table2.forestComposition==null){
+              that.$message.error(`林木组成不能为空!`)
+              return
+            }
+            if(that.table2.forestToken == '' || that.table2.forestToken==null){
+              that.$message.error(`林令不能为空!`)
+              return
+            }
             if(that.table2.porosities == '' || that.table2.porosities==null){
-            that.$message.error(`疏密度不能为空!`)
-            return
+              that.$message.error(`疏密度不能为空!`)
+              return
+            }
           }
 
           //事件处理流程--归档
@@ -1810,6 +1948,15 @@ export default {
               that.$emit('getSupermap', that.calendarDay)
             }
           })
+        } else if(eventStatus == 'cz'){
+          eventHandling(that.eventId,that.eventCode).then(res => {
+            if (res.code == 200) {
+              that.$message.success(`处理成功!`)
+              that.refreshEvent(that.eventCode)
+              that.cancelEventConfirm_send()
+              that.showEventConfirm = false
+            }
+          })
         } else {
           if (eventStatus == 'qs' || eventStatus == 'wb' || eventStatus == 'cf') {
             if (that.sendDeptId == '' || that.sendDeptId == null || that.sendDeptName == '' || that.sendDeptName == null) {
@@ -1817,10 +1964,6 @@ export default {
               return
             }
             if (eventStatus == 'qs') {
-              if (that.sendHuoZaiBanJing == '' || that.sendHuoZaiBanJing == null) {
-                that.$message.error(`请输入火灾半径!`)
-                return
-              }
               if (that.sendEventType == '' || that.sendEventType == null) {
                 that.$message.error(`请选择事件类型!`)
                 return
@@ -1876,7 +2019,7 @@ export default {
       this.$refs.eventLogUpload.eventLogUpload(this.eventCode)
     },
     cancelEventShow() {
-      this.dataStatus = null
+      this.statusFlag = null
       this.deptId = null
       console.log('关闭事件弹窗')
       this.eventLogList = []
@@ -1886,18 +2029,21 @@ export default {
       let that = this
       //获取事件详情
       getEventDetail({ eventCode: eventCode }).then(res => {
+        debugger
         that.eventDialog = true
         that.eventLogList = res.data.eventlog//日志列表
         that.visuForestCloudYuAnBo = res.data.visuForestCloudYuAnBo//应急预案
         that.address = res.data.catalogue.address
         that.eventStatusValue = res.data.catalogue.eventStatusValue
         that.eventType = res.data.catalogue.eventType
+        that.statusFlag = res.data.catalogue.statusFlag
         that.dataStatus = res.data.catalogue.dataStatus
         that.deptId = res.data.catalogue.deptId
         that.eventId = res.data.catalogue.id
         that.longitude = res.data.catalogue.longitude
         that.latitude = res.data.catalogue.latitude
         that.eventName = res.data.catalogue.eventName
+        that.eventTypeXl = res.data.catalogue.eventTypeXl
         let markersMap = {
           lng: 124.59,
           lat: 43.02,
@@ -1906,7 +2052,7 @@ export default {
           click: '',
           parameter: '',
           keepBindPopup: false,
-          isAggregation: false,
+          isAggregation: true,
           radius: 0
         }
         if (res.data.catalogue.eventStatusValue == 'forest_event_status_1' && res.data.catalogue.urgeCount == 0) {
@@ -1935,7 +2081,7 @@ export default {
           that.$refs.supermapDialog.dropLocation10(res.data.catalogue.latitude, res.data.catalogue.longitude)
         }, 2000)
         if (res.data.centermonitorTCamera != null) {
-          that.cameraCode = res.data.centermonitorTCamera.cameraCode;
+          that.cameraCode = res.data.centermonitorTCamera.id;
           let markersMap = {
             lng: 124.59,
             lat: 43.02,
@@ -1944,7 +2090,7 @@ export default {
             click: 'preview',
             parameter: {code:res.data.centermonitorTCamera.cameraCode,type:res.data.centermonitorTCamera.cameraFactory},
             keepBindPopup: false,
-            isAggregation: false,
+            isAggregation: true,
             radius: 0
           }
           markersMap.bindPopupHtml = '<div class="map-tip">' +
@@ -1976,12 +2122,14 @@ export default {
         that.address = res.data.catalogue.address
         that.eventStatusValue = res.data.catalogue.eventStatusValue
         that.eventType = res.data.catalogue.eventType
+        that.statusFlag = res.data.catalogue.statusFlag
         that.dataStatus = res.data.catalogue.dataStatus
         that.deptId = res.data.catalogue.deptId
         that.eventId = res.data.catalogue.id
         that.latitude = res.data.catalogue.latitude
         that.longitude = res.data.catalogue.longitude
         that.eventName = res.data.catalogue.eventName
+        that.eventTypeXl = res.data.catalogue.eventTypeXl
         let markersMap = {
           lng: 124.59,
           lat: 43.02,
@@ -1990,7 +2138,7 @@ export default {
           click: '',
           parameter: '',
           keepBindPopup: false,
-          isAggregation: false,
+          isAggregation: true,
           radius: 0
         }
         if (res.data.catalogue.eventStatusValue == 'forest_event_status_1' && res.data.catalogue.urgeCount == 0) {
@@ -2030,7 +2178,7 @@ export default {
             click: 'preview',
             parameter: {code:res.data.centermonitorTCamera.cameraCode,type:res.data.centermonitorTCamera.cameraFactory},
             keepBindPopup: false,
-            isAggregation: false,
+            isAggregation: true,
             radius: 0
           }
           markersMap.bindPopupHtml = '<div class="map-tip">' +
@@ -2181,7 +2329,7 @@ export default {
         this.$Message.info('正在登陆客户端,请稍等......')
         return false
       }
-      this.ws.openVideo(cameraParams)
+      this.ws.openVideo([cameraParams])
     },
     /** ----------------------------------摄像头预览结束------------------------------------- */
 
@@ -2315,30 +2463,50 @@ export default {
       encrypt.setPublicKey(this.pubKey)
       return encrypt.encrypt(value)
     },
-    //加入华为视频会议方法
-    joinMeeting(){
-      let eventId = this.eventId;
-      let subject = "视频会议";
-      let nickName;
-      getUserInfo().then(res => {
-        nickName = res.data.nickName;
-      });
-      hasConferences(eventId).then(res => {
-        let data = res.data;
-        /**如果没有正在开启的会议会返回空对象**/
-        if(res.code == 200 && Object.keys(data).length === 0){
-          createConferences(eventId,subject).then(res => {
-            let data = res.data;
-            if(res.code == 200){
-              window.open("/hwMeeting/meeting.html?nickName="+encodeURI(encodeURI(nickName))+"&conferenceID="+data.conferenceID+"&password="+data.password);
-            }
-          });
-        }else{
-          window.open("/hwMeeting/meeting.html?nickName="+encodeURI(encodeURI(nickName))+"&conferenceID="+data.conferenceID+"&password="+data.password);
-        }
-      });
-    }
     /** ----------------------------------海康摄像头预览结束------------------------------------- */
+    /** ----------------------------------视频会议开始------------------------------------- */
+    sendMsg() {// 视频会议发送短信
+      let reg_user = /^[\u4e00-\u9fa5]{2,4}$/;    //2-4个中文字符正则
+      let reg_tel = /^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/;    //11位手机号码正则
+      for(let i in this.dutysystemTableData){
+        if(!reg_user.test(this.dutysystemTableData[i].name)){
+          this.$message.error(`请输入正确姓名!`)
+          return;
+        }
+        if(!reg_tel.test(this.dutysystemTableData[i].telphone)){
+          this.$message.error(`请输入正确手机号码!`)
+          return;
+        }
+
+        if(this.dutysystemTableData[i].id==null || this.dutysystemTableData[i].id==''){
+          this.dutysystemTableData[i].dept = this.dutysystemDeptName;
+          this.dutysystemTableData[i].depteventId = this.depteventId;
+        }
+      }
+      const param = {centereventTDutySystemList:this.dutysystemTableData,eventCode:this.eventCode,eventName:this.eventName,eventId:this.eventId}
+      sendMessage(param).then(res => {
+        this.$message.success(res.msg);
+        this.dutysystemSelect(this.iconCurrentIndex, this.dutysystemDeptName, this.depteventId);
+        this.showMeetingMsgDialog = false;
+        this.joinMeeting();
+      })
+    },
+    joinMeeting(){
+      let hwMeetingUrl;
+      selectConfigKey('hwMeetingUrl').then(res => {
+        hwMeetingUrl = res.data
+        window.open(hwMeetingUrl+"/joinConferences/"+this.eventId+"/"+this.eventName+"的会议"+"/"+Cookies.get("nickName"));
+      })
+    },
+    Meeting() {//弹出发送会议短信弹窗
+      let param = { eventCode: this.eventCode }
+      centereventtdepteventList(param).then(res => {
+        this.depteventList = res.data
+        this.showMeetingMsgDialog = true
+        this.initDutysystemTableData();
+      })
+    },
+    /** ----------------------------------视频会议结束------------------------------------- */
   }
 }
 

+ 4 - 809
src/views/firespread.vue

@@ -51,7 +51,7 @@
             <!-- 右侧 -->
             <el-col :span="6" class="dia-right">
               <div class="e-right">
-                <div class="forthis1">
+                <div class="forthis1" style="height: 785px;">
                   <dv-border-box-7 backgroundColor="#040b1f" :color="['#0e7957', '#0da24c']"
                                    style="padding-bottom:1rem ;">
                     <div class="i-list-con">
@@ -113,121 +113,6 @@
                     </div>
                   </dv-border-box-7>
                 </div>
-                <div class="forthis2">
-                  <dv-border-box-7 backgroundColor="#040b1f" :color="['#0e7957', '#0da24c']">
-                    <div class="i-list-con">
-                      <div class="this-con h-25 no-padding">
-                        <div class="z-info-list" style="margin-top: 0;">
-                          <div class="z-info-btm-grp">
-                            <div class="z-info-btm-grp-top">
-                              <div class="z-info-btm-grp-left">
-                                <!--                                <el-button size="small" icon="el-icon-s-flag">责任制-->
-                                <!--                                </el-button>-->
-                                <el-button size="small" icon="el-icon-upload" @click="showEventLogUpload()">上传
-                                </el-button>
-                                <el-button size="small" icon="el-icon-download" @click="toImage()">截图上传
-                                </el-button>
-                                <el-button size="small" icon="el-icon-download" @click="showResponsibility()">责任制
-                                </el-button>
-                              </div>
-                              <div class="z-info-btm-grp-right">
-                                <el-button size="small" icon="el-icon-mic" @click="joinMeeting()">会议
-                                </el-button>
-                              </div>
-                            </div>
-                            <div class="z-info-btm-input">
-                              <el-input type="textarea" v-model="eventLog"
-                                        :autosize="{ minRows: 7, maxRows: 7}" placeholder="请输入反馈信息">
-                              </el-input>
-                              <div class="z-info-btm-input-btn" v-if="eventStatusValue=='forest_event_status_1'">
-                                <div style="text-align:left">
-                                  <el-button size="small"
-                                             icon="el-icon-s-flag"
-                                             @click="updateCentereventTEventcatalogueStatus('qr',true)">
-                                    确认
-                                  </el-button>
-                                  <el-button size="small"
-                                             icon="el-icon-question"
-                                             @click="updateCentereventTEventcatalogueStatus('wb',false)">
-                                    误报
-                                  </el-button>
-                                  <el-button size="small"
-                                             icon="el-icon-warning"
-                                             @click="updateCentereventTEventcatalogueStatus('cf',false)">
-                                    重复
-                                  </el-button>
-                                </div>
-                                <el-button size="small" icon="el-icon-chat-dot-square" @click="sendEventLog()">发送
-                                </el-button>
-                              </div>
-                              <div class="z-info-btm-input-btn" v-else-if="eventStatusValue=='forest_event_status_7'">
-                                <div style="text-align:left">
-                                  <el-button size="small"
-                                             icon="el-icon-s-flag"
-                                             @click="updateCentereventTEventcatalogueStatus('qs',false)">
-                                    签收
-                                  </el-button>
-                                  <!--<el-button size="small"-->
-                                             <!--icon="el-icon-question"-->
-                                             <!--@click="updateCentereventTEventcatalogueStatus('wb',false)">-->
-                                    <!--误报-->
-                                  <!--</el-button>-->
-                                  <!--<el-button size="small"-->
-                                             <!--icon="el-icon-warning"-->
-                                             <!--@click="updateCentereventTEventcatalogueStatus('cf',false)">-->
-                                    <!--重复-->
-                                  <!--</el-button>-->
-                                </div>
-                                <el-button size="small" icon="el-icon-chat-dot-square" @click="sendEventLog()">发送
-                                </el-button>
-                              </div>
-                              <div class="z-info-btm-input-btn" v-else-if="eventStatusValue=='forest_event_status_2'">
-                                <div>
-                                  <!--<el-button size="small"-->
-                                             <!--icon="el-icon-question"-->
-                                             <!--@click="updateCentereventTEventcatalogueStatus('wb',false)">-->
-                                    <!--误报-->
-                                  <!--</el-button>-->
-                                  <!--<el-button size="small"-->
-                                             <!--icon="el-icon-warning"-->
-                                             <!--@click="updateCentereventTEventcatalogueStatus('cf',false)">-->
-                                    <!--重复-->
-                                  <!--</el-button>-->
-                                  <el-button size="small"
-                                             icon="el-icon-phone" style="text-align:left"
-                                             @click="updateCentereventTEventcatalogueStatus('ld',false)">
-                                    联动
-                                  </el-button>
-                                  <el-button size="small" v-if="dataStatus=='1'"
-                                             icon="el-icon-success" style="text-align:left"
-                                             @click="updateCentereventTEventcatalogueStatus('bj',true)">
-                                    办结
-                                  </el-button>
-                                </div>
-                                <el-button size="small" icon="el-icon-chat-dot-square" @click="sendEventLog()">发送
-                                </el-button>
-                              </div>
-                              <div class="z-info-btm-input-btn"
-                                   v-else-if="eventStatusValue=='forest_event_status_5'&&dataStatus=='1'">
-                                <el-button size="small"
-                                           icon="el-icon-success" style="text-align:left"
-                                           @click="updateCentereventTEventcatalogueStatus('gd',false)">
-                                  填报
-                                </el-button>
-                                <el-button size="small" icon="el-icon-chat-dot-square" @click="sendEventLog()">发送
-                                </el-button>
-                              </div>
-                              <div class="z-info-btm-input-btn" v-else>
-                                <el-button size="small" icon="el-icon-chat-dot-square" @click="sendEventLog()">发送
-                                </el-button>
-                              </div>
-                            </div>
-                          </div>
-                        </div>
-                      </div>
-                    </div>
-                  </dv-border-box-7>
-                </div>
               </div>
 
             </el-col>
@@ -238,692 +123,6 @@
     </div>
     <vBottomMenu ref="bottomMenu"></vBottomMenu>
     <eventLogUpload ref="eventLogUpload"></eventLogUpload>
-    <el-dialog :title="eventConfirmTitle" :visible.sync="showEventConfirm" v-if="showEventConfirm" width="50%"
-               class="top-dialog"
-               @close="cancelEventConfirm()">
-      <el-form label-width="80px">
-        <el-form-item label="火灾半径" v-if="eventStatusButton=='qs'">
-          <el-input type="number" v-model="sendHuoZaiBanJing" placeholder="请输入火灾半径"/>
-        </el-form-item>
-        <el-form-item :label="deptNameitem">
-          <!--          <treeselect v-model="deptId" :options="deptOptions" multiple :show-count="true"-->
-          <!--                      placeholder="请选择签收部门"/>-->
-          <el-select v-model="sendDeptName" clearable placeholder="请选择部门" class="m-r-1rem" @change="setValue"
-                     v-if="eventStatusButton=='wb'||eventStatusButton=='qs'||eventStatusButton=='cf'||eventStatusButton=='ld'">
-            <el-option
-              v-for="item in deptOptions"
-              :key="item.deptId"
-              :label="item.deptName"
-              :value="{value:item.deptId,label:item.deptName}">
-            </el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="事件类型" v-if="eventStatusButton=='qs'">
-          <el-select v-model="sendEventType" placeholder="请选择事件类型!" clearable>
-            <el-option
-              v-for="item in eventTypeList"
-              :key="item.id"
-              :label="item.eventTypeName"
-              :value="item.id"
-            />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="任务来源" v-if="eventStatusButton=='ld'">
-          <el-select v-model="sendTaskSource" placeholder="请选择任务来源!" clearable>
-            <el-option
-              v-for="dict in dict.type.task_source"
-              :key="dict.value"
-              :label="dict.label"
-              :value="dict.value"
-            />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="联动标题" v-if="eventStatusButton=='ld'">
-          <el-input v-model="sendTaskTitle" placeholder="请输入联动标题"/>
-        </el-form-item>
-        <el-form-item label="联动内容" v-if="eventStatusButton=='ld'">
-          <el-input type="textarea" v-model="sendTaskContent"
-                    :autosize="{ minRows: 7, maxRows: 7}" placeholder="请输入联动内容">
-          </el-input>
-        </el-form-item>
-        <el-form-item label="联动部门" v-if="eventStatusButton=='ld'">
-          <el-input
-            placeholder="输入关键字进行过滤"
-            v-model="filterText">
-          </el-input>
-          <el-tree
-            class="tree-border tree_scroll"
-            style="height: 20vh; overflow-y:scroll"
-            :data="deptOptionsLiandong"
-            show-checkbox
-            ref="LiandongDept"
-            node-key="id"
-            :check-strictly="true"
-            :filter-node-method="filterNode"
-            :accordion="true"
-            empty-text="加载中,请稍候"
-            :props="defaultProps"
-          ></el-tree>
-          <!--            default-expand-all-->
-        </el-form-item>
-        <el-form-item label="关联预案" v-if="eventStatusButton=='qs'">
-          <el-select v-model="sendGuanLianYuAn" placeholder="请选择关联预案!" clearable>
-            <el-option
-              v-for="item in guanLianYuAnList"
-              :key="item.id"
-              :label="item.resTitle"
-              :value="item.id"
-            />
-          </el-select>
-        </el-form-item>
-        <!--<el-form-item label="联系人" v-if="eventStatusButton=='qs'">-->
-        <!--<el-select multiple collapse-tags v-model='sendUserFegin' placeholder='请选择联系人!' clearable filterable>-->
-        <!--<el-option-->
-        <!--v-for="item in userFeginList"-->
-        <!--:label="item.nickName"-->
-        <!--:value="item.phonenumber"-->
-        <!--/>-->
-        <!--</el-select>-->
-        <!--</el-form-item>-->
-        <el-button size="mini" type="primary" v-if="eventStatusButton=='qr'"
-                   @click="updateCentereventTEventcatalogueStatus('qr',false)">确认
-        </el-button>
-        <el-button size="mini" type="primary" v-if="eventStatusButton=='qs'"
-                   @click="updateCentereventTEventcatalogueStatus('qs',true)">签收
-        </el-button>
-        <el-button size="mini" type="primary" v-if="eventStatusButton=='wb'"
-                   @click="updateCentereventTEventcatalogueStatus('wb',true)">误报
-        </el-button>
-        <el-button size="mini" type="primary" v-if="eventStatusButton=='cf'"
-                   @click="updateCentereventTEventcatalogueStatus('cf',true)">重复
-        </el-button>
-        <el-button size="mini" type="primary" v-if="eventStatusButton=='ld'"
-                   @click="updateCentereventTEventcatalogueStatus('ld',true)">发起联动
-        </el-button>
-      </el-form>
-    </el-dialog>
-    <el-dialog title="调整预案" :visible.sync="showGuanLianYuAnConfirm" v-if="showGuanLianYuAnConfirm" width="50%"
-               class="top-dialog tz_tk">
-      <el-form label-width="80px">
-        <el-form-item label="关联预案">
-          <el-select v-model="sendGuanLianYuAn" placeholder="请选择关联预案!" clearable>
-            <el-option
-              v-for="item in guanLianYuAnList"
-              :key="item.id"
-              :label="item.resTitle"
-              :value="item.id"
-            />
-          </el-select>
-        </el-form-item>
-        <el-button size="mini" type="primary" class="fr_button" @click="updateYjYuAn">确定
-        </el-button>
-        <div style="clear: both;"></div>
-      </el-form>
-    </el-dialog>
-    <el-dialog title="责任制" :visible.sync="showResponsibilityDialog" v-if="showResponsibilityDialog" width="65%"
-               @close="closeResponsibilityDialog()">
-      <el-form label-width="1500px">
-        <div class="bottom">
-          <!-- 左侧菜单栏 -->
-          <div class="bottomLeft">
-            <div class="leftItem d-l-con padding-box nowrap" v-for="(item,index) in depteventList">
-              <div class="bgt-info">
-                <div class="bgt-info-name" :class="{on:iconCurrentIndex==item.deptId}"
-                     @click="dutysystemSelect(item.deptId,item.deptName,item.id)">{{ item.deptName }}
-                </div>
-              </div>
-            </div>
-          </div>
-          <!-- 左侧菜单栏对应的右侧的内容 -->
-          <div class="bottomRight" ref="wrapper">
-            <el-button
-              size="mini"
-              type="danger"
-              v-if="depteventId!=null&&depteventId!=''"
-              @click="addLine">添加
-            </el-button>
-            <el-table
-              :data="dutysystemTableData"
-              style="width: 100%"
-              :rules="rules">
-              <el-table-column prop="id" label="主键" v-if="false">
-                <template slot-scope="scope" hidden>
-                  <el-input v-model="scope.row.id" readonly placeholder="主键"></el-input>
-                </template>
-              </el-table-column>
-              <el-table-column prop="name" label="姓名">
-                <template slot-scope="scope">
-                  <el-input v-model="scope.row.name" placeholder="姓名" οninput="value=value.replace(/^[\u4e00-\u9fa5]{2,4}$/,'')"></el-input>
-                </template>
-              </el-table-column>
-              <el-table-column prop="post" label="岗位">
-                <template slot-scope="scope">
-                  <el-input v-model="scope.row.post" placeholder="岗位"></el-input>
-                </template>
-              </el-table-column>
-              <el-table-column prop="telphone" label="手机号码">
-                <template slot-scope="scope">
-                  <el-input v-model="scope.row.telphone" placeholder="手机号码" οninput="value=value.replace(/^((13[0-9])|(14[5-9])|(15([0-3]|[5-9]))|(16[6-7])|(17[1-8])|(18[0-9])|(19[1|3])|(19[5|6])|(19[8|9]))\d{8}$/,'')"></el-input>
-                </template>
-              </el-table-column>
-              <el-table-column prop="bookbuytime" label="操作">
-                <template slot-scope="scope">
-                  <el-button
-                    size="mini"
-                    type="danger"
-                    icon="el-icon-delete"
-                    @click="handleDelete(scope.$index, scope.row)">删除
-                  </el-button>
-                  <!--<el-button-->
-                  <!--size="mini"-->
-                  <!--type="danger"-->
-                  <!--icon="el-icon-save"-->
-                  <!--@click="handleSave(scope.$index, scope.row)">保存-->
-                  <!--</el-button>-->
-                </template>
-              </el-table-column>
-            </el-table>
-          </div>
-        </div>
-        <el-button size="mini" type="primary" class="fr_button" @click="addResponsibilityDialog">确定
-        </el-button>
-        <div style="clear: both;"></div>
-      </el-form>
-    </el-dialog>
-    <el-dialog title="火险报告" :visible.sync="showEventConfirm_gd" v-if="showEventConfirm_gd" width="100%"
-               class="top-dialog"
-               @close="cancelEventConfirm_gd()">
-      <div class="table-container">
-        <form>
-          <table id="table1" cellpadding="0" cellspacing="0">
-            <thead style="width: 100%;padding:.5rem 0;">
-            <th rowspan="1" colspan="1" class="txt_left" width="100px">填报单位:</th>
-            <th rowspan="1" colspan="6" align="left"><input type="text" style=" width:100%;margin-left: .5rem;"
-                                                            v-model="table1.reportUnit"/></th>
-            <th rowspan="1" colspan="2" class="txt_right">填报时间:</th>
-            <th rowspan="1" colspan="6" align="left"><input type="text" style="width:3rem;text-align: center;"
-                                                            v-model="table1.reportTimeY"/>年<input
-              type="text" style="width:4rem;text-align: center;" v-model="table1.reportTimeM"/>月<input type="text"
-                                                                                                       style="width:3rem;text-align: center;"
-                                                                                                       v-model="table1.reportTimeD"/>日
-            </th>
-            <th rowspan="1" colspan="8" style="text-align: right;">吉林省人民政府森林防火指挥部办公室制</th>
-            </thead>
-            <tbody>
-
-            <tr>
-              <td colspan="22" rowspan="1" class="font1" style="letter-spacing:3rem;padding: .5rem 0">森林火灾损失</td>
-              <td colspan="1" rowspan="6">
-                <table class="border0">
-                  <tr>
-                    <td>备注</td>
-                  </tr>
-                </table>
-              </td>
-            </tr>
-            <tr>
-              <td rowspan="4" colspan="1">
-                <table class="border0">
-                  <tr>
-                    <td>森林火灾<br>损失总计</td>
-                  </tr>
-                </table>
-              </td>
-              <td rowspan="1" colspan="12">火灾损失价值</td>
-              <td rowspan="1" colspan="9">扑火费用支出</td>
-            </tr>
-            <tr>
-
-              <td rowspan="3" colspan="1">
-                <table class="border0">
-                  <tr>
-                    <td>合计</td>
-                  </tr>
-                </table>
-              </td>
-              <td rowspan="1" colspan="4">林木资源</td>
-              <td rowspan="1" colspan="6">人员伤亡</td>
-              <td rowspan="3" colspan="1">
-                <table class="border0">
-                  <tr>
-                    <td>其他<br>火灾<br>损失</td>
-                  </tr>
-                </table>
-              </td>
-              <td rowspan="3" colspan="1">
-                <table class="border0">
-                  <tr>
-                    <td>合计</td>
-                  </tr>
-                </table>
-              </td>
-              <td rowspan="1" colspan="2">
-                <table class="border0">
-                  <tr>
-                    <td>人工费</td>
-                  </tr>
-                </table>
-              </td>
-              <td rowspan="1" colspan="3">
-                <table class="border0">
-                  <tr>
-                    <td>车辆费</td>
-                  </tr>
-                </table>
-              </td>
-              <td rowspan="1" colspan="2">
-                <table class="border0">
-                  <tr>
-                    <td>飞行费</td>
-                  </tr>
-                </table>
-              </td>
-              <td rowspan="3" colspan="1">
-                <table class="border0">
-                  <tr>
-                    <td>其他<br>扑火<br>费用</td>
-                  </tr>
-                </table>
-              </td>
-            </tr>
-            <tr>
-              <td rowspan="1" colspan="2">成林</td>
-              <td rowspan="1" colspan="2">幼林</td>
-              <td rowspan="1" colspan="2">轻伤</td>
-              <td rowspan="1" colspan="2">重伤</td>
-              <td rowspan="1" colspan="2">死亡</td>
-              <td rowspan="2" colspan="1">
-                <table class="border0">
-                  <tr>
-                    <td>出动<br>人工</td>
-                  </tr>
-                </table>
-              </td>
-              <td rowspan="2" colspan="1">
-                <table class="border0">
-                  <tr>
-                    <td>支出<br>费用</td>
-                  </tr>
-                </table>
-              </td>
-              <td rowspan="2" colspan="1">
-                <table class="border0">
-                  <tr>
-                    <td>计</td>
-                  </tr>
-                </table>
-              </td>
-              <td rowspan="2" colspan="1">
-                <table class="border0">
-                  <tr>
-                    <td>其中<br>汽车</td>
-                  </tr>
-                </table>
-              </td>
-              <td rowspan="2" colspan="1">
-                <table class="border0">
-                  <tr>
-                    <td>支出<br>费用</td>
-                  </tr>
-                </table>
-              </td>
-              <td rowspan="2" colspan="1">
-                <table class="border0">
-                  <tr>
-                    <td>出动<br>飞机</td>
-                  </tr>
-                </table>
-              </td>
-              <td rowspan="2" colspan="1">
-                <table class="border0">
-                  <tr>
-                    <td>支出<br>费用</td>
-                  </tr>
-                </table>
-              </td>
-            </tr>
-            <tr>
-              <td rowspan="1" colspan="1">蓄积</td>
-              <td rowspan="1" colspan="1">价值</td>
-              <td rowspan="1" colspan="1">株数</td>
-              <td rowspan="1" colspan="1">价值</td>
-              <td rowspan="1" colspan="1">人数</td>
-              <td rowspan="1" colspan="1">支出费用</td>
-              <td rowspan="1" colspan="1">人数</td>
-              <td rowspan="1" colspan="1">支出费用</td>
-              <td rowspan="1" colspan="1">人数</td>
-              <td rowspan="1" colspan="1">支出费用</td>
-            </tr>
-            <tr>
-              <td rowspan="1" colspan="1">万元</td>
-              <td rowspan="1" colspan="1">万元</td>
-              <td rowspan="1" colspan="1">米³</td>
-              <td rowspan="1" colspan="1">万元</td>
-              <td rowspan="1" colspan="1">万株</td>
-              <td rowspan="1" colspan="1">万元</td>
-              <td rowspan="1" colspan="1">人</td>
-              <td rowspan="1" colspan="1">万元</td>
-              <td rowspan="1" colspan="1">人</td>
-              <td rowspan="1" colspan="1">万元</td>
-              <td rowspan="1" colspan="1">人</td>
-              <td rowspan="1" colspan="1">万元</td>
-              <td rowspan="1" colspan="1">万元</td>
-              <td rowspan="1" colspan="1">万元</td>
-              <td rowspan="1" colspan="1">工日</td>
-              <td rowspan="1" colspan="1">万元</td>
-              <td rowspan="1" colspan="1">台</td>
-              <td rowspan="1" colspan="1">台</td>
-              <td rowspan="1" colspan="1">万元</td>
-              <td rowspan="1" colspan="1">架次</td>
-              <td rowspan="1" colspan="1">万元</td>
-              <td rowspan="1" colspan="1">万元</td>
-            </tr>
-            <tr>
-              <td rowspan="1" colspan="1">1</td>
-              <td rowspan="1" colspan="1">2</td>
-              <td rowspan="1" colspan="1">3</td>
-              <td rowspan="1" colspan="1">4</td>
-              <td rowspan="1" colspan="1">5</td>
-              <td rowspan="1" colspan="1">6</td>
-              <td rowspan="1" colspan="1">7</td>
-              <td rowspan="1" colspan="1">8</td>
-              <td rowspan="1" colspan="1">9</td>
-              <td rowspan="1" colspan="1">10</td>
-              <td rowspan="1" colspan="1">11</td>
-              <td rowspan="1" colspan="1">12</td>
-              <td rowspan="1" colspan="1">13</td>
-              <td rowspan="1" colspan="1">14</td>
-              <td rowspan="1" colspan="1">15</td>
-              <td rowspan="1" colspan="1">16</td>
-              <td rowspan="1" colspan="1">17</td>
-              <td rowspan="1" colspan="1">18</td>
-              <td rowspan="1" colspan="1">19</td>
-              <td rowspan="1" colspan="1">20</td>
-              <td rowspan="1" colspan="1">21</td>
-              <td rowspan="1" colspan="1">22</td>
-              <td rowspan="1" colspan="1">23</td>
-            </tr>
-            <tr class="int_tr">
-              <td rowspan="1" colspan="1"><input type="text" class="border0" v-model="table1.forestFireLossTotal"/></td>
-              <td rowspan="1" colspan="1"><input type="text" class="border0" v-model="table1.fireLossTotal"/></td>
-              <td rowspan="1" colspan="1"><input type="text" class="border0" v-model="table1.forestArea"/></td>
-              <td rowspan="1" colspan="1"><input type="text" class="border0" v-model="table1.forestPrice"/></td>
-              <td rowspan="1" colspan="1"><input type="text" class="border0" v-model="table1.treesNumber"/></td>
-              <td rowspan="1" colspan="1"><input type="text" class="border0" v-model="table1.treesPrice"/></td>
-              <td rowspan="1" colspan="1"><input type="text" class="border0" v-model="table1.minorInjuriesNumber"/></td>
-              <td rowspan="1" colspan="1"><input type="text" class="border0" v-model="table1.minorInjuriesPrice"/></td>
-              <td rowspan="1" colspan="1"><input type="text" class="border0" v-model="table1.seriouslyInjuredNumber"/>
-              </td>
-              <td rowspan="1" colspan="1"><input type="text" class="border0" v-model="table1.seriouslyInjuredPrice"/>
-              </td>
-              <td rowspan="1" colspan="1"><input type="text" class="border0" v-model="table1.deathNumber"/></td>
-              <td rowspan="1" colspan="1"><input type="text" class="border0" v-model="table1.deathPrice"/></td>
-              <td rowspan="1" colspan="1"><input type="text" class="border0" v-model="table1.elseFireLossPrice"/></td>
-              <td rowspan="1" colspan="1"><input type="text" class="border0" v-model="table1.blazesPriceTotal"/></td>
-              <td rowspan="1" colspan="1"><input type="text" class="border0" v-model="table1.artificialDays"/></td>
-              <td rowspan="1" colspan="1"><input type="text" class="border0" v-model="table1.artificialPrice"/></td>
-              <td rowspan="1" colspan="1"><input type="text" class="border0" v-model="table1.vehicleNumber"/></td>
-              <td rowspan="1" colspan="1"><input type="text" class="border0" v-model="table1.carNumber"/></td>
-              <td rowspan="1" colspan="1"><input type="text" class="border0" v-model="table1.vehiclePrice"/></td>
-              <td rowspan="1" colspan="1"><input type="text" class="border0" v-model="table1.planeNumber"/></td>
-              <td rowspan="1" colspan="1"><input type="text" class="border0" v-model="table1.planePrice"/></td>
-              <td rowspan="1" colspan="1"><input type="text" class="border0" v-model="table1.elseBlazesPrice"/></td>
-              <td rowspan="1" colspan="1"><input type="text" class="border0" v-model="table1.note"/></td>
-
-            </tr>
-            </tbody>
-          </table>
-          <table class="table2" cellpadding="0" cellspacing="0" style="white-space: nowrap;">
-            <tbody>
-            <tr>
-              <th rowspan="1" colspan="26" style="letter-spacing:6rem">火场资料</th>
-            </tr>
-            <tr>
-              <td colspan="2" rowspan="1" class="txt_left">&nbsp;1.起火时间</td>
-              <td colspan="5" rowspan="1"><input type="text" v-model="table2.fireTime"/></td>
-              <td colspan="2" rowspan="1">发现时间</td>
-              <td colspan="8" rowspan="1"><input type="text" v-model="table2.foundTime"/></td>
-              <td colspan="2" rowspan="1">扑灭时间</td>
-              <td colspan="7" rowspan="1"><input type="text" v-model="table2.blazesTime"/></td>
-            </tr>
-            <tr>
-              <td colspan="2" rowspan="1" class="txt_left">&nbsp;2.地点及发现方式</td>
-              <td colspan="2" rowspan="1" class="txt_left"><select v-model="table2.address">
-                <option>吉林市</option>
-                <option>延边州</option>
-                <option>白山市</option>
-                <option>通化市</option>
-                <option>辽源市</option>
-                <option>四平市</option>
-                <option>长春市</option>
-                <option>白城市</option>
-                <option>松原市</option>
-                <option>敦化航站</option>
-                <option>长白山管委会</option>
-              </select></td>
-              <td colspan="13" rowspan="1"><input type="text" v-model="table2.firePlace"/></td>
-              <td colspan="2" rowspan="1">发现方式</td>
-              <td colspan="7" rowspan="1"><input type="text" v-model="table2.foundType"/></td>
-            </tr>
-            <tr>
-              <td colspan="2" rowspan="1" class="txt_left">&nbsp;3.火场位置</td>
-              <td colspan="2" rowspan="1" class="border_l0">东经:</td>
-              <td colspan="1" rowspan="1" class="border_l0"><input type="text" style="width:50px;"
-                                                                   v-model="table2.longitudeD"/></td>
-              <td colspan="1" rowspan="1" class="border_l0">度</td>
-              <td colspan="1" rowspan="1" class="border_l0"><input type="text" style="width:50px;"
-                                                                   v-model="table2.longitudeM"/></td>
-              <td colspan="1" rowspan="1" class="border_l0">分</td>
-              <td colspan="1" rowspan="1" class="border_l0"><input type="text" style="width:50px;"
-                                                                   v-model="table2.longitudeS"/></td>
-              <td colspan="2" rowspan="1" class="border_l0">秒</td>
-              <td colspan="1" rowspan="1" class="border_l0">;</td>
-              <td colspan="2" rowspan="1" class="border_l0">北纬:</td>
-              <td colspan="1" rowspan="1" class="border_l0"><input type="text" style="width:50px;"
-                                                                   v-model="table2.latitudeD"/></td>
-              <td colspan="1" rowspan="1" class="border_l0">度</td>
-              <td colspan="1" rowspan="1" class="border_l0"><input type="text" style="width:50px;"
-                                                                   v-model="table2.latitudeM"/></td>
-              <td colspan="1" rowspan="1" class="border_l0">分</td>
-              <td colspan="1" rowspan="1" class="border_l0"><input type="text" style="width:50px;"
-                                                                   v-model="table2.latitudeS"/></td>
-              <td colspan="1" rowspan="1" class="border_l0">秒</td>
-              <td class="border_l0"></td>
-              <td class="border_l0"></td>
-              <td class="border_l0"></td>
-              <td class="border_l0"></td>
-              <td class="border_l0"></td>
-              <td></td>
-            </tr>
-            <tr>
-              <td colspan="2" rowspan="1" class="txt_left">&nbsp;4.起火原因</td>
-              <td colspan="3" rowspan="1" class="txt_left"><select v-model="table2.fireSource">
-                <option>未查明火源</option>
-                <option>烧荒烧炭</option>
-                <option>炼山造林</option>
-                <option>烧牧场</option>
-                <option disabled>烧窑</option>
-                <option>烧隔离带</option>
-                <option>火车喷漏</option>
-                <option>火车甩瓦</option>
-                <option>机车喷火</option>
-                <option>其他(生产性火源)</option>
-                <option>野外吸烟</option>
-                <option>取暖做饭</option>
-                <option>上坟烧纸</option>
-                <option>烧山驱兽</option>
-                <option>小孩玩火</option>
-                <option>痴呆弄火</option>
-                <option>家火上山</option>
-                <option>电线引起</option>
-                <option>其他(非生产性用火)</option>
-                <option>故意放火</option>
-                <option>外省(区)烧入</option>
-                <option>外国烧入</option>
-                <option>雷击火</option>
-                <option>其他自然火</option>
-              </select></td>
-              <td colspan="3" rowspan="1">火灾种类</td>
-              <td colspan="4" rowspan="1" class="txt_left"><select v-model="table2.fireType">
-                <option>地表火</option>
-                <option>树冠火</option>
-                <option>地下火</option>
-              </select></td>
-              <td colspan="3" rowspan="1">火灾等级</td>
-              <td colspan="11" rowspan="1" class="txt_left"><select v-model="table2.fireLevel">
-                <option>一般</option>
-                <option>较大</option>
-                <option>重大</option>
-                <option>特大</option>
-              </select></td>
-            </tr>
-            <tr>
-              <td colspan="2" rowspan="1" class="txt_left">&nbsp;5.火场面积(公顷)</td>
-              <td colspan="2" rowspan="1">总面积合计</td>
-              <td colspan="3" rowspan="1"><input type="text" v-model="table2.areaTotal"/></td>
-              <td colspan="4" rowspan="1">受害森林面积合计</td>
-              <td colspan="3" rowspan="1"><input type="text" v-model="table2.forestLossAreaTotal"/></td>
-              <td colspan="1" rowspan="1">其中:</td>
-              <td colspan="2" rowspan="1">原森林</td>
-              <td colspan="4" rowspan="1"><input type="text" v-model="table2.originalForestArea"/></td>
-              <td colspan="2" rowspan="1">人工林</td>
-              <td colspan="3" rowspan="1"><input type="text" v-model="table2.artificialForestArea"/></td>
-            </tr>
-            <tr>
-              <td colspan="2" rowspan="1" class="txt_left">&nbsp;6.扑火人力物力投入</td>
-              <td colspan="2" rowspan="1">出动总人数</td>
-              <td colspan="1" rowspan="1"><input type="text" v-model="table2.peopleTotal"/></td>
-              <td colspan="2" rowspan="1">其中扑火队</td>
-              <td colspan="1" rowspan="1"><input type="text" v-model="table2.blazesTeamNumber"/></td>
-              <td colspan="1" rowspan="1">森警</td>
-              <td colspan="2" rowspan="1"><input type="text" v-model="table2.policeNumber"/></td>
-              <td colspan="1" rowspan="1">军队</td>
-              <td colspan="1" rowspan="1"><input type="text" v-model="table2.armyNumber"/></td>
-              <td colspan="1" rowspan="1">群众</td>
-              <td colspan="1" rowspan="1"><input type="text" v-model="table2.crowdNumber"/></td>
-              <td colspan="2" rowspan="1">风力灭火机</td>
-              <td colspan="1" rowspan="1"><input type="text" v-model="table2.windExtinguisher"/></td>
-              <td colspan="2" rowspan="1">二号工具</td>
-              <td colspan="1" rowspan="1"><input type="text" v-model="table2.secondTool"/></td>
-              <td colspan="2" rowspan="1">水枪</td>
-              <td colspan="1" rowspan="1"><input type="text" v-model="table2.waterGun"/></td>
-              <td colspan="1" rowspan="1">其他</td>
-              <td colspan="1" rowspan="1"><input type="text" v-model="table2.elseThings"/></td>
-            </tr>
-            <tr>
-              <td colspan="2" rowspan="1" class="txt_left">&nbsp;7.受害森林概况</td>
-              <td colspan="2" rowspan="1">林木组成</td>
-              <td colspan="11" rowspan="1"><input type="text" v-model="table2.forestComposition"/></td>
-              <td colspan="2" rowspan="1">林令</td>
-              <td colspan="4" rowspan="1"><input type="text" v-model="table2.forestToken"/></td>
-              <td colspan="2" rowspan="1">疏密度</td>
-              <td colspan="3" rowspan="1"><input type="text" v-model="table2.porosities"/></td>
-            </tr>
-            <tr>
-              <td colspan="2" rowspan="1" class="txt_left">&nbsp;8.当日天气实况</td>
-              <td colspan="2" rowspan="1">天气</td>
-              <td colspan="3" rowspan="1"><input type="text" v-model="table2.weather"/></td>
-              <td colspan="1" rowspan="1">气温</td>
-              <td colspan="2" rowspan="1"><input type="text" v-model="table2.temperature"/></td>
-              <td colspan="1" rowspan="1">C°</td>
-              <td colspan="3" rowspan="1">火险等级</td>
-              <td colspan="1" rowspan="1"><input type="text" v-model="table2.fireInsuranceLevel"/></td>
-              <td colspan="2" rowspan="1">风力</td>
-              <td colspan="2" rowspan="1" class="border_l0"><input type="text" v-model="table2.windLevel"/></td>
-              <td colspan="2" rowspan="1" class="txt_left">级</td>
-              <td colspan="2" rowspan="1">风向</td>
-              <td colspan="3" rowspan="1"><input type="text" v-model="table2.windDirection"/></td>
-            </tr>
-            <tr>
-              <td colspan="2" rowspan="1" class="txt_left">&nbsp;9.指挥扑火负责人</td>
-              <td colspan="2" rowspan="1">单位</td>
-              <td colspan="11" rowspan="1"><input type="text" v-model="table2.commandUnit"/></td>
-              <td colspan="2" rowspan="1">姓名</td>
-              <td colspan="4" rowspan="1"><input type="text" v-model="table2.commandName"/></td>
-              <td colspan="2" rowspan="1">职务</td>
-              <td colspan="3" rowspan="1"><input type="text" v-model="table2.commandPosition"/></td>
-            </tr>
-            <tr>
-              <td colspan="2" rowspan="1" class="txt_left">&nbsp;10.火场调查负责人</td>
-              <td colspan="2" rowspan="1">单位</td>
-              <td colspan="11" rowspan="1"><input type="text" v-model="table2.surveyUnit"/></td>
-              <td colspan="2" rowspan="1">姓名</td>
-              <td colspan="4" rowspan="1"><input type="text" v-model="table2.surveyName"/></td>
-              <td colspan="2" rowspan="1">职务</td>
-              <td colspan="3" rowspan="1"><input type="text" v-model="table2.surveyPosition"/></td>
-            </tr>
-            <tr>
-              <td colspan="2" rowspan="1" class="txt_left">&nbsp;11.火灾肇事人情况</td>
-              <td colspan="2" rowspan="1">姓名</td>
-              <td colspan="2" rowspan="1"><input type="text" v-model="table2.accidentName"/></td>
-              <td colspan="2" rowspan="1">性别</td>
-              <td colspan="1" rowspan="1"><input type="text" v-model="table2.accidentSex"/></td>
-              <td colspan="3" rowspan="1">年龄</td>
-              <td colspan="1" rowspan="1"><input type="text" v-model="table2.accidentAge"/></td>
-              <td colspan="1" rowspan="1">职业</td>
-              <td colspan="1" rowspan="1"><input type="text" v-model="table2.accidentPosition"/></td>
-              <td colspan="2" rowspan="1">单位或住址</td>
-              <td colspan="9" rowspan="1"><input type="text" v-model="table2.accidentUnit"/></td>
-            </tr>
-            <tr>
-              <td colspan="2" rowspan="1" class="txt_left">&nbsp;12.火灾处理情况</td>
-              <td colspan="2" rowspan="1">处理方式</td>
-              <td colspan="4" rowspan="1"><select v-model="table2.dealType">
-                <option>立案(刑事处理)</option>
-                <option>破案(刑事处理)</option>
-                <option>行政处理</option>
-                <option>待查</option>
-                <option>拘留</option>
-                <option>处理</option>
-                <option>未处理</option>
-              </select></td>
-              <td colspan="3" rowspan="1">已处理人数</td>
-              <td colspan="4" rowspan="1"><input type="text" v-model="table2.dealNumber"/></td>
-              <td colspan="4" rowspan="1">刑事处罚人数</td>
-              <td colspan="7" rowspan="1"><input type="text" v-model="table2.criminalDealNumber"/></td>
-            </tr>
-            <tr>
-              <td colspan="2" rowspan="1" class="txt_left" style="height: 60px;">&nbsp;13.对火灾肇事人<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;的处理情况
-              </td>
-              <td colspan="24" rowspan="1" class="txt_left">
-                <textarea v-model="table2.accidentDealSituation"></textarea>
-              </td>
-            </tr>
-            <tr>
-              <td colspan="2" rowspan="1" class="txt_left" style="height: 60px;">&nbsp;14.对责任人员的<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;责任人追查情况
-              </td>
-              <td colspan="24" rowspan="1" class="txt_left">
-                <textarea v-model="table2.responsibilityDealSituation"></textarea></td>
-            </tr>
-            <tr>
-              <td colspan="2" rowspan="1" class="txt_left" style="height: 60px;">&nbsp;15.对有关领导的<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;责任追查情况
-              </td>
-              <td colspan="24" rowspan="1" class="txt_left">
-                <textarea v-model="table2.leadershipDealSituation"></textarea></td>
-            </tr>
-            <tr class="tr_border">
-              <td colspan="4" rowspan="1">县(市、区、局、站)填表人:</td>
-              <td colspan="2" rowspan="1"><input type="text" v-model="table2.townForm"/></td>
-              <td colspan="4" rowspan="1">县(市、区、局、站)审核人:</td>
-              <td colspan="3" rowspan="1"><input type="text" v-model="table2.townAudit"/></td>
-              <td colspan="4" rowspan="1">市(州、管委会)填表人:</td>
-              <td colspan="2" rowspan="1"><input type="text" v-model="table2.cityForm"/></td>
-              <td colspan="4" rowspan="1">市(州、管委会)审核人:</td>
-              <td colspan="3" rowspan="1"><input type="text" v-model="table2.cityAudit"/></td>
-            </tr>
-            </tbody>
-          </table>
-          <div class="btm-btn-group">
-            <el-button size="mini" type="primary"
-                       @click="updateCentereventTEventcatalogueStatus('gd',true)">归档
-            </el-button>
-            <el-button size="mini" type="primary"
-                       @click="regionalFlagAdd()">火灾区域
-            </el-button>
-          </div>
-        </form>
-      </div>
-    </el-dialog>
     <!-- 添加区域标记 -->
     <el-dialog title="火灾区域" :visible.sync="regionalFlagOpen" width="1000px">
       <areaSupermap ref="fireAreaSupermap" v-if="regionalFlagOpen" style="width: 100%;height:74vh"
@@ -1021,7 +220,7 @@
         sendDeptId: null,//签收部门/发起部门
         sendDeptName: null,//签收部门/发起部门
         sendEventType: null,//事件类型
-        sendHuoZaiBanJing: null,//火灾报告
+        sendHuoZaiBanJing: 0,//火灾报告
         sendGuanLianYuAn: null,//关联预案
         sendUserFegin: [],//联系人
         sendTaskSource: null,//任务来源
@@ -1456,7 +655,7 @@
         this.sendDeptName = null
         this.sendUserFegin = []
         this.sendEventType = null
-        this.sendHuoZaiBanJing = null
+        this.sendHuoZaiBanJing = 0
         this.sendGuanLianYuAn = null
         this.longitude = null
         this.latitude = null
@@ -1479,7 +678,7 @@
         this.sendDeptName = null
         this.sendUserFegin = []
         this.sendEventType = null
-        this.sendHuoZaiBanJing = null
+        this.sendHuoZaiBanJing = 0
         this.sendGuanLianYuAn = null
         this.sendTaskTitle = null
         this.sendTaskSource = null
@@ -1765,10 +964,6 @@
                 return
               }
               if (eventStatus == 'qs') {
-                if (that.sendHuoZaiBanJing == '' || that.sendHuoZaiBanJing == null) {
-                  that.$message.error(`请输入火灾半径!`)
-                  return
-                }
                 if (that.sendEventType == '' || that.sendEventType == null) {
                   that.$message.error(`请选择事件类型!`)
                   return

+ 86 - 28
src/views/forest.vue

@@ -253,7 +253,7 @@
             <dv-border-box-13 backgroundColor="rgba(12, 19, 38, .90)" :color="['#0e7957', '#0da24c']" style="padding-bottom: 1rem;">
               <img src="../assets/images/integrated/light.png" style="width: 100%; margin-top: .4rem;"/>
               <div class="this-title">
-                <span>曝光台</span>
+                <span>超期事件</span>
                 <dv-decoration-3 style="width:150px;height:15px;margin-right: 1rem;"/>
               </div>
               <div class="i-list-con small-bottom-margin h-18">
@@ -290,7 +290,7 @@
                   </el-input>
                 </div>
                 <div class="d-l-con padding-box nowrap" v-for="(item,index) in eventList"
-                     @click="dropLocation(item.latitude,item.longitude)" data-html2canvas-ignore>
+                     @click="dropLocation(item.latitude,item.longitude,item.eventCode)" data-html2canvas-ignore>
                   <div class="bgt-img">
                     <img v-if="item.picturePath!=null&&item.picturePath!=''&& item.pictureType=='image'"
                          :src="item.picturePath" style="width: 93px;height: 64px" loading="lazy"/>
@@ -388,12 +388,12 @@
           <div class="forthis">
             <dv-border-box-13 backgroundColor="rgba(12, 19, 38, .90)" :color="['#0e7957', '#0da24c']" style="padding-bottom: 1rem;">
               <img src="../assets/images/integrated/light.png" style="width: 100%; margin-top: .4rem;"/>
-              <div class="this-title">
+              <div class="this-title" style="cursor: pointer" @click="setEventTypeId({eventTypeIdDl: [], eventTypeId: []})">
                 <span>事件分类</span>
                 <dv-decoration-3 style="width:150px;height:15px;margin-right: 1rem;"/>
               </div>
               <div class="i-list-con small-bottom-margin h-19">
-                <dv-capsule-chart v-if="showEventKind" :config="eventKind"
+                <chart v-if="showEventKind" :config="eventKind"  @setEventTypeId="setEventTypeId"
                                   style="width: 90%;height: 18vh; padding:.5rem 1rem"/>
               </div>
             </dv-border-box-13>
@@ -438,6 +438,8 @@
   /** ----------------------------------weosocket结束------------------------------------- */
 
   import {
+    getMenuEventType,
+    getEventPush,
     getBaseInfo,
     getTodayEvents,
     getDeptEventCount,
@@ -460,12 +462,14 @@
   import eventdetailsdialog from '@/views/eventdetailsdialog.vue' //事件详情弹窗
   import firespread from '@/views/firespread.vue' //事件详情弹窗
   import Firespread from "./firespread";
+  import chart from "./from/dvCapsuleChart.vue";
 
   let echarts = require('echarts')
   export default {
     components: {
       Firespread,
       supermap,
+      chart,
       // supermapNotProcessed,
       // supermapProcessed,
       vheader,
@@ -494,6 +498,7 @@
       this.getEventByReportorOrder(this.getCurrentDataStr())
       this.getExposureStage(this.getCurrentDataStr())
       this.getSupermap(this.getCurrentDataStr())
+      this.getMenuEventType()
       /** ----------------------------------weosocket开始------------------------------------- */
       // this.initWebSocket()
       /** ----------------------------------weosocket结束------------------------------------- */
@@ -501,13 +506,13 @@
         if (this.calendarDay == this.getCurrentDataStr()) {
           this.getTodayEvents(this.getCurrentDataStr(), true);
           this.getDeptEventCount(this.getCurrentDataStr(), true);
-          this.getEventList(this.getCurrentDataStr(), this.pageSize, this.pageNum, '', true);
+          // this.getEventList(this.getCurrentDataStr(), this.pageSize, this.pageNum, '', true);
           this.getEventByEventType(this.getCurrentDataStr(), true);
           this.getEventByReportorOrder(this.getCurrentDataStr(), true);
           this.getExposureStage(this.getCurrentDataStr(), true);
-          this.getSupermap(this.getCurrentDataStr(), true);
+          // this.getSupermap(this.getCurrentDataStr(), true);
         }
-      }, 10000)
+      }, 30000)
 
       this.bottomMenuList() //获取底部公共组件消息和任务
     },
@@ -551,6 +556,8 @@
         eventList: [],
         pageSize: 10,
         pageNum: 1,
+        eventTypeIdDl:[],
+        eventTypeId:[],
 
         eventListnew: [],
         eventListAll: [],
@@ -567,6 +574,11 @@
         weosocket: false,
         websock: '',
         setIntervalWesocketPush: null,
+        websockSid: {
+          userId: '',
+          eventTypeDl: '',
+          eventType: '',
+        },
         /** ----------------------------------weosocket结束------------------------------------- */
         /** ----------------------------------摄像头预览开始------------------------------------- */
         activePanel: 'key1',
@@ -588,6 +600,30 @@
     },
     /** ----------------------------------weosocket结束------------------------------------- */
     methods: {
+      getMenuEventType() {
+        let that = this
+        getMenuEventType().then(res => {
+          that.websockSid.userId = Cookies.get('userId')
+          that.websockSid.eventTypeDl = res.data.eventTypeDl
+          that.websockSid.eventType = res.data.eventType
+          that.initWebSocket(that.websockSid.userId, that.websockSid.eventTypeDl, that.websockSid.eventType)
+          console.log(that.websockSid)
+        })
+      },
+      setEventTypeId(data) {
+        // let data = {eventTypeIdDl: [], eventTypeId: []}
+        // let data = {eventTypeIdDl: that.eventTypeIdDl, eventTypeId: that.eventTypeId}
+        let that = this
+        that.eventTypeIdDl = data.eventTypeIdDl
+        that.eventTypeId = data.eventTypeId
+        that.getSupermap(that.calendarDay, false)
+        that.getTodayEvents(that.calendarDay, false)
+        that.getEventByEventType(that.calendarDay, false)
+        that.getExposureStage(that.calendarDay, false)
+        that.getEventByReportorOrder(that.calendarDay, false)
+        that.getDeptEventCount(that.calendarDay, false)
+        that.getEventList(that.calendarDay, that.pageSize, that.pageNum, '', false)
+      },
       // searchEvent(pageSize,pageNum,eventSearch) {
       //   this.pageSize = pageSize;
       //   this.pageNum = pageNum;
@@ -605,8 +641,9 @@
       //     }
       //   })
       // },
-      dropLocation(lat, lng) {
-        this.$refs.supermap.dropLocation(lat, lng)
+      dropLocation(lat, lng,eventCode) {
+        this.$refs.supermap.dropLocation(lat, lng,18)
+        this.showEventDialog(eventCode)
       },
       showEventDialog(eventCode) {
         //事件信息弹出
@@ -826,7 +863,7 @@
       getTodayEvents(day, loading) {
         let that = this
         //左侧获取事件信息统计
-        getTodayEvents({day: day}, loading).then(res => {
+        getTodayEvents({eventTypeIdDl: that.eventTypeIdDl,eventTypeId: that.eventTypeId,day: day}, loading).then(res => {
           this.aiTotal = res.data.aiTotal
           this.aiTotal_pre = res.data.aiTotal_pre
           this.newReport = res.data.newReport
@@ -845,7 +882,7 @@
       getDeptEventCount(day, loading) {
         let that = this
         //左侧获取事件部门数量
-        getDeptEventCount({day: day}, loading).then(res => {
+        getDeptEventCount({eventTypeIdDl: that.eventTypeIdDl,eventTypeId: that.eventTypeId,day: day}, loading).then(res => {
           this.forestFarm = res.data
         })
       },
@@ -875,7 +912,7 @@
       },
       getSupermap(day, loading) {
         let that = this
-        getNearEvent('', '', day, loading).then(res => {
+        getNearEvent('', '', day, loading, that.eventTypeIdDl, that.eventTypeId).then(res => {
           that.markersList = [];
           if (res.data != null && res.data.length > 0) {
             for (let i = 0; i < res.data.length; i++) {
@@ -972,9 +1009,9 @@
         this.pageSize = pageSize;
         this.pageNum = pageNum;
         let that = this
-        this.eventList = []
         //右侧获取事件列表
-        getEventList({day: day, pageSize: pageSize, pageNum: pageNum, eventName: eventSearch}, loading).then(res => {
+        getEventList({eventTypeIdDl: that.eventTypeIdDl,eventTypeId: that.eventTypeId, day: day, pageSize: pageSize, pageNum: pageNum, eventName: eventSearch}, loading).then(res => {
+          this.eventList = []
           this.eventList = res.data
           if (this.eventList != null && this.eventList.length > 0) {
             if (this.eventList[0].eventStatusValue == 'forest_event_status_1') {
@@ -989,7 +1026,7 @@
       getEventByEventType(day, loading) {
         let that = this
         //右侧获取事件分类
-        getEventByEventType({day: day}, loading).then(res => {
+        getEventByEventType({eventTypeIdDl: that.eventTypeIdDl,eventTypeId: that.eventTypeId, day: day}, loading).then(res => {
           if (res.data != null && res.data.length > 0) {
             this.showEventKind = true
             this.eventKind.data = res.data
@@ -1006,7 +1043,7 @@
       getEventByReportorOrder(day, loading) {
         let that = this
         //右侧获取上报排名
-        getEventByReportorOrder({day: day}, loading).then(res => {
+        getEventByReportorOrder({eventTypeIdDl: that.eventTypeIdDl,eventTypeId: that.eventTypeId,day: day}, loading).then(res => {
           if (res.data != null && res.data.length > 0) {
             this.reportList.data = res.data
             this.reportList = {...this.reportList}
@@ -1027,7 +1064,7 @@
       },
       getWebSocketEvent(data) {
         let that = this
-        const event = JSON.parse(data);
+        const event = data
         //右侧获取事件列表
         that.markersList = []
         let markersMap = {
@@ -1105,14 +1142,13 @@
       getExposureStage(day, loading) {
         let that = this
         //右侧获取曝光台
-        getExposureStage({day: day}, loading).then(res => {
+        getExposureStage({eventTypeIdDl: that.eventTypeIdDl,eventTypeId: that.eventTypeId,day: day}, loading).then(res => {
           this.exposureStageList = res.data
         })
       },
       /** ----------------------------------weosocket开始------------------------------------- */
-      initWebSocket() { //初始化weosocket
-        // const wsuri = 'ws://127.0.0.1:10003/webSocket/' + Cookies.get('username')
-        const wsuri = 'ws://127.0.0.1:10003/webSocket/admin'
+      initWebSocket(userId, eventTypeDl, eventType) {        //初始化weosocket
+        const wsuri = 'ws://127.0.0.1:10003/eventPush/' + userId + '/' + eventTypeDl + '/' + eventType
         this.websock = new WebSocket(wsuri)
         console.log('建立websocket连接')
         this.websock.onopen = this.websocketonopen
@@ -1125,14 +1161,15 @@
         this.sendPing()
       },
       websocketonerror() { //连接建立失败重连
-        this.initWebSocket()
+        this.initWebSocket(this.websockSid.userId, this.websockSid.eventTypeDl, this.websockSid.eventType,)
       },
       websocketonmessage(e) { //数据接收
         console.log('接收数据', e.data)
         // let data = "{\"fromId\":\"forest\",\"fromUserId\":\""+Cookies.get('username')+"\",\"toUserId\":\""+Cookies.get('username')+"\"}";
-        let data = "{\"fromId\":\"forest\",\"fromUserId\":\"admin\",\"toUserId\":\"admin\"}";
+        let data = "{\"fromId\":\"environment\"}";
         if (this.calendarDay == this.getCurrentDataStr() && data != e.data) {
-          this.getWebSocketEvent(e.data);
+          // 处理收到的消息
+          this.handleWebSoceketEvent(e.data)
 
           // this.getEventListNew();
           // this.getTodayEvents(this.getCurrentDataStr());
@@ -1145,6 +1182,29 @@
           // thes.$refs.up.pause();//停止播放音乐
         }
       },
+      // 处理WebSocket事件
+      handleWebSoceketEvent(val) {
+        let that = this
+        let data = JSON.parse(val)
+        /**
+         * that.markersList.filter( item => data.eventCode == item.parameter).length == 0 如果地图中不存在当前事件则添加
+         * eventPush: 事件列表消息
+         * */
+        if (data.tag == "eventPush" && that.markersList.filter( item => data.eventCode == item.parameter).length == 0) {
+          getEventPush({eventCode: data.eventCode}).then((res) => {
+            if (res.data != undefined) {
+              //插入到第一条
+              this.eventList.unshift(res.data)
+              // 插入后删除最后一条 保证列表中为10条数据
+              if (this.eventList.length > 9)
+                this.eventList.splice(10, 1)
+              // 将收到的数据在地图上添加
+              this.getWebSocketEvent(res.data)
+            }
+          })
+        }
+        console.log(that.eventList[0])
+      },
       websocketsend(Data) { //数据发送
         this.websock.send(Data)
       },
@@ -1158,16 +1218,14 @@
        * @param {string} ping 心跳名称 默认字符串ping
        */
       sendPing(time = 60000, ping = {
-        'fromId': 'forest',
-        'fromUserId': Cookies.get('username'),
-        'toUserId': Cookies.get('username')
+        'fromId': 'environment'
       }) {
         clearInterval(this.setIntervalWesocketPush)
         this.setIntervalWesocketPush = setInterval(() => {
           if (this.weosocket) {
             this.websock.send(JSON.stringify(ping))
           } else {
-            this.initWebSocket()
+            // this.initWebSocket()
           }
         }, time)
       },

+ 165 - 0
src/views/from/dvCapsuleChart.vue

@@ -0,0 +1,165 @@
+<template>
+  <div class="dv-capsule-chart">
+    <template v-if="mergedConfig">
+      <div class="label-column">
+        <div v-for="item in mergedConfig.data" :key="item.name" style="cursor: pointer" @click="getEventList(item)">
+          {{ item.name }}
+        </div>
+        <div>&nbsp;</div>
+      </div>
+      <div class="capsule-container">
+        <div class="capsule-item" v-for="(capsule, index) in capsuleLength" :key="index" style="cursor: pointer" @click="getEventList(mergedConfig.data[index])">
+          <div
+            class="capsule-item-column"
+            :style="`width: ${capsule * 100}%; background-color: ${mergedConfig.colors[index % mergedConfig.colors.length]};`"
+          >
+            <div
+              v-if="mergedConfig.showValue"
+              class="capsule-item-value"
+            >{{ capsuleValue[index] }}
+            </div>
+          </div>
+        </div>
+
+        <div class="unit-label">
+          <div
+            v-for="(label, index) in labelData"
+            :key="label + index"
+          >{{ label }}
+          </div>
+        </div>
+      </div>
+
+      <div class="unit-text" v-if="mergedConfig.unit">{{ mergedConfig.unit }}</div>
+    </template>
+  </div>
+</template>
+
+<script>
+import {deepMerge} from '@jiaminghi/charts/lib/util/index'
+
+import {deepClone} from '@jiaminghi/c-render/lib/plugin/util'
+
+export default {
+  name: 'DvCapsuleChart',
+  props: {
+    config: {
+      type: Object,
+      default: () => ({})
+    }
+  },
+  data() {
+    return {
+      defaultConfig: {
+        /**
+         * @description Capsule chart data
+         * @type {Array<Object>}
+         * @default data = []
+         * @example data = [{ name: 'foo1', value: 100 }, { name: 'foo2', value: 100 }]
+         */
+        data: [],
+        /**
+         * @description Colors (hex|rgb|rgba|color keywords)
+         * @type {Array<String>}
+         * @default color = ['#37a2da', '#32c5e9', '#67e0e3', '#9fe6b8', '#ffdb5c', '#ff9f7f', '#fb7293']
+         * @example color = ['#000', 'rgb(0, 0, 0)', 'rgba(0, 0, 0, 1)', 'red']
+         */
+        colors: [
+          '#37a2da',
+          '#32c5e9',
+          '#67e0e3',
+          '#9fe6b8',
+          '#ffdb5c',
+          '#ff9f7f',
+          '#fb7293'
+        ],
+        /**
+         * @description Chart unit
+         * @type {String}
+         * @default unit = ''
+         */
+        unit: '',
+        /**
+         * @description Show item value
+         * @type {Boolean}
+         * @default showValue = false
+         */
+        showValue: false
+      },
+
+      mergedConfig: null,
+
+      capsuleLength: [],
+      capsuleValue: [],
+      labelData: [],
+      labelDataLength: []
+    }
+  },
+  watch: {
+    config() {
+      const {calcData} = this
+      calcData()
+    }
+  },
+  methods: {
+    getEventList(val) {
+      debugger
+      let args = {eventTypeIdDl: [], eventTypeId: []}
+      if (val.id != '0') {
+        args.eventTypeIdDl.push(-1)
+        args.eventTypeId.push(val.id)
+      } else {
+        args.eventTypeIdDl.push(val.parentId)
+        args.eventTypeId.push(-1)
+      }
+      this.$emit('setEventTypeId', args)
+
+    },
+    calcData() {
+      const {mergeConfig, calcCapsuleLengthAndLabelData} = this
+
+      mergeConfig()
+
+      calcCapsuleLengthAndLabelData()
+    },
+    mergeConfig() {
+      let {config, defaultConfig} = this
+
+      this.mergedConfig = deepMerge(
+        deepClone(defaultConfig, true),
+        config || {}
+      )
+    },
+    calcCapsuleLengthAndLabelData() {
+      const {data} = this.mergedConfig
+
+      if (!data.length) return
+
+      const capsuleValue = data.map(({value}) => value)
+
+      const maxValue = Math.max(...capsuleValue)
+
+      this.capsuleValue = capsuleValue
+
+      this.capsuleLength = capsuleValue.map(v => (maxValue ? v / maxValue : 0))
+
+      const oneFifth = maxValue / 5
+
+      const labelData = Array.from(
+        new Set(new Array(6).fill(0).map((v, i) => Math.ceil(i * oneFifth)))
+      )
+
+      this.labelData = labelData
+
+      this.labelDataLength = Array.from(labelData).map(v =>
+        maxValue ? v / maxValue : 0
+      )
+    }
+  },
+  mounted() {
+    const {calcData} = this
+
+    calcData()
+  }
+}
+</script>

+ 174 - 106
src/views/leader.vue

@@ -14,25 +14,25 @@
               <dv-decoration-3 style="width:150px;height:15px;margin-right: 1rem;"/>
             </div>
             <div class="i-list-con h-25">
-              <div id="personnel-chart" style="width: 100%;height:20vh;"></div>
-              <!--<div class="d-l-con-icon">-->
-                <!--<div class="icon-con w-50" :class="{on:iconCurrentIndex1==item.jobValue}"-->
-                     <!--v-for="(item,index) in visuForestCloudRYBO"-->
-                     <!--@click="getForestLeader(item.jobValue,item.jobType)">-->
-                  <!--<div class="icon icon-mid el-icon-user"></div>-->
-                  <!--<div class="icon-text">-->
-                    <!--<h5>{{ item.job }}</h5>-->
-                    <!--<h6>{{ item.number }}</h6>-->
-                  <!--</div>-->
-                <!--</div>-->
-                <!--&lt;!&ndash; <div class="icon-con w-50  m-btm-no" :class="{on:listCurrentIndex1==item.jobType}" v-for="(item,index) in visuForestCloudRYBO" v-if="index%2!=0" @click="getForestLeader(item.jobValue,item.jobType)">-->
-                <!--<div class="icon icon-mid el-icon-user"></div>-->
-                <!--<div class="icon-text">-->
-                  <!--<h5>{{item.job}}</h5>-->
-                  <!--<h6>{{item.number}}</h6>-->
-                <!--</div>-->
-              <!--</div> &ndash;&gt;-->
-              <!--</div>-->
+              <div id="personnel-chart" style="width: 100%;height:12vh;"></div>
+              <div class="d-l-con-icon">
+                <div class="icon-con w-50" :class="{on:iconCurrentIndex1==item.jobValue}"
+                     v-for="(item,index) in visuForestCloudRYBO"
+                     @click="getForestLeader(item.jobValue,item.jobType)">
+                  <div class="icon icon-mid el-icon-user"></div>
+                  <div class="icon-text">
+                    <h5>{{ item.job }}</h5>
+                    <h6>{{ item.number }}</h6>
+                  </div>
+                </div>
+                <!-- <div class="icon-con w-50  m-btm-no" :class="{on:listCurrentIndex1==item.jobType}" v-for="(item,index) in visuForestCloudRYBO" v-if="index%2!=0" @click="getForestLeader(item.jobValue,item.jobType)">
+                <div class="icon icon-mid el-icon-user"></div>
+                <div class="icon-text">
+                  <h5>{{item.job}}</h5>
+                  <h6>{{item.number}}</h6>
+                </div>
+              </div> -->
+              </div>
             </div>
           </dv-border-box-13>
         </div>
@@ -45,9 +45,17 @@
           <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="i-list-con h-27">
+              <el-input
+                v-model="nickName"
+                placeholder="请输入姓名"
+                clearable
+                size="small"
+                prefix-icon="el-icon-search"
+                style="margin-bottom: 20px"
+              />
               <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)">
+                     v-for="(item,index) in peopleList2" @click="getPlanList(item.userId)">
                   <div class="icon icon-mid el-icon-user"></div>
                   <div class="icon-text personnel-name">
                     <h6>{{ item.nickName }}</h6>
@@ -68,30 +76,67 @@
           <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>
+              <span>巡查任务</span>
               <dv-decoration-3 style="width:150px;height:15px;margin-right: 1rem;"/>
             </div>
             <div class="i-list-con h-73">
               <div class="h-73 overflow-y">
-                <div class="d-l-con" :class="{on:listCurrentIndex2==item.planName}"
+                <el-collapse accordion>
+                  <el-collapse-item v-for="(item,index) in xunLinListOne">
+                    <template slot="title">
+                      <div class="d-l-con sj-collapse"
+                           @click="getRecordList(item.id, item.patrolTrajectory)">
+                        <div class="d-l-l-text">
+                          <el-tooltip class="item" effect="dark" placement="left"
+                                      style="width:10rem ;" :disabled="(item.taskName.length <= 20)">
+                            <div slot="content">
+                              <h4 class="collapse-title" style="width: 200px;">
+                                {{ item.taskName }}</h4>
+                            </div>
+                            <h4 class="collapse-title" style="width: 100px;">
+                              {{ item.taskName | ellipsis20 }}</h4>
+                          </el-tooltip>
+                        </div>
+                        <div class="d-l-l-count">({{ item.recordCount }}/{{ item.planCount }})
+                        </div>
+                      </div>
+                    </template>
+                    <div class="d-l-con this-child sj-collapse" @click="getPointList(child.id)"
+                         v-for="(child,index) in recordList">
+                      <div class="d-l-l-text">
+                        <h4>{{ child.beginTime }} - {{ child.endTime }}</h4>
+                      </div>
+                      <!--<div class="d-l-l-count">{{index}}</div>-->
+                    </div>
+                    <div class="d-l-con this-child sj-collapse"
+                         v-if="showNothing && (recordList == null || recordList == '' || recordList == [])">
+                      <div class="d-l-l-text">
+                        <h4 class="text-gray">暂无信息</h4>
+                      </div>
+                    </div>
+                  </el-collapse-item>
+                </el-collapse>
+                <!--<div class="d-l-con" :class="{on:listCurrentIndex2==item.planName}"
                      v-for="(item,index) in xunLinListOne"
-                     @click="getPointList(item.id)">
+                     @click="setConnectList(item.planLine,item.planName)">
                   <div class="d-l-l-text">
                     <i class="i-small"></i>
-                    <h4>{{ item.timeBegin }} - {{ item.timeEnd }}</h4>
+                    <h4>{{ item.planName }}</h4>
                   </div>
-                </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>-->
+      <!--      <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>
@@ -101,13 +146,13 @@
 <script>
 import {
   getForestLeader,
-  getLeaderTrack,
-  getTrackList,
+  getPlanList,
+  getRecordList,
   getPointList,
   getRy
 } from '@/api/leader'
 
-import supermap from '@/components/supermap' //超图getPointList
+import supermap from '@/components/supermap' //超图
 import vheader from '@/components/v-header.vue' //一体化共用头部
 import vBottomMenu from '@/components/vBottomMenu.vue' //一体化公共底部菜单
 import eventLocation from '@/components/eventLocation.vue' //事件定位弹窗
@@ -134,9 +179,15 @@ export default {
       indentText: '收起左右栏',
       indentdisabled: false,
       visuForestCloudRYBO: [], //人员类型列表
+      personId: null, //人员
       peopleList: [], //人员列表
+      nickName: '',
+      peopleList2: [], //人员列表
       connectList: [], //画线
-      xunLinListOne: [], //巡林计划
+      patrolTrajectory: null, //任务画线
+      xunLinListOne: [], //巡查任务
+      recordList: [], //巡查记录
+      showNothing: false, //暂无信息
       zrs: 0, //总人数
       zxrs: 0 //在线人数
     }
@@ -147,11 +198,25 @@ export default {
     window.showDialog = this.showDialog
     window.choseLayerSwitching = this.choseLayerSwitching
     window.choseLayerSwitchingList = this.choseLayerSwitchingList
+    window.choseLayerSwitchingList_Data = this.choseLayerSwitchingList_Data
     /** ----------------------------------底部按钮公用组件结束------------------------------------- */
   },
   mounted() {
     this.bottomMenuList() //获取底部公共组件消息和任务
   },
+  watch:
+    {
+      nickName(val) {
+        this.peopleList2 = [];
+
+        for (let i in this.peopleList) {
+          if (this.peopleList[i].nickName.indexOf(val) != -1) {
+            this.peopleList2.push(this.peopleList[i]);
+          }
+        }
+        console.log(this.peopleList2)
+      }
+    },
   methods: {
     /** ----------------------------------底部按钮公用组件开始------------------------------------- */
     bottomMenuList() {
@@ -218,6 +283,10 @@ export default {
     choseLayerSwitchingList(urlList) {
       this.$refs.supermap.layerSwitchingList(urlList)
     },
+    //选择图层(传递数组)  带数据
+    choseLayerSwitchingList_Data(urlList) {
+      this.$refs.supermap.layerSwitchingList_Data(urlList)
+    },
     /** ----------------------------------底部按钮公用组件结束------------------------------------- */
 
     //初始化
@@ -233,22 +302,6 @@ export default {
         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) {
@@ -256,75 +309,85 @@ export default {
       this.listCurrentIndex2 = ''
       this.iconCurrentIndex1 = linJob
       this.peopleList = []
+      this.peopleList2 = []
       getForestLeader(linJob, linType).then(res => {
-        this.peopleList = res.data;
+        this.peopleList = res.data
+        this.peopleList2 = res.data
       })
       this.connectList = []
+      this.personId = null;
+      this.xunLinListOne = [];
+      this.patrolTrajectory = null;
       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()
-        }
+    //点击左侧人员列表获取 巡查计划
+    getPlanList(personId) {
+      if (this.personId == personId) {//当前人员已经被点击一次 不再重复加载
+        return;
+      }
+      this.personId = personId;
+      this.showNothing = false;
+      this.recordList = [];
+      getPlanList(personId).then(res => {
+        this.xunLinListOne = res.data;
       })
+      this.patrolTrajectory = null;
+      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()
-        }
+    //点击右侧巡查计划获取 巡查记录
+    getRecordList(id, patrolTrajectory) {
+      this.showNothing = false;
+      this.recordList = [];
+      getRecordList(id).then(res => {
+        this.recordList = res.data;
       })
+      this.$refs.supermap.clearC();
+      this.setTaskPointList(patrolTrajectory);
     },
-
-    getPointList(trackId) {
+    //点击右侧巡查记录获取 巡查轨迹
+    getPointList(id) {
+      getPointList(id).then(res => {
+        // console.log("落点",res.data);
+        this.setPointList(res);
+      })
+    },
+    //点击巡查人员 巡查任务落点
+    setTaskPointList(patrolTrajectory) {
+      console.log("巡查任务落点", typeof JSON.parse(patrolTrajectory));
+      if (this.patrolTrajectory == patrolTrajectory) {
+        this.patrolTrajectory = null;
+      } else {
+        this.patrolTrajectory = patrolTrajectory;
+        this.drawTaskPoint(this.patrolTrajectory);
+      }
+    },
+    // 巡查任务落点
+    drawTaskPoint(patrolTrajectory) {
+      setTimeout(() => {
+        this.$refs.supermap.clearC();
+        this.$refs.supermap.setConnectList(JSON.parse(patrolTrajectory), '#04f');
+      }, 1000)
+    },
+    //点击巡查轨迹时段 巡查轨迹落点
+    setPointList(res) {
       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)
+      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
           }
-          setTimeout(() => {
-            that.$refs.supermap.clearC()
-            that.$refs.supermap.setConnectList(this.connectList, 'red')
-          }, 1000)
-        } else {
-          that.$refs.supermap.clearC()
+          this.connectList.push(latlng)
         }
-      })
+        setTimeout(() => {
+          // that.$refs.supermap.clearC()
+          that.$refs.supermap.setConnectList(this.connectList, '#f40')
+        }, 1000)
+      } else {
+        that.$refs.supermap.clearC()
+      }
     },
     setConnectList(points, planName) {
       this.listCurrentIndex2 = planName
@@ -433,9 +496,13 @@ export default {
         }]
       })
     }
+
+
   },
   //过滤器
+
   filters: {
+
     //标题截取前20
     ellipsis20(value) {
       if (!value) return '';
@@ -445,6 +512,7 @@ export default {
       return value
     }
   },
+
 }
 </script>
 

+ 111 - 130
src/views/monitor.vue

@@ -41,26 +41,52 @@
                   </div>
                 </div>
               </div>
-              <div class="overflow-y" style="height: 33vh;">
-                <el-collapse accordion>
-                  <el-collapse-item v-for="(item,index) in region" :key="index">
-                    <!-- deptId -->
-                    <template slot="title">
-                      <div class="d-l-con sj-collapse" :class="{on:listCurrentIndex1==item.deptId}"
-                           v-on:click="selectCameraByDeptId(item.deptId)">
-                        <div class="d-l-l-text">
-                          <h4 class="collapse-title">{{ item.deptName }}</h4>
-                        </div>
-                        <div class="d-l-l-count">{{ item.deptCount }}</div>
-                      </div>
-                    </template>
-                  </el-collapse-item>
-                </el-collapse>
-              </div>
+<!--              <div class="overflow-y" style="height: 33vh;">-->
+<!--                <el-collapse accordion>-->
+<!--                  <el-collapse-item v-for="(item,index) in region" :key="index">-->
+<!--                    &lt;!&ndash; deptId &ndash;&gt;-->
+<!--                    <template slot="title">-->
+<!--                      <div class="d-l-con sj-collapse" :class="{on:listCurrentIndex1==item.deptId}"-->
+<!--                           v-on:click="selectCameraByDeptId(item.deptId)">-->
+<!--                        <div class="d-l-l-text">-->
+<!--                          <h4 class="collapse-title">{{ item.deptName }}</h4>-->
+<!--                        </div>-->
+<!--                        <div class="d-l-l-count">{{ item.deptCount }}</div>-->
+<!--                      </div>-->
+<!--                    </template>-->
+<!--                  </el-collapse-item>-->
+<!--                </el-collapse>-->
+<!--              </div>-->
 
-              <!-- 横向柱状 echart -->
-              <div class="overflow-y" style="height: 33vh;">
-                <div id="camera-chart" style="width: 100%;height:33vh;"></div>
+<!--              &lt;!&ndash; 横向柱状 echart &ndash;&gt;-->
+<!--              <div class="overflow-y" style="height: 33vh;">-->
+<!--                <div id="camera-chart" style="width: 100%;height:33vh;"></div>-->
+<!--              </div>-->
+              <div  class="overflow-y" style="height: 70vh;">
+                <div class="i-list-con h-65">
+                  <div class="head-container">
+                    <el-input
+                      v-model="deptName"
+                      placeholder="请输入部门名称"
+                      clearable
+                      size="small"
+                      prefix-icon="el-icon-search"
+                      style="margin-bottom: 20px"
+                    />
+                  </div>
+                  <div class="head-container tree-scrollbar" style="height: 700px;overflow-y:auto;">
+                    <el-tree
+                      :data="deptOptions"
+                      :props="defaultProps"
+                      :expand-on-click-node="false"
+                      :filter-node-method="filterNode"
+                      ref="tree"
+                      node-key="id"
+                      :default-expanded-keys="[100]"
+                      @node-click="handleNodeClick"
+                    />
+                  </div>
+                </div>
               </div>
             </div>
           </dv-border-box-13>
@@ -80,7 +106,15 @@
               <dv-decoration-3 style="width:150px;height:15px;margin-right: 1rem;"/>
             </div>
             <div class="i-list-con h-43">
-              <div class="d-l-con" v-for="(item,index) in visuForestCloudCameraBOList"
+              <el-input
+                v-model="rightDeptName"
+                placeholder="请输入摄像头名称"
+                clearable
+                size="small"
+                prefix-icon="el-icon-search"
+                style="margin-bottom: 20px"
+              />
+              <div class="d-l-con" v-for="(item,index) in visuForestCloudCameraBOListSearch"
                    :class="{on:listCurrentIndex2 == index}"
                    v-on:click="dropLocation(item.latitude,item.longitude,index)">
                 <div class="d-l-l-text">
@@ -118,6 +152,7 @@
     </div>
     <eventLocation ref="eventLocation"></eventLocation>
     <TVWall ref="TVWall"></TVWall>
+    <TVWalls ref="TVWalls"></TVWalls>
     <el-dialog :title="cameraTitle" :visible.sync="cameraVisible" v-if="cameraVisible" customClass="videoCustomWidth"
                @close="cancelEventLocationShow()">
       <div style="width:1020px;height:625px;position:relative;">
@@ -133,14 +168,16 @@ import {
   selectDeviceType,
   selectCameraByDeptId,
   selectKeyAreaList,
+  getCamerasByDeptId,
   getRegionalFlag
 } from '@/api/monitor'
-
+import { treeselect } from '@/api/system/dept'
 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' //电视墙弹窗
+import TVWalls from '@/components/TVWalls.vue' //电视墙弹窗
 
 /** ----------------------------------摄像头预览开始------------------------------------- */
 import {
@@ -161,6 +198,7 @@ export default {
     vheader,
     vBottomMenu,
     eventLocation,
+    TVWalls,
     TVWall
   },
   created() {
@@ -178,10 +216,19 @@ export default {
   mounted() {
     this.selectDeviceType(-1)
     this.selectKeyAreaList()
+    this.getTreeselect()
     this.bottomMenuList() //获取底部公共组件消息和任务
   },
   data() {
     return {
+      // 部门名称
+      deptName: undefined,
+// 部门树选项
+      deptOptions: undefined,
+      defaultProps: {
+        children: 'children',
+        label: 'label'
+      },
       iconCurrentIndex1: '-1',
       listCurrentIndex1: '-1',
       listCurrentIndex2: '-1',
@@ -211,6 +258,8 @@ export default {
       activeName: 'info',
       radio: '1',
       region: [],
+      rightDeptName: undefined,
+      visuForestCloudCameraBOListSearch:[],
       //左右缩进
       indentStyle: '',
       indentleft: '',
@@ -220,7 +269,44 @@ export default {
       domId: 'dom1',
     }
   },
+  watch: {
+    // 根据名称筛选部门树
+    deptName(val) {
+      this.$refs.tree.filter(val)
+    },
+    rightDeptName(val){
+      this.visuForestCloudCameraBOListSearch=[];
+      for (let i in this.visuForestCloudCameraBOList) {
+        if(this.visuForestCloudCameraBOList[i].cameraName.indexOf(val) != -1){
+          this.visuForestCloudCameraBOListSearch.push(this.visuForestCloudCameraBOList[i]);
+        }
+      }
+    }
+  },
   methods: {
+    /** 部门树*/
+// 查询部门下拉树结构
+    getTreeselect() {
+      treeselect().then(response => {
+        console.log(response.data)
+        this.deptOptions = response.data
+      })
+    },
+// 筛选节点
+    filterNode(value, data) {
+      if (!value) return true
+      return data.label.indexOf(value) !== -1
+    },
+// 节点单击事件
+    handleNodeClick(data) {
+      let that = this
+      console.log("节点单击事件",data);
+      // this.findCameraByDept(data.id)
+      that.selectCameraByDeptId(data.id);
+      getCamerasByDeptId(data.id).then(res => {
+        that.$refs.TVWalls.showTVWall(res.data, {longitude: data.deptLongitude, latitude: data.deptLatitude});
+      })
+    },
     selectKeyAreaList() {
       this.keyAreaList=[]
       //获取重点区域列表
@@ -319,112 +405,6 @@ export default {
       this.$refs.supermap.layerSwitchingList(urlList)
     },
     /** ----------------------------------底部按钮公用组件结束------------------------------------- */
-    cameraChat() {
-      // 基于准备好的dom,初始化echarts实例
-      let myChart = echarts.init(document.getElementById('camera-chart'))
-      // 绘制图表
-      const dfColor = ['#92E1FF', '#0097FB', '#30ECA6', '#FFC227', '#FF4848']
-      myChart.setOption({
-        dataset: {
-          source: this.sourceData
-        },
-        tooltip: {
-          trigger: 'item'
-
-        },
-        grid: {
-          top: '5%',
-          left: '5%',
-          // right: "4%",
-          bottom: '0%',
-          width: '75%',
-          containLabel: true
-        },
-        dataZoom: [{
-          show:true,
-          type: 'slider',
-          yAxisIndex:0,
-          left:10,
-          start: 0,
-          end: this.sourceData.length > 10 ? 40 : 100,
-          width:15
-        }],
-        xAxis: {
-          show: false,
-          type: 'value',
-          left:10
-        },
-        yAxis: {
-          type: 'category', // 不设置类目轴,抽离的dataset数据展示不出来
-          inverse: true,
-          axisLabel: {
-            show: true,
-            textStyle: {
-              color: '#5deaff',
-              fontSize: '12'
-            }
-          },
-          splitLine: {
-            show: false
-          },
-          axisTick: {
-            show: false
-          },
-          axisLine: {
-            show: false
-          }
-        },
-
-        series: [{
-
-          type: 'bar',
-          animationCurve: 'easeOutBack',
-          barWidth: 5,
-          label: {
-            show: true,
-            position: 'right',
-            offset: [0, 0],
-            color: '#88dfd5',
-            // fontSize: "12",
-            style: {
-              fill: '#fff'
-            }
-          },
-          backgroundBar: {
-            show: true,
-            style: {
-              fill: 'rgba(97,152,255,0.20)'
-            }
-          },
-          barStyle: {
-            stroke: 'rgba(41,244,236,1)'
-          },
-          gradient: {
-            color: ['rgba(41,244,236,1)', 'rgba(41,244,236,0)']
-          },
-          itemStyle: {
-            label: {
-              show: true
-            },
-            labelLine: {
-              show: false
-            },
-            color: new echarts.graphic.LinearGradient(0, 1, 0, 0, [{
-              offset: 0,
-              color: 'rgba(41,244,236,0)'
-            },
-              {
-                offset: 1,
-                color: 'rgba(41,244,236,.5)'
-              }
-            ]),
-            borderColor: '#a2f9f7',
-            shadowBlur: 16,
-            shadowColor: '#a2f9f7'
-          }
-        }]
-      })
-    },
     selectDeviceType(index) {
       this.iconCurrentIndex1 = index
       //获取左侧动态感知设备
@@ -446,7 +426,7 @@ export default {
         }
 
         that.visuForestCloudCameraBOList = res.data.visuForestCloudCameraBOList
-        this.cameraChat()
+        that.visuForestCloudCameraBOListSearch = res.data.visuForestCloudCameraBOList
         if (res.data.visuForestCloudCameraBOList != null && res.data.visuForestCloudCameraBOList
           .length > 0) {
           for (let i = 0; i < res.data.visuForestCloudCameraBOList.length; i++) {
@@ -541,6 +521,7 @@ export default {
       selectCameraByDeptId(depId).then(res => {
         //根据设备类型查看列表
         that.visuForestCloudCameraBOList = res.data
+        that.visuForestCloudCameraBOListSearch = res.data
         if (res.data != null && res.data.length > 0) {
           for (let i = 0; i < res.data.length; i++) {
             let markersMap = {
@@ -554,8 +535,8 @@ export default {
               isAggregation: false
             }
             if (res.data[i].channelCode != null) {
-              markersMap.parameter = {code:res.data.data[i].cameraCode,
-                type:res.data.data[i].cameraFactory}
+              markersMap.parameter = {code:res.data[i].cameraCode,
+                type:res.data[i].cameraFactory}
             } else {
               markersMap.parameter = []
             }

+ 2 - 3
vue.config.js

@@ -51,9 +51,8 @@ module.exports = {
     proxy: {
       // detail: https://cli.vuejs.org/config/#devserver-proxy
       [process.env.VUE_APP_BASE_API]: {
-        // target: `http://127.0.0.1:3031`,
-        target: `http://117.78.49.164:3031`,
-        // target: `http://192.168.1.119:3031`,
+         // target: `http://121.36.228.66:3031`,
+        target: `http://127.0.0.1:3031`,
         changeOrigin: true,
         pathRewrite: {
           ['^' + process.env.VUE_APP_BASE_API]: ''