Quellcode durchsuchen

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

wangzhe vor 2 Jahren
Ursprung
Commit
5ed6d67d08

+ 25 - 0
src/api/forest.js

@@ -1,5 +1,13 @@
 import request from '@/utils/request'
 
+export function initByCameras(param) {
+  return request({
+    url: '/center-monitor/TVWallController/initByCameras',
+    method: 'get',
+    params:param
+  })
+
+}
 // 获取绑定的事件类型
 export function getMenuEventType() {
   return request({
@@ -287,3 +295,20 @@ export function selectMessageById(messageId) {
     method: 'get'
   })
 }
+// 事件处置
+export function eventHandling(id,eventCode) {
+  return request({
+    url: '/center-water/VisuForestEventCenterController/eventHandling',
+    method: 'post',
+    data: {id:id,eventCode:eventCode,dataStatus:"1"}
+  })
+}
+
+// 会议添加联系人并发送短信
+export function sendMessage(param) {
+  return request({
+    url: '/center-water/WaterController/sendMeetingMsgWater',
+    method: 'post',
+    data:param
+  })
+}

+ 1 - 1
src/api/leader.js

@@ -35,7 +35,7 @@ export function getWaterRecord(taskId) {
 // 巡查轨迹
 export function getWaterPoint(recordId) {
   return request({
-    url: '/center-data/track/getTrack/'+recordId.toString(),
+    url: '/center-data/patrolTrack/getTrack/'+recordId.toString(),
     method: 'get',
   })
 }

+ 24 - 0
src/api/monitor.js

@@ -29,3 +29,27 @@ export function getRegionalFlag(id) {
     method: 'get',
   })
 }
+//获取点位周边摄像头
+export function findCameraByEventCoordinate(longitude,latitude) {
+  // longitude = '124.41986560821533';
+  // latitude = '43.08817137032747';
+  return request({
+    url: '/center-water/VisuForestMonitorCenterController/findCameraByEventCoordinate?longitude='+longitude+"&latitude="+latitude+"&type=1",
+    method: 'get',
+  })
+}
+
+//转到固定点位
+export function rotation(lng,lat,list) {
+  // lng = '124.41986560821533';
+  // lat = '43.08817137032747';
+  return request({
+    url: '/center-water/VisuForestMonitorCenterController/rotation',
+    method: 'post',
+    data:{
+      lng:lng,
+      lat:lat,
+      list:list
+    }
+  })
+}

+ 139 - 12
src/components/TVWall.vue

@@ -36,13 +36,14 @@
 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'],
   components: {},
   data() {
     return {
+      array:[],
       tvListJson: [
         {
         'switchTab': '1',
@@ -281,6 +282,104 @@ export default {
           })
       }
     },
+    playRealMonitorVideo(array) { // 自定义设备树自动播放指定通道编码视频
+      const config = this.ws.config
+      const { loginIp, userCode } = config
+      this.ws.postMessage('playRealMonitorVideo', {
+        loginIp,
+        userCode,
+        params: {
+          ctrlCode: "ctrl1",
+          array: array
+        }
+      })
+
+    },
+
+    //火点联动电视墙调用
+    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
+
+    },
     showTVWall() {
       // let that=this;
       /** ----------------------------------大华摄像头预览开始------------------------------------- */
@@ -366,6 +465,41 @@ export default {
         })
       })
     },
+    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)
+
+
+    },
+    rotation(lng,lat,list){
+      rotation(lng,lat,list).then(res => {
+        console.log(res)
+
+      })
+    },
 
     create(tvListJson) { // 调用创建控件接口
       let _this = this
@@ -387,17 +521,10 @@ export default {
         }
       ]
       this.setPos()
-      _this.ws.createCtrl(params).then(res => {
-        this.customizeTree(tvListJson)
-      }).catch(e => {
-        console.log(e)
-      })
-      _this.ws.on('createCtrlResult', (res) => {
-        this.customizeTree(tvListJson)
-        _this.ws.on('createCtrlResult', (res) => {
-          this.customizeTree(tvListJson)
-        })
-      })
+      this.customizeTree(tvListJson);
+      setTimeout(function () {
+        _this.ws.createCtrl(params);
+      }, 3000);
     },
     setPos() {
       let target = document.getElementById(this.domId)

+ 5 - 0
src/components/supermap.vue

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

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

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

+ 11 - 11
src/components/vBottomMenu.vue

@@ -433,17 +433,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',

+ 1 - 1
src/utils/request.js

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

+ 264 - 67
src/views/eventdetailsdialog.vue

@@ -59,6 +59,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>
@@ -156,9 +157,12 @@
                                 </el-button>
                                 <el-button size="small" icon="el-icon-download" @click="showResponsibility()">责任制
                                 </el-button>
+                                <el-button v-if="eventStatusValue=='forest_event_status_2' && statusFlag=='1' && dataStatus=='0'"
+                                           size="small" icon="el-icon-download" @click="updateCentereventTEventcatalogueStatus('cz',true)">处置
+                                </el-button>
                               </div>
                               <div class="z-info-btm-grp-right">
-                                <el-button size="small" icon="el-icon-mic" @click="joinMeeting()">会议
+                                <el-button size="small" icon="el-icon-mic" @click="Meeting()">会议
                                 </el-button>
                               </div>
                             </div>
@@ -225,7 +229,7 @@
                                              @click="updateCentereventTEventcatalogueStatus('ld',false)">
                                     联动
                                   </el-button>
-                                  <el-button size="small" v-if="dataStatus=='1'"
+                                  <el-button size="small" v-if="statusFlag=='1'"
                                              icon="el-icon-success" style="text-align:left"
                                              @click="updateCentereventTEventcatalogueStatus('bj',true)">
                                     办结
@@ -235,12 +239,17 @@
                                 </el-button>
                               </div>
                               <div class="z-info-btm-input-btn"
-                                   v-else-if="eventStatusValue=='forest_event_status_5'&&dataStatus=='1'">
+                                   v-else-if="eventStatusValue=='forest_event_status_5'&&statusFlag=='1'">
                                 <el-button size="small"
-                                           icon="el-icon-success" style="text-align:left"
+                                           icon="el-icon-success" style="text-align:left" v-if="eventType == 1"
                                            @click="updateCentereventTEventcatalogueStatus('gd',false)">
                                   填报
                                 </el-button>
+                                <el-button size="small"
+                                           icon="el-icon-success" style="text-align:left" v-if="eventType != 1"
+                                           @click="updateCentereventTEventcatalogueStatus('gd',true)">
+                                  归档
+                                </el-button>
                                 <el-button size="small" icon="el-icon-chat-dot-square" @click="sendEventLog()">发送
                                 </el-button>
                               </div>
@@ -269,7 +278,7 @@
                class="top-dialog"
                @close="cancelEventConfirm()">
       <el-form label-width="80px">
-        <el-form-item label="火灾半径" v-if="eventStatusButton=='qs'">
+        <el-form-item label="火灾半径" v-if="eventStatusButton=='qs'&& eventTypeXl==null">
           <el-input type="number" v-model="sendHuoZaiBanJing" placeholder="请输入火灾半径"/>
         </el-form-item>
         <el-form-item :label="deptNameitem">
@@ -463,6 +472,84 @@
         <div style="clear: both;"></div>
       </el-form>
     </el-dialog>
+    <!--    会议弹窗  start -->
+    <el-dialog title="视频会议" :visible.sync="showMeetingMsgDialog" v-if="showMeetingMsgDialog" width="65%"
+               @close="closeMeetingMsgDialog()">
+      <el-form label-width="1500px">
+        <div class="bottom">
+          <!-- 左侧菜单栏 -->
+          <div class="bottomLeft">
+            <div class="leftItem d-l-con padding-box nowrap" v-for="(item,index) in depteventList">
+              <div class="bgt-info">
+                <div class="bgt-info-name" :class="{on:iconCurrentIndex==item.deptId}"
+                     @click="dutysystemSelect(item.deptId,item.deptName,item.id)">{{ item.deptName }}
+                </div>
+              </div>
+            </div>
+          </div>
+          <!-- 左侧菜单栏对应的右侧的内容 -->
+          <div class="bottomRight" ref="wrapper">
+            <el-button
+              size="mini"
+              type="danger"
+              v-if="depteventId!=null&&depteventId!=''"
+              @click="addLine">添加
+            </el-button>
+            <el-button
+              size="mini"
+              type="danger"
+              v-if="depteventId!=null&&depteventId!=''"
+              @click="finUserByDept">选择
+            </el-button>
+            <el-table
+              :data="dutysystemTableData"
+              style="width: 100%"
+              :rules="rules">
+              <el-table-column prop="id" label="主键" v-if="false">
+                <template slot-scope="scope" hidden>
+                  <el-input v-model="scope.row.id" readonly placeholder="主键"></el-input>
+                </template>
+              </el-table-column>
+              <el-table-column prop="name" label="姓名">
+                <template slot-scope="scope">
+                  <el-input v-model="scope.row.name" placeholder="姓名" οninput="value=value.replace(/^[\u4e00-\u9fa5]{2,4}$/,'')"></el-input>
+                </template>
+              </el-table-column>
+              <el-table-column prop="post" label="岗位">
+                <template slot-scope="scope">
+                  <el-input v-model="scope.row.post" placeholder="岗位"></el-input>
+                </template>
+              </el-table-column>
+              <el-table-column prop="telphone" label="手机号码">
+                <template slot-scope="scope">
+                  <el-input v-model="scope.row.telphone" placeholder="手机号码" οninput="value=value.replace(/^((13[0-9])|(14[5-9])|(15([0-3]|[5-9]))|(16[6-7])|(17[1-8])|(18[0-9])|(19[1|3])|(19[5|6])|(19[8|9]))\d{8}$/,'')"></el-input>
+                </template>
+              </el-table-column>
+              <el-table-column prop="bookbuytime" label="操作">
+                <template slot-scope="scope">
+                  <el-button
+                    size="mini"
+                    type="danger"
+                    icon="el-icon-delete"
+                    @click="handleDelete(scope.$index, scope.row)">删除
+                  </el-button>
+                  <!--<el-button-->
+                  <!--size="mini"-->
+                  <!--type="danger"-->
+                  <!--icon="el-icon-save"-->
+                  <!--@click="handleSave(scope.$index, scope.row)">保存-->
+                  <!--</el-button>-->
+                </template>
+              </el-table-column>
+            </el-table>
+          </div>
+        </div>
+        <el-button size="mini" type="primary" class="fr_button" @click="sendMsg">发送短信
+        </el-button>
+        <div style="clear: both;"></div>
+      </el-form>
+    </el-dialog>
+    <!--    会议弹窗  end   -->
     <el-dialog title="火险报告" :visible.sync="showEventConfirm_gd" v-if="showEventConfirm_gd" width="100%"
                class="top-dialog"
                @close="cancelEventConfirm_gd()">
@@ -977,6 +1064,7 @@
     <el-dialog title="人员选择" :visible.sync="showFindUserByDept" width="40%">
       <findUserByDept v-if="showFindUserByDept" ref="findUserByDept" :deptId="iconCurrentIndex" @addSelection="addSelection"></findUserByDept>
     </el-dialog>
+    <TVWall ref="TVWall"></TVWall>
   </div>
 </template>
 
@@ -988,6 +1076,7 @@ import vBottomMenu from '@/components/vBottomMenu.vue' //一体化公共底部
 import eventLogUpload from '@/views/eventLogUpload.vue' //日志上传文件
 import areaSupermap from '@/components/supermap'//区域标记地图
 import TcPlayer from '@/components/TcPlayer' //视频预览
+import TVWall from '@/components/TVWall.vue' //电视墙弹窗
 import findUserByDept from '@/views/findUserByDept' //责任人选择弹框
 import {
   getEventDetail,
@@ -1004,7 +1093,10 @@ import {
   dutysystemList,
   dutysystemAdd,
   dutysystemRemove,
-  userFeginlist
+  sendMessage,
+  userFeginlist,
+  initByCameras,
+  eventHandling
 } from '@/api/forest'
 import {
   treeselectAll as deptTreeselect
@@ -1020,6 +1112,8 @@ import {
   getDahuaVideoServer
 } from '@/api/dahua/dahua'
 import DHWs from '@/dahua/lib/DHWs'
+import { selectConfigKey } from "@/api/system/config";
+import Cookies from 'js-cookie';
 export default {
   dicts: ['task_source'],
   watch: {
@@ -1034,10 +1128,53 @@ export default {
     eventLogUpload,
     areaSupermap,
     TcPlayer,
+    TVWall,
     findUserByDept
   },
   data() {
     return {
+      aa:[
+        {
+          "switchTab":"2",
+          "treeLabels":[
+            {
+              "id":null,
+              "labelCode":"999",
+              "labelName":"电视墙",
+              "parentLabelCode":""
+            },
+            {
+              "id":"spcamera00288",
+              "labelCode":"22030300001321100289",
+              "labelName":"四平市伊通县西苇椽子沟村",
+              "parentLabelCode":"999"
+            }
+          ],
+          "labelChannels":[
+            {
+              "labelCode":"22030300001321100289",
+              "channelDates":[
+                {
+                  "channelCode":"22030300001321100289",
+                  "channelName":"四平市伊通县西苇椽子沟村可见光",
+                  "channelSn":null,
+                  "cameraType":null,
+                  "online":"1",
+                  "cameraCode":null
+                },
+                {
+                  "channelCode":"22030300001321100290",
+                  "channelName":"四平市伊通县西苇椽子沟村热成像",
+                  "channelSn":null,
+                  "cameraType":null,
+                  "online":"1",
+                  "cameraCode":null
+                }
+              ]
+            }
+          ]
+        }
+      ],
       showFindUserByDept: false,//责任人选择框
       //海康
       cameraTitle: '',
@@ -1060,7 +1197,7 @@ export default {
       sendDeptId: null,//签收部门/发起部门
       sendDeptName: null,//签收部门/发起部门
       sendEventType: null,//事件类型
-      sendHuoZaiBanJing: null,//火灾报告
+      sendHuoZaiBanJing: 0,//火灾报告
       sendGuanLianYuAn: null,//关联预案
       sendUserFegin: [],//联系人
       sendTaskSource: null,//任务来源
@@ -1175,7 +1312,8 @@ export default {
       eventId: null,//事件ID
       eventType: null,//事件类型-大类
       eventTypeXl: null,//事件类型-小类
-      dataStatus: null,//事件流程按钮
+      statusFlag: null,//事件流程按钮
+      dataStatus: null,//事件处置按钮
       deptId: null,//事件流程部门
       eventCode: null,
       eventName: null,
@@ -1186,6 +1324,7 @@ export default {
       visuForestCloudYuAnBo: null,
       eventDialog: false,
       showResponsibilityDialog: false,//责任制弹窗
+      showMeetingMsgDialog: false,//发送会议短信弹窗
       depteventList: [],//责任制部门列表
       iconCurrentIndex: '',
       dutysystemDeptName: '',
@@ -1258,6 +1397,10 @@ export default {
   },
   methods: {
     /************************************责任制-开始****************************************/
+    //初始化责任制数据列表
+    initDutysystemTableData(){
+      this.dutysystemTableData = [];
+    },
     addLine: function() {//添加负责人行数
       var newValue = {
         id: '',//主键
@@ -1338,6 +1481,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位手机号码正则
@@ -1374,6 +1524,27 @@ export default {
       this.eventDialog = false;
       this.$emit('getFirespread', this.eventCode);
     },
+    showTVWallDiaLog() {
+      this.initByCameras()
+      // this.$refs.TVWall.showTVWall();
+
+    },
+    initByCameras()
+    {
+      const params=Object.assign({})
+      params.longitude=this.longitude;
+      params.latitude=this.latitude;
+      params.type='3'
+      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
+      })
+
+    },
     showUpdateYjYuAn() {
       listYuAn().then(res => {
         //关联预案列表
@@ -1422,10 +1593,7 @@ export default {
                 click: '',
                 parameter: '',
                 keepBindPopup: false,
-                isAggregation: false
-              }
-              if (res.data.length > 50) {
-                markersMap.isAggregation = true
+                isAggregation: true
               }
               if (type == 'qsk') {
                 markersMap.icon = 'sj-icon-waterintake'
@@ -1509,7 +1677,7 @@ export default {
       this.sendDeptName = null
       this.sendUserFegin = []
       this.sendEventType = null
-      this.sendHuoZaiBanJing = null
+      this.sendHuoZaiBanJing = 0
       this.sendGuanLianYuAn = null
       this.longitude = null
       this.latitude = null
@@ -1532,7 +1700,7 @@ export default {
       this.sendDeptName = null
       this.sendUserFegin = []
       this.sendEventType = null
-      this.sendHuoZaiBanJing = null
+      this.sendHuoZaiBanJing = 0
       this.sendGuanLianYuAn = null
       this.sendTaskTitle = null
       this.sendTaskSource = null
@@ -1770,28 +1938,30 @@ export default {
           })
 
         } else if (eventStatus == 'gd') {
-          let double = /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/;    //数字和两位小数
-          let number = /^[+]{0,1}(\d+)$/g;    //正整数
+          if(that.eventType==1){
+            let double = /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/;    //数字和两位小数
+            let number = /^[+]{0,1}(\d+)$/g;    //正整数
 
-          if(!double.test(that.table2.areaTotal)){
-            that.$message.error(`面积只能填写到小数后两位!`)
-            return
-          }
-          if(!number.test(that.table2.peopleTotal)){
-            that.$message.error(`人员请填写正整数!`)
-            return
-          }
-          if(that.table2.forestComposition == '' || that.table2.forestComposition==null){
-            that.$message.error(`林木组成不能为空!`)
-            return
-          }
-          if(that.table2.forestToken == '' || that.table2.forestToken==null){
-            that.$message.error(`林令不能为空!`)
-            return
-          }
+            if(!double.test(that.table2.areaTotal)){
+              that.$message.error(`面积只能填写到小数后两位!`)
+              return
+            }
+            if(!number.test(that.table2.peopleTotal)){
+              that.$message.error(`人员请填写正整数!`)
+              return
+            }
+            if(that.table2.forestComposition == '' || that.table2.forestComposition==null){
+              that.$message.error(`林木组成不能为空!`)
+              return
+            }
+            if(that.table2.forestToken == '' || that.table2.forestToken==null){
+              that.$message.error(`林令不能为空!`)
+              return
+            }
             if(that.table2.porosities == '' || that.table2.porosities==null){
-            that.$message.error(`疏密度不能为空!`)
-            return
+              that.$message.error(`疏密度不能为空!`)
+              return
+            }
           }
 
           //事件处理流程--归档
@@ -1815,6 +1985,15 @@ export default {
               that.$emit('getSupermap', that.calendarDay)
             }
           })
+        } else if(eventStatus == 'cz'){
+          eventHandling(that.eventId,that.eventCode).then(res => {
+            if (res.code == 200) {
+              that.$message.success(`处理成功!`)
+              that.refreshEvent(that.eventCode)
+              that.cancelEventConfirm_send()
+              that.showEventConfirm = false
+            }
+          })
         } else {
           if (eventStatus == 'qs' || eventStatus == 'wb' || eventStatus == 'cf') {
             if (that.sendDeptId == '' || that.sendDeptId == null || that.sendDeptName == '' || that.sendDeptName == null) {
@@ -1822,10 +2001,6 @@ export default {
               return
             }
             if (eventStatus == 'qs') {
-              if (that.sendHuoZaiBanJing == '' || that.sendHuoZaiBanJing == null) {
-                that.$message.error(`请输入火灾半径!`)
-                return
-              }
               if (that.sendEventType == '' || that.sendEventType == null) {
                 that.$message.error(`请选择事件类型!`)
                 return
@@ -1882,7 +2057,7 @@ export default {
       this.$refs.eventLogUpload.eventLogUpload(this.eventCode)
     },
     cancelEventShow() {
-      this.dataStatus = null
+      this.statusFlag = null
       this.deptId = null
       console.log('关闭事件弹窗')
       this.eventLogList = []
@@ -1898,6 +2073,7 @@ export default {
         that.address = res.data.catalogue.address
         that.eventStatusValue = res.data.catalogue.eventStatusValue
         that.eventType = res.data.catalogue.eventType
+        that.statusFlag = res.data.catalogue.statusFlag
         that.dataStatus = res.data.catalogue.dataStatus
         that.deptId = res.data.catalogue.deptId
         that.eventId = res.data.catalogue.id
@@ -1913,7 +2089,7 @@ export default {
           click: '',
           parameter: '',
           keepBindPopup: false,
-          isAggregation: false,
+          isAggregation: true,
           radius: 0
         }
         if (res.data.catalogue.eventStatusValue == 'forest_event_status_1' && res.data.catalogue.urgeCount == 0) {
@@ -1951,7 +2127,7 @@ export default {
             click: 'preview',
             parameter: {code:res.data.centermonitorTCamera.cameraCode,type:res.data.centermonitorTCamera.cameraFactory},
             keepBindPopup: false,
-            isAggregation: false,
+            isAggregation: true,
             radius: 0
           }
           markersMap.bindPopupHtml = '<div class="map-tip">' +
@@ -1983,6 +2159,7 @@ export default {
         that.address = res.data.catalogue.address
         that.eventStatusValue = res.data.catalogue.eventStatusValue
         that.eventType = res.data.catalogue.eventType
+        that.statusFlag = res.data.catalogue.statusFlag
         that.dataStatus = res.data.catalogue.dataStatus
         that.deptId = res.data.catalogue.deptId
         that.eventId = res.data.catalogue.id
@@ -1998,7 +2175,7 @@ export default {
           click: '',
           parameter: '',
           keepBindPopup: false,
-          isAggregation: false,
+          isAggregation: true,
           radius: 0
         }
         if (res.data.catalogue.eventStatusValue == 'forest_event_status_1' && res.data.catalogue.urgeCount == 0) {
@@ -2038,7 +2215,7 @@ export default {
             click: 'preview',
             parameter: {code:res.data.centermonitorTCamera.cameraCode,type:res.data.centermonitorTCamera.cameraFactory},
             keepBindPopup: false,
-            isAggregation: false,
+            isAggregation: true,
             radius: 0
           }
           markersMap.bindPopupHtml = '<div class="map-tip">' +
@@ -2189,7 +2366,7 @@ export default {
         this.$Message.info('正在登陆客户端,请稍等......')
         return false
       }
-      this.ws.openVideo(cameraParams)
+      this.ws.openVideo([cameraParams])
     },
     /** ----------------------------------摄像头预览结束------------------------------------- */
 
@@ -2323,30 +2500,50 @@ export default {
       encrypt.setPublicKey(this.pubKey)
       return encrypt.encrypt(value)
     },
-    //加入华为视频会议方法
-    joinMeeting(){
-      let eventId = this.eventId;
-      let subject = "视频会议";
-      let nickName;
-      getUserInfo().then(res => {
-        nickName = res.data.nickName;
-      });
-      hasConferences(eventId).then(res => {
-        let data = res.data;
-        /**如果没有正在开启的会议会返回空对象**/
-        if(res.code == 200 && Object.keys(data).length === 0){
-          createConferences(eventId,subject).then(res => {
-            let data = res.data;
-            if(res.code == 200){
-              window.open("/hwMeeting/meeting.html?nickName="+encodeURI(encodeURI(nickName))+"&conferenceID="+data.conferenceID+"&password="+data.password);
-            }
-          });
-        }else{
-          window.open("/hwMeeting/meeting.html?nickName="+encodeURI(encodeURI(nickName))+"&conferenceID="+data.conferenceID+"&password="+data.password);
-        }
-      });
-    }
     /** ----------------------------------海康摄像头预览结束------------------------------------- */
+    /** ----------------------------------视频会议开始------------------------------------- */
+    sendMsg() {// 视频会议发送短信
+      let reg_user = /^[\u4e00-\u9fa5]{2,4}$/;    //2-4个中文字符正则
+      let reg_tel = /^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/;    //11位手机号码正则
+      for(let i in this.dutysystemTableData){
+        if(!reg_user.test(this.dutysystemTableData[i].name)){
+          this.$message.error(`请输入正确姓名!`)
+          return;
+        }
+        if(!reg_tel.test(this.dutysystemTableData[i].telphone)){
+          this.$message.error(`请输入正确手机号码!`)
+          return;
+        }
+
+        if(this.dutysystemTableData[i].id==null || this.dutysystemTableData[i].id==''){
+          this.dutysystemTableData[i].dept = this.dutysystemDeptName;
+          this.dutysystemTableData[i].depteventId = this.depteventId;
+        }
+      }
+      const param = {centereventTDutySystemList:this.dutysystemTableData,eventCode:this.eventCode,eventName:this.eventName,eventId:this.eventId}
+      sendMessage(param).then(res => {
+        this.$message.success(res.msg);
+        this.dutysystemSelect(this.iconCurrentIndex, this.dutysystemDeptName, this.depteventId);
+        this.showMeetingMsgDialog = false;
+        this.joinMeeting();
+      })
+    },
+    joinMeeting(){
+      let hwMeetingUrl;
+      selectConfigKey('hwMeetingUrl').then(res => {
+        hwMeetingUrl = res.data
+        window.open(hwMeetingUrl+"/joinConferences/"+this.eventId+"/"+this.eventName+"的会议"+"/"+Cookies.get("nickName"));
+      })
+    },
+    Meeting() {//弹出发送会议短信弹窗
+      let param = { eventCode: this.eventCode }
+      centereventtdepteventList(param).then(res => {
+        this.depteventList = res.data
+        this.showMeetingMsgDialog = true
+        this.initDutysystemTableData();
+      })
+    },
+    /** ----------------------------------视频会议结束------------------------------------- */
   }
 }
 

+ 3 - 7
src/views/firespread.vue

@@ -1021,7 +1021,7 @@
         sendDeptId: null,//签收部门/发起部门
         sendDeptName: null,//签收部门/发起部门
         sendEventType: null,//事件类型
-        sendHuoZaiBanJing: null,//火灾报告
+        sendHuoZaiBanJing: 0,//火灾报告
         sendGuanLianYuAn: null,//关联预案
         sendUserFegin: [],//联系人
         sendTaskSource: null,//任务来源
@@ -1456,7 +1456,7 @@
         this.sendDeptName = null
         this.sendUserFegin = []
         this.sendEventType = null
-        this.sendHuoZaiBanJing = null
+        this.sendHuoZaiBanJing = 0
         this.sendGuanLianYuAn = null
         this.longitude = null
         this.latitude = null
@@ -1479,7 +1479,7 @@
         this.sendDeptName = null
         this.sendUserFegin = []
         this.sendEventType = null
-        this.sendHuoZaiBanJing = null
+        this.sendHuoZaiBanJing = 0
         this.sendGuanLianYuAn = null
         this.sendTaskTitle = null
         this.sendTaskSource = null
@@ -1765,10 +1765,6 @@
                 return
               }
               if (eventStatus == 'qs') {
-                if (that.sendHuoZaiBanJing == '' || that.sendHuoZaiBanJing == null) {
-                  that.$message.error(`请输入火灾半径!`)
-                  return
-                }
                 if (that.sendEventType == '' || that.sendEventType == null) {
                   that.$message.error(`请选择事件类型!`)
                   return

+ 27 - 2
src/views/leader.vue

@@ -45,9 +45,17 @@
 					<dv-border-box-13 backgroundColor="rgba(12, 19, 38, .90)" style="padding-bottom: 1rem;">
 						<img src="../assets/images/integrated/light.png" style="width: 100%; margin-top: .4rem;" />
 						<div class="i-list-con h-27">
+              <el-input
+                v-model="nickName"
+                placeholder="请输入姓名"
+                clearable
+                size="small"
+                prefix-icon="el-icon-search"
+                style="margin-bottom: 20px"
+              />
 							<div class="d-l-con-icon">
 								<div class="icon-con" :class="{on:listCurrentIndex1==item.userId}"
-									v-for="(item,index) in peopleList" @click="getPlanList(item.userId)">
+									v-for="(item,index) in peopleList2" @click="getPlanList(item.userId)">
 									<div class="icon icon-mid el-icon-user"></div>
 									<div class="icon-text personnel-name">
 										<h6>{{ item.nickName }}</h6>
@@ -173,6 +181,8 @@
 				visuForestCloudRYBO: [], //人员类型列表
         personId: null, //人员
 				peopleList: [], //人员列表
+        nickName: '',
+        peopleList2: [], //人员列表
 				connectList: [], //画线
         patrolTrajectory: null, //任务画线
 				xunLinListOne: [], //巡林任务
@@ -191,6 +201,19 @@
       window.choseLayerSwitchingList_Data = this.choseLayerSwitchingList_Data
 			/** ----------------------------------底部按钮公用组件结束------------------------------------- */
 		},
+    watch:
+      {
+        nickName(val) {
+          this.peopleList2 = [];
+
+          for (let i in this.peopleList) {
+            if (this.peopleList[i].nickName.indexOf(val) != -1) {
+              this.peopleList2.push(this.peopleList[i]);
+            }
+          }
+          console.log(this.peopleList2)
+        }
+      },
     mounted(){
       this.bottomMenuList() //获取底部公共组件消息和任务
     },
@@ -286,8 +309,10 @@
 				this.listCurrentIndex2 = ''
 				this.iconCurrentIndex1 = linJob
 				this.peopleList = []
+				this.peopleList2 = []
 				getForestLeader(linJob, linType).then(res => {
 					this.peopleList = res.data
+					this.peopleList2 = res.data
 				})
 				this.connectList = []
         this.personId = null;
@@ -331,7 +356,7 @@
 			//点击巡查人员 巡查任务落点
 			setTaskPointList(patrolTrajectory) {
 				console.log("巡查任务落点", typeof JSON.parse(patrolTrajectory));
-        if(this.patrolTrajectory){
+        if(this.patrolTrajectory == patrolTrajectory){
           this.patrolTrajectory = null;
         }else {
           this.patrolTrajectory = patrolTrajectory;

+ 22 - 1
src/views/monitor.vue

@@ -108,7 +108,15 @@
               <dv-decoration-3 style="width:150px;height:15px;margin-right: 1rem;"/>
             </div>
             <div class="i-list-con h-43">
-              <div class="d-l-con" v-for="(item,index) in visuForestCloudCameraBOList"
+              <el-input
+                v-model="rightDeptName"
+                placeholder="请输入摄像头名称"
+                clearable
+                size="small"
+                prefix-icon="el-icon-search"
+                style="margin-bottom: 20px"
+              />
+              <div class="d-l-con" v-for="(item,index) in visuForestCloudCameraBOListSearch"
                    :class="{on:listCurrentIndex2 == index}"
                    v-on:click="dropLocation(item.latitude,item.longitude,index)">
                 <div class="d-l-l-text">
@@ -240,6 +248,9 @@ export default {
       },
       visuForestCloudMapDeviceBOList: [],
       visuForestCloudCameraBOList: [],
+      //摄像头名称
+      rightDeptName: undefined,
+      visuForestCloudCameraBOListSearch:[],
       cameraMarkersList: [],
       sourceData: [],
       keyAreaList: [],//重点区域
@@ -262,6 +273,14 @@ export default {
     // 根据名称筛选部门树
     deptName(val) {
       this.$refs.tree.filter(val)
+    },
+    rightDeptName(val){
+      this.visuForestCloudCameraBOListSearch=[];
+      for (let i in this.visuForestCloudCameraBOList) {
+        if(this.visuForestCloudCameraBOList[i].cameraName.indexOf(val) != -1){
+          this.visuForestCloudCameraBOListSearch.push(this.visuForestCloudCameraBOList[i]);
+        }
+      }
     }
   },
   methods: {
@@ -402,6 +421,7 @@ export default {
         }
 
         that.visuForestCloudCameraBOList = res.data.visuForestCloudCameraBOList
+        that.visuForestCloudCameraBOListSearch = res.data.visuForestCloudCameraBOList
         // this.cameraChat()
         if (res.data.visuForestCloudCameraBOList != null && res.data.visuForestCloudCameraBOList
           .length > 0) {
@@ -502,6 +522,7 @@ export default {
       selectCameraByDeptId(depId).then(res => {
         //根据设备类型查看列表
         that.visuForestCloudCameraBOList = res.data
+        that.visuForestCloudCameraBOListSearch = res.data
         if (res.data != null && res.data.length > 0) {
           for (let i = 0; i < res.data.length; i++) {
             let markersMap = {

+ 8 - 9
src/views/water.vue

@@ -253,7 +253,7 @@
             <dv-border-box-13 backgroundColor="rgba(12, 19, 38, .90)" style="padding-bottom: 1rem;">
               <img src="../assets/images/integrated/light.png" style="width: 100%; margin-top: .4rem;"/>
               <div class="this-title">
-                <span>曝光台</span>
+                <span>超期事件</span>
                 <dv-decoration-3 style="width:150px;height:15px;margin-right: 1rem;"/>
               </div>
               <div class="i-list-con small-bottom-margin h-18">
@@ -290,7 +290,7 @@
                   </el-input>
                 </div>
                 <div class="d-l-con padding-box nowrap" v-for="(item,index) in eventList"
-                     @click="dropLocation(item.latitude,item.longitude)" data-html2canvas-ignore>
+                     @click="dropLocation(item.latitude,item.longitude,item.eventCode)" data-html2canvas-ignore>
                   <div class="bgt-img">
                     <img v-if="item.picturePath!=null&&item.picturePath!=''&& item.pictureType=='image'"
                          :src="item.picturePath" style="width: 93px;height: 64px" loading="lazy"/>
@@ -425,7 +425,7 @@
 
     <firespread ref="firespread" :calendarDay="calendarDay" @getEventList="getEventList"
                 @getTodayEvents="getTodayEvents" @showEventDialog="showEventDialog"
-                @getSupermap="getSupermap"></firespread>
+                @getSupermap="getSupermap" @showDialog="showDialog"></firespread>
     <eventLocation ref="eventLocation"></eventLocation>
     <TVWall ref="TVWall"></TVWall>
   </div>
@@ -647,8 +647,9 @@
       //     }
       //   })
       // },
-      dropLocation(lat, lng) {
-        this.$refs.supermap.dropLocation(lat, lng)
+      dropLocation(lat, lng,eventCode) {
+        this.$refs.supermap.dropLocation(lat, lng,18)
+        this.showEventDialog(eventCode)
       },
       showEventDialog(eventCode) {
         //事件信息弹出
@@ -1170,7 +1171,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\":\"water\"}";
         if (this.calendarDay == this.getCurrentDataStr() && data != e.data) {
           // 处理收到的消息
           this.handleWebSoceketEvent(e.data)
@@ -1222,9 +1223,7 @@
        * @param {string} ping 心跳名称 默认字符串ping
        */
       sendPing(time = 60000, ping = {
-        'fromId': 'forest',
-        'fromUserId': Cookies.get('username'),
-        'toUserId': Cookies.get('username')
+        'fromId': 'water'
       }) {
         clearInterval(this.setIntervalWesocketPush)
         this.setIntervalWesocketPush = setInterval(() => {

+ 2 - 2
vue.config.js

@@ -52,8 +52,8 @@ module.exports = {
     proxy: {
       // detail: https://cli.vuejs.org/config/#devserver-proxy
       [process.env.VUE_APP_BASE_API]: {
-        // target: `http://127.0.0.1:3031`,
-        target: `http://121.36.228.66:3031`,
+        target: `http://127.0.0.1:3031`,
+        // target: `http://10.6.52.11:3031`,
         // target: `http://192.168.2.118:3031`,
         changeOrigin: true,
         pathRewrite: {