Prechádzať zdrojové kódy

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

王通 2 rokov pred
rodič
commit
cc56c37e9f

+ 32 - 0
src/api/bigdata.js

@@ -174,4 +174,36 @@ export function getRlt(param) {
   })
 }
 
+// 联动车辆统计
+export function getG1() {
+  return request({
+    url: '/center-firecontrol/VisuForestCloudBigDataController/selectWaterGateDeptCount',
+    method: 'post',
+  })
+}
+
+// 消防事件统计
+export function getG2() {
+  return request({
+    url: '/center-firecontrol/VisuForestCloudBigDataController/selectWaterProjectDeptCount',
+    method: 'post',
+  })
+}
+
+// 其他力量统计
+export function getG3() {
+  return request({
+    url: '/center-firecontrol/VisuForestCloudBigDataController/selectReachWaterDeptCount',
+    method: 'post',
+  })
+}
+
+//考勤
+export function bigFindAttend() {
+  return request({
+    url: '/system/sysAttendance/bigFindAttend',
+    method: 'get',
+    data: {}
+  })
+}
 

+ 5 - 2
src/api/event.js

@@ -1,10 +1,13 @@
 import request from '@/utils/request'
 
 //获取附近事件
-export function getNearEvent(longitude,latitude) {
+export function getNearEvent(longitude,latitude,day,loading) {
   return request({
-    url: '/center-firecontrol/VisuForestEventCenterController/getNearEvent?longitude='+longitude+"&latitude="+latitude,
+    url: '/center-firecontrol/VisuForestEventCenterController/getNearEvent?longitude='+longitude+"&latitude="+latitude+"&day="+day,
     method: 'get',
+    headers: {
+      loading: loading
+    },
   })
 }
 //获取附近摄像头

+ 22 - 0
src/api/forest.js

@@ -251,3 +251,25 @@ export function userFeginlist(param) {
     params:param
   })
 }
+
+// 获取消息个数
+export function selectMessageCount(userId) {
+  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'
+  })
+}

+ 27 - 9
src/api/leader.js

@@ -11,21 +11,39 @@ export function getRy() {
 // 获取左侧人员列表
 export function getForestLeader(linJob,linType) {
   return request({
-    url: '/center-firecontrol/VisuForestLeaderController/getForestLeader?linJob='+linJob+"&linType="+linType,
+    url: '/center-firecontrol/VisuForestLeaderController/getPersonList?linJob='+linJob+"&linType="+linType,
     method: 'get',
   })
 }
 // 点击左侧人员列表获取轨迹
 export function getLeaderTrack(trackById) {
   return request({
-    url: '/center-firecontrol/VisuForestLeaderController/getLeaderTrack?trackById='+trackById,
-    method: 'get',
-  })
-}
-// 巡林计划
-export function getPlanList(trackById) {
-  return request({
-    url: '/center-firecontrol/VisuForestLeaderController/getPlanList',
+    url: '/center-firecontrol/VisuForestLeaderController/getLeaderTrack?trackById=' + trackById,
     method: 'get',
   })
 }
+
+// 巡林任务
+  export function getPlanList(userId) {
+    return request({
+      url: '/center-data/task/getPlanList',
+      method: 'post',
+      data: {userId:userId,type:'5'}
+    })
+  }
+
+// 巡林记录
+  export function getRecordList(taskId) {
+    return request({
+      url: '/center-data/record/list?taskId='+taskId,
+      method: 'get',
+    })
+  }
+
+// 巡林轨迹
+  export function getPointList(recordId) {
+    return request({
+      url: '/center-data/track/getTrack/'+recordId.toString(),
+      method: 'get',
+    })
+  }

+ 195 - 46
src/components/eventLocation.vue

@@ -321,7 +321,7 @@ export default {
         isAggregation: false
       }]
       let that = this
-      getNearEvent(that.longitude, that.latitude).then(res => {
+      getNearEvent(that.longitude, that.latitude,'').then(res => {
         that.markersList = []
         that.eventList = res.data
         if (that.eventList != null && that.eventList.length > 0) {
@@ -402,7 +402,7 @@ export default {
             that.$refs.eventLocationSupermap.clearM(false)
             that.$refs.eventLocationSupermap.clearM(true)
             that.$refs.eventLocationSupermap.setMarkers(that.markersList)
-              that.$refs.eventLocationSupermap.setMarkers(marker)
+            that.$refs.eventLocationSupermap.setMarkers(marker)
           }, 1000)
         } else {
           setTimeout(() => {
@@ -445,10 +445,17 @@ export default {
                 icon: 'camera',
                 bindPopupHtml: '',
                 click: 'preview',
-                parameter: res.data[i].cameraCode,
                 keepBindPopup: false,
                 isAggregation: false
               }
+              if (res.data[i].cameraCode != null) {
+                markersMap.parameter = {
+                  code: res.data[i].cameraCode,
+                  type: res.data[i].cameraFactory
+                }
+              } else {
+                markersMap.parameter = []
+              }
               if (res.data.length > 50) {
                 markersMap.isAggregation = true
               }
@@ -476,8 +483,7 @@ export default {
                 '<span>' +
                 '                  <div class="d-l-con">' +
                 '                  <div class="d-l-l-text">' +
-                '                  <h4>摄像头类型:' + res.data[i]
-                  .cameraFactory + '</h4>' +
+                '                  <h4>摄像头类型:' + (res.data[i].cameraFactory=="1"?"大华":"海康") + '</h4>' +
                 '                </div>' +
                 '                </div>' +
                 '                </span>' +
@@ -498,7 +504,7 @@ export default {
               that.$refs.eventLocationSupermap.setMarkersRadius(that.cameraMarkersList)
               that.$refs.eventLocationSupermap.setMarkers(marker)
             }, 1000)
-          }else{
+          } else {
             setTimeout(() => {
               that.$refs.eventLocationSupermap.clearM(true)
               that.$refs.eventLocationSupermap.clearM(false)
@@ -529,50 +535,58 @@ export default {
     alertReinstall: function() {
       this.$modal.msgWarning('请重新安装客户端')
     },
+    cancelEventLocationShow() {
+      if (this.oWebControl != null) {
+        this.oWebControl.JS_HideWnd()   // 先让窗口隐藏,规避可能的插件窗口滞后于浏览器消失问题
+        this.oWebControl.JS_Disconnect().then(function() {  // 断开与插件服务连接成功
+          },
+          function() {  // 断开与插件服务连接失败
+          })
+      }
+    },
     /** 预览按钮操作 */
-    preview(cameraCode) {
-      let that = this
-      // getDahuaVideoServer().then(newResponse => {
-      //   console.log(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,
-      //         token: '',
-      //         https: 1
-      //       })
-      //       this.ws.on('loginState', (res) => {
-      //         this.isLogin = res
-      //         console.log('---res-----', res)
-      //         if (res) {
-      //           this.alertLoginSuccess()
-      //           this.activePanel = 'key2'
-      //           this.realTimeVideoDialog(channelCode)
-      //         } else {
-      //           this.alertLoginFailed()
-      //         }
-      //       })
-      //     } else { // 连接客户端失败
-      //       this.alertReinstall()
-      //     }
-      //   })
-      // })
-      that.cameraVisible = true
-      getHaiKangVideoServer({ cameraCode: cameraCode }).then(newResponse => {
-        that.cameraTitle = '摄像头-' + newResponse.data.cameraName
-        that.initPlugin(newResponse.data.appkey, newResponse.data.loginIp, newResponse.data.secret, newResponse.data.loginPort)
-        that.$nextTick(() => {
-          console.log(that.oWebControl)
+    preview(cameraParam) {
+      if (cameraParam.type == '1') {
+        getDahuaVideoServer().then(newResponse => {
+          console.log(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,
+                token: '',
+                https: 0
+              })
+              this.ws.on('loginState', (res) => {
+                this.isLogin = res
+                console.log('---res-----', res)
+                if (res) {
+                  this.alertLoginSuccess()
+                  this.activePanel = 'key2'
+                  this.realTimeVideoDialog(cameraParam.code)
+                } else {
+                  this.alertLoginFailed()
+                }
+              })
+            } else { // 连接客户端失败
+              this.alertReinstall()
+            }
+          })
+        })
+      } else if (cameraParam.type == '0') {
+        let that = this
+        that.cameraVisible = true
+        getHaiKangVideoServer({ cameraCode: cameraParam.code }).then(newResponse => {
+          that.cameraTitle = '摄像头-' + newResponse.data.cameraName
+          that.initPlugin(newResponse.data.appkey, newResponse.data.loginIp, newResponse.data.secret, newResponse.data.loginPort)
           setTimeout(function() {
-            console.log(that.oWebControl)
             that.playhk(newResponse.data.channelCode)
           }, 5000)
         })
-      })
+      }
 
     },
     realTimeVideoDialog(cameraParams) { // 调用弹窗实时播放接口
@@ -580,10 +594,144 @@ export default {
         this.$Message.info('正在登陆客户端,请稍等......')
         return false
       }
-      this.ws.openVideo(cameraParams)
+      const params = [cameraParams]
+      this.ws.openVideo(params)
     },
     /** ----------------------------------摄像头预览结束------------------------------------- */
 
+
+    /** ----------------------------------海康摄像头预览开始------------------------------------- */
+    // 创建播放实例
+    initPlugin(newappkey, newloginIp, newsecret, newloginPort) {
+      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', 1020, 600).then(function() { //JS_CreateWnd创建视频播放窗口,宽高可设定
+              that.init(newappkey, newloginIp, newsecret, newloginPort)  // 创建播放实例成功后初始化
+            })
+          }, 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(newappkey, newloginIp, newsecret, newloginPort)
+            }, 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
+        }
+      })
+    },
+    //播放海康摄像头
+    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                                     //可指定播放窗口
+        })
+      })
+    },
+    //初始化
+    init(newappkey, newloginIp, newsecret, newloginPort) {
+      let that = this
+      that.getPubKey(function() {
+        ////////////////////////////////// 请自行修改以下变量值	////////////////////////////////////
+        var appkey = newappkey                           //综合安防管理平台提供的appkey,必填
+        var secret = that.setEncrypt(newsecret)   //综合安防管理平台提供的secret,必填
+        var ip = newloginIp                           //综合安防管理平台IP地址,必填
+        var playMode = 0                                  //初始播放模式:0-预览,1-回放
+        var port = Number(newloginPort)                                    //综合安防管理平台端口,若启用HTTPS协议,默认443
+        var snapDir = 'D:\\SnapDir'                       //抓图存储路径
+        var videoDir = 'D:\\VideoDir'                     //紧急录像或录像剪辑存储路径
+        var layout = '1x1'                                //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(1020, 600)  // 初始化后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()
+        }
+      })
+    },
+//RSA加密
+    setEncrypt(value) {
+      var encrypt = new JSEncrypt()
+      encrypt.setPublicKey(this.pubKey)
+      return encrypt.encrypt(value)
+    },
+    /** ----------------------------------海康摄像头预览结束------------------------------------- */
+
     /** ----------------------------------事件弹窗开始------------------------------------- */
     editableLayers(processedState) {
       if (processedState == 'notProcessedSupermap') {
@@ -776,6 +924,7 @@ export default {
     /** ----------------------------------海康摄像头预览结束------------------------------------- */
   }
 }
+
 // 推送消息
 function cbIntegrationCallBack(oData) {
   console.log(JSON.stringify(oData.responseMsg))

+ 5 - 2
src/components/v-fastmenu.vue

@@ -40,6 +40,7 @@
 import resetPwd from "../views/system/user/profile/resetPwd";
 import { getUserProfile } from "@/api/system/user";
 import { selectConfigKey } from "@/api/system/config";
+import Cookies from 'js-cookie';
 	export default {
     components: {resetPwd },
 		data() {
@@ -80,6 +81,8 @@ import { selectConfigKey } from "@/api/system/config";
           this.nickName=response.data.nickName
           this.deptNames=response.data.deptNames
           this.phonenumber=response.data.phonenumber
+          this.userId=response.data.userId
+          Cookies.set('userId',response.data.userId);
         });
       },
       resetPwd(){
@@ -193,8 +196,8 @@ import { selectConfigKey } from "@/api/system/config";
 
 	}
 	.el-popover{
-		background:$searchBG;
-		border:1px $barBorder;
+		background:#0c1327;
+		border:1px solid #334780;
 		box-shadow:$shadowListHover;
 		border-radius: 1rem;
 	}

+ 47 - 45
src/components/vBottomMenu.vue

@@ -151,46 +151,27 @@
 					</div>
 				</div>
 				<el-badge :value="taskCount" slot="reference">
-					<el-button size="small" icon="el-icon-bank-card" @click="refreshTaskList">任务</el-button>
-				</el-badge>
-			</el-popover>
-			<el-popover placement="top" trigger="click">
-				<div class="btm-r-pop-info">
-					<div class="btm-r-pop-info-box" v-for="(item,index) in 0">
-						<div class="btm-r-pop-info-tit">
-							<h3>火险任务</h3>
-						</div>
-						<div class="btm-r-pop-info-con">
-							<div class="btm-r-pop-info-list">
-								<div class="btm-r-pop-info-list-name">标题</div>
-								<div class="btm-r-pop-info-list-text">四平阿斯利康大姐夫啊路上的风景可丽金啊水电分离家</div>
-							</div>
-							<div class="btm-r-pop-info-list">
-								<div class="btm-r-pop-info-list-name">发起人</div>
-								<div class="btm-r-pop-info-list-text">张三</div>
-							</div>
-							<div class="btm-r-pop-info-list">
-								<div class="btm-r-pop-info-list-name">发起时间</div>
-								<div class="btm-r-pop-info-list-text">2022-09-05 12:12:15</div>
-							</div>
-							<div class="btm-r-pop-info-list">
-								<div class="btm-r-pop-info-list-name">关联事件</div>
-								<div class="btm-r-pop-info-list-text">啊萨杜拉副科级啊萨杜拉副科级</div>
-							</div>
-						</div>
-						<div class="btm-r-pop-info-btm">
-							<el-link type="success">查看详情</el-link>
-							<div class="btm-r-pop-info-btm-btn">
-								<el-button type="danger">拒绝</el-button>
-								<el-button type="primary">领取</el-button>
-							</div>
-						</div>
-					</div>
-				</div>
-				<el-badge :value="0" slot="reference">
-					<el-button size="small" icon="el-icon-chat-line-round">消息</el-button>
+					<el-button size="small" icon="el-icon-bank-card">任务</el-button>
 				</el-badge>
 			</el-popover>
+      <el-popover placement="top" trigger="click">
+        <div class="btm-r-pop-info">
+          <div class="btm-r-pop-info-box" v-for="(item,index) in messageList">
+            <div class="btm-r-pop-info-con">
+              <div class="btm-r-pop-info-list">
+                <div class="btm-r-pop-info-list-name">{{item.title}}</div>
+                <div class="btm-r-pop-info-list-text">{{item.content}}</div>
+              </div>
+            </div>
+            <div class="btm-r-pop-info-btm">
+              <el-link type="success" @click="selectMessageById(item.id)">标记已读</el-link>
+            </div>
+          </div>
+        </div>
+        <el-badge :value="messageCount" slot="reference">
+          <el-button size="small" icon="el-icon-chat-line-round">消息</el-button>
+        </el-badge>
+      </el-popover>
 			<!-- 警报铃 必须放在这,放在别处不好使 -->
 			<div class="bell" v-if="eventWarn" @click="updateAlertFalse">
 				<div class="dot"></div>
@@ -371,7 +352,10 @@
 		getEventDetail,
 		selectTaskDtpts,
 		receiveTask,
-		refusedTask
+		refusedTask,
+    selectMessageCount,
+    selectMessageList,
+    selectMessageById
 	} from '@/api/forest'
 	import {
 		selectFarmByDeptId
@@ -381,6 +365,7 @@
 	} from '@/api/system/dept'
 	import supermapTaskDialog from '@/components/supermap' //超图
 	import TcPlayer from '@/components/TcPlayer' //视频预览
+  import Cookies from 'js-cookie';
 
 	export default {
 		components: {
@@ -389,12 +374,10 @@
 		},
 		watch: {
 			filterbanText(val) {
-				alert(val)
 				console.log(this.$refs)
 				this.$refs.banDept.filter(val)
 			},
 			filterchangText(val) {
-				alert(val)
 				console.log(this.$refs)
 				this.$refs.changDept.filter(val)
 			}
@@ -427,6 +410,9 @@
 				taskCount: 0, //任务数量
 				taskList: 0, //任务列表
 
+        messageCount: 0, //消息数量
+        messageList: 0, //消息列表
+
 				btmTipIndent: '', //图例收起弹出
 				eventLocationVisible: false,
 				showChild: false,
@@ -704,10 +690,6 @@
 					}, 1000)
 				})
 			},
-			refreshTaskList() {
-				//刷新任务列表
-				this.selectTaskList()
-			},
 			selectTaskList: async function() {
 				//获取任务列表
 				selectTaskBO().then(res => {
@@ -715,6 +697,26 @@
 					this.taskCount = res.data.length
 				})
 			},
+
+      selectMessageById(id) {
+        selectMessageById(id).then(response => {
+          /** 获取消息列表 */
+          this.selectMessageList();
+        });
+      },
+      /** 获取消息个数 */
+      selectMessageCount(){
+        selectMessageCount(Cookies.get("userId")).then(response => {
+          this.messageCount = response.data
+        });
+      },
+      /** 获取消息列表 */
+      selectMessageList(){
+        selectMessageList(Cookies.get("userId")).then(response => {
+          this.messageList = response.data
+          this.messageCount = response.data.length
+        });
+      },
 			handleCheckedCitiesChangeBan(value) {
 				this.choseLayerSwitchingList(this.banCheckList)
 			},

+ 18 - 0
src/router/index.js

@@ -61,6 +61,15 @@ export const constantRoutes = [
 			title: '监控中心'
 		}
 	},
+  {
+		//消防人员
+		path: '/leader',
+		name: 'leader',
+		component: () => import('@/views/leader'),
+		meta: {
+			title: '消防人员'
+		}
+	},
 	{
 		//统计分析
 		path: '/bigdata',
@@ -107,6 +116,15 @@ export const constantRoutesNew = [{
 		}
 	},
   {
+    //消防人员
+    path: '/leader',
+    name: 'leader',
+    component: () => import('@/views/leader'),
+    meta: {
+      title: '消防人员'
+    }
+  },
+  {
     //统计分析
     path: '/bigdata',
     name: 'bigdata',

+ 44 - 2
src/views/bigdata/bigdata.vue

@@ -129,8 +129,37 @@
           <chartEquipmentDistribution></chartEquipmentDistribution>
         </div>
       </div>
+      <!-- 第七纵向-->
+      <div class="bigdata-list wid-li-1 m-l-15">
+        <div class="b-con mg-b-20">
+          <div class="b-tit"><img src="@/assets/images/integrated/bigdata-tit-icon.png">
+            <span>联动车辆统计</span>
+          </div>
+          <chartPitG1></chartPitG1>
+        </div>
+        <div class="b-con mg-b-20">
+          <div class="b-tit"><img src="@/assets/images/integrated/bigdata-tit-icon.png">
+            <span>消防事件统计</span>
+          </div>
+          <chartPitG2></chartPitG2>
+        </div>
+        <div class="b-con">
+          <div class="b-tit"><img src="@/assets/images/integrated/bigdata-tit-icon.png">
+            <span>其他力量统计</span>
+          </div>
+          <chartPitG3></chartPitG3>
+        </div>
+      </div>
+      <!-- 第八纵向-->
+      <div class="bigdata-list wid-li-1 m-l-15">
+        <div class="b-con">
+          <div class="b-tit"><img src="@/assets/images/integrated/bigdata-tit-icon.png">
+            <span>考勤统计</span>
+          </div>
+          <chartPitKaoqin></chartPitKaoqin>
+        </div>
+      </div>
     </div>
-
   </div>
 </template>
 
@@ -153,6 +182,10 @@ import chartFireHydrant from './chart-fireHydrant.vue' //12 消火栓、、
 import chartFullTimeStation from './chart-fullTimeStation.vue' //13 专职站、、
 import chartFoamLiquid from './chart-foamLiquid.vue' //14 泡沫液、、
 import chartEquipmentDistribution from './chart-equipmentDistribution' //16 设备分布、、
+import chartPitG1 from './chart-pit' //17 闸口资源统计、、
+import chartPitG2 from './chart-firecontrol' //18 水利工程资源统计、、
+import chartPitG3 from './chart-hydrant' //19 河段资源统计、、
+import chartPitKaoqin from './chart-kaoqin' //19 河段资源统计、、
 
 import { getRlt } from '@/api/bigdata'
 import {
@@ -176,7 +209,11 @@ export default {
     chartFireHydrant,
     chartFullTimeStation,
     chartFoamLiquid,
-    chartEquipmentDistribution
+    chartEquipmentDistribution,
+    chartPitG1,
+    chartPitG2,
+    chartPitG3,
+    chartPitKaoqin
   },
   data() {
     return {
@@ -201,6 +238,11 @@ export default {
           name: '监控中心'
         },
         {
+          //消防人员
+          path: '/leader',
+          name: '消防人员'
+        },
+        {
           //统计分析
           path: '/bigdata',
           name: '统计分析'

+ 142 - 0
src/views/bigdata/chart-firecontrol.vue

@@ -0,0 +1,142 @@
+<!-- **************************************NO.18 消防*************************************** -->
+<template>
+	<div class="chart-container">
+		<div id="chartPitG2" style="width: 100%; height:25vh; ">
+		</div>
+	</div>
+</template>
+
+<script>
+	import * as echarts from 'echarts';
+  import {getG2} from '@/api/bigdata'
+	export default {
+		name: 'chartPitG2',
+		data() {
+			return {
+        source: [],
+				count: 0
+			}
+		},
+		mounted() {
+			// this.myEcharts1();
+      this.getG2()
+		},
+
+		methods: {
+      getG2() {
+        let that = this
+        getG2().then(res => {
+          this.source = res.data
+          console.log("消防事件统计", res.data)
+          that.myEcharts1()
+        })
+      },
+			// 出处 http://192.144.199.210:8080/editor/index.html?chart_id=f46x0t0c7883X-D6
+			myEcharts1() {
+				var chartDom = document.getElementById('chartPitG2');
+				var myChart = echarts.init(chartDom);
+				var option;
+				 option = {
+				    tooltip: {
+				        trigger: 'axis',
+				        axisPointer: {
+				            type: 'shadow'
+				        }
+				    },
+				    grid:{
+				        top:'15%',
+				        left:'10%',
+				        right:'10%',
+				        buttom:'15%',
+				    },
+				     xAxis: {
+				        type: 'category',
+				        axisLine: {
+				            lineStyle: {
+				                color: 'rgba(255,255,255,0.12)',
+				            },
+				        },
+				        axisLabel: {
+				            margin: 10,
+				            color: '#e2e9ff',
+				            textStyle: {
+				                fontSize: 10
+				            },
+				        },
+				        axisTick:{
+				            show:false,
+				        },
+				         // data: ['双辽市', '梨树县', '伊通县', '铁东区', '铁西区']
+				         data: this.source.name
+				    },
+				    yAxis: {
+				        nameTextStyle:{
+				            color:'#fff',
+				        },
+				        type: 'value',
+				         axisLine: {
+				             show:false,
+				            lineStyle: {
+				                color: 'rgba(255,255,255,0.12)'
+				            },
+				        },
+				        axisLabel: {
+							 show:false,
+				            formatter: '{value}',
+				            color: '#e2e9ff',
+				        },
+				         splitLine: {
+				            lineStyle: {
+				                color: 'rgba(255,255,255,0.12)'
+				            }
+				        },
+				        axisTick:{
+				            show:true,
+
+				            lineStyle:{
+				                color:'#fff',
+				            },
+				        },
+				    },
+				    series: [{
+				        itemStyle:{
+				            color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
+				                    offset: 0,
+				                    color: 'rgba(0,244,255,1)'
+				                }, {
+				                    offset: 1,
+				                    color: 'rgba(0,77,167,1)'
+				                }], false),
+				                barBorderRadius: 10,
+				                opacity:0.8
+				        },
+				        barWidth:10,
+				        label:{
+				            show:true,
+				            position:['0','-20'],
+				            color:'#fff',
+				        },
+				        // data: [120, 200, 150, 80, 70],
+				        data: this.source.value,
+				        type: 'bar',
+				    }]
+				};
+				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;
+	}
+</style>

+ 222 - 0
src/views/bigdata/chart-hydrant.vue

@@ -0,0 +1,222 @@
+<!-- **************************************NO.13 消火栓*************************************** -->
+<template>
+	<div class="chart-container">
+		<div id="chartPitG3" style="width: 100%; height:23vh;">
+		</div>
+	</div>
+</template>
+
+<script>
+	import * as echarts from 'echarts';
+  import {getG3} from '@/api/bigdata'
+	export default {
+		name: 'chartPitG3',
+		data() {
+			return {
+        source: [],
+				count: 0
+			}
+		},
+		mounted() {
+			// this.myEcharts()
+			this.getG3()
+
+		},
+
+		methods: {
+      getG3() {
+        let that = this
+        getG3().then(res => {
+          this.source = res.data
+          console.log("其他力量统计", res.data)
+          that.myEcharts()
+        })
+      },
+			// 出处 http://192.144.199.210:8080/editor/index.html?chart_id=Ve9zCnhVwZvXTdD0
+			myEcharts() {
+
+
+				var chartDom = document.getElementById('chartPitG3');
+				var myChart = echarts.init(chartDom);
+				var color = ['#0E7CE2', '#FF8352', '#E271DE', '#F8456B', '#00FFFF', '#4AEAB0'];
+				var option;
+        var trafficWay = this.source;
+				var data = [];
+				var color = ['#F6C558', '#25EFBD', '#21bad6', '#3283F5', '#E44660'];
+				for (var i = 0; i < trafficWay.length; i++) {
+				    data.push(
+				        {
+				            value: trafficWay[i].value,
+				            name: trafficWay[i].name,
+				            itemStyle: {
+				                normal: {
+				                    borderWidth: 8,
+				                    shadowBlur: 0,
+				                    borderColor: color[i],
+				                    shadowColor: color[i],
+				                },
+				            },
+				        },
+				        {
+				            value: 3,
+				            name: '',
+				            labelLine:{
+				              show:false
+				            },
+				            itemStyle: {
+				                normal: {
+				                    label: {
+				                        show: false,
+				                    },
+				                    labelLine: {
+				                        show: false,
+				                    },
+				                    color: 'rgba(0, 0, 0, 0)',
+				                    borderColor: 'rgba(0, 0, 0, 0)',
+				                    borderWidth: 0,
+				                },
+				            },
+				        }
+				    );
+				}
+				var seriesOption = [
+				    {
+				        name: '',
+				        type: 'pie',
+				        clockWise:true,
+				        radius: [70, 70],
+				        hoverAnimation: true,
+				        itemStyle: {
+				            normal: {
+				                label: {
+				                    show: true
+				                },
+				            },
+				        },
+				        data: data,
+				        labelLine: {
+				            normal: {
+				                length: 20,
+				                length2: 20,
+				                lineStyle: {
+				                    type: 'solid',
+				                    color: '#31FFFF',
+				                },
+				            },
+				        },
+				        label: {
+				            normal: {
+				                formatter: function (params) {
+				                    var result = '';
+				                    if (params.name) {
+				                        result +=  params.name+'{blue|' + params.value  + '}';
+				                    }
+				                    return result;
+				                },
+				                borderWidth: 0,
+				                borderRadius: 4,
+				                padding: [60, 0],
+				                height: 10,
+				                fontSize: 10,
+				                align: 'center',
+				                color: '#DEDEDE',
+				                rich: {
+				                    blue: {
+				                        fontSize: 10,
+				                        lineHeight: 5,
+				                        color: '#31FFFF',
+				                        padding: [0, 5],
+				                    },
+				                },
+				            },
+				        },
+				    },
+				    {
+				        type: 'pie',
+				        radius: [60, 60],
+				        hoverAnimation: false,
+				        clockWise: false,
+				        itemStyle: {
+				            normal: {
+				                borderColor: 'rgba(2,178,247,0.2)',
+				                borderWidth: 10,
+				            },
+				        },
+				        label: {
+				            show: false,
+				        },
+				        data: [200],
+				    },
+				    {
+				        type: 'pie',
+				        radius: [0, '20%'],
+				        zlevel: 3,
+				        silent: true,
+				        label: {
+				            normal: {
+				                show: false,
+				            },
+				        },
+				        labelLine: {
+				            normal: {
+				                show: false,
+				            },
+				        },
+				        data: [
+				            {
+				                value: 6,
+				                name: '总数',
+				                itemStyle: {
+				                    normal: {
+				                        color: {
+				                            x: 0,
+				                            y: 0,
+				                            x2: 1,
+				                            y2: 0,
+				                            type: 'linear',
+				                            global: false,
+				                            colorStops: [
+				                                {
+				                                    offset: 0,
+				                                    color: 'rgba(2,178,247,0.2)',
+				                                },
+				                                {
+				                                    offset: 1,
+				                                    color: 'rgba(2,178,247,0.2)',
+				                                },
+				                            ],
+				                        },
+				                    },
+				                },
+				            },
+				        ],
+				    },
+				];
+				option = {
+				    color: color,
+				    tooltip: {
+				        show: false,
+				    },
+				    toolbox: {
+				        show: false,
+				    },
+				    series: seriesOption,
+				};
+				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;
+	}
+</style>

+ 89 - 0
src/views/bigdata/chart-kaoqin.vue

@@ -0,0 +1,89 @@
+<!-- **************************************NO.6 矿坑*************************************** -->
+<template>
+	<div class="chart-container">
+		<div id="pitKaoqin" style="width: 100%; height:23vh;">
+		</div>
+	</div>
+</template>
+
+<script>
+	import * as echarts from 'echarts';
+  import {bigFindAttend} from '@/api/bigdata'
+	export default {
+		name: 'pitKaoqin',
+		data() {
+			return {
+        source: [],
+				count: 0
+			}
+		},
+		mounted() {
+			// this.myEcharts()
+			this.bigFindAttend()
+
+		},
+
+		methods: {
+      bigFindAttend() {
+        bigFindAttend().then(res => {
+          this.myEcharts(res.data)
+        })
+      },
+			// 出处 http://192.144.199.210:8080/editor/index.html?chart_id=udduEFcFiEYEEj4Q
+
+			myEcharts(data) {
+
+
+				var chartDom = document.getElementById('pitKaoqin');
+				var myChart = echarts.init(chartDom);
+				var color = ['#02CDFF', '#62FBE7', '#7930FF','#ef5f9d','#ecb935'];
+				var option;
+				option = {
+
+				    color:color,
+				    tooltip : {
+				        trigger: 'item',
+				        formatter: "{b}: {c}"
+				    },
+				    toolbox: {
+				        show : true,
+
+				    },
+
+				    series : [
+				        {
+				            name:'考勤分析',
+				            type:'pie',
+				            roseType: true,
+				            radius : ['50%', '70%'],
+				            label: {
+				              show: true,
+				              formatter: "{b} {c}",
+							  textStyle: {
+							      fontSize: 10 ,
+
+							  }
+
+				            },
+				            data:data
+				        }
+				    ]
+				};
+				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;
+	}
+</style>

+ 92 - 0
src/views/bigdata/chart-pit.vue

@@ -0,0 +1,92 @@
+<!-- **************************************NO.6 矿坑*************************************** -->
+<template>
+	<div class="chart-container">
+		<div id="pitG1" style="width: 100%; height:23vh;">
+		</div>
+	</div>
+</template>
+
+<script>
+	import * as echarts from 'echarts';
+  import {getG1} from '@/api/bigdata'
+	export default {
+		name: 'pitG1',
+		data() {
+			return {
+        source: [],
+				count: 0
+			}
+		},
+		mounted() {
+			// this.myEcharts()
+			this.getG1()
+
+		},
+
+		methods: {
+      getG1() {
+        let that = this
+        getG1().then(res => {
+          this.source = res.data
+          console.log("联动车辆统计", res.data)
+          that.myEcharts()
+        })
+      },
+			// 出处 http://192.144.199.210:8080/editor/index.html?chart_id=udduEFcFiEYEEj4Q
+
+			myEcharts() {
+
+
+				var chartDom = document.getElementById('pitG1');
+				var myChart = echarts.init(chartDom);
+				var color = ['#02CDFF', '#62FBE7', '#7930FF','#ef5f9d','#ecb935'];
+				var option;
+				option = {
+
+				    color:color,
+				    tooltip : {
+				        trigger: 'item',
+				        formatter: "{b}: {c}"
+				    },
+				    toolbox: {
+				        show : true,
+
+				    },
+
+				    series : [
+				        {
+				            name:'业务警种',
+				            type:'pie',
+				            roseType: true,
+				            radius : ['50%', '70%'],
+				            label: {
+				              show: true,
+				              formatter: "{b} {c}",
+							  textStyle: {
+							      fontSize: 10 ,
+
+							  }
+
+				            },
+				            data:this.source
+				        }
+				    ]
+				};
+				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;
+	}
+</style>

+ 8 - 2
src/views/bigdata/tabbar.vue

@@ -1,7 +1,7 @@
 <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>
@@ -144,7 +144,13 @@
       zhxx() {
         let that = this
         getZhxx().then(resp => {
-          that.data_zhxx_data = [...resp.data.event, ...resp.data.data]
+          // that.data_zhxx_data = [...resp.data.event, ...resp.data.data]
+          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})
+          }
         })
       },
 

+ 5 - 0
src/views/datacenter.vue

@@ -99,6 +99,7 @@ export default {
   },
   mounted() {
     this.getResource()
+    this.bottomMenuList() //获取底部公共组件消息和任务
   },
   data() {
     return {
@@ -122,6 +123,10 @@ export default {
 
   methods: {
     /** ----------------------------------底部按钮公用组件开始------------------------------------- */
+    bottomMenuList() {
+      this.$refs.bottomMenu.selectTaskList()//获取任务列表
+      this.$refs.bottomMenu.selectMessageList()//获取消息列表
+    },
     showDialog(click) {
       if (click == 'eventLocation') {
         this.$refs.eventLocation.showEventLocation()

+ 22 - 22
src/views/eventdetailsdialog.vue

@@ -194,32 +194,32 @@
                                              @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>
+                                  <!--<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-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)">
@@ -2133,7 +2133,7 @@ export default {
     },
     /** 预览按钮操作 */
     preview(cameraParam) {
-      if(cameraParam.type=='大华'){
+      if(cameraParam.type=='1'){
         getDahuaVideoServer().then(newResponse => {
           console.log(newResponse)
           this.ws.detectConnectQt().then(res => {
@@ -2163,7 +2163,7 @@ export default {
             }
           })
         })
-      }else if(cameraParam.type=='海康'){
+      }else if(cameraParam.type=='0'){
         let that = this
         that.cameraVisible = true
         getHaiKangVideoServer({cameraCode:cameraParam.code}).then(newResponse => {

+ 2 - 2
src/views/firespread.vue

@@ -2081,7 +2081,7 @@
       },
       /** 预览按钮操作 */
       preview(cameraParam) {
-        if(cameraParam.type=='大华'){
+        if(cameraParam.type=='1'){
           getDahuaVideoServer().then(newResponse => {
             console.log(newResponse)
             this.ws.detectConnectQt().then(res => {
@@ -2111,7 +2111,7 @@
               }
             })
           })
-        }else if(cameraParam.type=='海康'){
+        }else if(cameraParam.type=='0'){
           let that = this
           that.cameraVisible = true
           getHaiKangVideoServer({cameraCode:cameraParam.code}).then(newResponse => {

+ 5 - 73
src/views/forest.vue

@@ -459,16 +459,8 @@
   import TVWall from '@/components/TVWall.vue' //电视墙弹窗
   import eventdetailsdialog from '@/views/eventdetailsdialog.vue' //事件详情弹窗
   import firespread from '@/views/firespread.vue' //事件详情弹窗
-
-  /** ----------------------------------摄像头预览开始------------------------------------- */
-  import {
-    getDahuaVideoServer
-  } from '@/api/dahua/dahua'
-  // import DHWs from '@/dahua/lib/DHWs'
   import Firespread from "./firespread";
 
-  /** ----------------------------------摄像头预览结束------------------------------------- */
-
   let echarts = require('echarts')
   export default {
     components: {
@@ -485,10 +477,6 @@
       firespread
     },
     created() {
-      /** ----------------------------------摄像头预览开始------------------------------------- */
-      // const DHWsInstance = DHWs.getInstance()
-      // this.ws = DHWsInstance
-      /** ----------------------------------摄像头预览结束------------------------------------- */
 
       /** ----------------------------------底部按钮公用组件开始------------------------------------- */
       window.showDialog = this.showDialog
@@ -509,7 +497,6 @@
       /** ----------------------------------weosocket开始------------------------------------- */
       // this.initWebSocket()
       /** ----------------------------------weosocket结束------------------------------------- */
-      this.selectTaskList() //获取任务
       setInterval(() => {
         if (this.calendarDay == this.getCurrentDataStr()) {
           this.getTodayEvents(this.getCurrentDataStr(), true);
@@ -521,6 +508,7 @@
           this.getSupermap(this.getCurrentDataStr(), true);
         }
       }, 10000)
+      this.bottomMenuList() //获取底部公共组件消息和任务
     },
     data() {
       return {
@@ -822,9 +810,6 @@
           }]
         })
       },
-      selectTaskList() {
-        this.$refs.bottomMenu.selectTaskList()
-      },
       getBaseInfo() {
         //左侧获取部门信息
         getBaseInfo().then(res => {
@@ -1192,6 +1177,10 @@
       /** ----------------------------------weosocket结束------------------------------------- */
 
       /** ----------------------------------底部按钮公用组件开始------------------------------------- */
+      bottomMenuList() {
+        this.$refs.bottomMenu.selectTaskList()//获取任务列表
+        this.$refs.bottomMenu.selectMessageList()//获取消息列表
+      },
       showDialog(click) {
         if (click == 'eventLocation') {
           this.$refs.eventLocation.showEventLocation()
@@ -1253,63 +1242,6 @@
         this.$refs.supermap.layerSwitchingList(urlList)
       },
       /** ----------------------------------底部按钮公用组件结束------------------------------------- */
-
-      /** ----------------------------------事件弹窗开始------------------------------------- */
-
-
-
-      /** ----------------------------------事件弹窗结束------------------------------------- */
-      /** ----------------------------------摄像头预览开始------------------------------------- */
-      alertLogin: function () {
-        this.$modal.msg('登录中....')
-      },
-      alertLoginSuccess: function () {
-        this.$modal.msgSuccess('登录成功!')
-      },
-      alertLoginFailed: function () {
-        this.$modal.msgError('登陆失败!')
-      },
-      alertReinstall: function () {
-        this.$modal.msgWarning('请重新安装客户端')
-      },
-      /** 预览按钮操作 */
-      preview(channelCode) {
-        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,
-                token: '',
-                https: 1
-              })
-              this.ws.on('loginState', (res) => {
-                this.isLogin = res
-                if (res) {
-                  this.alertLoginSuccess()
-                  this.activePanel = 'key2'
-                  this.realTimeVideoDialog(channelCode)
-                } else {
-                  this.alertLoginFailed()
-                }
-              })
-            } else { // 连接客户端失败
-              this.alertReinstall()
-            }
-          })
-        })
-      },
-      realTimeVideoDialog(cameraParams) { // 调用弹窗实时播放接口
-        if (!this.isLogin) {
-          this.$Message.info('正在登陆客户端,请稍等......')
-          return false
-        }
-        this.ws.openVideo(cameraParams)
-      }
-      /** ----------------------------------摄像头预览结束------------------------------------- */
     }
   }
 </script>

+ 472 - 0
src/views/leader.vue

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

+ 90 - 135
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>
@@ -135,7 +161,7 @@ import {
   selectKeyAreaList,
   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' //一体化公共底部菜单
@@ -178,9 +204,19 @@ export default {
   mounted() {
     this.selectDeviceType(-1)
     this.selectKeyAreaList()
+    this.bottomMenuList() //获取底部公共组件消息和任务
+    this.getTreeselect()
   },
   data() {
     return {
+      // 部门名称
+      deptName: undefined,
+// 部门树选项
+      deptOptions: undefined,
+      defaultProps: {
+        children: 'children',
+        label: 'label'
+      },
       iconCurrentIndex1: '-1',
       listCurrentIndex1: '-1',
       listCurrentIndex2: '-1',
@@ -219,7 +255,31 @@ export default {
       domId: 'dom1',
     }
   },
+  watch: {
+    // 根据名称筛选部门树
+    deptName(val) {
+      this.$refs.tree.filter(val)
+    }
+  },
   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) {
+      // this.findCameraByDept(data.id)
+      this.selectCameraByDeptId(data.id);
+    },
     selectKeyAreaList() {
       this.keyAreaList=[]
       //获取重点区域列表
@@ -253,6 +313,10 @@ export default {
       })
     },
     /** ----------------------------------底部按钮公用组件开始------------------------------------- */
+    bottomMenuList() {
+      this.$refs.bottomMenu.selectTaskList()//获取任务列表
+      this.$refs.bottomMenu.selectMessageList()//获取消息列表
+    },
     showDialog(click) {
       if (click == 'eventLocation') {
         this.$refs.eventLocation.showEventLocation()
@@ -314,112 +378,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
       //获取左侧动态感知设备
@@ -441,7 +399,6 @@ export default {
         }
 
         that.visuForestCloudCameraBOList = res.data.visuForestCloudCameraBOList
-        this.cameraChat()
         if (res.data.visuForestCloudCameraBOList != null && res.data.visuForestCloudCameraBOList
           .length > 0) {
           for (let i = 0; i < res.data.visuForestCloudCameraBOList.length; i++) {
@@ -485,8 +442,7 @@ export default {
               '<span>' +
               '                  <div class="d-l-con">' +
               '                  <div class="d-l-l-text">' +
-              '                  <h4>摄像头类型:' + res.data.visuForestCloudCameraBOList[i]
-                .cameraFactory + '</h4>' +
+              '                  <h4>摄像头类型:' + (res.data.visuForestCloudCameraBOList[i].cameraFactory=="1"?"大华":"海康") + '</h4>' +
               '                </div>' +
               '                </div>' +
               '                </span>' +
@@ -550,8 +506,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 = []
             }
@@ -578,8 +534,7 @@ export default {
               '<span>' +
               '                  <div class="d-l-con">' +
               '                  <div class="d-l-l-text">' +
-              '                  <h4>摄像头类型:' + res.data[i]
-                .cameraFactory + '</h4>' +
+              '                  <h4>摄像头类型:' + (res.data[i].cameraFactory=="1"?"大华":"海康") + '</h4>' +
               '                </div>' +
               '                </div>' +
               '                </span>' +
@@ -658,7 +613,7 @@ export default {
     },
     /** 预览按钮操作 */
     preview(cameraParam) {
-      if(cameraParam.type=='大华'){
+      if(cameraParam.type=='1'){
         getDahuaVideoServer().then(newResponse => {
           console.log(newResponse)
           this.ws.detectConnectQt().then(res => {
@@ -688,7 +643,7 @@ export default {
             }
           })
         })
-      }else if(cameraParam.type=='海康'){
+      }else if(cameraParam.type=='0'){
         let that = this
         that.cameraVisible = true
         getHaiKangVideoServer({cameraCode:cameraParam.code}).then(newResponse => {