| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <GlobalWindow |
| | | :title="title" |
| | | width="80%" |
| | | :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"> |
| | | <div style="display: flex;" v-for="(item,index) in form.detailList" :key="'warning_'+index" > |
| | | <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-form-item label="" style="display: inline-block;margin-left: 10px;width: 120px; " > |
| | | <el-select v-model="item.deviceType" filterable placeholder="è¯·éæ©è®¾å¤ç±»å" clearable @change="changeDeviceType(item)" > |
| | | <el-option label="çæ§ç¹" :value="0" ></el-option> |
| | | <el-option label="æ¶é²è®¾å¤" :value="1" ></el-option> |
| | | <el-option label="æ¶é²ä¼ æå¨" :value="2" ></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="" v-if="item.deviceType>=0 || item.deviceType <=2" style="display: inline-block;margin-left: 10px; " > |
| | | <el-select v-model="item.deviceId" filterable placeholder="è¯·éæ©çæ§ç¹" clearable @change="changeCamera(item)" > |
| | | <el-option v-for="item1 in item.carmeraList" :label="item1.name" :value="item1.indexCode" ></el-option> |
| | | </el-select> |
| | | </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-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> |
| | | <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-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> |
| | | |
| | | <script> |
| | | 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' |
| | | 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 |
| | | } |
| | | for (let i = 0; i < this.form.detailList.length; i++) { |
| | | var item = this.form.detailList[i] |
| | | if (!item || item.warningId === undefined || !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, deviceId: null, deviceName: 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: 'è¯·éæ©ææ¥å¹¿æ' }], |
| | | memberIds: [{ required: true, message: 'è¯·éæ©éç¥äººå' }], |
| | | status: [{ required: true, message: 'è¯·éæ©ç¶æ' }] |
| | | } |
| | | } |
| | | }, |
| | | created () { |
| | | this.config({ |
| | | api: '/business/warningRule', |
| | | 'field.id': 'id' |
| | | }) |
| | | this.loadRegions() |
| | | }, |
| | | methods: { |
| | | normalizeOptions (node) { |
| | | if (!node.childList || !node.childList.length) { |
| | | // 廿children=[]çchildren屿§ |
| | | delete node.childList |
| | | } |
| | | return { |
| | | id: node.indexCode, |
| | | label: node.name, |
| | | children: node.childList |
| | | } |
| | | }, |
| | | changeDeviceType (item) { |
| | | if (item.regionId) { |
| | | var reg = this.getSelectedObject(item.regionId) |
| | | if (reg) { |
| | | item.carmeraList = [] |
| | | if (item.deviceType === 1) { |
| | | item.carmeraList = reg.deviceList |
| | | } else if (item.deviceType === 2) { |
| | | item.carmeraList = reg.sensorList |
| | | }else if (item.deviceType === 0){ |
| | | item.carmeraList = reg.carmeraList |
| | | } |
| | | } |
| | | }else{ |
| | | item.carmeraList = [] |
| | | } |
| | | this.$nextTick(() => { |
| | | if (!item.deviceType || this.notInCarmeraList(item.carmeraList, item.deviceId)) { |
| | | item.deviceId = null |
| | | item.deviceName = null |
| | | } |
| | | }) |
| | | }, |
| | | changeCamera (curitem) { |
| | | var list = curitem.carmeraList |
| | | if (list && list.length) { |
| | | list.forEach(item => { |
| | | if (curitem.deviceId === item.indexCode) { |
| | | curitem.deviceName = item.name |
| | | } |
| | | }) |
| | | } |
| | | }, |
| | | changeSel (opt) { |
| | | console.log('=================changeSel', opt, this.form.detailList) |
| | | var item = this.form.detailList[opt] |
| | | this.form.detailList[opt].regionCode = null |
| | | this.form.detailList[opt].regionName = null |
| | | this.form.detailList[opt].carmeraList = [] |
| | | 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 |
| | | if (item.deviceType === 1) { |
| | | this.form.detailList[opt].carmeraList = reg.deviceList |
| | | } else if (item.deviceType === 2) { |
| | | this.form.detailList[opt].carmeraList = reg.sensorList |
| | | }else{ |
| | | this.form.detailList[opt].carmeraList = reg.carmeraList |
| | | } |
| | | } |
| | | } |
| | | this.$nextTick(() => { |
| | | console.log('=================changeSel1', this.form.detailList[opt].carmeraList, this.form.detailList[opt].deviceId) |
| | | if (this.notInCarmeraList(this.form.detailList[opt].carmeraList, this.form.detailList[opt].deviceId)) { |
| | | this.form.detailList[opt].deviceId = null |
| | | this.form.detailList[opt].deviceName = null |
| | | } |
| | | }) |
| | | }, |
| | | notInCarmeraList (list, id) { |
| | | var r = true |
| | | if (list && list.length) { |
| | | for (const item of list) { |
| | | if (item.indexCode === id) { |
| | | r = false |
| | | } |
| | | } |
| | | } |
| | | return r |
| | | }, |
| | | 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(), deviceId: null, deviceName: null, 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(',') |
| | | }, |
| | | 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.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(), deviceId: null, deviceName: null, 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(() => { |
| | | this.form.detailList = target.detailList |
| | | for (const key in this.form) { |
| | | this.form[key] = target[key] |
| | | this.form.memberNotice = this.form.memberNotice || 0 |
| | | this.form.deviceNotice = this.form.deviceNotice || 0 |
| | | this.form.status = this.form.status || 0 |
| | | } |
| | | console.log('===========================', this.form.detailList, target.detailList) |
| | | if (!this.form.detailList || !this.form.detailList.length) { |
| | | this.form.detailList = [{ random: Math.random(), deviceId: null, deviceName: null, regionId: null, regionName: null, regionCode: null, warningId: null }] |
| | | } else { |
| | | this.form.detailList.forEach((item, index) => { |
| | | if (item.regionId != null) { |
| | | var region = this.getSelectedObject(item.regionId) |
| | | if (region) { |
| | | item.carmeraList = region.carmeraList || [] |
| | | if(item.deviceType === 1){ |
| | | item.carmeraList = region.deviceList || [] |
| | | }else if(item.deviceType === 2){ |
| | | item.carmeraList = region.sensorList || [] |
| | | } |
| | | } |
| | | } |
| | | }) |
| | | } |
| | | if (this.form.memberIds) { |
| | | this.memberSelect = this.form.memberIds.split(',') |
| | | } |
| | | if (this.form.deviceIds) { |
| | | this.deviceSelect = this.form.deviceIds.split(',') |
| | | } |
| | | }) |
| | | }, |
| | | loadMember () { |
| | | allList({ |
| | | type: 2 |
| | | }).then(res => { |
| | | this.memberList = res |
| | | }) |
| | | }, |
| | | loadDevice () { |
| | | allDveiceList({ |
| | | type: 4 |
| | | }).then(res => { |
| | | this.deviceList = 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> |