dedsudiyu před 2 roky
rodič
revize
b435586a6c

+ 37 - 0
src/api/laboratory/warningNotice.js

@@ -0,0 +1,37 @@
+import request from '@/utils/request'
+// 预警通知-列表
+export function warningNoticeLogList(data) {
+  return request({
+    url: '/laboratory/warningNoticeLog/list',
+    method: 'post',
+    data: data
+  })
+}
+// 预警通知-详情
+export function warningNoticeLogDetail(query) {
+  return request({
+    url: '/laboratory/warningNoticeLog/getById',
+    method: 'get',
+    params: query
+  })
+}
+
+
+// 算法预警/危险源预警-新增
+export function warningConfigAdd(data) {
+  return request({
+    url: '/laboratory/warningConfig/addOrUpdate',
+    method: 'post',
+    data: data
+  })
+}
+// 算法预警/危险源预警-详情
+export function warningConfigList(query) {
+  return request({
+    url: '/laboratory/warningConfig/list',
+    method: 'get',
+    params: query
+  })
+}
+
+

binární
src/assets/ZDimages/evacuation3_2/icon_dzya_dfx.png


binární
src/assets/ZDimages/evacuation3_2/icon_dzya_gfx.png


binární
src/assets/ZDimages/evacuation3_2/icon_dzya_jgfx.png


binární
src/assets/ZDimages/evacuation3_2/icon_dzya_zfx.png


+ 17 - 0
src/assets/styles/ZDcolorClass.scss

@@ -270,6 +270,23 @@
   border: 1px solid #0183FA;
 }
 //===========================表格内按钮===========================
+.table-button-box{
+  font-weight:500;
+  height:23px;
+  display: flex;
+  margin:0 auto;
+  .table-button-null{
+    flex:1;
+  }
+  .table-button-p{
+    color:$list_button_color;
+    line-height:23px;
+    font-size:14px;
+    cursor:pointer;
+    margin:0 10px !important;
+    text-align:center;
+  }
+}
 .cell{
   //.button-box{
   //  display: flex;

+ 121 - 0
src/components/lookImgDialog/lookImgDialog.vue

@@ -0,0 +1,121 @@
+<!--照片浏览DIALOG-->
+<!--
+        <lookImgDialog ref="lookImgDialog"></lookImgDialog>
+  import lookImgDialog from '/@/components/lookImgDialog/lookImgDialog.vue'
+        components: {
+          lookImgDialog
+        },
+        /*
+          传入3个参数(1,list,index)
+          1-开启
+          list-图片数据 [{url:"xxxxx"}]
+          index-默认显示第几张图片
+        */
+        this.$refs.lookImgDialog.lookImgDialogOpen(1,list,index);
+-->
+<template>
+  <el-dialog class="look-img-dialog" :title="lookImgDialogTitle" :visible.sync="lookImgDialogType" v-if="lookImgDialogType" width="1070px" height="700" append-to-body>
+    <div class="look-img-dialog-min scrollbar-box">
+      <img style="width:1026px;" :src="lookImgList[lookImgIndex].url">
+    </div>
+    <p class="el-icon-arrow-left left-i-button" @click="infoLeftButton"></p>
+    <p class="el-icon-arrow-right right-i-button" @click="infoRightButton"></p>
+    <p class="look-img-dialog-bottom-text">{{lookImgIndex+1}} / {{lookImgList.length}}</p>
+  </el-dialog>
+</template>
+
+<script>
+  export default {
+    name: 'lookImgDialog',
+    data(){
+      return{
+        lookImgDialogTitle:"",
+        lookImgDialogType:false,
+        lookImgList:[],
+        lookImgIndex:null,
+      }
+    },
+    created(){
+
+    },
+    mounted(){
+
+    },
+    methods:{
+      lookImgDialogOpen(type,list,index,title){
+        if(type == 1){
+          this.$set(this,'lookImgList',list);
+          this.$set(this,'lookImgIndex',index?index:0);
+          this.$set(this,'lookImgDialogTitle',title?title:'照片');
+          this.$set(this,'lookImgDialogType',true);
+        }else if(type == 2){
+          this.$set(this,'lookImgDialogType',false);
+        }
+      },
+      infoLeftButton(){
+        if (this.lookImgIndex == 0){
+          this.msgError('当前是第一张')
+        }else{
+          this.lookImgIndex--
+        }
+      },
+      infoRightButton(){
+        if (this.lookImgIndex == this.lookImgList.length-1){
+          this.msgError('当前是最后一张')
+        }else{
+          this.lookImgIndex++
+        }
+      },
+    },
+  }
+</script>
+
+<style scoped lang="scss">
+  .look-img-dialog{
+    .left-i-button{
+      cursor: pointer;
+      text-align: center;
+      line-height:30px;
+      color:#fff;
+      font-size:16px;
+      top:350px;
+      left:40px;
+      position: absolute;
+      width:30px;
+      height:30px;
+      background-color: #0045AF;
+      border-radius:50%;
+    }
+    .right-i-button{
+      cursor: pointer;
+      text-align: center;
+      line-height:30px;
+      color:#fff;
+      font-size:16px;
+      position: absolute;
+      top:350px;
+      right:40px;
+      width:30px;
+      height:30px;
+      background-color: #0045AF;
+      border-radius:50%;
+    }
+    .right-i-button:hover{
+      background-color: #0183fa;
+    }
+    .left-i-button:hover{
+      background-color: #0183fa;
+    }
+    .look-img-dialog-bottom-text{
+      text-align: center;
+      line-height: 30px;
+      font-size:16px;
+      position: absolute;
+      bottom:0;
+      width:1026px;
+    }
+    .look-img-dialog-min{
+      height:560px;
+    }
+  }
+</style>

+ 59 - 0
src/components/lookVideoDialog/lookVideoDialog.vue

@@ -0,0 +1,59 @@
+<!--视频浏览DIALOG-->
+<!--
+        <lookVideoDialog ref="lookVideoDialog"></lookVideoDialog>
+        import lookVideoDialog from '@/components/lookVideoDialog/lookVideoDialog.vue'
+        components: {
+          lookVideoDialog
+        },
+        /*
+          传入3个参数(1,list,index)
+          1-开启
+          rul视频地址
+          '报警抓拍'title名称
+        */
+        this.$refs.lookVideoDialog.lookVideoDialogOpen(1,item.url,'报警抓拍');
+-->
+<template>
+  <el-dialog class="look-img-dialog" :title="lookVideoDialogTitle" :visible.sync="lookVideoDialogType" v-if="lookVideoDialogType" width="1070px" height="700" append-to-body>
+    <video style="width:1029px;height:578px;" controls="" autoplay="" name="media" :poster="videoCover">
+      <source :src="lookVideoDialogUrl" type="video/mp4">
+    </video>
+  </el-dialog>
+</template>
+
+<script>
+  export default {
+    name: 'lookVideoDialog',
+    data(){
+      return{
+        videoCover:window.location.href.split('://')[0]+'://' + this.judgmentNetworkReturnAddress() + "/admin/" + localStorage.getItem('videoCover'),
+        lookVideoDialogUrl:"",
+        lookVideoDialogTitle:"",
+        lookVideoDialogType:false,
+      }
+    },
+    created(){
+
+    },
+    mounted(){
+
+    },
+    methods:{
+      lookVideoDialogOpen(type,url,title){
+        if(type == 1){
+          this.$set(this,'lookVideoDialogUrl',url);
+          this.$set(this,'lookVideoDialogTitle',title?title:'视频');
+          this.$set(this,'lookVideoDialogType',true);
+        }else if(type == 2){
+          this.$set(this,'lookVideoDialogType',false);
+        }
+      },
+    },
+  }
+</script>
+
+<style scoped lang="scss">
+  .look-img-dialog{
+
+  }
+</style>

+ 306 - 0
src/views/comprehensive/message/warningNotice/algorithmForewarning.vue

@@ -0,0 +1,306 @@
+<!--算法预警-->
+<template>
+  <div class="algorithmForewarning">
+    <div class="title-box">
+      <p>算法预警配置</p>
+      <p></p>
+    </div>
+    <div class="content-box scrollbar-box">
+      <el-form class="form-max-box" ref="addForm" :model="addForm" :rules="rules" label-width="170px">
+        <div class="form-top-box">
+          <el-form-item class="form-item-box" label="穿戴抓拍周期" prop="num1">
+            <el-input-number style="width:320px" v-model="addForm.wearDetectionCycle" placeholder="请输入抓拍周期(小时)" :min="1" :max="3" label=""></el-input-number>
+          </el-form-item>
+          <el-form-item class="form-item-box" label="异常再识别数" prop="num2">
+            <el-input-number style="width:320px" v-model="addForm.anomalyCount" placeholder="请输入异常再识别数" :min="5" :max="10" label=""></el-input-number>
+          </el-form-item>
+          <el-form-item class="form-item-box" label="异常再识别率" prop="num3">
+            <el-input-number style="width:320px" v-model="addForm.anomalyRate" placeholder="请输入异常再识别率(%)" :min="70" :max="90" label=""></el-input-number>
+          </el-form-item>
+        </div>
+        <p class="form-title-p">穿戴识别</p>
+        <div class="check-max-box">
+          <p class="check-title">系统通知</p>
+          <div class="check-right-box check-right-box-A">
+            <p>监测异常</p>
+            <div>
+              <el-select v-model="addForm.systemNotice" placeholder="请选择" style="width:50px;height:30px;">
+                <el-option
+                  v-for="item in options"
+                  :key="item.value"
+                  :label="item.label"
+                  :value="item.value">
+                </el-option>
+              </el-select>
+            </div>
+            <p>次</p>
+            <p>监测到实验人员未正确穿戴实验服,{{systemData.num==1?'一':(systemData.num==2?'二':(systemData.num==3?'三':(systemData.num==4?'四':(systemData.num==5?'五':(systemData.num==6?'六':(systemData.num==7?'七':(systemData.num==8?'八':(systemData.num==9?'九':(systemData.num==10?'十':'')))))))))}}次后通过该方式进行预警通知。</p>
+          </div>
+        </div>
+        <div class="check-max-box">
+          <p class="check-title">短信通知</p>
+          <div class="check-right-box check-right-box-A">
+            <p>监测异常</p>
+            <div>
+              <el-select v-model="addForm.messageNotice" placeholder="请选择" style="width:50px;height:30px;">
+                <el-option
+                  v-for="item in options"
+                  :key="item.value"
+                  :label="item.label"
+                  :value="item.value">
+                </el-option>
+              </el-select>
+            </div>
+            <p>次</p>
+            <p>监测到实验人员未正确穿戴实验服,{{shortMessageData.num==1?'一':(shortMessageData.num==2?'二':(shortMessageData.num==3?'三':(shortMessageData.num==4?'四':(shortMessageData.num==5?'五':(shortMessageData.num==6?'六':(shortMessageData.num==7?'七':(shortMessageData.num==8?'八':(shortMessageData.num==9?'九':(shortMessageData.num==10?'十':'')))))))))}}次后通过该方式进行预警通知。</p>
+          </div>
+        </div>
+        <div class="check-max-box">
+          <p class="check-title">语音播报</p>
+          <div class="check-right-box check-right-box-A">
+            <p>监测异常</p>
+            <div>
+              <el-select v-model="addForm.voiceNotcie" placeholder="请选择" style="width:50px;height:30px;">
+                <el-option
+                  v-for="item in options"
+                  :key="item.value"
+                  :label="item.label"
+                  :value="item.value">
+                </el-option>
+              </el-select>
+            </div>
+            <p>次</p>
+            <p>监测到实验人员未正确穿戴实验服,{{voiceData.num==1?'一':(voiceData.num==2?'二':(voiceData.num==3?'三':(voiceData.num==4?'四':(voiceData.num==5?'五':(voiceData.num==6?'六':(voiceData.num==7?'七':(voiceData.num==8?'八':(voiceData.num==9?'九':(voiceData.num==10?'十':'')))))))))}}次后通过该方式进行预警通知。</p>
+          </div>
+        </div>
+      </el-form>
+    </div>
+    <div class="bottom-button-max-box">
+      <p></p>
+      <p class="reset-button-one" @click="outButton">取消</p>
+      <p class="inquire-button-one" @click="upDataButton">提交</p>
+      <p></p>
+    </div>
+  </div>
+</template>
+
+<script>
+import { warningConfigAdd,warningConfigList} from '@/api/laboratory/warningNotice'
+import { gasApplyDetail } from '@/api/gasManage3_0/gasManage'
+  export default {
+    name: 'algorithmForewarning',
+    data(){
+      return{
+        options:[
+          {value:"1",label:"1"},{value:"2",label:"2"},{value:"3",label:"3"},{value:"4",label:"4"},
+          {value:"5",label:"5"},{value:"6",label:"6"},{value:"7",label:"7"},{value:"8",label:"8"},
+          {value:"9",label:"9"},{value:"10",label:"10"}
+        ],
+        addForm: {
+          id:'',
+          wearDetectionCycle:1,
+          anomalyCount:10,
+          anomalyRate:80,
+          systemNotice:3,//系统通知
+          messageNotice:3,//短信通知
+          voiceNotcie:3,//语音播报
+          warningType:1,
+        },
+        systemData:{
+          num:3
+        },
+        shortMessageData:{
+          num:3
+        },
+        voiceData:{
+          num:3
+        },
+        rules:{
+          wearDetectionCycle: [
+            { required: true, message: "请输入穿戴抓拍周期", trigger: "blur" },
+          ],
+          anomalyCount: [
+            { required: true, message: "请输入异常再识别数", trigger: "blur" },
+          ],
+          anomalyRate: [
+            { required: true, message: "请输入异常再识别率", trigger: "blur" },
+          ],
+        },
+      }
+    },
+    created(){
+
+    },
+    mounted(){
+      this.getInfo();
+    },
+    methods:{
+      //选择
+      checkClick(type){
+        if(type == 1){
+          this.$set(this.systemData,'type',0);
+        }else if (type == 2){
+          this.$set(this.systemData,'type',1);
+        }else if (type == 3){
+          this.$set(this.shortMessageData,'type',0);
+        }else if (type == 4){
+          this.$set(this.shortMessageData,'type',1);
+        }else if (type == 5){
+          this.$set(this.voiceData,'type',0);
+        }else if (type == 6){
+          this.$set(this.voiceData,'type',1);
+        }
+      },
+      /* 详情 */
+      getInfo(){
+        warningConfigList({warningType:'1'}).then( response => {
+          let res=response.data[0];
+          if(response.code==200 && res){
+            this.addForm.id=res.id
+            this.addForm.wearDetectionCycle=res.wearDetectionCycle
+            this.addForm.anomalyCount=res.anomalyCount
+            this.addForm.anomalyRate=res.anomalyRate
+            this.addForm.systemNotice=res.systemNotice
+            this.addForm.messageNotice=res.messageNotice
+            this.addForm.voiceNotcie=res.voiceNotcie
+            this.addForm.voiceNotcie=res.voiceNotcie
+          }
+        });
+
+      },
+      //提交
+      upDataButton(){
+        this.$refs["addForm"].validate(valid => {
+          if (valid) {
+            let obj=[];
+            obj.push(this.addForm)
+            warningConfigAdd(obj).then((response) => {
+                if(response.code==200){
+                  this.outButton();
+                }
+            });
+          }
+        })
+      },
+      //返回事件
+      outButton(){
+        this.$parent.goPage(1);
+      },
+    }
+  }
+</script>
+
+<style scoped lang="scss">
+  .algorithmForewarning{
+    font-weight: 500;
+    flex: 1;
+    display: flex !important;
+    flex-direction: column;
+    overflow: hidden;
+    ::v-deep .el-input-number__increase{
+      line-height: 38px;
+    }
+    .title-box{
+      display: flex;
+      border-bottom:1px solid #dedede;
+      p:nth-child(1){
+        margin-left:20px;
+        line-height: 80px;
+        font-size:18px;
+        color:#0045AF;
+      }
+      p:nth-child(2){
+        flex:1;
+      }
+      p:nth-child(3){
+        margin:20px;
+      }
+    }
+    .content-box{
+      flex:1;
+      .form-max-box{
+        .form-top-box{
+          display: flex;
+          margin-top:40px;
+          height:80px;
+          .form-item-box{
+            height:80px;
+            margin-bottom:0;
+          }
+        }
+        .form-title-p{
+          line-height:50px;
+          color:#0045AF;
+          background-color: #F5F5F5;
+          font-size:16px;
+          padding-left:20px;
+          margin-bottom:40px;
+        }
+        .check-max-box{
+          margin-bottom:20px;
+          display: flex;
+          height:40px;
+          line-height:40px;
+          .check-title{
+            margin-left:126px;
+            width:80px;
+            text-align: left;
+            font-size:16px;
+          }
+          .check-right-box{
+            cursor: pointer;
+            display: flex;
+            width:670px;
+            ::v-deep .el-input__icon{
+              line-height:30px;
+            }
+            ::v-deep .el-input__inner{
+              height:30px;
+              padding-right: 20px;
+              padding-left: 10px;
+            }
+            ::v-deep .el-input__suffix{
+              right:0;
+              height:30px;
+            }
+          }
+          .check-right-box-A{
+            border:1px solid #0183FA;
+            border-radius:4px;
+            p:nth-child(1){
+              width:80px;
+              margin-left:10px;
+            }
+            div:nth-child(2){
+              margin-top:-2px;
+            }
+            p:nth-child(3){
+              margin:0 20px 0 14px;
+            }
+            p:nth-child(4){
+              font-size:14px;
+              color:#CCCCCC;
+            }
+          }
+        }
+      }
+    }
+    .bottom-button-max-box{
+      display: flex;
+      padding:20px 0;
+      p:nth-child(1){
+        flex:1;
+      }
+      p:nth-child(2){
+        width:100px;
+        margin-right:20px;
+      }
+      p:nth-child(3){
+        width:100px;
+      }
+      p:nth-child(4){
+        flex:1;
+      }
+    }
+  }
+</style>

+ 234 - 0
src/views/comprehensive/message/warningNotice/index.vue

@@ -0,0 +1,234 @@
+<template>
+  <div class="app-container warningNotice">
+    <div class="warningNotice-page" v-if="pageType == 1">
+      <div class="title-box">
+        <el-form :model="queryParams" class="form-box" ref="queryForm" :inline="true" label-width="80px">
+          <el-form-item label="预警类型" prop="deptId" label-width="100px">
+            <el-select v-model="queryParams.warningType" clearable placeholder="全部" style="width:150px;">
+              <el-option
+                v-for="item in selectListA"
+                :key="item.key"
+                :label="item.value"
+                :value="item.key">
+              </el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="预警方式" prop="deptId">
+            <el-select v-model="queryParams.warningWay" clearable placeholder="全部" style="width:150px;">
+              <el-option
+                v-for="item in selectListB"
+                :key="item.key"
+                :label="item.value"
+                :value="item.key">
+              </el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="预警时间" prop="dateRange" style="margin-left:10px;" label-width="70px">
+            <el-date-picker
+              :clearable="false"
+              v-model="dateRange"
+              size="small"
+              style="width: 240px"
+              value-format="yyyy-MM-dd"
+              type="daterange"
+              range-separator="-"
+              start-placeholder="开始日期"
+              end-placeholder="结束日期"
+            ></el-date-picker>
+          </el-form-item>
+          <el-form-item>
+            <p class="inquire-button-one" @click="handleQuery" style="margin-right:10px;">查询</p>
+            <p class="reset-button-one" @click="resetQuery">重置</p>
+          </el-form-item>
+          <el-form-item style="float: right;">
+            <el-col :span="1.5">
+              <p class="inquire-button-one"
+                 style="width:100px;"
+                 @click="goPage(3)"
+              >危险源预警</p>
+            </el-col>
+          </el-form-item>
+          <el-form-item style="float: right;">
+            <el-col :span="1.5">
+              <p class="inquire-button-one"
+                 style="width:100px;"
+                 @click="goPage(2)"
+              >算法预警</p>
+            </el-col>
+          </el-form-item>
+        </el-form>
+      </div>
+      <div class="content-box">
+        <el-table  border :data="tableList" ref="multipleTable">
+          <el-table-column label="预警时间" align="center" prop="warningTime" show-overflow-tooltip/>
+          <el-table-column label="预警类型" align="center" prop="warningType" show-overflow-tooltip width="300">
+            <template slot-scope="scope">
+              <div class="table-button-box">
+                <span v-if="scope.row.warningType==1">算法识别</span>
+                <span v-if="scope.row.warningType==2">化学品</span>
+                <span v-if="scope.row.warningType==3">气瓶</span>
+              </div>
+            </template>
+          </el-table-column>
+          <el-table-column label="预警内容" align="center" prop="warningContent" show-overflow-tooltip width="300"/>
+          <el-table-column label="预警方式" align="center" prop="warningWay" show-overflow-tooltip width="300"/>
+          <el-table-column label="实验室" sortable="custom" align="center" prop="subName" show-overflow-tooltip width="300"/>
+          <el-table-column label="操作" align="center" prop="deptName" width="150">
+            <template slot-scope="scope">
+              <div class="table-button-box">
+                <p class="table-button-null"></p>
+                <p class="table-button-p" @click="clickPage(4,scope.row)">详情</p>
+                <p class="table-button-null"></p>
+              </div>
+            </template>
+          </el-table-column>
+        </el-table>
+        <pagination :page-sizes="[20, 30, 40, 50]"
+                    v-show="total>0"
+                    :total="total"
+                    :page.sync="queryParams.pageNum"
+                    :limit.sync="queryParams.pageSize"
+                    @pagination="getList"
+        />
+      </div>
+    </div>
+    <algorithmForewarning v-if="pageType == 2"></algorithmForewarning>
+    <sourceOfDangerForewarning v-if="pageType == 3"></sourceOfDangerForewarning>
+    <infoPage :pageData="pageData" v-if="pageType == 4"></infoPage>
+  </div>
+</template>
+
+<script>
+  import {warningNoticeLogList} from "@/api/laboratory/warningNotice";
+  import algorithmForewarning from './algorithmForewarning.vue'
+  import sourceOfDangerForewarning from './sourceOfDangerForewarning.vue'
+  import infoPage from './infoPage.vue'
+  export default {
+    name: 'index',
+    components: {
+      algorithmForewarning,
+      sourceOfDangerForewarning,
+      infoPage
+    },
+    data(){
+      return{
+        pageType:1,
+        selectListA:[{key:'0',value:"全部"},{key:"1",value:"算法识别"},{key:"2",value:"化学品"},{key:"3",value:"气瓶"}],
+        selectListB:[{key:"",value:"全部"},{key:"1",value:"系统通知"},{key:"2",value:"短信通知"},{key:"3",value:"声光报警"},{key:"4",value:"语音播报"},{key:"5",value:"电话通知"}],
+        queryParams:{
+          pageNum: 1,
+          pageSize:20,
+          warningType:'0',//预警类型
+          warningWay:'',//预警方式
+          warningStartTime:'',
+          warningEndTime:'',
+        },
+        dateRange:[],
+        tableList:[],
+        total:0,
+        pageData:{},
+      }
+    },
+    created(){
+
+    },
+    mounted(){
+        this.getList()
+    },
+    methods:{
+      goPage(type){
+        if(type != this.pageType){
+          this.$set(this,'pageType',type);
+        }
+        if(type==1){
+          this.getList()
+        }
+      },
+      //详情
+      clickPage(type,row){
+        this.pageData.id=row.id
+        this.$set(this,'pageType',type);
+
+      },
+      //获取数据列表
+      getList(){
+        let obj = JSON.parse(JSON.stringify(this.queryParams))
+        if(this.dateRange[0]){
+          obj.warningStartTime = this.dateRange[0];
+        }else{
+          obj.warningStartTime = "";
+        }
+        if(this.dateRange[1]){
+          obj.warningEndTime = this.dateRange[1];
+        }else{
+          obj.warningEndTime = "";
+        }
+        warningNoticeLogList(obj).then(response => {
+          this.total = response.data.total;
+          //处理预警方式
+          for(let i=0;i<response.data.records.length;i++){
+            if(response.data.records[i].warningWay!='' && response.data.records[i].warningWay!=null){
+              response.data.records[i].warningWay=response.data.records[i].warningWay.replace(/1/, "系统通知")
+              response.data.records[i].warningWay=response.data.records[i].warningWay.replace(/2/, "短信通知")
+              response.data.records[i].warningWay=response.data.records[i].warningWay.replace(/3/, "声光报警")
+              response.data.records[i].warningWay=response.data.records[i].warningWay.replace(/4/, "语音播报")
+              response.data.records[i].warningWay=response.data.records[i].warningWay.replace(/5/, "电话通知")
+              if (response.data.records[i].warningWay.endsWith(',')) {
+                response.data.records[i].warningWay=response.data.records[i].warningWay.replace(/,/, " ")
+              }
+              response.data.records[i].warningWay= response.data.records[i].warningWay.replace(/,/g, "+");
+
+            }else{
+              response.data.records[i].warningWay='-'
+            }
+          }
+          this.tableList = response.data.records;
+        });
+      },
+      /** 搜索按钮操作 */
+      handleQuery() {
+        this.$set(this.queryParams,'pageNum',1);
+        this.getList();
+      },
+      /** 重置按钮操作 */
+      resetQuery() {
+        this.$set(this,'dateRange',[]);
+        this.$set(this,'queryParams',{
+          pageNum:1,
+          pageSize:20,
+          warningType:'',//预警类型
+          warningWay:'',//预警方式
+          warningStartTime:'',
+          warningEndTime:'',
+        });
+        this.handleQuery();
+      },
+    }
+  }
+</script>
+
+<style scoped lang="scss">
+  .warningNotice{
+    flex: 1;
+    display: flex !important;
+    flex-direction: column;
+    overflow: hidden;
+    .warningNotice-page{
+      flex: 1;
+      display: flex !important;
+      flex-direction: column;
+      overflow: hidden;
+      .title-box{
+        margin-top:20px;
+        border-bottom:1px solid #dedede;
+      }
+      .content-box{
+        padding:20px;
+        flex: 1;
+        display: flex !important;
+        flex-direction: column;
+        overflow: hidden;
+      }
+    }
+  }
+</style>

+ 376 - 0
src/views/comprehensive/message/warningNotice/infoPage.vue

@@ -0,0 +1,376 @@
+<!--预警详情-->
+<template>
+  <div class="infoPage">
+    <div class="title-box">
+      <p>预警详情</p>
+      <p></p>
+      <p class="add-button-one-90" @click="outButton">返回</p>
+    </div>
+    <div class="content-box scrollbar-box">
+      <div class="info-max-box">
+        <p class="title-p">预警信息</p>
+        <div class='info-big-box'>
+          <div class='info-box'>
+            <div>
+              <p>预警时间:</p>
+              <p>{{infoData.warningTime}}</p>
+            </div>
+          </div>
+          <div class='info-box'>
+            <div>
+              <p>预警类型:</p>
+              <p>{{infoData.warningType==1?'算法识别':(infoData.warningType==2?'化学品':(infoData.warningType==3?'气瓶':'-'))}}</p>
+            </div>
+          </div>
+          <div class='info-box'>
+            <div>
+              <p>预警内容:</p>
+              <p>{{infoData.warningContent}}</p>
+            </div>
+          </div>
+          <div class='info-box'>
+            <div>
+              <p>通知方式:</p>
+              <p><span>{{infoData.warningWay}}</span></p>
+            </div>
+          </div>
+          <div class='info-box'>
+            <div>
+              <p>位置:</p>
+              <p>{{infoData.subName}}-{{infoData.buildName}}{{infoData.floorName}}{{infoData.roomNum}}</p>
+            </div>
+          </div>
+        </div>
+        <p class="border-p"></p>
+      </div>
+      <div class="info-max-box" v-if="infoData.warningType==2">
+        <p class="title-p">化学品信息</p>
+        <div class='info-big-box'>
+          <div class='info-box'>
+            <div>
+              <p>化学品名称:</p>
+              <p>{{infoData.name}}</p>
+            </div>
+          </div>
+          <div class='info-box'>
+            <div>
+              <p>化学品余量:</p>
+              <p>{{infoData.margin}}</p>
+            </div>
+          </div>
+          <div class='info-box'>
+            <div>
+              <p>化学品规格:</p>
+              <p>{{infoData.specification}}</p>
+            </div>
+          </div>
+          <div class='info-box' v-if="infoData.warningSubType==2">
+            <div>
+              <p>申领人:</p>
+              <p>{{infoData.applyUser}}</p>
+            </div>
+          </div>
+          <div class='info-box' v-if="infoData.warningSubType==2">
+            <div>
+              <p>申领时间:</p>
+              <p>{{infoData.applyTime}}</p>
+            </div>
+          </div>
+          <div class='info-box' v-if="infoData.warningSubType==3 || infoData.warningSubType==4">
+            <div>
+              <p>过期时间:</p>
+              <p>{{infoData.expirationTime}}</p>
+            </div>
+          </div>
+          <div class='info-box'>
+            <div>
+              <p>存放位置:</p>
+              <p>{{infoData.deposit}}</p>
+            </div>
+          </div>
+        </div>
+        <p class="border-p" v-if="infoData.data15 || infoData.data16 || infoData.data17"></p>
+      </div>
+      <div class="info-max-box" v-if="infoData.warningType==3">
+        <p class="title-p">气瓶信息</p>
+        <div class='info-big-box'>
+          <div class='info-box'>
+            <div>
+              <p>气体名称:</p>
+              <p>{{infoData.name}}</p>
+            </div>
+          </div>
+          <div class='info-box'>
+            <div>
+              <p>气体余量:</p>
+              <p>{{infoData.margin}}</p>
+            </div>
+          </div>
+          <div class='info-box'>
+            <div>
+              <p>气瓶规格:</p>
+              <p>{{infoData.specification}}</p>
+            </div>
+          </div>
+          <div class='info-box' v-if="infoData.warningSubType==2">
+            <div>
+              <p>申领人:</p>
+              <p>{{infoData.applyUser}}</p>
+            </div>
+          </div>
+          <div class='info-box' v-if="infoData.warningSubType==2">
+            <div>
+              <p>申领时间:</p>
+              <p>{{infoData.applyTime}}</p>
+            </div>
+          </div>
+        </div>
+      </div>
+      <div class="info-max-for-message-box" v-if="infoData.messageVOList.length>0">
+        <p class="title-p">短信通知</p>
+        <div class='info-big-box'>
+          <p v-for="(item,index) in infoData.messageVOList" :key="index">{{item.name}} - {{item.messageTime}}</p>
+        </div>
+      </div>
+      <div class="info-max-for-img-box" v-if="infoData.warningSubType!=2 && infoData.warningSubType!=3 && infoData.warningSubType!=4">
+        <p class="title-p">报警抓拍</p>
+        <div class='info-big-box'>
+          <div v-if="infoData.warningType!=1" class="for-video-box"  @click="lookVideo(videoUrl+infoData.recordVideo,'')">
+            <video :src="videoUrl+infoData.recordVideo" controls="controls"></video>
+            <p class="el-icon-video-play positionP"></p>
+          </div>
+          <div v-if="infoData.warningType==1" class="for-img-box" v-for="(item,index) in infoData.warningDetailList" :key="index" @click="lookImg(infoData.warningDetailList,index)">
+            <img :src="item.photoUrl">
+          </div>
+        </div>
+      </div>
+    </div>
+    <lookImgDialog ref="lookImgDialog"></lookImgDialog>
+    <lookVideoDialog ref="lookVideoDialog"></lookVideoDialog>
+  </div>
+</template>
+
+<script>
+  import { warningNoticeLogDetail} from '@/api/laboratory/warningNotice'
+  import lookImgDialog from '@/components/lookImgDialog/lookImgDialog.vue'
+  import lookVideoDialog from '@/components/lookVideoDialog/lookVideoDialog.vue'
+  export default {
+    name: 'infoPage',
+    components: {
+      lookImgDialog,
+      lookVideoDialog
+    },
+    props:{
+      pageData: {},
+    },
+    data(){
+      return{
+        videoUrl: window.location.href.split('://')[0]+'://' + process.env.VUE_APP_BASE_API,
+        infoData:{
+          messageVOList:[],
+        },
+        data17:[
+          {fileName:"",fileUrl:"http://192.168.1.43/statics/2023/06/06/baba141f-05b4-4d3a-b4e6-81d67096cfd1.jpg"},
+          {fileName:"",fileUrl:"http://192.168.1.43/statics/2023/06/06/0e76d4b5-536e-449b-b8ce-7fa9ff48ced6.jpg"},
+        ],
+
+      }
+    },
+    created(){
+    },
+    mounted(){
+      this.getInfo();
+    },
+    methods:{
+      //查看视屏
+      lookVideo(item){
+        this.$refs.lookVideoDialog.lookVideoDialogOpen(1,item,'报警抓拍');
+      },
+      //查看图片
+      lookImg(list,index){
+        for(let i=0;i<list.length;i++){
+          list[i].url = list[i].photoUrl;
+        }
+        this.$refs.lookImgDialog.lookImgDialogOpen(1,list,index,'报警抓拍');
+      },
+      /* 详情 */
+      getInfo(){
+        warningNoticeLogDetail({id:this.pageData.id}).then( response => {
+          let res=response.data;
+          if(response.code==200){
+              this.infoData=res;
+              if(this.infoData.warningWay!='' && this.infoData.warningWay!=null){
+                this.infoData.warningWay=this.infoData.warningWay.replace(/1/, "系统通知")
+                this.infoData.warningWay=this.infoData.warningWay.replace(/2/, "短信通知")
+                this.infoData.warningWay=this.infoData.warningWay.replace(/3/, "声光报警")
+                this.infoData.warningWay=this.infoData.warningWay.replace(/4/, "语音播报")
+                this.infoData.warningWay=this.infoData.warningWay.replace(/5/, "电话通知")
+                if (this.infoData.warningWay.endsWith(',')) {
+                  this.infoData.warningWay=this.infoData.warningWay.replace(/,/, " ")
+                }
+                this.infoData.warningWay= this.infoData.warningWay.replace(/,/g, "+");
+
+              }else{
+                this.infoData.warningWay='-'
+              }
+          }
+        });
+
+      },
+      //返回事件
+      outButton(){
+        this.$parent.goPage(1);
+      },
+    }
+  }
+</script>
+
+<style scoped lang="scss">
+  .infoPage{
+    font-weight: 500;
+    flex: 1;
+    display: flex !important;
+    flex-direction: column;
+    overflow: hidden;
+    .title-box{
+      display: flex;
+      border-bottom:1px solid #dedede;
+      p:nth-child(1){
+        margin-left:20px;
+        line-height: 80px;
+        font-size:18px;
+        color:#0045AF;
+      }
+      p:nth-child(2){
+        flex:1;
+      }
+      p:nth-child(3){
+        margin:20px;
+      }
+    }
+    .content-box{
+      flex:1;
+      padding-bottom:40px;
+      .info-max-box{
+        margin:0 57px;
+        .title-p{
+          height:60px;
+          line-height:70px;
+          font-size:18px;
+        }
+        .info-big-box{
+          margin-left:20px;
+          .info-box{
+            width:450px;
+            display: inline-block;
+            overflow:hidden;
+            margin-right:22px;
+            div{
+              display: flex;
+              line-height:24px;
+              padding:16px 0;
+              font-size:16px;
+              p:nth-child(1){
+                width:100px;
+                text-align: right;
+              }
+              p:nth-child(2){
+                flex:1;
+                overflow: hidden;
+                text-overflow:ellipsis;
+                white-space:nowrap;
+              }
+            }
+          }
+        }
+        .border-p{
+          height:1px;
+          background-color: #D8D8D8;
+          margin:0 24px;
+        }
+      }
+      .info-max-for-message-box{
+        margin:0 57px;
+        .title-p{
+          height:60px;
+          line-height:70px;
+          font-size:18px;
+        }
+        .info-big-box{
+          margin-left:40px;
+          p{
+            line-height:24px;
+            padding:16px 0;
+            font-size:16px;
+            width:320px;
+            display: inline-block;
+            overflow:hidden;
+            text-overflow:ellipsis;
+            white-space:nowrap;
+            margin-right:30px;
+          }
+        }
+        .border-p{
+          height:1px;
+          background-color: #D8D8D8;
+          margin:0 24px;
+        }
+      }
+      .info-max-for-img-box{
+        margin:0 57px;
+        .title-p{
+          height:60px;
+          line-height:70px;
+          font-size:18px;
+        }
+        .info-big-box{
+          margin-left:40px;
+          .for-video-box{
+            cursor: pointer;
+            width:150px;
+            height:150px;
+            border-radius:8px;
+            display: inline-block;
+            overflow: hidden;
+            margin:0 20px 20px 0;
+            position: relative;
+            .backImg{
+              width:150px;
+              height:150px;
+            }
+            .positionP{
+              width:150px;
+              height:150px;
+              line-height:150px;
+              text-align: center;
+              position: absolute;
+              top:0;
+              left:0;
+              color:#fff;
+              font-size:60px;
+              z-index: 10;
+            }
+          }
+          .for-img-box{
+            cursor: pointer;
+            width:150px;
+            height:150px;
+            border-radius:8px;
+            display: inline-block;
+            overflow: hidden;
+            margin:0 20px 20px 0;
+            img{
+              width:150px;
+              height:150px;
+            }
+          }
+        }
+        .border-p{
+          height:1px;
+          background-color: #D8D8D8;
+          margin:0 24px;
+        }
+      }
+    }
+  }
+</style>

+ 237 - 0
src/views/comprehensive/message/warningNotice/sourceOfDangerForewarning.vue

@@ -0,0 +1,237 @@
+<!--危险源预警-->
+<template>
+  <div class="sourceOfDangerForewarning">
+    <div class="title-box">
+      <p>危险源预警配置</p>
+      <p></p>
+    </div>
+    <div class="content-box scrollbar-box">
+      <el-form class="form-max-box" ref="addForm" :model="addForm" :rules="rules" label-width="170px">
+        <p class="form-title-p">化学品预警规则</p>
+        <div class="form-top-box">
+          <el-form-item class="form-item-box" label="即将过期提醒" prop="unexpiredWarnDays">
+            <el-input-number style="width:320px" v-model="addForm.unexpiredWarnDays" placeholder="请输入即将过期提醒天数(天)" :min="5" :max="60" label=""></el-input-number>
+          </el-form-item>
+          <el-form-item class="form-item-box" label="过期提醒数" prop="expiredWarnCount">
+            <el-input-number style="width:320px" v-model="addForm.expiredWarnCount" placeholder="请输入化学品过期后提醒次数" :min="1" :max="5" label=""></el-input-number>
+          </el-form-item>
+        </div>
+        <el-form-item class="form-item-check-box" label="违规带离">
+          <el-checkbox-group v-model="addForm.illegalRemoval">
+            <el-checkbox style="width:100px;margin-top:2px;"
+                         v-for="item in checkListA" :value="item.key" :label="item.key" :key="item.key">{{item.value}}</el-checkbox>
+          </el-checkbox-group>
+        </el-form-item>
+        <el-form-item class="form-item-check-box" label="超时未归还">
+          <el-checkbox-group v-model="addForm.timeout">
+            <el-checkbox style="width:100px;margin-top:2px;"
+                         v-for="item in checkListA" :value="item.key" :label="item.key" :key="item.key">{{item.value}}</el-checkbox>
+          </el-checkbox-group>
+        </el-form-item>
+        <el-form-item class="form-item-check-box" label="化学品已过期">
+          <el-checkbox-group v-model="addForm.expired">
+            <el-checkbox style="width:100px;margin-top:2px;"
+                         v-for="item in checkListC" :value="item.key" :label="item.key" :key="item.key">{{item.value}}</el-checkbox>
+          </el-checkbox-group>
+        </el-form-item>
+        <el-form-item class="form-item-check-box" label="化学品即将过期">
+          <el-checkbox-group v-model="addForm.unexpired">
+            <el-checkbox style="width:100px;margin-top:2px;"
+                         v-for="item in checkListC" :value="item.key" :label="item.key" :key="item.key">{{item.value}}</el-checkbox>
+          </el-checkbox-group>
+        </el-form-item>
+        <p class="form-title-p" style="margin-top:20px;margin-bottom:10px;">气瓶预警规则</p>
+        <el-form-item class="form-item-check-box" label="违规带离">
+          <el-checkbox-group v-model="addForm2.illegalRemoval">
+            <el-checkbox style="width:100px;margin-top:2px;"
+                         v-for="item in checkListB" :value="item.key" :label="item.key" :key="item.key">{{item.value}}</el-checkbox>
+          </el-checkbox-group>
+        </el-form-item>
+        <el-form-item class="form-item-check-box" label="超时未归还">
+          <el-checkbox-group v-model="addForm2.timeout">
+            <el-checkbox style="width:100px;margin-top:2px;"
+                         v-for="item in checkListB" :value="item.key" :label="item.key" :key="item.key">{{item.value}}</el-checkbox>
+          </el-checkbox-group>
+        </el-form-item>
+      </el-form>
+    </div>
+    <div class="bottom-button-max-box">
+      <p></p>
+      <p class="reset-button-one" @click="outButton">取消</p>
+      <p class="inquire-button-one" @click="upDataButton">提交</p>
+      <p></p>
+    </div>
+  </div>
+</template>
+
+<script>
+import { warningConfigAdd, warningConfigList } from '@/api/laboratory/warningNotice'
+
+  export default {
+    name: 'sourceOfDangerForewarning',
+    data(){
+      return{
+        checkListA:[{key:"1",value:"系统通知"},{key:"2",value:"短信通知"},{key:"3",value:"声光报警"},{key:"5",value:"电话通知"},],
+        checkListB:[{key:"1",value:"系统通知"},{key:"2",value:"短信通知"},{key:"3",value:"声光报警"},],
+        checkListC:[{key:"1",value:"系统通知"},{key:"2",value:"短信通知"}],
+        addForm:{//化学品
+          id:'',
+          unexpiredWarnDays:7,
+          expiredWarnCount:2,
+          illegalRemoval:[],
+          timeout:[],
+          expired:[],
+          unexpired:[],
+          warningType:2,
+
+        },
+        addForm2:{//气瓶
+          id:'',
+          illegalRemoval:[],
+          timeout:[],
+          expired:[],
+          unexpired:[],
+          warningType:3,
+        },
+        rules:{
+          unexpiredWarnDays: [
+            { required: true, message: "请输入即将过期提醒天数(天)", trigger: "blur" },
+          ],
+          expiredWarnCount: [
+            { required: true, message: "请输入化学品过期后提醒次数", trigger: "blur" },
+          ],
+        },
+      }
+    },
+    created(){
+
+    },
+    mounted(){
+      this.getInfo();
+    },
+    methods:{
+      /* 详情 */
+      getInfo(){
+        warningConfigList({warningType:'2'}).then( response => {
+          let res=response.data[0];
+          if(response.code==200 && res){
+            this.addForm.id=res.id
+            this.addForm.unexpiredWarnDays=res.unexpiredWarnDays
+            this.addForm.expiredWarnCount=res.expiredWarnCount
+            this.addForm.illegalRemoval=res.illegalRemoval.split(',')
+            this.addForm.timeout=res.timeout.split(',')
+            this.addForm.expired=res.expired.split(',')
+            this.addForm.unexpired=res.unexpired.split(',')
+          }
+        });
+        warningConfigList({warningType:'3'}).then( response => {
+          let res=response.data[0];
+          if(response.code==200 && res){
+            this.addForm2.id=res.id
+            this.addForm2.illegalRemoval=res.illegalRemoval.split(',')
+            this.addForm2.timeout=res.timeout.split(',')
+            this.addForm2.expired=res.expired.split(',')
+            this.addForm2.unexpired=res.unexpired.split(',')
+          }
+        });
+      },
+      //提交
+      upDataButton(){
+        this.$refs["addForm"].validate(valid => {
+          if (valid) {
+            let obj=[];
+            obj.push(this.addForm)
+            obj.push(this.addForm2)
+            for(let i=0;i<obj.length;i++){
+              obj[i].illegalRemoval=obj[i].illegalRemoval.join(',');
+              obj[i].timeout=obj[i].timeout.join(',');
+              obj[i].expired=obj[i].expired.join(',');
+              obj[i].unexpired=obj[i].unexpired.join(',');
+            }
+            warningConfigAdd(obj).then((response) => {
+              if(response.code==200){
+                this.outButton();
+              }
+            });
+          }
+        })
+      },
+      //返回事件
+      outButton(){
+        this.$parent.goPage(1);
+      },
+    }
+  }
+</script>
+
+<style scoped lang="scss">
+  .sourceOfDangerForewarning{
+    font-weight: 500;
+    flex: 1;
+    display: flex !important;
+    flex-direction: column;
+    overflow: hidden;
+    ::v-deep .el-input-number__increase{
+      line-height: 38px;
+    }
+    .title-box{
+      display: flex;
+      border-bottom:1px solid #dedede;
+      p:nth-child(1){
+        margin-left:20px;
+        line-height: 80px;
+        font-size:18px;
+        color:#0045AF;
+      }
+      p:nth-child(2){
+        flex:1;
+      }
+      p:nth-child(3){
+        margin:20px;
+      }
+    }
+    .content-box{
+      flex:1;
+      padding-top:30px;
+
+      .form-max-box{
+        .form-top-box{
+          display: flex;
+          margin-top:30px;
+          height:60px;
+          .form-item-box{
+            height:60px;
+            margin-bottom:0;
+          }
+        }
+        .form-item-check-box{
+          margin:0;
+        }
+        .form-title-p{
+          line-height:50px;
+          color:#0045AF;
+          background-color: #F5F5F5;
+          font-size:16px;
+          padding-left:20px;
+        }
+      }
+    }
+    .bottom-button-max-box{
+      display: flex;
+      padding:20px 0;
+      p:nth-child(1){
+        flex:1;
+      }
+      p:nth-child(2){
+        width:100px;
+        margin-right:20px;
+      }
+      p:nth-child(3){
+        width:100px;
+      }
+      p:nth-child(4){
+        flex:1;
+      }
+    }
+  }
+</style>

+ 13 - 9
src/views/emergencyManagement/plan/newAddPlan.vue

@@ -1,7 +1,7 @@
 <template>
   <div class="newAddPlan">
     <div class="newAddPlan-title-box">
-      <p>定制预案</p>
+      <p>定制预案1</p>
       <p class="add-button-two-90" @click="backButton">返回</p>
       <!--<p class="inquire-button-one" @click="upDataButton(1)">不关联仅保存</p>-->
       <p class="inquire-button-one" @click="associatedDialogClick">关联实验室</p>
@@ -29,9 +29,12 @@
             <div class="for-plan-img-box">
               <p class="for-plan-img-null-p"></p>
               <div class="for-plan-img-box-big">
-                <div class="for-plan-img-box-one" v-if="item.ifExit == 1">
-                  <img src="@/assets/ZDimages/evacuation3_2/img_dzya_ldss.png">
-                  <p>联动疏散</p>
+                <div class="for-plan-img-box-one">
+                  <img v-if="item.riskPlanLevel==1" src="@/assets/ZDimages/evacuation3_2/icon_dzya_dfx.png">
+                  <img v-if="item.riskPlanLevel==2" src="@/assets/ZDimages/evacuation3_2/icon_dzya_zfx.png">
+                  <img v-if="item.riskPlanLevel==3" src="@/assets/ZDimages/evacuation3_2/icon_dzya_jgfx.png">
+                  <img v-if="item.riskPlanLevel==4" src="@/assets/ZDimages/evacuation3_2/icon_dzya_gfx.png">
+<!--                  <p>联动疏散</p>-->
                 </div>
                 <!--<div class="for-plan-img-box-two">-->
                 <!--<img src="@/assets/ZDimages/evacuation3_2/img_dzya_hzyj.png">-->
@@ -77,7 +80,8 @@
         <p class="plan-for-max-button-null"></p>
       </div>
     </div>
-    <el-dialog :title='dialogTitle' v-if="dialogOpen" :visible.sync="dialogOpen" width="800px" @close='closeDialog'>
+    <el-dialog :title='dialogTitle' v-if="dialogOpen" :visible.sync="dialogOpen" width="800px" @close='closeDialog'
+               :close-on-click-modal="false">
       <div class="scrollbar-box" style="height:600px;">
         <el-form :model="dialogForm" ref="dialogForm" :rules="rules" label-width="100px">
           <el-form-item label="预案等级:" prop="riskPlanLevel">
@@ -936,7 +940,7 @@
           background:  rgba(248,206,205);;
         }
         .for-plan-img-box{
-          width:284px;
+          width:220px;
           display: flex;
           flex-direction: column;
           .for-plan-img-null-p{
@@ -945,12 +949,12 @@
           .for-plan-img-box-big{
             display: flex;
             .for-plan-img-box-one{
-              margin-left:81px;
+              margin-left:100px;
               width:168px;
               display: flex;
               img{
-                height:50px;
-                width:50px;
+                height:60px;
+                width:60px;
               }
               p{
                 margin-left:20px;

+ 106 - 141
src/views/emergencyManagement/smartLoT/hardware/powerControl.vue

@@ -29,25 +29,12 @@
           <p v-else :class="scope.row.status==0?'table-type-color-red':''">{{scope.row.status==0?'离线':'未知'}}</p>
         </template>
       </el-table-column>
-      <!--<el-table-column label="开关" align="left" >-->
-        <!--<template slot-scope="scope">-->
-          <!--<el-switch-->
-            <!--class="switch"-->
-            <!--@change="switchChange(scope.row.deptId)"-->
-            <!--v-model="scope.row.deptId"-->
-            <!--:active-value="1"-->
-            <!--:inactive-value="0"-->
-            <!--active-text="开"-->
-            <!--inactive-text="关"-->
-          <!--&gt;-->
-          <!--</el-switch>-->
-        <!--</template>-->
-      <!--</el-table-column>-->
       <el-table-column label="操作" align="left" class-name="small-padding fixed-width" width="120" v-if="tableButtonType">
         <template slot-scope="scope">
-          <div class="button-box">
+          <div class="table-button-box">
+            <p class="table-button-null"></p>
             <el-dropdown @command="moreClick">
-              <p class="table-min-button">更多>></p>
+              <p class="table-button-p">更多>></p>
               <el-dropdown-menu slot="dropdown">
                 <el-dropdown-item style="border-bottom:1px solid #E0E0E0;margin:0 10px;" :command="{row:scope.row,command:1}"
                                   v-hasPermiAnd="['laboratory:hardware:query','laboratory:hardware:edit']">修改设备</el-dropdown-item>
@@ -55,6 +42,7 @@
                                   v-hasPermi="['laboratory:hardware:remove']">删除设备</el-dropdown-item>
               </el-dropdown-menu>
             </el-dropdown>
+            <p class="table-button-null"></p>
           </div>
         </template>
       </el-table-column>
@@ -68,121 +56,100 @@
       @pagination="getList"
     />
     <!-- 添加或修改硬件对话框 -->
-    <el-drawer
-      class="videoSurveillance-drawer"
-      :visible.sync="drawer"
-      direction="rtl"
-      ref="drawer"
-      :with-header="false"
-      :show-close="false"
-      :before-close="handleClose">
-      <div class="videoSurveillance-drawer-max-box">
-        <div class="videoSurveillance-drawer-content">
-          <el-form ref="form" :model="form"  :rules="rules" label-width="80px">
-            <el-form-item label="硬件名称"  prop="name">
-              <el-input
-                v-model="form.name"
-                placeholder="请输入硬件名称"
-                clearable
-                size="small"
-                maxLength="8"
-              />
-            </el-form-item>
-            <el-form-item label="硬件类型" v-if="pageType==''" prop="type">
-              <el-select v-model="form.type" placeholder="请选择硬件类型">
-                <el-option label="请选择硬件类型" value="" />
-                <el-option v-for="hardType in hardTypeOptions"
-                           :key="hardType.enumName"
-                           :label="hardType.name"
-                           :value="hardType.enumName">
-                </el-option>
-              </el-select>
-            </el-form-item>
-            <el-form-item label="实验室" prop="subjectId">
-              <el-select v-model="form.subjectId" placeholder="请选择实验室">
-                <el-tooltip class="item" effect="dark" :content="lab.name" placement="top" v-for="lab in labListOptions">
-                  <el-option style="max-width: 200px"
-                             :key="lab.id"
-                             :label="lab.name"
-                             :value="lab.id">
-                  </el-option>
-                </el-tooltip>
-              </el-select>
-            </el-form-item>
-<!--            <el-form-item label="继电器类型" label-width="1rem">-->
-<!--              <el-radio-group v-model="form.hardwareType" @change="radioChange">-->
-<!--                <el-radio :label="item.value" :key="item.value" v-for="(item,index) in hardwardTypeList">{{item.label}}</el-radio>-->
-<!--              </el-radio-group>-->
-<!--            </el-form-item>-->
-            <el-form-item label="继电器类型" prop="relayCode">
-              <el-select v-model="form.hardwareType" placeholder="请选择继电器" clearable @change="radioChange" @clear="loadClear">
-                <el-option v-for="relay in hardwardTypeList"
-                           :key="relay.value"
-                           :label="relay.label"
-                           :value="relay.value">
-                </el-option>
-              </el-select>
-            </el-form-item>
-            <el-form-item label="绑定继电器" prop="relayCode" v-if="form.hardwareType==1 || form.hardwareType==3">
-              <el-select v-model="form.relayCode" placeholder="请选择继电器" clearable @change="loadRelayNum" @clear="loadClear">
-                <el-option v-for="relay in relayList"
-                           :key="relay.code"
-                           :label="relay.code"
-                           :value="relay.code">
-                </el-option>
-              </el-select>
-            </el-form-item>
-            <el-form-item label="继电器编号"  prop="relayCode" v-if="form.hardwareType==2">
-              <el-input
-                v-model="form.relayCode"
-                placeholder="请输入继电器编号"
-                clearable
-                size="small"
-                maxlength="20"
-              />
-            </el-form-item>
-            <el-form-item label="继电器位置" prop="bit" >
-              <el-select v-model="form.bit" placeholder="请选择继电器位置" clearable >
-                <el-option v-for="lab in relayNumList"
-                           :key="lab.name"
-                           :label="lab.name"
-                           :value="lab.name">
-                </el-option>
-              </el-select>
-            </el-form-item>
-            <el-form-item label="是否灭火主机" prop="isPcfire">
-              <el-radio-group v-model="form.isPcfire">
-                <el-radio :label="0">否</el-radio>
-                <el-radio :label="1">是</el-radio>
-              </el-radio-group>
-            </el-form-item>
-            <el-form-item label="配置名称"  prop="relayCode" v-if="form.hardwareType==2">
-              <el-input
-                v-model="form.configName"
-                placeholder="请输入配置名称"
-                clearable
-                size="small"
-                maxLength="15"
-              />
-            </el-form-item>
-            <el-form-item label="配置状态"  prop="relayCode" v-if="form.hardwareType==2">
-              <el-input
-                v-model="form.configStatus"
-                placeholder="请输入配置状态"
-                clearable
-                size="small"
-                maxLength="8"
-              />
-            </el-form-item>
-          </el-form>
-        </div>
-        <div class="videoSurveillance-bottom-button-box">
-          <p></p>
-          <p @click="offDrawer">取消</p>
-          <p @click="submitForm">提交</p>
-        </div>
+    <el-dialog :title=dialogTitle :visible.sync="dialogVisible " @close="handleClose" width="500px" append-to-body :close-on-click-modal="false">
+      <el-form ref="form" :model="form"  :rules="rules" label-width="120px">
+        <el-form-item label="硬件名称"  prop="name">
+          <el-input
+            v-model="form.name"
+            placeholder="请输入硬件名称"
+            clearable
+            size="small"
+            maxLength="8"
+          />
+        </el-form-item>
+        <el-form-item label="硬件类型" v-if="pageType==''" prop="type">
+          <el-select v-model="form.type" placeholder="请选择硬件类型">
+            <el-option label="请选择硬件类型" value="" />
+            <el-option v-for="hardType in hardTypeOptions"
+                       :key="hardType.enumName"
+                       :label="hardType.name"
+                       :value="hardType.enumName">
+            </el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="实验室" prop="subjectId">
+          <el-select v-model="form.subjectId" placeholder="请选择实验室">
+            <el-tooltip class="item" effect="dark" :content="lab.name" placement="top" v-for="lab in labListOptions">
+              <el-option style="max-width: 200px"
+                         :key="lab.id"
+                         :label="lab.name"
+                         :value="lab.id">
+              </el-option>
+            </el-tooltip>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="继电器类型">
+          <el-radio-group v-model="form.hardwareType" @change="radioChange">
+            <el-radio :label="item.value" :key="item.value" v-for="(item,index) in hardwardTypeList">{{item.label}}</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="绑定继电器" prop="relayCode" v-if="form.hardwareType==1 || form.hardwareType==3">
+          <el-select v-model="form.relayCode" placeholder="请选择继电器" clearable @change="loadRelayNum" @clear="loadClear">
+            <el-option v-for="relay in relayList"
+                       :key="relay.code"
+                       :label="relay.code"
+                       :value="relay.code">
+            </el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="继电器编号"  prop="relayCode" v-if="form.hardwareType==2">
+          <el-input
+            v-model="form.relayCode"
+            placeholder="请输入继电器编号"
+            clearable
+            size="small"
+            maxlength="20"
+          />
+        </el-form-item>
+        <el-form-item label="继电器位置" prop="bit" >
+          <el-select v-model="form.bit" placeholder="请选择继电器位置" clearable >
+            <el-option v-for="lab in relayNumList"
+                       :key="lab.name"
+                       :label="lab.name"
+                       :value="lab.name">
+            </el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="是否灭火主机" prop="isPcfire">
+          <el-radio-group v-model="form.isPcfire">
+            <el-radio :label="0">否</el-radio>
+            <el-radio :label="1">是</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="配置名称"  prop="relayCode" v-if="form.hardwareType==2">
+          <el-input
+            v-model="form.configName"
+            placeholder="请输入配置名称"
+            clearable
+            size="small"
+            maxLength="15"
+          />
+        </el-form-item>
+        <el-form-item label="配置状态"  prop="relayCode" v-if="form.hardwareType==2">
+          <el-input
+            v-model="form.configStatus"
+            placeholder="请输入配置状态"
+            clearable
+            size="small"
+            maxLength="8"
+          />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="offDrawer">取消</el-button>
+        <el-button style="width:100px;" type="primary" @click="submitForm">提交</el-button>
       </div>
-    </el-drawer>
+    </el-dialog>
   </div>
 </template>
 
@@ -206,6 +173,8 @@
     name: "powerControl",
     data() {
       return {
+        dialogVisible:false,
+        dialogTitle:'新增',
         tableButtonType:this.hasPermiDom(['laboratory:hardware:query','laboratory:hardware:edit','laboratory:hardware:remove']),
         index:'',
         // 遮罩层
@@ -421,11 +390,7 @@
       },
       //弹窗关闭前回调
       handleClose(done) {
-        this.$confirm('确认关闭?')
-          .then(_ => {
-            done();
-          })
-          .catch(_ => {});
+        this.dialogVisible=false;
       },
       //更多选项
       moreClick(item){
@@ -705,8 +670,8 @@
         this.form.hardwareType=1;
         this.form.isPcfire=0;
         this.form.type=this.pageType;
-        this.drawer = true;
-        this.title = "添加硬件";
+        this.dialogVisible = true;
+        this.dialogTitle = "添加硬件";
         this.getHardTypeList();
         this.getLabList();
         this.getRelayList();
@@ -728,8 +693,8 @@
           this.form = response.data;
           this.$forceUpdate;
           this.getRelayList()
-          this.title = "修改硬件";
-          this.drawer = true;
+          this.dialogTitle = "修改硬件";
+          this.dialogVisible = true;
         });
       },
       /** 提交按钮 */
@@ -746,13 +711,13 @@
             if (this.form.id != null) {
               updateHardware(this.form).then(response => {
                 this.msgSuccess("修改成功");
-                this.drawer = false;
+                this.dialogVisible = false;
                 this.getList();
               });
             } else {
               addHardware(this.form).then(response => {
                 this.msgSuccess("新增成功");
-                this.drawer = false;
+                this.dialogVisible = false;
                 this.getList();
               });
             }

+ 60 - 118
src/views/emergencyManagement/smartLoT/hardware/smartMachine.vue

@@ -1,59 +1,6 @@
 <!--硬件管理/智能一体机-->
 <template>
   <div class="smartMachine">
-    <!--<el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px" class="form-box">-->
-
-      <!--<el-form-item label="学院" prop="deptId">-->
-        <!--<el-select v-model="queryParams.deptId" placeholder="请选择学院" clearable @change="handleNodeClick">-->
-          <!--<el-option-->
-            <!--v-for="dict in deptOptions"-->
-            <!--:key="dict.deptId"-->
-            <!--:label="dict.deptName"-->
-            <!--:value="dict.deptId"-->
-          <!--&gt;</el-option>-->
-        <!--</el-select>-->
-      <!--</el-form-item>-->
-      <!--&lt;!&ndash;<el-form-item label="学院" prop="type">&ndash;&gt;-->
-        <!--&lt;!&ndash;<el-select v-model="queryParams.name" placeholder="请选择学院" clearable size="small">&ndash;&gt;-->
-          <!--&lt;!&ndash;<el-option label="请选择字典生成" value="" />&ndash;&gt;-->
-        <!--&lt;!&ndash;</el-select>&ndash;&gt;-->
-      <!--&lt;!&ndash;</el-form-item>&ndash;&gt;-->
-      <!--<el-form-item label="实验室" prop="subjectId">-->
-        <!--<el-select v-model="queryParams.subjectId" clearable placeholder="请选择实验室">-->
-          <!--<el-option-->
-            <!--v-for="item in subjectOptions"-->
-            <!--:key="item.id"-->
-            <!--:label="item.name"-->
-            <!--:value="item.id">-->
-          <!--</el-option>-->
-        <!--</el-select>-->
-      <!--</el-form-item>-->
-      <!--&lt;!&ndash;<el-form-item label="实验室" prop="type">&ndash;&gt;-->
-        <!--&lt;!&ndash;<el-select v-model="queryParams.factory" placeholder="请选择实验室" clearable size="small">&ndash;&gt;-->
-          <!--&lt;!&ndash;<el-option label="请选择字典生成" value="" />&ndash;&gt;-->
-        <!--&lt;!&ndash;</el-select>&ndash;&gt;-->
-      <!--&lt;!&ndash;</el-form-item>&ndash;&gt;-->
-      <!--<el-form-item label="状态" prop="operate">-->
-        <!--<el-select v-model="queryParams.operate" placeholder="请选择状态" clearable size="small">-->
-          <!--<el-option label="在线" value="ONLINE" />-->
-          <!--<el-option label="离线" value="OFFLINE" />-->
-          <!--<el-option label="开启" value="OPEN" />-->
-          <!--<el-option label="关闭" value="CLOSE" />-->
-        <!--</el-select>-->
-      <!--</el-form-item>-->
-      <!--<el-form-item style="float: right;">-->
-        <!--<el-col :span="1.5">-->
-          <!--<p class="add-button-one-120"-->
-             <!--@click="handleAdd"-->
-             <!--v-hasPermi="['laboratory:hardware:add']"-->
-          <!--&gt;<i class="el-icon-plus"></i>新增硬件</p>-->
-        <!--</el-col>-->
-      <!--</el-form-item>-->
-      <!--<el-form-item>-->
-        <!--<p class="inquire-button-one" @click="handleQuery">查询</p>-->
-        <!--<p class="reset-button-one" @click="resetQuery">重置</p>-->
-      <!--</el-form-item>-->
-    <!--</el-form>-->
     <el-table v-loading="loading" border :data="hardwareList" @selection-change="handleSelectionChange">
       <el-table-column label="名称" align="left" prop="name" />
       <el-table-column label="学院" align="left" prop="deptName" />
@@ -66,9 +13,10 @@
       </el-table-column>
       <el-table-column label="操作" align="left" class-name="small-padding fixed-width" width="120" v-if="tableButtonType">
         <template slot-scope="scope">
-          <div class="button-box">
+          <div class="table-button-box">
+            <p class="table-button-null"></p>
             <el-dropdown @command="moreClick">
-              <p class="table-min-button">更多>></p>
+              <p class="table-button-p">更多>></p>
               <el-dropdown-menu slot="dropdown">
                 <el-dropdown-item style="border-bottom:1px solid #E0E0E0;margin:0 10px;" :command="{row:scope.row,command:1}"
                                   v-hasPermiAnd="['laboratory:hardware:query','laboratory:hardware:edit']">修改设备</el-dropdown-item>
@@ -76,6 +24,7 @@
                                   v-hasPermi="['laboratory:hardware:remove']">删除设备</el-dropdown-item>
               </el-dropdown-menu>
             </el-dropdown>
+            <p class="table-button-null"></p>
           </div>
         </template>
       </el-table-column>
@@ -99,59 +48,7 @@
       :before-close="handleClose">
       <div class="videoSurveillance-drawer-max-box">
         <div class="videoSurveillance-drawer-content">
-          <el-form ref="form" :model="form"  :rules="rules" label-width="80px">
-            <el-form-item label="硬件名称"  prop="name">
-              <el-input
-                v-model="form.name"
-                placeholder="请输入硬件名称"
-                clearable
-                size="small"
-                maxLength="8"
-              />
-            </el-form-item>
-            <el-form-item label="硬件类型" v-if="pageType==''" prop="type">
-              <el-select v-model="form.type" placeholder="请选择硬件类型">
-                <el-option label="请选择硬件类型" value="" />
-                <el-option v-for="hardType in hardTypeOptions"
-                           :key="hardType.enumName"
-                           :label="hardType.name"
-                           :value="hardType.enumName">
-                </el-option>
-              </el-select>
-            </el-form-item>
-            <el-form-item label="设备编号" prop="hardwareNum">
-              <el-input
-                v-model="form.hardwareNum"
-                placeholder="请输入设备编号"
-                clearable
-                size="small"
-                maxlength="30"
-              />
-            </el-form-item>
-            <el-form-item label="实验室" prop="subjectId">
-              <el-select v-model="form.subjectId" placeholder="请选择实验室">
-                <el-tooltip class="item" effect="dark" :content="lab.name" placement="top" v-for="lab in labListOptions">
-                  <el-option style="max-width: 200px"
-                             :key="lab.id"
-                             :label="lab.name"
-                             :value="lab.id">
-                  </el-option>
-                </el-tooltip>
-              </el-select>
-            </el-form-item>
 
-            <!--<el-form-item label="硬件位置" prop="position">-->
-              <!--<div class="map-box" :style="'width:'+mapData.widthData*3+'px;height:'+mapData.heightData*3+'px;'">-->
-                <!--<div v-for="(item,index1) in mapData.list" v-if="isUpdate"-->
-                     <!--:style="'top:'+item.y*3+'px;left:'+item.x*3+'px;'"-->
-                     <!--@mouseenter="moveClick(index1)"-->
-                     <!--@mousedown="move">-->
-                  <!--{{form.name?form.name:'未命名'}}-->
-                <!--</div>-->
-                <!--<p class="map-p" v-for="(item) in mapList"  :style="'top:'+item.y*3+'px;left:'+item.x*3+'px;'">{{item.name}}</p>-->
-              <!--</div>-->
-            <!--</el-form-item>-->
-          </el-form>
         </div>
         <div class="videoSurveillance-bottom-button-box">
           <p></p>
@@ -160,6 +57,53 @@
         </div>
       </div>
     </el-drawer>
+    <el-dialog :title=dialogTitle :visible.sync="dialogVisible " @close="handleClose" width="500px" append-to-body :close-on-click-modal="false">
+      <el-form ref="form" :model="form"  :rules="rules">
+        <el-form-item label="硬件名称"  prop="name">
+          <el-input
+            v-model="form.name"
+            placeholder="请输入硬件名称"
+            clearable
+            size="small"
+            maxLength="8"
+          />
+        </el-form-item>
+        <el-form-item label="硬件类型" v-if="pageType==''" prop="type">
+          <el-select v-model="form.type" placeholder="请选择硬件类型">
+            <el-option label="请选择硬件类型" value="" />
+            <el-option v-for="hardType in hardTypeOptions"
+                       :key="hardType.enumName"
+                       :label="hardType.name"
+                       :value="hardType.enumName">
+            </el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="设备编号" prop="hardwareNum">
+          <el-input
+            v-model="form.hardwareNum"
+            placeholder="请输入设备编号"
+            clearable
+            size="small"
+            maxlength="30"
+          />
+        </el-form-item>
+        <el-form-item label="实验室" prop="subjectId">
+          <el-select v-model="form.subjectId" placeholder="请选择实验室">
+            <el-tooltip class="item" effect="dark" :content="lab.name" placement="top" v-for="lab in labListOptions">
+              <el-option style="max-width: 200px"
+                         :key="lab.id"
+                         :label="lab.name"
+                         :value="lab.id">
+              </el-option>
+            </el-tooltip>
+          </el-select>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="offDrawer">取消</el-button>
+        <el-button style="width:100px;" type="primary" @click="submitForm">提交</el-button>
+      </div>
+    </el-dialog>
   </div>
 </template>
 
@@ -181,6 +125,8 @@
     name: "smartMachine",
     data() {
       return {
+        dialogVisible:false,
+        dialogTitle:'新增',
         tableButtonType:this.hasPermiDom(['laboratory:hardware:query','laboratory:hardware:edit','laboratory:hardware:remove']),
         index:'',
         // 遮罩层
@@ -319,11 +265,7 @@
       },
       //弹窗关闭前回调
       handleClose(done) {
-        this.$confirm('确认关闭吗?')
-          .then(_ => {
-            done();
-          })
-          .catch(_ => {});
+        this.dialogVisible=false;
       },
       //更多选项
       moreClick(item){
@@ -480,8 +422,8 @@
         }];
         this.isUpdate=true;
         this.form.type=this.pageType;
-        this.drawer = true;
-        this.title = "添加硬件";
+        this.dialogVisible = true;
+        this.dialogTitle = "添加硬件";
         this.getHardTypeList();
         this.getLabList();
         // this.reset();
@@ -506,8 +448,8 @@
         getHardwareDetail(queryParam).then(response => {
           this.form = response.data;
           this.$forceUpdate;
-          this.title = "修改硬件";
-          this.drawer = true;
+          this.dialogTitle = "修改硬件";
+          this.dialogVisible = true;
         });
       },
       /** 提交按钮 */
@@ -524,13 +466,13 @@
             if (this.form.id != null) {
               updateHardware(this.form).then(response => {
                 this.msgSuccess("修改成功");
-                this.drawer = false;
+                this.dialogVisible = false;
                 this.getList();
               });
             } else {
               addHardware(this.form).then(response => {
                 this.msgSuccess("新增成功");
-                this.drawer = false;
+                this.dialogVisible = false;
                 this.getList();
               });
             }

+ 95 - 116
src/views/emergencyManagement/smartLoT/hardware/smartVentilation.vue

@@ -34,9 +34,10 @@
       </el-table-column>
       <el-table-column label="操作" align="left" class-name="small-padding fixed-width" width="120" v-if="tableButtonType">
         <template slot-scope="scope">
-          <div class="button-box">
+          <div class="table-button-box">
+            <p class="table-button-null"></p>
             <el-dropdown @command="moreClick">
-              <p class="table-min-button">更多>></p>
+              <p class="table-button-p">更多>></p>
               <el-dropdown-menu slot="dropdown">
                 <el-dropdown-item style="border-bottom:1px solid #E0E0E0;margin:0 10px;" :command="{row:scope.row,command:1}"
                                   v-hasPermiAnd="['laboratory:hardware:query','laboratory:hardware:edit']">修改设备</el-dropdown-item>
@@ -44,6 +45,7 @@
                                   v-hasPermi="['laboratory:hardware:remove']">删除设备</el-dropdown-item>
               </el-dropdown-menu>
             </el-dropdown>
+            <p class="table-button-null"></p>
           </div>
         </template>
       </el-table-column>
@@ -57,110 +59,89 @@
       @pagination="getList"
     />
     <!-- 添加或修改硬件对话框 -->
-    <el-drawer
-      class="videoSurveillance-drawer"
-      :visible.sync="drawer"
-      direction="rtl"
-      ref="drawer"
-      :with-header="false"
-      :show-close="false"
-      :before-close="handleClose">
-      <div class="videoSurveillance-drawer-max-box">
-        <div class="videoSurveillance-drawer-content">
-          <el-form ref="form" :model="form"  :rules="rules" label-width="80px">
-            <el-form-item label="硬件名称"  prop="name">
-              <el-input
-                v-model="form.name"
-                placeholder="请输入硬件名称"
-                clearable
-                size="small"
-                maxLength="8"
-              />
-            </el-form-item>
-            <el-form-item label="实验室" prop="subjectId">
-              <el-select v-model="form.subjectId" placeholder="请选择实验室">
-                <el-tooltip class="item" effect="dark" :content="lab.name" placement="top" v-for="lab in labListOptions">
-                  <el-option style="max-width: 200px"
-                             :key="lab.id"
-                             :label="lab.name"
-                             :value="lab.id">
-                  </el-option>
-                </el-tooltip>
-              </el-select>
-            </el-form-item>
-<!--            <el-form-item label="继电器类型" label-width="1rem" @change="radioChange">-->
-<!--              <el-radio-group v-model="form.hardwareType">-->
-<!--                <el-radio :label="item.value" :key="item.value" v-for="item in hardwardTypeList">{{item.label}}</el-radio>-->
-<!--              </el-radio-group>-->
-<!--            </el-form-item>-->
-            <el-form-item label="继电器类型" prop="relayCode">
-              <el-select v-model="form.hardwareType" placeholder="请选择继电器" clearable @change="radioChange" @clear="loadClear">
-                <el-option v-for="relay in hardwardTypeList"
-                           :key="relay.value"
-                           :label="relay.label"
-                           :value="relay.value">
-                </el-option>
-              </el-select>
-            </el-form-item>
-            <el-form-item label="通风类型" label-width="1rem">
-              <el-radio-group v-model="form.pcType">
-                <el-radio :label="item.value" :key="item.value" v-for="item in hardwardTypeListOne">{{item.label}}</el-radio>
-              </el-radio-group>
-            </el-form-item>
-            <el-form-item label="绑定继电器" prop="relayCode" v-if="form.hardwareType==1 || form.hardwareType==3">
-              <el-select v-model="form.relayCode" placeholder="请选择继电器" clearable @change="loadRelayNum" @clear="loadClear">
-                <el-option v-for="relay in relayList"
-                           :key="relay.code"
-                           :label="relay.code"
-                           :value="relay.code">
-                </el-option>
-              </el-select>
-            </el-form-item>
-            <el-form-item label="继电器编号"  prop="relayCode" v-if="form.hardwareType==2">
-              <el-input
-                v-model="form.relayCode"
-                placeholder="请输入继电器编号"
-                clearable
-                size="small"
-                maxLength="15"
-              />
-            </el-form-item>
-            <el-form-item label="继电器位置" prop="bit">
-              <el-select v-model="form.bit" placeholder="请选择继电器位置" clearable>
-                <el-option v-for="lab in relayNumList"
-                           :key="lab.name"
-                           :label="lab.name"
-                           :value="lab.name">
-                </el-option>
-              </el-select>
-            </el-form-item>
-            <el-form-item label="配置名称"  prop="relayCode" v-if="form.hardwareType==2">
-              <el-input
-                v-model="form.configName"
-                placeholder="请输入配置名称"
-                clearable
-                size="small"
-                maxLength="8"
-              />
-            </el-form-item>
-            <el-form-item label="配置状态"  prop="relayCode" v-if="form.hardwareType==2">
-              <el-input
-                v-model="form.configStatus"
-                placeholder="请输入配置状态"
-                clearable
-                size="small"
-                maxLength="8"
-              />
-            </el-form-item>
-          </el-form>
-        </div>
-        <div class="videoSurveillance-bottom-button-box">
-          <p></p>
-          <p @click="offDrawer">取消</p>
-          <p @click="submitForm">提交</p>
-        </div>
+    <el-dialog :title=dialogTitle :visible.sync="dialogVisible " @close="handleClose" width="500px" append-to-body :close-on-click-modal="false">
+      <el-form ref="form" :model="form"  :rules="rules" label-width="100px">
+        <el-form-item label="硬件名称"  prop="name">
+          <el-input
+            v-model="form.name"
+            placeholder="请输入硬件名称"
+            clearable
+            size="small"
+            maxLength="8"
+          />
+        </el-form-item>
+        <el-form-item label="实验室" prop="subjectId">
+          <el-select v-model="form.subjectId" placeholder="请选择实验室">
+            <el-tooltip class="item" effect="dark" :content="lab.name" placement="top" v-for="lab in labListOptions">
+              <el-option style="max-width: 200px"
+                         :key="lab.id"
+                         :label="lab.name"
+                         :value="lab.id">
+              </el-option>
+            </el-tooltip>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="继电器类型"  @change="radioChange">
+          <el-radio-group v-model="form.hardwareType">
+            <el-radio :label="item.value" :key="item.value" v-for="item in hardwardTypeList">{{item.label}}</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="通风类型">
+          <el-radio-group v-model="form.pcType">
+            <el-radio :label="item.value" :key="item.value" v-for="item in hardwardTypeListOne">{{item.label}}</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="绑定继电器" prop="relayCode" v-if="form.hardwareType==1 || form.hardwareType==3">
+          <el-select v-model="form.relayCode" placeholder="请选择继电器" clearable @change="loadRelayNum" @clear="loadClear">
+            <el-option v-for="relay in relayList"
+                       :key="relay.code"
+                       :label="relay.code"
+                       :value="relay.code">
+            </el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="继电器编号"  prop="relayCode" v-if="form.hardwareType==2">
+          <el-input
+            v-model="form.relayCode"
+            placeholder="请输入继电器编号"
+            clearable
+            size="small"
+            maxLength="15"
+          />
+        </el-form-item>
+        <el-form-item label="继电器位置" prop="bit">
+          <el-select v-model="form.bit" placeholder="请选择继电器位置" clearable>
+            <el-option v-for="lab in relayNumList"
+                       :key="lab.name"
+                       :label="lab.name"
+                       :value="lab.name">
+            </el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="配置名称"  prop="relayCode" v-if="form.hardwareType==2">
+          <el-input
+            v-model="form.configName"
+            placeholder="请输入配置名称"
+            clearable
+            size="small"
+            maxLength="8"
+          />
+        </el-form-item>
+        <el-form-item label="配置状态"  prop="relayCode" v-if="form.hardwareType==2">
+          <el-input
+            v-model="form.configStatus"
+            placeholder="请输入配置状态"
+            clearable
+            size="small"
+            maxLength="8"
+          />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="offDrawer">取消</el-button>
+        <el-button style="width:100px;" type="primary" @click="submitForm">提交</el-button>
       </div>
-    </el-drawer>
+    </el-dialog>
   </div>
 </template>
 
@@ -183,6 +164,8 @@
     name: "smartVentilation",
     data() {
       return {
+        dialogVisible:false,
+        dialogTitle:'新增',
         tableButtonType:this.hasPermiDom(['laboratory:hardware:query','laboratory:hardware:edit','laboratory:hardware:remove']),
         index:'',
         // 遮罩层
@@ -412,11 +395,7 @@
       },
       //弹窗关闭前回调
       handleClose(done) {
-        this.$confirm('确认关闭?')
-          .then(_ => {
-            done();
-          })
-          .catch(_ => {});
+        this.dialogVisible=false;
       },
       //更多选项
       moreClick(item){
@@ -682,8 +661,8 @@
         // this.form.type=this.pageType;
         this.$set(this.form,'type',this.pageType);
         this.$set(this.form,'pcType',0);
-        this.drawer = true;
-        this.title = "添加硬件";
+        this.dialogVisible = true;
+        this.dialogTitle = "添加硬件";
         this.getHardTypeList();
         this.getLabList();
         this.getRelayList();
@@ -710,8 +689,8 @@
           this.form = response.data;
           this.$forceUpdate;
           this.getRelayList()
-          this.title = "修改硬件";
-          this.drawer = true;
+          this.dialogTitle = "修改硬件";
+          this.dialogVisible = true;
         });
       },
       getLabList(){
@@ -737,13 +716,13 @@
             if (this.form.id != null) {
               updateHardware(this.form).then(response => {
                 this.msgSuccess("修改成功");
-                this.drawer = false;
+                this.dialogVisible = false;
                 this.getList();
               });
             } else {
               addHardware(this.form).then(response => {
                 this.msgSuccess("新增成功");
-                this.drawer = false;
+                this.dialogVisible = false;
                 this.getList();
               });
             }

+ 97 - 134
src/views/emergencyManagement/smartLoT/hardware/videoSurveillance.vue

@@ -1,56 +1,17 @@
 <!--硬件管理/视频监控-->
 <template>
   <div class="videoSurveillance">
-    <!--<el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px" class="form-box">-->
-
-      <!--<el-form-item label="学院" prop="deptId">-->
-        <!--<el-select v-model="queryParams.deptId" placeholder="请选择学院" clearable @change="handleNodeClick">-->
-          <!--<el-option-->
-            <!--v-for="dict in deptOptions"-->
-            <!--:key="dict.deptId"-->
-            <!--:label="dict.deptName"-->
-            <!--:value="dict.deptId"-->
-          <!--&gt;</el-option>-->
-        <!--</el-select>-->
-      <!--</el-form-item>-->
-
-      <!--<el-form-item label="实验室" prop="subjectId">-->
-        <!--<el-select v-model="queryParams.subjectId" clearable placeholder="请选择实验室">-->
-          <!--<el-option-->
-            <!--v-for="item in subjectOptions"-->
-            <!--:key="item.id"-->
-            <!--:label="item.name"-->
-            <!--:value="item.id">-->
-          <!--</el-option>-->
-        <!--</el-select>-->
-      <!--</el-form-item>-->
-
-      <!--<el-form-item label="状态" prop="operate">-->
-        <!--<el-select v-model="queryParams.operate" placeholder="请选择状态" clearable size="small">-->
-          <!--<el-option label="在线" value="ONLINE" />-->
-          <!--<el-option label="离线" value="OFFLINE" />-->
-          <!--<el-option label="开启" value="OPEN" />-->
-          <!--<el-option label="关闭" value="CLOSE" />-->
-        <!--</el-select>-->
-      <!--</el-form-item>-->
-      <!--<el-form-item style="float: right;">-->
-        <!--<el-col :span="1.5">-->
-          <!--<p class="add-button-one-120"-->
-             <!--@click="handleAdd"-->
-             <!--v-hasPermi="['laboratory:hardware:add']"-->
-          <!--&gt;<i class="el-icon-plus"></i>新增硬件</p>-->
-        <!--</el-col>-->
-      <!--</el-form-item>-->
-      <!--<el-form-item>-->
-        <!--<p class="inquire-button-one" @click="handleQuery">查询</p>-->
-        <!--<p class="reset-button-one" @click="resetQuery">重置</p>-->
-      <!--</el-form-item>-->
-    <!--</el-form>-->
     <el-table v-loading="loading" border :data="hardwareList" @selection-change="handleSelectionChange">
       <el-table-column label="名称" align="left" prop="name" />
       <el-table-column label="学院" align="left" prop="deptName" />
       <el-table-column label="实验室" align="left" prop="subjectName" />
       <el-table-column label="设备编号" align="left" prop="hardwareNum" />
+      <el-table-column label="抓拍摄像头" align="left" prop="subType">
+        <template slot-scope="scope">
+          <span v-if="scope.row.subType!=''">是</span>
+          <span v-if="scope.row.subType==''">否</span>
+        </template>
+      </el-table-column>
       <el-table-column label="状态" align="left" >
         <template slot-scope="scope">
           <!-- <p :class="'table-type-color-red'">{{'离线'}}</p> -->
@@ -59,14 +20,10 @@
       </el-table-column>
       <el-table-column label="操作" align="left" class-name="small-padding fixed-width" width="120" v-if="tableButtonType">
         <template slot-scope="scope">
-          <div class="button-box">
-            <!--<p class="table-min-button"-->
-               <!--@click="handleView(scope.row)"-->
-               <!--style="margin-right:20px;"-->
-               <!--v-hasPermi="['laboratory:hardware:query']"-->
-            <!--&gt;查看</p>-->
+          <div class="table-button-box">
+            <p class="table-button-null"></p>
             <el-dropdown @command="moreClick" v-hasPermi="['laboratory:hardware:query','laboratory:hardware:edit','laboratory:hardware:remove']">
-              <p class="table-min-button">更多>></p>
+              <p class="table-button-p">更多>></p>
               <el-dropdown-menu slot="dropdown">
                 <el-dropdown-item style="border-bottom:1px solid #E0E0E0;margin:0 10px;" :command="{row:scope.row,command:1}"
                                   v-hasPermiAnd="['laboratory:hardware:query','laboratory:hardware:edit']">修改设备</el-dropdown-item>
@@ -74,6 +31,7 @@
                                   v-hasPermi="['laboratory:hardware:remove']">删除设备</el-dropdown-item>
               </el-dropdown-menu>
             </el-dropdown>
+            <p class="table-button-null"></p>
           </div>
         </template>
       </el-table-column>
@@ -95,79 +53,76 @@
       :show-close="false"
       :before-close="handleClose">
       <div class="videoSurveillance-drawer-max-box">
-        <div class="videoSurveillance-drawer-content">
-          <el-form ref="form" :model="form"  :rules="rules" label-width="80px">
-            <el-form-item label="硬件名称" prop="name">
-              <el-input
-                :disabled="disabledType"
-                v-model="form.name"
-                placeholder="请输入硬件名称"
-                clearable
-                size="small"
-                maxLength="8"
-              />
-            </el-form-item>
-            <el-form-item label="硬件类型" v-if="pageType==''" prop="type">
-              <el-select v-model="form.type" placeholder="请选择硬件类型">
-                <el-option v-for="hardType in hardTypeOptions"
-                           :key="hardType.enumName"
-                           :label="hardType.name"
-                           :value="hardType.enumName">
-                </el-option>
-              </el-select>
-            </el-form-item>
-            <el-form-item label="设备编号" prop="hardwareNum">
-              <el-input
-                :disabled="disabledType"
-                v-model="form.hardwareNum"
-                placeholder="请输入设备编号"
-                clearable
-                maxlength="30"
-                size="small"
-              />
-            </el-form-item>
-            <el-form-item label="实验室" prop="subjectId">
-              <el-select v-model="form.subjectId" placeholder="请选择实验室" :disabled="disabledType">
-                <el-tooltip class="item" effect="dark" :content="lab.name" placement="top" v-for="lab in labListOptions">
-                  <el-option style="max-width: 200px"
-                             :key="lab.id"
-                             :label="lab.name"
-                             :value="lab.id">
-                  </el-option>
-                </el-tooltip>
-              </el-select>
-            </el-form-item>
-            <el-form-item label="硬件IP" prop="ipAddress">
-              <el-input
-                :disabled="disabledType"
-                v-model="form.ipAddress"
-                placeholder="请输入硬件IP"
-                clearable
-                size="small"
-                maxLength="20"
-              />
-            </el-form-item>
 
-            <!--<el-form-item label="硬件位置" prop="position">-->
-              <!--<div class="map-box" :style="'width:'+mapData.widthData*3+'px;height:'+mapData.heightData*3+'px;'">-->
-                <!--<div v-for="(item,index1) in mapData.list" v-if="isUpdate"-->
-                     <!--:style="'top:'+item.y*3+'px;left:'+item.x*3+'px;'"-->
-                     <!--@mouseenter="moveClick(index1)"-->
-                     <!--@mousedown="move">-->
-                  <!--{{form.name?form.name:'未命名'}}-->
-                <!--</div>-->
-                <!--<p class="map-p" v-for="(item) in mapList"  :style="'top:'+item.y*3+'px;left:'+item.x*3+'px;'">{{item.name}}</p>-->
-              <!--</div>-->
-            <!--</el-form-item>-->
-          </el-form>
-        </div>
-        <div class="videoSurveillance-bottom-button-box">
-          <p></p>
-          <p @click="offDrawer">{{buttonType?'取消':'关闭'}}</p>
-          <p @click="submitForm" v-if="buttonType">提交</p>
-        </div>
+
       </div>
     </el-drawer>
+    <!-- -->
+    <el-dialog :title=dialogTitle :visible.sync="dialogVisible " @close="handleClose" width="500px" append-to-body :close-on-click-modal="false">
+      <el-form ref="form" :model="form"  :rules="rules" label-width="100px">
+        <el-form-item label="硬件名称" prop="name">
+          <el-input
+            :disabled="disabledType"
+            v-model="form.name"
+            placeholder="请输入硬件名称"
+            clearable
+            size="small"
+            maxLength="8"
+          />
+        </el-form-item>
+        <el-form-item label="硬件类型" v-if="pageType==''" prop="type">
+          <el-select v-model="form.type" placeholder="请选择硬件类型">
+            <el-option v-for="hardType in hardTypeOptions"
+                       :key="hardType.enumName"
+                       :label="hardType.name"
+                       :value="hardType.enumName">
+            </el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="设备编号" prop="hardwareNum">
+          <el-input
+            :disabled="disabledType"
+            v-model="form.hardwareNum"
+            placeholder="请输入设备编号"
+            clearable
+            maxlength="30"
+            size="small"
+          />
+        </el-form-item>
+        <el-form-item label="实验室" prop="subjectId">
+          <el-select v-model="form.subjectId" placeholder="请选择实验室" :disabled="disabledType">
+            <el-tooltip class="item" effect="dark" :content="lab.name" placement="top" v-for="lab in labListOptions">
+              <el-option style="max-width: 200px"
+                         :key="lab.id"
+                         :label="lab.name"
+                         :value="lab.id">
+              </el-option>
+            </el-tooltip>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="硬件IP" prop="ipAddress">
+          <el-input
+            :disabled="disabledType"
+            v-model="form.ipAddress"
+            placeholder="请输入硬件IP"
+            clearable
+            size="small"
+            maxLength="20"
+          />
+        </el-form-item>
+        <el-form-item label="类型" >
+          <el-checkbox-group v-model="subType">
+            <el-checkbox label="0">火焰算法</el-checkbox>
+            <el-checkbox label="1">穿戴识别</el-checkbox>
+            <el-checkbox label="2">违规带离抓拍</el-checkbox>
+          </el-checkbox-group>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="offDrawer">{{buttonType?'取消':'关闭'}}</el-button>
+        <el-button style="width:100px;" type="primary" @click="submitForm">提交</el-button>
+      </div>
+    </el-dialog>
   </div>
 </template>
 
@@ -191,6 +146,8 @@
     name: "videoSurveillance",
     data() {
       return {
+        dialogVisible:false,
+        dialogTitle:'新增',
         tableButtonType:this.hasPermiDom(['laboratory:hardware:query','laboratory:hardware:query','laboratory:hardware:edit','laboratory:hardware:remove']),
         index:'',
         // 遮罩层
@@ -232,7 +189,10 @@
         // },
         hardTypeOptions:{},
         // 表单参数
-        form: {},
+        form: {
+
+        },
+        subType:[],
         // 表单校验
         rules: {
             name: [
@@ -350,11 +310,7 @@
       },
       //弹窗关闭前回调
       handleClose(done) {
-        this.$confirm('确认关闭?')
-          .then(_ => {
-            done();
-          })
-          .catch(_ => {});
+        this.dialogVisible=false;
       },
       //更多选项
       moreClick(item){
@@ -583,8 +539,10 @@
         }];
         this.isUpdate=true;
         this.form.type=this.pageType;
-        this.drawer = true;
-        this.title = "添加硬件";
+        this.subType=[];
+        this.dialogVisible = true;
+
+        this.dialogTitle = "添加硬件";
         this.getHardTypeList();
         this.getLabList();
       },
@@ -595,6 +553,7 @@
         this.mapData.list = [];
         this.isUpdate=true;
         this.form.type=this.pageType;
+
         this.getHardTypeList();
         this.getLabList();
         const id = row.id || this.ids
@@ -604,8 +563,11 @@
         getHardwareDetail(queryParam).then(response => {
           this.form = response.data;
           this.$forceUpdate;
-          this.title = "修改硬件";
-          this.drawer = true;
+          this.dialogTitle = "修改硬件";
+          this.dialogVisible = true;
+          if(response.data.subType){
+            this.subType=response.data.subType.split(',');
+          }
         });
       },
       /** 查看按钮操作 */
@@ -653,6 +615,7 @@
           verticalAxis:''
         }
         this.form.type=this.pageType;
+        this.form.subType=this.subType.toString();
         // this.form.hardwarePosition.horizontalAxis=this.mapData.list[0].top;
         // this.form.hardwarePosition.verticalAxis=this.mapData.list[0].left;
         this.$refs["form"].validate(valid => {
@@ -660,13 +623,13 @@
             if (this.form.id != null) {
               updateHardware(this.form).then(response => {
                 this.msgSuccess("修改成功");
-                this.drawer = false;
+                this.dialogVisible = false;
                 this.getList();
               });
             } else {
               addHardware(this.form).then(response => {
                 this.msgSuccess("新增成功");
-                this.drawer = false;
+                this.dialogVisible = false;
                 this.getList();
               });
             }