<template>
|
<GlobalWindow
|
:title="title"
|
width="50%"
|
:visible.sync="visible"
|
:confirm-working="isWorking"
|
@confirm="confirm"
|
>
|
<p class="tip-warn"><i class="el-icon-warning"></i>操作说明:<br>
|
1.请按需配置推送规则,配送多个规则时,即为多个规则满足时才推送;<br>
|
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; " >
|
<el-select v-model="item.warningId" filterable placeholder="请选择报警类型" >
|
<el-option v-for="item in warningList" :label="item.name" :value="item.id"> </el-option>
|
</el-select>
|
</el-form-item>
|
<el-form-item label="" style="display: inline-block;margin-left: 10px">
|
<!-- <el-select v-model="item.regionId" filterable multiple clearable placeholder="请选择发生区域" >
|
<el-option v-for="item in regionList" :key="item.id" :label="item.name" :value="item.id">
|
</el-option>
|
</el-select>-->
|
<treeselect
|
style="width: 200px;height:32px;display: inline-block"
|
@input="changeSel(index)"
|
v-model="item.regionId"
|
placeholder="请选择发生区域"
|
:options="regionList"
|
:normalizer="normalizeOptions"
|
:default-expand-level="1"
|
noChildrenText="没有子选项"
|
noOptionsText="没有可选项"
|
noResultsText="没有匹配的结果" />
|
</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="status">
|
<el-radio-group v-model="form.status">
|
<el-radio :label="0" :value="0">禁用</el-radio>
|
<el-radio :label="1" :value="1">启用</el-radio>
|
</el-radio-group>
|
</el-form-item>
|
<el-form-item label="发生间隔时间(秒)" prop="intervalSec">
|
<el-input type="number" v-model="form.intervalSec" placeholder="请输入多规则间隔时间(秒)" v-trim/>
|
</el-form-item>
|
</el-form>
|
</GlobalWindow>
|
</template>
|
|
<script>
|
import BaseOpera from '@/components/base/BaseOpera'
|
import GlobalWindow from '@/components/common/GlobalWindow'
|
import { allList } from '@/api/business/member'
|
import { allList as warningList, regionList } from '@/api/business/warning'
|
export default {
|
name: 'OperaWarningRuleWindow',
|
extends: BaseOpera,
|
components: { GlobalWindow },
|
data () {
|
return {
|
// 表单数据
|
form: {
|
id: null,
|
memberIds: '',
|
intervalSec: '',
|
sortnum: '',
|
status: 0,
|
detailList: [{ random:Math.random(),regionId: null, regionName: null, regionCode: null ,warningId:null}]
|
},
|
memberSelect: [],
|
memberList: [],
|
warningList: [],
|
regionList: [],
|
// 验证规则
|
rules: {
|
memberIds: [{ required: true, message: '请选择通知人员', tigger: 'blur' }],
|
status: [{ required: true, message: '请选择状态'}]
|
}
|
}
|
},
|
created () {
|
this.config({
|
api: '/business/warningRule',
|
'field.id': 'id'
|
})
|
},
|
methods: {
|
normalizeOptions (node) {
|
if (!node.childList || !node.childList.length) {
|
// 去掉children=[]的children属性
|
delete node.childList
|
}
|
return {
|
id: node.indexCode,
|
label: node.name,
|
children: node.childList
|
}
|
},
|
changeSel(opt){
|
var item = this.form.detailList[opt]
|
this.form.detailList[opt].regionCode = null
|
this.form.detailList[opt].regionName = null
|
if(item.regionId){
|
var reg = this.getSelectedObject(item.regionId)
|
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])
|
},
|
getSelectedObject(id) {
|
if (!id) {
|
return null // 没有选中项时返回 null 或 {} 根据需要处理
|
}
|
const findSelected = (options) => {
|
for (const option of options) {
|
if (option.indexCode === id) {
|
return option // 返回匹配的完整对象
|
} else if (option.childList && option.childList.length > 0) {
|
const found = findSelected(option.childList) // 递归搜索子选项
|
if (found) return found // 如果找到返回该对象
|
}
|
}
|
return null; // 未找到返回 null 或 {} 根据需要处理
|
}
|
return findSelected(this.regionList); // 开始搜索并返回结果
|
},
|
addDo () {
|
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) {
|
this.form.detailList.splice(index, 1)
|
}
|
},
|
changeMembers () {
|
console.log(this.memberSelect)
|
this.form.memberIds = ''
|
if (!this.memberSelect || !this.memberSelect.length) {
|
return
|
}
|
this.form.memberIds = this.memberSelect.join(',')
|
},
|
open (title, target) {
|
this.memberSelect =[]
|
this.title = title
|
this.loadMember()
|
this.loadRegions()
|
this.loadWarning()
|
this.visible = true
|
this.form = {
|
id: null,
|
memberIds: '',
|
intervalSec: '',
|
sortnum: '',
|
status: 0,
|
detailList: [{ random:Math.random(),regionId: null, regionName: null, regionCode: null,warningId:null }]
|
}
|
// 新建
|
if (target == null) {
|
this.$nextTick(() => {
|
this.$refs.form.resetFields()
|
this.form[this.configData['field.id']] = null
|
})
|
return
|
}
|
// 编辑
|
this.$nextTick(() => {
|
for (const key in this.form) {
|
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 }]
|
}
|
if(this.form.memberIds){
|
this.memberSelect = this.form.memberIds.split(",")
|
}
|
})
|
},
|
loadMember () {
|
allList({
|
type: 2
|
}).then(res => {
|
this.memberList = res
|
})
|
},
|
loadWarning () {
|
warningList({
|
}).then(res => {
|
this.warningList = res
|
})
|
},
|
loadRegions () {
|
regionList({
|
}).then(res => {
|
this.regionList = res
|
})
|
}
|
}
|
}
|
</script>
|
<style scoped lang="scss">
|
.inline {
|
width: 178px;
|
}
|
.vue-treeselect {
|
line-height: 30px;
|
::v-deep .vue-treeselect__control {
|
height: 32px;
|
.vue-treeselect__single-value {
|
line-height: 30px;
|
}
|
}
|
}
|
</style>
|