Prechádzať zdrojové kódy

Merge remote-tracking branch 'remotes/origin/V0.0.7.409' into V0.0.8

zhulu 1 rok pred
rodič
commit
b4630bfdc4

+ 9 - 0
src/api/iot/alarmCenter.js

@@ -16,6 +16,15 @@ export function detail(id) {
     method: "get",
   });
 }
+// 处置告警
+export function dealAlarm(data) {
+  return request({
+    url: `/iot/iot_alarm_data/app/`,
+    method: "put",
+    data:data,
+  });
+}
+
 
 /**
  * 获取角标

+ 6 - 0
src/router/router.config.js

@@ -196,6 +196,12 @@ export let routers = [
         meta: { title: '告警详情', keepAlive: false,  deep: 2 }
       },
       {
+        path: '/iot/alarmCenter/dealAlarm',
+        name: 'iot_alarmCenter_dealAlarm',
+        component: () => import('@/views/menu/iot/alarmCenter/dealAlarm'),
+        meta: { title: '告警处置', keepAlive: false,  deep: 2 }
+      },
+      {
         path: '/iot/ups',
         name: 'iot_ups',
         component: () => import('@/views/menu/iot/ups/index'),

+ 20 - 2
src/views/menu/iot/alarmCenter/components/item.vue

@@ -11,18 +11,32 @@
       <van-cell title="报警类型" :value="data.sourceTypeDes"> </van-cell>
       <van-cell title="告警开始时间" :value="renderTime(data.startTime)"></van-cell>
       <van-cell title="告警结束时间" :value="renderTime(data.endTime)" v-if="data.endTime"></van-cell>
+      <van-cell title="处置状态">
+        <template #right-icon>
+          <span v-if="data.doTime">已处置</span>
+          <van-tag v-else type="warning" @click.stop="dealAlarm">未处置</van-tag>
+        </template>
+      </van-cell>
+      <van-cell title="处置时间" :value="renderTime(data.doTime)" v-if="data.doTime"></van-cell>
+      <van-cell title="处置人" :value="data.doByUser" v-if="data.doByUser"></van-cell>
+      <van-cell title="处置类型" :value="getDictLabel(data.doType.toString(),'alarm_deal_type')" v-if="data.doType"></van-cell>
+      <van-cell title="处置内容" :value="data.doContent" v-if="data.doContent"></van-cell>
+
     </van-cell-group>
   </div>
 </template>
 <script>
 import dayjs from 'dayjs'
+import { mapGetters } from 'vuex'
 export default {
   components: {},
   data() {
-    return {}
+    return {
+      dicts:['alarm_deal_type']
+    }
   },
   computed: {
-   
+    ...mapGetters(['dictionary']),
   },
   watch: {},
   props: {
@@ -33,6 +47,10 @@ export default {
     itemClick() {
       this.$router.push('/iot/alarmCenter/detail?id=' + this.data.id)
     },
+    dealAlarm()
+    {
+      this.$router.push('/iot/alarmCenter/dealAlarm?id=' + this.data.id)
+    },
     renderTime(dateTime) {
       if (!dateTime) {
         return ''

+ 181 - 0
src/views/menu/iot/alarmCenter/dealAlarm.vue

@@ -0,0 +1,181 @@
+<template>
+  <div class="detail">
+    <nav-bar></nav-bar>
+    <van-cell-group>
+      <van-cell :title="info.deviceName" value-class="cell-title-value" title-style="width:100%;">
+        <template #right-icon v-if="info.time">
+          <van-tag v-if="info.endTime">告警结束</van-tag>
+          <van-tag v-else type="danger">正在告警</van-tag>
+        </template>
+      </van-cell>
+      <van-cell title="所属机构" :value="info.orgName" />
+      <van-cell title="告警分类" :value="dataTypeText"></van-cell>
+      <van-cell title="告警类型" :value="info.sourceTypeDes"></van-cell>
+      <van-cell title="告警开始时间" :value="renderTime(info.time)"></van-cell>
+      <van-cell title="告警结束时间" :value="renderTime(info.endTime)"></van-cell>
+      <van-cell title="持续时长" :value="durationText" />
+      <van-cell title="告警值" :value="valueText" />
+      <van-cell title="告警内容" :value="info.content" />
+    
+      <!-- <van-cell title="处置时间" :value="renderTime(info.doTime)" /> -->
+      <!-- <van-cell title="处置人" :value="info.doByUser" /> -->
+      <!-- <van-cell title="处置内容" :value="info.doContent" /> -->
+      <select-cell
+                title="处置类型"
+                is-row
+                v-model="formData.doType"
+                :data-list="getDictItem('alarm_deal_type')"
+                required>
+            </select-cell>
+      <van-field
+              v-model="formData.doContent"
+              rows="1"
+              autosize
+              required
+              :maxlength="200"
+              placeholder="请输入处置内容"
+              label="处置内容"></van-field>
+      <div class="big-btn-box" >
+            <van-button  type="info" size="large" @click="onSubmit">提交处置</van-button>
+      </div>
+    </van-cell-group>
+  </div>
+</template>
+<script>
+import { detail,dealAlarm } from '@/api/iot/alarmCenter.js'
+import NavBar from '@/components/NavBar'
+import dayjs from 'dayjs'
+import { durationText } from '@/utils/date.js'
+import { mapGetters } from 'vuex'
+export default {
+  name:'iot_alarmCenter_dealAlarm',
+  data() {
+    return {
+      info: {},
+      search: {
+        sensorId: this.$route.query.id
+      },
+      formData:{
+        doContent:null,
+        doType:null,
+        id:this.$route.query.id,
+      },
+      dictList:[],
+      dicts:['alarm_deal_type']
+    }
+    
+  },
+  components: { NavBar },
+  computed: {
+    ...mapGetters(['dictionary']),
+    stateUpdateTimeText() {
+      if (this.info.stateUpdateTime == null) {
+        return '未上报'
+      }
+
+      return dayjs(this.info.stateUpdateTime).format('YYYY年M月D日H时m分')
+    },
+    dataTypeText() {
+      if (!this.info || this.info.dataType == null) {
+        return ''
+      }
+
+      if (this.info.dataType == '0') {
+        return '动环类告警'
+      } else if (this.info.dataType == '1') {
+        return '视频类告警'
+      } else {
+        return '未知'
+      }
+    },
+    durationText() {
+      let endTime = this.info.endTime ? this.info.endTime : new Date()
+
+      let minutes = dayjs(endTime).diff(this.info.time, 'minute')
+      if (minutes < 1) {
+        return dayjs(endTime).diff(this.info.time, 'second') + '秒'
+      } else {
+        return durationText(minutes)
+      }
+    },
+    
+    valueText() {
+      if (!this.info || this.info.valueText == null) {
+        return ''
+      }
+      if(this.info.alarmValue && (this.info.alarmValue.includes("°C") || this.info.alarmValue.includes("%RH") ))
+        {
+          return this.info.alarmValue;
+        }
+        else{
+          return this.info.valueText
+        }
+    }
+  },
+  mounted() {
+    this.getInfo()
+  },
+  methods: {
+    getInfo() {
+      detail(this.search.sensorId).then(r => {
+        this.info = r.data
+      })
+       //获取告警处置类型情况字典
+      //  this.getDictHandler('alarm_deal_type', res => {
+      //       this.dictList = res
+      //       this.dictList.forEach(item => {
+      //         item.text = item.dictLabel
+      //         item.value = item.dictValue
+      //       })
+      //     })
+    },
+    onSubmit(){
+     
+      let {doContent,doType} = this.formData;      
+      if(!doType){
+        this.$toast('请选择告警处置类型');
+        return
+      }
+      if(!doContent){
+        this.$toast('请输入告警处置内容');
+        return
+      }
+      this.submit(this.formData);   
+    },
+    submit(formData)
+    {
+        //alert(JSON.stringify(data))
+        let requestData={doType:parseInt(formData.doType),doContent:formData.doContent,id:formData.id}
+        dealAlarm(requestData).then(res=>{
+          this.$toast.success('提交成功');
+          this.$router.replace({
+            name:'iot_alarmCenter',
+            path:'/iot/alarmCenter',
+            params:{event:'refresh'},
+          });
+        })
+    },
+    renderTime(dateTime) {
+      if (!dateTime) {
+        return ''
+      }
+
+      return dayjs(dateTime).format('YYYY年M月D日H时m分')
+    },
+  }
+}
+</script>
+<style lang="scss" scoped>
+.cell-title-value {
+  display: none;
+}
+.detail {
+  margin: 15px;
+}
+.cell-gather-alarm-value {
+  color: #ee0a24;
+}
+.big-btn-box{
+  padding: 20px;
+}
+</style>

+ 10 - 1
src/views/menu/iot/alarmCenter/detail.vue

@@ -16,6 +16,9 @@
       <van-cell title="持续时长" :value="durationText" />
       <van-cell title="告警值" :value="valueText" />
       <van-cell title="告警内容" :value="info.content" />
+      <van-cell title="处置时间" :value="renderTime(info.doTime)" />
+      <van-cell title="处置人" :value="info.doByUser" />
+      <van-cell title="处置内容" :value="info.doContent" />
     </van-cell-group>
   </div>
 </template>
@@ -71,7 +74,13 @@ export default {
         return ''
       }
 
-      return `${this.info.valueText}${this.info.alarmValue ? this.info.alarmValue : ''}`
+      if(this.info.alarmValue && (this.info.alarmValue.includes("°C") || this.info.alarmValue.includes("%RH") ))
+        {
+          return this.info.alarmValue;
+        }
+        else{
+          return this.info.valueText
+        }
     }
   },
   mounted() {

+ 27 - 0
src/views/menu/iot/alarmCenter/index.vue

@@ -116,6 +116,10 @@ export default {
           text: '燃气告警'
         },
         {
+          value: '41881',
+          text: '盗情告警'
+        },
+        {
           value: '4188',
           text: '门磁告警'
         },
@@ -172,6 +176,14 @@ export default {
       ]
     }
   },
+  beforeRouteEnter(to,from,next){
+    next(vm=>{
+      console.log("beforeRouteEnter",to.params.event,to)
+      if(to.params.event === 'refresh'){        
+        vm.reSet()     
+      }
+    })
+  },
   watch: {},
   created() {},
   mounted() {
@@ -182,6 +194,21 @@ export default {
   },
   methods: {
     list,
+    reSet(){
+      this.showAlarmType= false;
+        this.defaultAlarmType= '全部'
+        this.showState = false;
+        this.defaultAlarmType= '全部'
+      this.search= {        
+          orgId: this.orgId,
+          checkSub: true,
+          alarmType: null,
+          deviceName:null,
+          state: null,
+          pageNum: 1,
+          pageSize: 10
+        };
+    },
     onAlarmTypeConfirm(opt) {
       this.defaultAlarmType = opt.text
       this.search.alarmType = opt.value

+ 4 - 2
src/views/menu/iot/subsystem/components/item.vue

@@ -40,8 +40,10 @@
     value-class="time-cell-default"
       >
       <template #default>
-        <van-tag type="primary" color="#969799" v-if="data.statusUpdatorName!=null">人工登记</van-tag>
-        <van-tag type="primary" color="#969799" v-else>自动获取</van-tag>
+        <!-- <van-tag type="primary" color="#969799" v-if="data.statusUpdatorName!=null">人工登记</van-tag>
+        <van-tag type="primary" color="#969799" v-else>自动获取</van-tag> -->
+        <span color="#969799" v-if="data.statusUpdatorName!=null">人工登记</span>
+        <span color="#969799" v-else>自动获取</span>
         <span style="margin-left:10px">{{data.statusChangeTime}}</span>
       </template>
       </van-cell>

+ 10 - 3
src/views/menu/rehearsalTask/components/addRehearsalTask.vue

@@ -403,17 +403,24 @@ export default {
     //表单提交前校验
     beforSubmitV() {
       this.falg = false
-      let startDate = JSON.parse(JSON.stringify(this.form.drillStartTime))
+      let startDate = JSON.parse(JSON.stringify(this.form.drillStartTime))      
+      let objStart=startDate.replace(/-/g,"/");
       startDate = Date.parse(new Date(startDate))
-
+      if(!startDate){
+        startDate = Date.parse(new Date(objStart));
+      }
       if(!startDate){
         Toast('演练开始时间不能为空')
         this.falg = true
         return
       }
 
-      let endDate = JSON.parse(JSON.stringify(this.form.drillEndTime))
+      let endDate = JSON.parse(JSON.stringify(this.form.drillEndTime))      
+      let objend=endDate.replace(/-/g,"/");
       endDate = Date.parse(new Date(endDate))
+      if(!endDate){
+        endDate = Date.parse(new Date(objend));
+      }
 
       if(!endDate){
         Toast('演练结束时间不能为空')

+ 10 - 3
src/views/menu/training/components/addTraining.vue

@@ -366,19 +366,26 @@ export default {
     beforSubmitV() {
       this.falg = false
       let startDate = JSON.parse(JSON.stringify(this.form.trainingStartDateTime))
+      let objStart=startDate.replace(/-/g,"/");
       startDate = Date.parse(new Date(startDate))
+      if(!startDate){
+        startDate = Date.parse(new Date(objStart));
+      }
 
       if(!startDate){
-        Toast('演练开始时间不能为空')
+        Toast('培训开始时间不能为空')
         this.falg = true
         return
       }
       let endDate = JSON.parse(JSON.stringify(this.form.trainingEndDateTime))
+      let objend=endDate.replace(/-/g,"/");
       endDate = Date.parse(new Date(endDate))
-
+      if(!endDate){
+        endDate = Date.parse(new Date(objend));
+      }
       
       if(!endDate){
-        Toast('演练结束时间不能为空')
+        Toast('培训结束时间不能为空')
         this.falg = true
         return
       }