瀏覽代碼

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

wangzhe 2 年之前
父節點
當前提交
c3911e5aff
共有 5 個文件被更改,包括 323 次插入8 次删除
  1. 19 0
      src/api/forest.js
  2. 16 0
      src/api/monitor.js
  3. 131 1
      src/components/TVWall.vue
  4. 155 3
      src/views/eventdetailsdialog.vue
  5. 2 4
      src/views/forest.vue

+ 19 - 0
src/api/forest.js

@@ -298,3 +298,22 @@ export function eventHandling(id,eventCode) {
     data: {id:id,eventCode:eventCode,dataStatus:"1"}
   })
 }
+
+//
+export function initByCameras(param) {
+  return request({
+    url: '/center-monitor/TVWallController/initByCameras',
+    method: 'get',
+    params:param
+  })
+
+}
+
+// 会议添加联系人并发送短信
+export function sendMessage(param) {
+  return request({
+    url: '/center-agriculture/VisuForestCloudMapController/sendMeetingMsgAgriculture',
+    method: 'post',
+    data:param
+  })
+}

+ 16 - 0
src/api/monitor.js

@@ -22,3 +22,19 @@ export function selectKeyAreaList() {
     method: 'get',
   })
 }
+
+
+//转到固定点位
+export function rotation(lng,lat,list) {
+  // lng = '124.41986560821533';
+  // lat = '43.08817137032747';
+  return request({
+    url: '/center-fire/VisuForestMonitorCenterController/rotation',
+    method: 'post',
+    data: {
+      lng: lng,
+      lat: lat,
+      list: list
+    }
+  })
+}

+ 131 - 1
src/components/TVWall.vue

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

+ 155 - 3
src/views/eventdetailsdialog.vue

@@ -37,6 +37,7 @@
                    </div> -->
                 <!-- 底部工具栏end -->
                 <div class="fire-m">
+                  <el-button size="small" icon="el-icon-s-grid" @click="showTVWallDiaLog()">火点联动</el-button>
                   <el-button size="small" icon="el-icon-upload" @click="showheatPlotting()">火灾蔓延
                   </el-button>
                 </div>
@@ -139,7 +140,7 @@
                                 </el-button>
                               </div>
                               <div class="z-info-btm-grp-right">
-                                <el-button size="small" icon="el-icon-mic" @click="joinMeeting()">会议
+                                <el-button size="small" icon="el-icon-mic" @click="Meeting()">会议
                                 </el-button>
                               </div>
                             </div>
@@ -429,6 +430,84 @@
         <div style="clear: both;"></div>
       </el-form>
     </el-dialog>
+    <!--    会议弹窗  start -->
+    <el-dialog title="视频会议" :visible.sync="showMeetingMsgDialog" v-if="showMeetingMsgDialog" width="65%"
+               @close="closeMeetingMsgDialog()">
+      <el-form label-width="1500px">
+        <div class="bottom">
+          <!-- 左侧菜单栏 -->
+          <div class="bottomLeft">
+            <div class="leftItem d-l-con padding-box nowrap" v-for="(item,index) in depteventList">
+              <div class="bgt-info">
+                <div class="bgt-info-name" :class="{on:iconCurrentIndex==item.deptId}"
+                     @click="dutysystemSelect(item.deptId,item.deptName,item.id)">{{ item.deptName }}
+                </div>
+              </div>
+            </div>
+          </div>
+          <!-- 左侧菜单栏对应的右侧的内容 -->
+          <div class="bottomRight" ref="wrapper">
+            <el-button
+              size="mini"
+              type="danger"
+              v-if="depteventId!=null&&depteventId!=''"
+              @click="addLine">添加
+            </el-button>
+            <el-button
+              size="mini"
+              type="danger"
+              v-if="depteventId!=null&&depteventId!=''"
+              @click="finUserByDept">选择
+            </el-button>
+            <el-table
+              :data="dutysystemTableData"
+              style="width: 100%"
+              :rules="rules">
+              <el-table-column prop="id" label="主键" v-if="false">
+                <template slot-scope="scope" hidden>
+                  <el-input v-model="scope.row.id" readonly placeholder="主键"></el-input>
+                </template>
+              </el-table-column>
+              <el-table-column prop="name" label="姓名">
+                <template slot-scope="scope">
+                  <el-input v-model="scope.row.name" placeholder="姓名" οninput="value=value.replace(/^[\u4e00-\u9fa5]{2,4}$/,'')"></el-input>
+                </template>
+              </el-table-column>
+              <el-table-column prop="post" label="岗位">
+                <template slot-scope="scope">
+                  <el-input v-model="scope.row.post" placeholder="岗位"></el-input>
+                </template>
+              </el-table-column>
+              <el-table-column prop="telphone" label="手机号码">
+                <template slot-scope="scope">
+                  <el-input v-model="scope.row.telphone" placeholder="手机号码" οninput="value=value.replace(/^((13[0-9])|(14[5-9])|(15([0-3]|[5-9]))|(16[6-7])|(17[1-8])|(18[0-9])|(19[1|3])|(19[5|6])|(19[8|9]))\d{8}$/,'')"></el-input>
+                </template>
+              </el-table-column>
+              <el-table-column prop="bookbuytime" label="操作">
+                <template slot-scope="scope">
+                  <el-button
+                    size="mini"
+                    type="danger"
+                    icon="el-icon-delete"
+                    @click="handleDelete(scope.$index, scope.row)">删除
+                  </el-button>
+                  <!--<el-button-->
+                  <!--size="mini"-->
+                  <!--type="danger"-->
+                  <!--icon="el-icon-save"-->
+                  <!--@click="handleSave(scope.$index, scope.row)">保存-->
+                  <!--</el-button>-->
+                </template>
+              </el-table-column>
+            </el-table>
+          </div>
+        </div>
+        <el-button size="mini" type="primary" class="fr_button" @click="sendMsg">发送短信
+        </el-button>
+        <div style="clear: both;"></div>
+      </el-form>
+    </el-dialog>
+    <!--    会议弹窗  end   -->
     <el-dialog title="火险报告" :visible.sync="showEventConfirm_gd" v-if="showEventConfirm_gd" width="100%"
                class="top-dialog"
                @close="cancelEventConfirm_gd()">
@@ -943,11 +1022,13 @@
     <el-dialog title="人员选择" :visible.sync="showFindUserByDept" width="40%">
       <findUserByDept v-if="showFindUserByDept" ref="findUserByDept" :deptId="iconCurrentIndex" @addSelection="addSelection"></findUserByDept>
     </el-dialog>
+    <TVWall ref="TVWall"></TVWall>
   </div>
 </template>
 
 <script>
 import html2canvas from 'html2canvas'//截图组件
+import TVWall from '@/components/TVWall.vue' //电视墙弹窗
 import supermapDialog from '@/components/supermap' //超图
 import vheader from '@/components/v-header.vue' //一体化共用头部
 import vBottomMenu from '@/components/vBottomMenu.vue' //一体化公共底部菜单
@@ -970,8 +1051,10 @@ import {
   dutysystemList,
   dutysystemAdd,
   dutysystemRemove,
+  sendMessage,
   userFeginlist,
-  eventHandling
+  eventHandling,
+  initByCameras
 } from '@/api/forest'
 import {
   treeselectAll as deptTreeselect
@@ -998,6 +1081,7 @@ export default {
   },
   components: {
     vheader,
+    TVWall,
     vBottomMenu,
     supermapDialog,
     eventLogUpload,
@@ -1156,6 +1240,7 @@ export default {
       visuForestCloudYuAnBo: null,
       eventDialog: false,
       showResponsibilityDialog: false,//责任制弹窗
+      showMeetingMsgDialog: false,//发送会议短信弹窗
       depteventList: [],//责任制部门列表
       iconCurrentIndex: '',
       dutysystemDeptName: '',
@@ -1228,6 +1313,10 @@ export default {
   },
   methods: {
     /************************************责任制-开始****************************************/
+    //初始化责任制数据列表
+    initDutysystemTableData(){
+      this.dutysystemTableData = [];
+    },
     addLine: function() {//添加负责人行数
       var newValue = {
         id: '',//主键
@@ -1254,6 +1343,27 @@ export default {
       this.dutysystemTableData = this.dutysystemTableData.concat(userList);
       this.showFindUserByDept=false;
     },
+    showTVWallDiaLog() {
+      this.initByCameras()
+      // this.$refs.TVWall.showTVWall();
+
+    },
+    initByCameras()
+    {
+      const params=Object.assign({})
+      params.longitude=this.longitude;
+      params.latitude=this.latitude;
+      params.type='2'
+      initByCameras(params).then(res=>
+      {
+        this.$refs.TVWall.showTVWall1(this.longitude,this.latitude,res.data);
+        this.$refs.supermap.isEditableLayers = false
+        this.$refs.bottomMenu.showChild = false
+        this.$refs.bottomMenu.showBanChild = false
+        this.$refs.bottomMenu.showChangChild = false
+      })
+
+    },
     handleDelete: function(index, row) {//删除负责人行数
       if (row.id != null && row.id != '') {
         let param = { ids: row.id }
@@ -1308,6 +1418,13 @@ export default {
       this.iconCurrentIndex = ''
       this.showResponsibilityDialog = false
     },
+    closeMeetingMsgDialog() {//会议弹窗关闭
+      this.dutysystemTableData = []
+      this.dutysystemDeptName = ''
+      this.depteventId = ''
+      this.iconCurrentIndex = ''
+      this.showMeetingMsgDialog = false
+    },
     addResponsibilityDialog() {//责任制保存
       let reg_user = /^[\u4e00-\u9fa5]{2,4}$/;    //2-4个中文字符正则
       let reg_tel = /^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/;    //11位手机号码正则
@@ -1353,6 +1470,7 @@ export default {
         }
       })
     },
+
     updateYjYuAn() {
       if(this.eventStatusValue=='forest_event_status_1'){
         this.$message.error(`未签收事件无法修改预案信息,请先签收!`)
@@ -2307,13 +2425,47 @@ export default {
     },
     /** ----------------------------------海康摄像头预览结束------------------------------------- */
     /** ----------------------------------视频会议开始------------------------------------- */
+    sendMsg() {// 视频会议发送短信
+      let reg_user = /^[\u4e00-\u9fa5]{2,4}$/;    //2-4个中文字符正则
+      let reg_tel = /^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/;    //11位手机号码正则
+      for(let i in this.dutysystemTableData){
+        if(!reg_user.test(this.dutysystemTableData[i].name)){
+          this.$message.error(`请输入正确姓名!`)
+          return;
+        }
+        if(!reg_tel.test(this.dutysystemTableData[i].telphone)){
+          this.$message.error(`请输入正确手机号码!`)
+          return;
+        }
+
+        if(this.dutysystemTableData[i].id==null || this.dutysystemTableData[i].id==''){
+          this.dutysystemTableData[i].dept = this.dutysystemDeptName;
+          this.dutysystemTableData[i].depteventId = this.depteventId;
+        }
+      }
+      const param = {centereventTDutySystemList:this.dutysystemTableData,eventCode:this.eventCode,eventName:this.eventName,eventId:this.eventId}
+      sendMessage(param).then(res => {
+        this.$message.success(res.msg);
+        this.dutysystemSelect(this.iconCurrentIndex, this.dutysystemDeptName, this.depteventId);
+        this.showMeetingMsgDialog = false;
+        this.joinMeeting();
+      })
+    },
     joinMeeting(){
       let hwMeetingUrl;
       selectConfigKey('hwMeetingUrl').then(res => {
         hwMeetingUrl = res.data
         window.open(hwMeetingUrl+"/joinConferences/"+this.eventId+"/"+this.eventName+"的会议"+"/"+Cookies.get("nickName"));
       })
-    }
+    },
+    Meeting() {//弹出发送会议短信弹窗
+      let param = { eventCode: this.eventCode }
+      centereventtdepteventList(param).then(res => {
+        this.depteventList = res.data
+        this.showMeetingMsgDialog = true
+        this.initDutysystemTableData();
+      })
+    },
     /** ----------------------------------视频会议结束------------------------------------- */
   }
 }

+ 2 - 4
src/views/forest.vue

@@ -1161,7 +1161,7 @@
       websocketonmessage(e) { //数据接收
         console.log('接收数据', e.data)
         // let data = "{\"fromId\":\"forest\",\"fromUserId\":\""+Cookies.get('username')+"\",\"toUserId\":\""+Cookies.get('username')+"\"}";
-        let data = "{\"fromId\":\"forest\",\"fromUserId\":\"admin\",\"toUserId\":\"admin\"}";
+        let data = "{\"fromId\":\"farming\"}";
         if (this.calendarDay == this.getCurrentDataStr() && data != e.data) {
           // 处理收到的消息
           this.handleWebSoceketEvent(e.data)
@@ -1213,9 +1213,7 @@
        * @param {string} ping 心跳名称 默认字符串ping
        */
       sendPing(time = 60000, ping = {
-        'fromId': 'forest',
-        'fromUserId': Cookies.get('username'),
-        'toUserId': Cookies.get('username')
+        'fromId': 'farming'
       }) {
         clearInterval(this.setIntervalWesocketPush)
         this.setIntervalWesocketPush = setInterval(() => {