doum
5 小时以前 12d71ee7f050b981d584668f6ca70794d2c92a44
admin/src/components/business/OperaWarningRuleWindow.vue
@@ -1,7 +1,7 @@
<template>
  <GlobalWindow
    :title="title"
    width="50%"
    width="80%"
    :visible.sync="visible"
    :confirm-working="isWorking"
    @confirm="confirm"
@@ -11,12 +11,6 @@
      2.发生区域非必填,不填则表示该规则下所有区域的相应报警类型均通知;<br>
    </p>
    <el-form :model="form" ref="form" :rules="rules">
      <el-form-item label="选择签到通知人员" prop="memberIds" style="margin-bottom: 30px" >
        <el-select v-model="memberSelect" filterable multiple clearable  placeholder="请选择" @change="changeMembers">
          <el-option v-for="item in memberList" :key="'member_'+item.id" :label="item.name+'-'+item.companyName" :value="item.id+''">
          </el-option>
        </el-select>
      </el-form-item>
      <div style="display: flex;" v-for="(item,index) in form.detailList" :key="'region_'+item.random" >
        <span style="line-height: 32px;font-size: 14px;"><b style="color: #F56C6C;margin-right: 4px;font-size: 11px;">*</b>{{'规则'+(index +1)}}</span>
        <el-form-item label=""   style="display: inline-block;margin-left: 10px; " >
@@ -43,7 +37,9 @@
        </el-form-item>
        <el-button type="danger" style="margin-left: 10px;height: 32px; " @click="delDo(index)" v-if="index>0 || form.detailList.length>1">删除</el-button>
      </div>
      <el-button type="primary" style="margin-left: 10px;margin-bottom: 20px;" @click="addDo">增加规则</el-button>
      <el-form-item label="" prop="detailList" style="width: 150px">
       <el-button type="primary" style="margin-left: 10px;margin-bottom: 20px;" @click="addDo">增加规则</el-button>
      </el-form-item>
      <el-form-item label="状态" prop="status">
        <el-radio-group v-model="form.status">
          <el-radio :label="0" :value="0">禁用</el-radio>
@@ -53,6 +49,27 @@
      <el-form-item label="发生间隔时间(秒)" prop="intervalSec">
        <el-input type="number" v-model="form.intervalSec" placeholder="请输入多规则间隔时间(秒)" v-trim/>
      </el-form-item>
      <el-form-item label="钉钉通知" prop="memberNotice"   >
        <el-switch    style="margin-right:30px;width:100px"    v-model="form.memberNotice" :active-value="1"  :inactive-value="0" active-text="开" inactive-text="关"></el-switch>
      </el-form-item>
      <el-form-item label="选择钉钉通知人员" v-if="form.memberNotice ==1" prop="memberIds" style="margin-bottom: 30px" >
        <el-select v-model="memberSelect" filterable multiple clearable  placeholder="请选择" @change="changeMembers">
          <el-option v-for="item in memberList" :key="'member_'+item.id" :label="item.name+'-'+item.companyName" :value="item.id+''">
          </el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="广播通知" prop="deviceNotice"    >
        <el-switch    style="margin-right:30px;width: 100px"    v-model="form.deviceNotice" :active-value="1"  :inactive-value="0" active-text="开" inactive-text="关">></el-switch>
      </el-form-item>
      <el-form-item label="选择播报广播" v-if="form.deviceNotice ==1"  prop="deviceIds" style="margin-bottom: 30px" >
        <el-select v-model="deviceSelect" filterable multiple clearable  placeholder="请选择" @change="changeDevices">
          <el-option v-for="item in deviceList" :key="'device_'+item.id" :label="item.name" :value="item.id+''">
          </el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="广播播报内容"  v-if="form.deviceNotice ==1" prop="deviceNoticeContent">
        <el-input type="text" v-model="form.deviceNoticeContent" placeholder="请输入播报内容" v-trim/>
      </el-form-item>
    </el-form>
  </GlobalWindow>
</template>
@@ -61,30 +78,57 @@
import BaseOpera from '@/components/base/BaseOpera'
import GlobalWindow from '@/components/common/GlobalWindow'
import { allList } from '@/api/business/member'
import { allList as allDveiceList } from '@/api/business/device'
import { allList as warningList, regionList } from '@/api/business/warning'
import { validIdCardNo } from '@/utils/form'
export default {
  name: 'OperaWarningRuleWindow',
  extends: BaseOpera,
  components: { GlobalWindow },
  data () {
    var validIdDetals = (rule, value, callback) => {
      if (this.form.detailList == null || this.form.detailList.length==0) {
        callback(new Error('请配置规则'))
        return
      }
      console.log("1111111111111111111111",this.form.detailList)
      for (let i = 0; i < this.form.detailList.length; i++) {
        var item = this.form.detailList[i]
        if (!item.warningId || item.warningId == null) {
          callback(new Error('请正确配置规则'))
          return
        }
      }
      callback()
    }
    return {
      // 表单数据
      form: {
        id: null,
        memberIds: '',
        deviceIds: '',
        deviceNoticeContent: '',
        deviceNotice: 1,
        memberNotice: 1,
        intervalSec: '',
        sortnum: '',
        status: 0,
        detailList: [{ random:Math.random(),regionId: null, regionName: null, regionCode: null ,warningId:null}]
        detailList: [{ random: Math.random(), regionId: null, regionName: null, regionCode: null, warningId: null }]
      },
      deviceSelect: [],
      memberSelect: [],
      memberList: [],
      deviceList: [],
      warningList: [],
      regionList: [],
      // 验证规则
      rules: {
        detailList: [{ required: true, validator: validIdDetals, message: '请正确配置规则', tigger: 'blur' }],
        memberNotice: [{ required: true, message: '请选择钉钉通知' }],
        deviceNotice: [{ required: true, message: '请选择是否广播通知' }],
        deviceIds: [{ required: true, message: '请选择播报广播', tigger: 'blur' }],
        memberIds: [{ required: true, message: '请选择通知人员', tigger: 'blur' }],
        status: [{ required: true, message: '请选择状态'}]
        status: [{ required: true, message: '请选择状态' }]
      }
    }
  },
@@ -106,22 +150,22 @@
        children: node.childList
      }
    },
    changeSel(opt){
    changeSel (opt) {
      var item = this.form.detailList[opt]
      this.form.detailList[opt].regionCode = null
      this.form.detailList[opt].regionName = null
      if(item.regionId){
      if (item.regionId) {
        var reg = this.getSelectedObject(item.regionId)
        if(reg){
        if (reg) {
          this.form.detailList[opt].regionCode = reg.indexCode
          this.form.detailList[opt].regionName = reg.name
        }
      }
      console.log(" this.form.detailList[opt]",reg, this.form.detailList[opt])
      console.log(' this.form.detailList[opt]', reg, this.form.detailList[opt])
    },
    getSelectedObject(id) {
    getSelectedObject (id) {
      if (!id) {
        return null  // 没有选中项时返回 null 或 {} 根据需要处理
        return null // 没有选中项时返回 null 或 {} 根据需要处理
      }
      const findSelected = (options) => {
        for (const option of options) {
@@ -132,12 +176,12 @@
            if (found) return found // 如果找到返回该对象
          }
        }
        return null; // 未找到返回 null 或 {} 根据需要处理
        return null // 未找到返回 null 或 {} 根据需要处理
      }
      return findSelected(this.regionList); // 开始搜索并返回结果
      return findSelected(this.regionList) // 开始搜索并返回结果
    },
    addDo () {
      this.form.detailList.push({random:Math.random(), regionId: null, regionName: null, regionCode: null,warningId:null })
      this.form.detailList.push({ random: Math.random(), regionId: null, regionName: null, regionCode: null, warningId: null })
    },
    delDo (index) {
      if (this.form.detailList.length > 1 && this.form.detailList.length > index) {
@@ -152,20 +196,34 @@
      }
      this.form.memberIds = this.memberSelect.join(',')
    },
    changeDevices () {
      console.log(this.deviceSelect)
      this.form.deviceIds = ''
      if (!this.deviceSelect || !this.deviceSelect.length) {
        return
      }
      this.form.deviceIds = this.deviceSelect.join(',')
    },
    open (title, target) {
      this.memberSelect =[]
      this.memberSelect = []
      this.deviceSelect = []
      this.title = title
      this.loadMember()
      this.loadDevice()
      this.loadRegions()
      this.loadWarning()
      this.visible = true
      this.form = {
        id: null,
        memberIds: '',
        deviceIds: '',
        intervalSec: '',
        sortnum: '',
        deviceNotice: 1,
        deviceNoticeContent: '',
        memberNotice: 1,
        status: 0,
        detailList: [{ random:Math.random(),regionId: null, regionName: null, regionCode: null,warningId:null }]
        detailList: [{ random: Math.random(), regionId: null, regionName: null, regionCode: null, warningId: null }]
      }
      // 新建
      if (target == null) {
@@ -181,10 +239,13 @@
          this.form[key] = target[key]
        }
        if (!this.form.detailList || !this.form.detailList.length) {
          this.form.detailList = [{ random:Math.random(),regionId: null, regionName: null, regionCode: null,warningId:null }]
          this.form.detailList = [{ random: Math.random(), regionId: null, regionName: null, regionCode: null, warningId: null }]
        }
        if(this.form.memberIds){
          this.memberSelect = this.form.memberIds.split(",")
        if (this.form.memberIds) {
          this.memberSelect = this.form.memberIds.split(',')
        }
        if (this.form.deviceIds) {
          this.deviceSelect = this.form.deviceIds.split(',')
        }
      })
    },
@@ -195,6 +256,13 @@
        this.memberList = res
      })
    },
    loadDevice () {
      allDveiceList({
        type: 4
      }).then(res => {
        this.deviceList = res
      })
    },
    loadWarning () {
      warningList({
      }).then(res => {