Ver código fonte

资源可视化流程修改、摄像头厂家分辨

wang_xy 2 anos atrás
pai
commit
75b751d444

+ 1 - 0
src/api/components/supermap.js

@@ -33,6 +33,7 @@ export const iconList = {
   'sj-icon-map-qianshou': require('@/assets/icons/sj-icon-map/sj-icon-map-qianshou.png'),//签收
   'sj-icon-map-guidang': require('@/assets/icons/sj-icon-map/sj-icon-map-guidang.png'),//归档
   'sj-icon-map-banjie': require('@/assets/icons/sj-icon-map/sj-icon-map-banjie.png'),//办结
+  'sj-icon-map-queren': require('@/assets/icons/sj-icon-map/sj-icon-map-queren.png'),//确认
 
   //数据中心图标
   'sj-icon-map-centerdata-t-forest-checkpoint': require('@/assets/icons/sj-icon-map/centerdata/sj-icon-map-centerdata-t-forest-checkpoint.png'),//防火检查站

+ 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-resources/VisuForestEventCenterController/getNearEvent?longitude='+longitude+"&latitude="+latitude,
+    url: '/center-resources/VisuForestEventCenterController/getNearEvent?longitude='+longitude+"&latitude="+latitude+"&day="+day,
     method: 'get',
+    headers: {
+      loading: loading
+    },
   })
 }
 //获取附近摄像头

+ 22 - 0
src/assets/styles/base.scss

@@ -65,6 +65,7 @@ $eventStateColor-wb: #c2bc43;
 $eventStateColor-cf: #a23737;
 $eventStateColor-bj: #6ae08f;
 $eventStateColor-gd: #0369ef;
+$eventStateColor-qr: #20EF56;
 
 $eventStateColor-xsb: #11b57e;
 $eventStateColor-cb: #e63b4a;
@@ -2494,6 +2495,27 @@ div::-webkit-scrollbar {
         border-radius: .2rem;
       }
     }
+    //确认
+    .event-state-qr {
+      display: flex;
+      align-items: center;
+
+      i {
+        color: $eventStateColor-qr;
+        font-size: 1rem;
+        margin-left: -.5rem;
+      }
+
+      .event-list-state-qr {
+        width: fit-content;
+        background-color: $eventStateColor-qr;
+        color: $white;
+        padding:0.25rem 0.4rem;
+        margin-left: -.5rem;
+        margin-bottom: .2rem;
+        border-radius: .2rem;
+      }
+    }
 
     .bgt-info-name {
       color: $inBlue;

+ 64 - 57
src/components/TVWall.vue

@@ -2,28 +2,30 @@
   <div>
     <el-dialog title="电视墙" :visible.sync="TVWallVisible" v-if="TVWallVisible" customClass="TVWallCustomWidth"
                @close="cancelEventLocationShow()">
-	  <div class="forthis" style="width: 22%; position: absolute;left: 0;z-index: 9999999999999;">
-	  	<!-- <div class="this-title">
-	  		<span>林场</span>
-	  		<span>45</span>
-	  	</div> -->
-	  	<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;">
-        <!--视频窗口展示---大华-->
-        <div id="dom1" class="dom1"></div>
-        <!--视频窗口展示---海康-->
-        <div id="playWnd" class="playWnd" style="left: 0px; top: 0px;"></div>
-      </div>
+	  <!--<div class="forthis" style="width: 22%; position: absolute;left: 0;z-index: 9999999999999;">-->
+	  	<!--&lt;!&ndash; <div class="this-title">-->
+	  		<!--<span>林场</span>-->
+	  		<!--<span>45</span>-->
+	  	<!--</div> &ndash;&gt;-->
+	  	<!--<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>
 
@@ -249,8 +251,8 @@ export default {
         }],
       crtPosX: 0,
       crtPosY: 0,
-      crtWidth: 740,
-      crtHeight: 400,
+      crtWidth: 1150,
+      crtHeight: 700,
       domId: 'dom1',
       mixedVideoDisplayMode: 2,
       isShowTipe: true,
@@ -262,12 +264,14 @@ export default {
     }
   },
   created() {
+    const DHWsInstance = DHWs.getInstance()
+    this.ws = DHWsInstance
   },
   methods: {
     cancelEventLocationShow() {
       // this.activeName = 'tv'
       this.TVWallVisible = false
-      // this.destroy()
+      this.destroy()
 
       if (this.oWebControl != null) {
         this.oWebControl.JS_HideWnd()   // 先让窗口隐藏,规避可能的插件窗口滞后于浏览器消失问题
@@ -278,40 +282,38 @@ export default {
       }
     },
     showTVWall() {
-      let that=this;
+      // let that=this;
       /** ----------------------------------大华摄像头预览开始------------------------------------- */
-      // const DHWsInstance = DHWs.getInstance()
-      // this.ws = DHWsInstance
-      // 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()
+      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)
-      /** ----------------------------------海康摄像头预览结束------------------------------------- */
+      // tvCameraList().then(response => {
+      //   this.cameraList=response.data
+      // })
+      // that.initPlugin()
+      // setTimeout(function() {
+      //   that.playhk();
+      // }, 5000)
+      // /** ----------------------------------海康摄像头预览结束------------------------------------- */
       this.TVWallVisible = true
     },
     /** ----------------------------------大华摄像头预览开始------------------------------------- */
@@ -339,6 +341,10 @@ export default {
                 loginPort: newResponse.loginPort,
                 userName: newResponse.userName,
                 userPwd: newResponse.userPwd,
+                // loginIp: '192.168.100.100',
+                // loginPort: 8314,
+                // userName: 'system',
+                // userPwd: 'Admin@123',
                 token: '',
                 https: 1
               })
@@ -362,6 +368,7 @@ export default {
     },
 
     create(tvListJson) { // 调用创建控件接口
+      debugger
       let _this = this
       const params = [
         {
@@ -372,7 +379,7 @@ export default {
             'splitNum': 1,
             'channelList': [
               {
-                'channelId': '8ORBqXFlA1D77U45SM1ROC'
+                'channelId': ''
               }
             ]
           },

+ 204 - 46
src/components/eventLocation.vue

@@ -77,6 +77,12 @@
                             归档
                           </div>
                         </div>
+                        <div v-if="item.eventStatusValue=='forest_event_status_7'" class="event-state-qr">
+                          <i class="el-icon-caret-left"></i>
+                          <div class="event-list-state-qr">
+                            确认
+                          </div>
+                        </div>
                         <div class="bgt-info-name">{{ item.reportor }} {{ item.eventName }}</div>
                         <div class="bgt-info-place">
                           <ul>
@@ -315,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) {
@@ -351,6 +357,9 @@ export default {
             } else if (that.eventList[i].eventStatusValue == 'forest_event_status_6') {
               markersMap.click = 'showEventDialog'
               markersMap.icon = 'sj-icon-map-guidang'
+            } else if (that.eventList[i].eventStatusValue == 'forest_event_status_7') {
+              markersMap.click = 'showEventDialog'
+              markersMap.icon = 'sj-icon-map-queren'
             }
             markersMap.parameter = that.eventList[i].eventCode
             markersMap.lng = that.eventList[i].longitude
@@ -393,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(() => {
@@ -436,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
               }
@@ -467,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>' +
@@ -489,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)
@@ -520,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: 1
+              })
+              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) { // 调用弹窗实时播放接口
@@ -571,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') {
@@ -767,6 +924,7 @@ export default {
     /** ----------------------------------海康摄像头预览结束------------------------------------- */
   }
 }
+
 // 推送消息
 function cbIntegrationCallBack(oData) {
   console.log(JSON.stringify(oData.responseMsg))

+ 25 - 16
src/components/supermap.vue

@@ -98,6 +98,7 @@ import {
   getSuperMap,
   iconList
 } from '@/api/components/supermap.js'
+import { selectConfigKey } from "@/api/system/config";
 // import {setToken} from '../plugins/auth'
 import modal from '@/plugins/modal'
 
@@ -129,7 +130,8 @@ export default {
       heatMapLayer: [], //火灾蔓延图层Layer
       isheatPlotting: false,//火灾蔓延
       heat_lat: 0, //火灾蔓延经纬度
-      heat_lng: 0 //火灾蔓延经纬度
+      heat_lng: 0, //火灾蔓延经纬度
+      host:''
     }
   },
   watch: {
@@ -199,6 +201,7 @@ export default {
     }
   },
   mounted() {
+    this.getspuerMapHost()
     this.initMap()
     //添加画图的提示信息
     window.L.drawLocal.draw.toolbar = {
@@ -702,6 +705,7 @@ export default {
           return
         }
         getSuperMap(this.codes).then(resp => {
+
           let mapList = resp.data
           if (mapList != null && mapList.length > 0) {
             let url = mapList[0].url
@@ -1261,24 +1265,29 @@ export default {
     PlottingDrawCancel: function() {
       this.plottingdrawControl.handler.disable()
     },
+    getspuerMapHost(){
+      selectConfigKey('superMap.iserver.plot').then(res => {
+        this.host = res.data;
+      })
+    },
     dynamicPlotting: function() {
       setTimeout(() => {
-        var host = 'https://iserver.supermap.io'
-        var serverUrl = host + '/iserver/services/plot-jingyong/rest/plot/'
+          var host = this.host
+          var serverUrl = host + '/iserver/services/plot-jingyong/rest/plot/'
 
-        var me = this
-        this.plottingLayer = window.L.supermap.plotting.plottingLayer('plot',
-          serverUrl)
-        this.plottingLayer.spatialAnalystUrl =
-          host + '/iserver/services/spatialanalyst-sample/restjsr/spatialanalyst'
-        this.plottingLayer.addTo(this.map)
-        this.plottingdrawControl = window.L.supermap.plotting.drawControl(this
-          .plottingLayer)
-        this.plottingdrawControl.addTo(this.map)
-        var editControl = window.L.supermap.plotting.editControl()
-        editControl.addTo(this.map)
-        window.L.supermap.plotting.initPlotPanel('plotPanel', serverUrl, this
-          .plottingdrawControl)
+          var me = this
+          this.plottingLayer = window.L.supermap.plotting.plottingLayer('plot',
+            serverUrl)
+          this.plottingLayer.spatialAnalystUrl =
+            host + '/iserver/services/spatialanalyst-sample/restjsr/spatialanalyst'
+          this.plottingLayer.addTo(this.map)
+          this.plottingdrawControl = window.L.supermap.plotting.drawControl(this
+            .plottingLayer)
+          this.plottingdrawControl.addTo(this.map)
+          var editControl = window.L.supermap.plotting.editControl()
+          editControl.addTo(this.map)
+          window.L.supermap.plotting.initPlotPanel('plotPanel', serverUrl, this
+            .plottingdrawControl)
       }, 2000)
     }
     /** ----------------------------------动态绘制结束------------------------------------- */

+ 14 - 14
src/components/vBottomMenu.vue

@@ -197,9 +197,9 @@
 				<div class="pulse"></div>
 				<div class="pulse-big"></div>
 			</div>
-			<el-badge type="primary">
-				<el-button size="small" icon="el-icon-bell" @click="updateAlertFalse">警报</el-button>
-			</el-badge>
+			<!--<el-badge type="primary">-->
+				<!--<el-button size="small" icon="el-icon-bell" @click="updateAlertFalse">警报</el-button>-->
+			<!--</el-badge>-->
 			<el-badge type="warning">
 				<el-button size="small" icon="el-icon-refresh-right" @click="refresh">刷新</el-button>
 			</el-badge>
@@ -447,17 +447,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',

+ 234 - 88
src/views/eventdetailsdialog.vue

@@ -158,7 +158,7 @@
                                 </el-button>
                               </div>
                               <div class="z-info-btm-grp-right">
-                                <el-button size="small" icon="el-icon-mic">会议
+                                <el-button size="small" icon="el-icon-mic" @click="joinMeeting()">会议
                                 </el-button>
                               </div>
                             </div>
@@ -170,8 +170,8 @@
                                 <div style="text-align:left">
                                   <el-button size="small"
                                              icon="el-icon-s-flag"
-                                             @click="updateCentereventTEventcatalogueStatus('qs',false)">
-                                    签收
+                                             @click="updateCentereventTEventcatalogueStatus('qr',true)">
+                                    确认
                                   </el-button>
                                   <el-button size="small"
                                              icon="el-icon-question"
@@ -187,18 +187,39 @@
                                 <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>
+                              <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-warning"
-                                             @click="updateCentereventTEventcatalogueStatus('cf',false)">
-                                    重复
+                                             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)">
@@ -322,15 +343,18 @@
             />
           </el-select>
         </el-form-item>
-        <el-form-item label="联系人" v-if="eventStatusButton=='qs'">
-          <el-select multiple collapse-tags v-model='sendUserFegin' placeholder='请选择联系人!' clearable>
-            <el-option
-              v-for="item in userFeginList"
-              :label="item.nickName"
-              :value="item.phonenumber"
-            />
-          </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>
@@ -385,9 +409,16 @@
               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%">
+              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>
@@ -395,7 +426,7 @@
               </el-table-column>
               <el-table-column prop="name" label="姓名">
                 <template slot-scope="scope">
-                  <el-input v-model="scope.row.name" placeholder="姓名"></el-input>
+                  <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="岗位">
@@ -405,7 +436,7 @@
               </el-table-column>
               <el-table-column prop="telphone" label="手机号码">
                 <template slot-scope="scope">
-                  <el-input v-model="scope.row.telphone" placeholder="手机号码"></el-input>
+                  <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="操作">
@@ -416,18 +447,18 @@
                     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>
+                  <!--<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="closeResponsibilityDialog">确定
+        <el-button size="mini" type="primary" class="fr_button" @click="addResponsibilityDialog">确定
         </el-button>
         <div style="clear: both;"></div>
       </el-form>
@@ -943,6 +974,9 @@
         <div id="playWnd" class="playWnd" style="left: 0px; top: 0px;"></div>
       </div>
     </el-dialog>
+    <el-dialog title="人员选择" :visible.sync="showFindUserByDept" width="40%">
+      <findUserByDept v-if="showFindUserByDept" ref="findUserByDept" :deptId="iconCurrentIndex" @addSelection="addSelection"></findUserByDept>
+    </el-dialog>
   </div>
 </template>
 
@@ -954,6 +988,7 @@ import vBottomMenu from '@/components/vBottomMenu.vue' //一体化公共底部
 import eventLogUpload from '@/views/eventLogUpload.vue' //日志上传文件
 import areaSupermap from '@/components/supermap'//区域标记地图
 import TcPlayer from '@/components/TcPlayer' //视频预览
+import findUserByDept from '@/views/findUserByDept' //责任人选择弹框
 import {
   getEventDetail,
   sendEventLog,
@@ -977,7 +1012,14 @@ import {
 import {
   getHaiKangVideoServer
 } from '@/api/haikang/haikang'
-
+import {
+  hasConferences,
+  createConferences, getUserInfo
+} from "@/api/meeting"
+import {
+  getDahuaVideoServer
+} from '@/api/dahua/dahua'
+import DHWs from '@/dahua/lib/DHWs'
 export default {
   dicts: ['task_source'],
   watch: {
@@ -991,12 +1033,15 @@ export default {
     supermapDialog,
     eventLogUpload,
     areaSupermap,
-    TcPlayer
+    TcPlayer,
+    findUserByDept
   },
   data() {
     return {
+      showFindUserByDept: false,//责任人选择框
       //海康
       cameraTitle: '',
+      cameraCode:'',
       cameraVisible: false,
       initCount: 0,
       pubKey: '',
@@ -1132,6 +1177,7 @@ export default {
       dataStatus: null,//事件流程按钮
       deptId: null,//事件流程部门
       eventCode: null,
+      eventName: null,
       longitude: null,
       latitude: null,
       eventLog: null,
@@ -1196,13 +1242,19 @@ export default {
       ],
       resourcesListCheck: [],
       //文本域
-      feedback: ''
+      feedback: '',
 
     }
   },
   props: {
     calendarDay: null//首页日历选择
   },
+  created() {
+    /** ----------------------------------摄像头预览开始------------------------------------- */
+    const DHWsInstance = DHWs.getInstance()
+    this.ws = DHWsInstance
+    /** ----------------------------------摄像头预览结束------------------------------------- */
+  },
   methods: {
     /************************************责任制-开始****************************************/
     addLine: function() {//添加负责人行数
@@ -1217,6 +1269,20 @@ export default {
       //添加新的行数
       this.dutysystemTableData.push(newValue)
     },
+    finUserByDept: function(){ //根据部门选择责任人
+      this.showFindUserByDept=true;
+    },
+    addSelection: function(userList){
+      for (let i in this.dutysystemTableData) {
+        for (let j in userList) {
+          if(this.dutysystemTableData[i].name == userList[j].name && this.dutysystemTableData[i].telphone == userList[j].telphone){
+            userList.splice(j, 1);
+          }
+        }
+      }
+      this.dutysystemTableData = this.dutysystemTableData.concat(userList);
+      this.showFindUserByDept=false;
+    },
     handleDelete: function(index, row) {//删除负责人行数
       if (row.id != null && row.id != '') {
         let param = { ids: row.id }
@@ -1255,8 +1321,8 @@ export default {
           }]
         }
       })
-
     },
+
     showResponsibility() {//弹出责任制弹窗
       let param = { eventCode: this.eventCode }
       centereventtdepteventList(param).then(res => {
@@ -1271,6 +1337,31 @@ export default {
       this.iconCurrentIndex = ''
       this.showResponsibilityDialog = 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位手机号码正则
+      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}
+      dutysystemAdd(param).then(res => {
+        this.$message.success(`保存成功!`)
+        this.dutysystemSelect(this.iconCurrentIndex, this.dutysystemDeptName, this.depteventId);
+        this.closeResponsibilityDialog();
+      })
+    },
     /************************************责任制-结束****************************************/
     showheatPlotting() {
       // if (!this.$refs.supermapDialog.isheatPlotting) {
@@ -1353,7 +1444,9 @@ export default {
                 markersMap.icon = 'camera'
                 if (res.data[i].cameraCode != null) {
                   markersMap.click = 'preview'
-                  markersMap.parameter = res.data[i].cameraCode
+                  // markersMap.parameter = res.data[i].cameraCode
+                  markersMap.parameter = {code:res.data.data[i].cameraCode,
+                    type:res.data.data[i].cameraFactory}
                 }
               }
               markersMap.lng = res.data[i].longitude
@@ -1575,12 +1668,6 @@ export default {
               that.guanLianYuAnList = res.data
             }
           })
-          await userFeginlist().then(res => {
-            //联系人列表
-            if (res.code == 200) {
-              that.userFeginList = res.data
-            }
-          })
           await selectByeventCode(that.eventCode).then(res => {
             //签收部门
             if (res.code == 200) {
@@ -1589,6 +1676,8 @@ export default {
             }
           })
           that.showEventConfirm = true
+        } else if (eventStatus == 'qr') {//确认
+          that.eventConfirmTitle = '事件确认'
         } else if (eventStatus == 'wb') {//误报
           that.eventConfirmTitle = '事件误报'
           await selectByeventCode(that.eventCode).then(res => {
@@ -1676,6 +1765,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(!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
+          }
+
           //事件处理流程--归档
           let param = {
             deptId: that.deptId,
@@ -1693,7 +1806,8 @@ export default {
               that.refreshEvent(that.eventCode)
               that.cancelEventConfirm_send()
               that.showEventConfirm_gd = false
-              that.$emit('getEventList', that.calendarDay)
+              that.$emit('getEventList', that.calendarDay,10,1)
+              that.$emit('getSupermap', that.calendarDay)
             }
           })
         } else {
@@ -1725,8 +1839,10 @@ export default {
             eventType: that.sendEventType,
             id: that.eventId,
             czlx: '',
+            cameraCode: that.cameraCode,
             fireRadius: that.sendHuoZaiBanJing,
-            reserve: that.sendGuanLianYuAn
+            reserve: that.sendGuanLianYuAn,
+            fileList:eventStatus == 'qs'?this.eventLogList[this.eventLogList.length-1].fileVOs:[]
           }
           updateCentereventTEventcatalogueStatus(param).then(res => {
             if (res.code == 200) {
@@ -1734,7 +1850,8 @@ export default {
               that.refreshEvent(that.eventCode)
               that.cancelEventConfirm_send()
               that.showEventConfirm = false
-              that.$emit('getEventList', that.calendarDay)
+              that.$emit('getEventList', that.calendarDay,10,1)
+              that.$emit('getSupermap', that.calendarDay)
             }
           })
         }
@@ -1781,6 +1898,7 @@ export default {
         that.eventId = res.data.catalogue.id
         that.longitude = res.data.catalogue.longitude
         that.latitude = res.data.catalogue.latitude
+        that.eventName = res.data.catalogue.eventName
         let markersMap = {
           lng: 124.59,
           lat: 43.02,
@@ -1803,6 +1921,8 @@ export default {
           markersMap.icon = 'sj-icon-map-banjie'
         } else if (res.data.catalogue.eventStatusValue == 'forest_event_status_6') {
           markersMap.icon = 'sj-icon-map-guidang'
+        } else if (res.data.catalogue.eventStatusValue == 'forest_event_status_7') {
+          markersMap.icon = 'sj-icon-map-queren'
         }
         markersMap.lng = res.data.catalogue.longitude
         markersMap.lat = res.data.catalogue.latitude
@@ -1816,13 +1936,14 @@ 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;
           let markersMap = {
             lng: 124.59,
             lat: 43.02,
             icon: 'camera',
             bindPopupHtml: '',
             click: 'preview',
-            parameter: res.data.centermonitorTCamera.cameraCode,
+            parameter: {code:res.data.centermonitorTCamera.cameraCode,type:res.data.centermonitorTCamera.cameraFactory},
             keepBindPopup: false,
             isAggregation: false,
             radius: 0
@@ -1861,6 +1982,7 @@ export default {
         that.eventId = res.data.catalogue.id
         that.latitude = res.data.catalogue.latitude
         that.longitude = res.data.catalogue.longitude
+        that.eventName = res.data.catalogue.eventName
         let markersMap = {
           lng: 124.59,
           lat: 43.02,
@@ -1883,6 +2005,8 @@ export default {
           markersMap.icon = 'sj-icon-map-banjie'
         } else if (res.data.catalogue.eventStatusValue == 'forest_event_status_6') {
           markersMap.icon = 'sj-icon-map-guidang'
+        } else if (res.data.catalogue.eventStatusValue == 'forest_event_status_7') {
+          markersMap.icon = 'sj-icon-map-queren'
         }
         markersMap.lng = res.data.catalogue.longitude
         markersMap.lat = res.data.catalogue.latitude
@@ -1905,7 +2029,7 @@ export default {
             icon: 'camera',
             bindPopupHtml: '',
             click: 'preview',
-            parameter: res.data.centermonitorTCamera.cameraCode,
+            parameter: {code:res.data.centermonitorTCamera.cameraCode,type:res.data.centermonitorTCamera.cameraFactory},
             keepBindPopup: false,
             isAggregation: false,
             radius: 0
@@ -2009,49 +2133,48 @@ export default {
       }
     },
     /** 预览按钮操作 */
-    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: 1
+              })
+              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) { // 调用弹窗实时播放接口
@@ -2187,11 +2310,34 @@ export default {
         }
       })
     },
-//RSA加密
+    //RSA加密
     setEncrypt(value) {
       var encrypt = new JSEncrypt()
       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);
+        }
+      });
     }
     /** ----------------------------------海康摄像头预览结束------------------------------------- */
   }

+ 113 - 0
src/views/findUserByDept.vue

@@ -0,0 +1,113 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="姓名" prop="nickName">
+        <el-input
+          v-model="queryParams.nickName"
+          placeholder="姓名"
+        />
+      </el-form-item>
+      <el-form-item label="手机号" prop="phonenumber">
+        <el-input
+          v-model="queryParams.phonenumber"
+          placeholder="手机号"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="getList">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="addSelection">确认</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-table v-loading="loading" :data="userList"  @selection-change="handleSelectionChange">
+      <el-table-column align="center" type="selection" width="60"></el-table-column>
+      <el-table-column label="姓名" align="center" prop="nickName"></el-table-column>
+      <el-table-column label="岗位" align="center" prop="postName" width="150"></el-table-column>
+      <el-table-column label="手机号" align="center" prop="phonenumber"></el-table-column>
+    </el-table>
+  </div>
+</template>
+
+<script>
+  import {userFeginlist} from "@/api/forest";
+
+  export default {
+    name: "findUserByDept",
+    data() {
+      return {
+        // 遮罩层
+        loading: true,
+        // 选中数组
+        ids: [],
+        // 非单个禁用
+        single: true,
+        // 非多个禁用
+        multiple: false,
+        // 显示搜索条件
+        showSearch: true,
+        // 总条数
+        total: 0,
+        // 可视化前端配置表表格数据
+        userList: [],
+        // 弹出层标题
+        title: "",
+        // 是否显示弹出层
+        open: false,
+        // 查询参数
+        queryParams: {
+          deptId: null,
+          nickName:null,
+          phonenumber:null
+        },
+        // 表单参数
+        form: {},
+        resUser:[],
+      };
+    },
+    props: {
+      deptId: {
+        type: String,
+        required: true
+      },
+    },
+    created() {
+      this.queryParams.deptId = this.deptId;
+      this.getList();
+    },
+    methods: {
+      /** 查询可视化前端配置表列表 */
+      getList() {
+        this.loading = true;
+        userFeginlist(this.queryParams).then(response => {
+          this.userList = response.data;
+          this.loading = false;
+        });
+      },
+      /** 重置按钮操作 */
+      resetQuery() {
+        this.queryParams.nickName=null;
+        this.queryParams.phonenumber=null;
+        this.getList();
+      },
+      // 多选框选中数据
+      handleSelectionChange(selection) {
+        this.resUser = [];
+        for (let i in selection){
+          const res = {};
+          res.id = '';
+          res.dept = '';
+          res.depteventId = '';
+          res.name = selection[i].nickName;
+          res.post = selection[i].postName;
+          res.telphone = selection[i].phonenumber;
+          this.resUser.push(res);
+        }
+      },
+      //数据提交到父页
+      addSelection(){
+        this.$emit("addSelection",this.resUser);
+      }
+    }
+  };
+</script>

Diferenças do arquivo suprimidas por serem muito extensas
+ 1625 - 1504
src/views/firespread.vue


Diferenças do arquivo suprimidas por serem muito extensas
+ 864 - 913
src/views/forest.vue


+ 55 - 51
src/views/monitor.vue

@@ -149,7 +149,7 @@ import {
 import {
   getHaiKangVideoServer
 } from '@/api/haikang/haikang'
-// import DHWs from '@/dahua/lib/DHWs'
+import DHWs from '@/dahua/lib/DHWs'
 
 /** ----------------------------------摄像头预览结束------------------------------------- */
   // import echarts from 'echarts'
@@ -165,8 +165,8 @@ export default {
   },
   created() {
     /** ----------------------------------摄像头预览开始------------------------------------- */
-    // const DHWsInstance = DHWs.getInstance()
-    // this.ws = DHWsInstance
+    const DHWsInstance = DHWs.getInstance()
+    this.ws = DHWsInstance
     /** ----------------------------------摄像头预览结束------------------------------------- */
 
     /** ----------------------------------底部按钮公用组件开始------------------------------------- */
@@ -215,7 +215,8 @@ export default {
       indentleft: '',
       indentright: '',
       indentText: '收起左右栏',
-      indentdisabled: false
+      indentdisabled: false,
+      domId: 'dom1',
     }
   },
   methods: {
@@ -455,7 +456,8 @@ export default {
               isAggregation: false
             }
             if (res.data.visuForestCloudCameraBOList[i].channelCode != null) {
-              markersMap.parameter = res.data.visuForestCloudCameraBOList[i].cameraCode
+              markersMap.parameter = {code:res.data.visuForestCloudCameraBOList[i].cameraCode,
+                type:res.data.visuForestCloudCameraBOList[i].cameraFactory}
             } else {
               markersMap.parameter = []
             }
@@ -483,8 +485,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>' +
@@ -535,7 +536,6 @@ export default {
       selectCameraByDeptId(depId).then(res => {
         //根据设备类型查看列表
         that.visuForestCloudCameraBOList = res.data
-
         if (res.data != null && res.data.length > 0) {
           for (let i = 0; i < res.data.length; i++) {
             let markersMap = {
@@ -549,7 +549,8 @@ export default {
               isAggregation: false
             }
             if (res.data[i].channelCode != null) {
-              markersMap.parameter = res.data[i].cameraCode
+              markersMap.parameter = {code:res.data.data[i].cameraCode,
+                type:res.data.data[i].cameraFactory}
             } else {
               markersMap.parameter = []
             }
@@ -576,8 +577,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>' +
@@ -655,45 +655,48 @@ export default {
       }
     },
     /** 预览按钮操作 */
-    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)
-        setTimeout(function() {
-          that.playhk(newResponse.data.channelCode)
-        }, 5000)
-      })
+    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: 1
+              })
+              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() {
+            that.playhk(newResponse.data.channelCode)
+          }, 5000)
+        })
+      }
 
     },
     realTimeVideoDialog(cameraParams) { // 调用弹窗实时播放接口
@@ -701,7 +704,8 @@ export default {
         this.$Message.info('正在登陆客户端,请稍等......')
         return false
       }
-      this.ws.openVideo(cameraParams)
+      const params = [cameraParams];
+      this.ws.openVideo(params)
     },
     /** ----------------------------------摄像头预览结束------------------------------------- */