<template lang='pug'> el-dialog( width="100%" :fullscreen="true" :close-on-click-modal='false' :visible.sync='visible' :modal-append-to-body='false') .title-bold(slot='title') 预案关联详情 //- <!-- 步骤条 --> el-steps(class="box-steps" :active="active" :align-center="true" style="margin-bottom:0.5rem;") el-step(@click.native="chooseStep(index)" :title="item.title" v-for="(item,index) in stepList" :key="index" :icon="index <= active?'el-icon-stepIcon2':'el-icon-stepIcon1'" process-status="success") //- 第一步 el-card(class="box-card box-card2" v-show="active===0") div(class="clearfix") 报警类型列表 div(style="margin:15px") el-row(:span='24' v-loading="dataListLoading") el-radio-group.radioDisSty(v-model="etId" disabled) el-row(:span='24' :gutter="12") el-col.radio-check-col(:sm='6' v-for="item in eventTypeDataList" :key="item.id") el-card(shadow="hover" class="box-card3" :class="{'radio-check-card':true,'checked': etId===item.id}") //el-radio(:label="item.id" :title="item.resourceTypeName+'-'+item.name") {{item.resourceTypeName+'-'+item.name}} el-radio(:label="item.eventId" :title="item.eventName") {{item.eventName}} el-pagination(@size-change="sizeChangeHandle" background style="position: absolute;right:370px; top:545px;" @current-change="currentChangeHandle" :current-page="pageIndex" :page-sizes="[16]" :page-size="pageSize" :total="totalPage" layout="total, sizes, prev, pager, next, jumper") //- 第二步 el-card(class="box-card box-card2" v-show="active===1") el-container(style='padding-left:0px;') div( style='height:100%;width:360px') div(class="box-card1") div(class="clearfix") 资源点列表 div(style="clear:both") el-tree(:data="treeData" disabled style="background-color: rgba(254,219,207,0);" ref='tree' :accordion='true' :highlight-current='true' :props="defaultProps" :default-expand-all='false' show-checkbox :default-expanded-keys='defaultExpandedKeys' :node-key='nodeKey' :filter-node-method="filterResourceNode") <span class="custom-tree-node" style='width:100%;line-height: 18px;' slot-scope="{ node, data }"> <span v-if="node.data.level != 6" class="el-icon-wq-treeIcon"></span> <span v-if="node.data.level == 6 && node.data.type=='枪机'" class="el-icon-wq-treeQiang"></span> <span v-if="node.data.level == 6 && node.data.type!='枪机'" class="el-icon-wq-treeQiu"></span> <span> {{node.label}}</span> </span> div(style="padding:0px; width:900px; box-shadow:inset 0px 2px 8px 0px rgba(0, 0, 0, 0.2) !important;") el-card(class="box-card1" style="") div( class="clearfix") 已选资源点 el-row(:span='24' :gutter="12" style="padding:0 20px;overflow: auto;max-height: 400px;margin-right: 0px !important;") el-col.radio-check-col(:sm='6' style='height:60px;' v-for="(item,index) in checkedResources" :key="item.id") div(style='height:60px; line-height:60px; background:#F6F7FB; padding-left:20px') span(:title="item.name") {{item.name | ellipsis}} //- 第三步 el-card(class="box-card box-card2" v-show="active===2") div(class="clearfix") 应急预案列表 el-row(:span='24' v-loading="dataListLoadingPlan") div(style="margin:15px") el-checkbox-group.checkDisSty(v-model="checkedPlans" @change="handleCheckedResourcesChangePlan") el-row(:span='24' :gutter="12") el-col.radio-check-col(:sm='6' v-for="item in planList" :key="item.id") el-card(shadow="hover" class="box-card3" :class="{'radio-check-card':true,'checked':checkedPlans.indexOf(item.id)>-1}") el-row(:span='24') el-col(:span='24') el-checkbox(:label="item.id" :title="item.name" disabled) {{item.name | ellipsis}} el-row(:span='24') el-col(:span='24' v-for="(level,index) in planLevelList" :key="index" v-if="level.value===item.level") span() 等级:{{level.label}} el-col(:span='24') span() 适用范围:{{item.stationName}} el-col(:span='24') span() 预案编码:{{item.code}} el-pagination(@size-change="sizeChangeHandlePlan" background style="position: absolute;right:370px; top:545px;" @current-change="currentChangeHandlePlan" :current-page="pageIndexPlan" :page-sizes="[12]" :page-size="pageSizePlan" :total="totalPagePlan" layout="total, sizes, prev, pager, next, jumper") div(align="center" style="margin:10px 0px 50px 0px") el-button(type="primary" v-show="active>0" @click="previous") 上一步 el-button(type="primary" @click="next" :disabled="clickFlag&&active==2") {{active===2?'关闭':'下一步'}} </template> <script> export default { filters: { ellipsis (value) { if (!value) return '' if (value.length > 14) { return value.slice(0, 14) + '...' } return value } }, data () { return { clickFlag: false, visible: false, bean: {}, //预案关联信息 stepList: [ { state: false, title: '报警类型选择' }, { state: false, title: '涉及资源点选择' }, { state: false, title: '触发的应急预案选择' } ], active: 0, eventTypeDataList: [], pageIndex: 1, pageSize: 16, totalPage: 0, dataListLoading: false, systemList: [], resourceTypeList: [], etId: '', //所选事件类型id subCode: '', //所选事件类型的子系统编码 resourceType: '', //所选事件类型的资源点类型 dataForm: {//事件类型查询条件 subCode: '', subSystem: '', resourceType: '' }, treeData: [], //资源树数据 defaultExpandedKeys: [], //资源树默认展开节点 defaultProps: { children: 'children', label: 'name', level: 'level' }, nodeKey: 'id', checkedData: {//选中的资源树节点信息 lineId: '', lineName: '', stationId: '', stationName: '', subCode: '', subSystem: '', tierId: '', tierName: '', resourceId: '', sId: localStorage.getItem('stationId') }, checkAll: false, //全选资源点 checkedResources: [], //选中的资源点 checkedResourceKeys: [], //选中的资源点的id resourceList: [], //右侧展示的资源点 isIndeterminate: true, resourceFilterText: '', //资源点树过滤资源点名称 resourceSubCode: '', //资源点树过滤子系统 resourceSubId: '', //资源点树过滤子系统 //预案查询条件 dataFormPlan: { stationId: localStorage.getItem('stationId') }, pageIndexPlan: 1, pageSizePlan: 12, totalPagePlan: 0, dataListLoadingPlan: false, planTypeList: [], //预案类型 planLevelList: [], //预案级别 checkAllPlan: false, //选择所有预案 checkedPlans: [], //选中的预案 planList: [], //右侧展示的预案 isIndeterminatePlan: true } }, watch: { resourceFilterText (val) { this.$refs.tree.filter(val) // this.initRightResourceList() }, totalPage1() { //注意这个函数的名字必须和你监听data中的属性的名字一样,这样才能当你data中的属性发生变化时,触发这个函数 let pages = Math.ceil(this.totalPage1 / this.pageSize1)//新数据总页数 //总页数小于当前页数则重新加载列表数据 if (pages < this.pageIndex1) { this.pageIndex1 = pages || 1 this.getDataList()//获取表格数据的方法 } }, totalPage2() { //注意这个函数的名字必须和你监听data中的属性的名字一样,这样才能当你data中的属性发生变化时,触发这个函数 let pages = Math.ceil(this.totalPage2 / this.pageSize2)//新数据总页数 //总页数小于当前页数则重新加载列表数据 if (pages < this.pageIndex2) { this.pageIndex2 = pages || 1 this.getDataList2()//获取表格数据的方法 } } }, created () { this.init() }, methods: { init (id) { this.visible = true this.bean.id = id || '' this.etId = '' this.checkedResources = [] this.checkedResourceKeys = [] this.checkedPlans = [] this.pageIndex = 1 this.pageIndexPlan = 1 this.active = 0 if (this.bean.id) { this.initDataFrom() } this.dataForm = {} this.reloadEventTypeDataList() this.initSubSystemDicList() this.initResourceTypeDicList() this.initTree() this.reloadPlanDataList() this.initPlanLevelList() this.initPlanTypeList() }, //上一步 previous () { if (this.active-- < 0) this.active = 0 }, //切换步骤 chooseStep (step) { if (!this.bean.id && step >= 0 && !this.stepList[step].state) { return } if (!this.checkChooseData()) { return } this.active = step }, //下一步 next () { if (!this.checkChooseData()) { return } if (this.active === 0) { this.saveStep1() } else if (this.active === 1) { this.saveStep2() } else if (this.active === 2) { this.saveStep3() } // console.log('切换步骤this.stepList:', this.stepList) }, saveStep1 () { this.active = 1 this.stepList[0].state = true }, saveStep2 () { this.active = 2 this.stepList[1].state = true }, saveStep3 () { this.visible = false this.clickFlag = false this.stepList[2].state = true this.$emit('refreshdatalist') }, //校验数据 checkChooseData () { if (this.active === 0) { //第一步 if (!this.etId) { this.$message.error('请选择事件类型') return false } this.bean.etId = this.etId this.eventTypeDataList.forEach(e => { if (e.id === this.etId) { this.bean.etName = e.name this.bean.subCode = e.subCode this.subCode = e.subCode this.resourceSubCode = e.subCode this.resourceType = e.resourceType } }) this.initTree() } else if (this.active === 1) { //第二步 if (!this.checkedResources || this.checkedResources.length <= 0) { this.$message.error('请选择资源点') return false } this.bean.resourceList = this.checkedResources.map(e => { return { resourceId: e.id, associatedId: this.bean.id } }) this.bean.resourceNum = this.checkedResources.length } else if (this.active === 2) { //第三步 if (!this.checkedPlans || this.checkedPlans.length <= 0) { this.$message.error('请选择预案') return false } this.bean.planList = this.checkedPlans.map(e => { return { planId: e, associatedId: this.bean.id } }) } return true }, initSubSystemDicList () { this.$http({ url: this.$http.adornUrl('/sysDictionary/getSubSystemDicList'), method: 'get', params: this.$http.adornParams({ stationId: localStorage.getItem('stationId') }) }).then(data => { // console.log('子系统字典项', data) if (data && data.code === 0) { this.systemList = data.list this.systemList.forEach(e => { if (e.value === this.resourceSubCode) { this.resourceSubId = e.id } }) } }) }, /*initResourceTypeDicList () { this.$http({ url: this.$http.adornUrl('/sysDictionary/getResourceTypeDicList'), method: 'get', params: this.$http.adornParams({ stationId: localStorage.getItem('stationId') }) }).then(data => { // console.log('资源点类型字典项', data) if (data && data.code === 0) { this.resourceTypeList = data.list } }) },*/ initResourceTypeDicList () { this.$http({ url: this.$http.adornUrl('/sysDictionary/getResourceTypeDicList'), method: 'get', params: this.$http.adornParams({ stationId: localStorage.getItem('stationId') }) }).then(data => { // console.log('资源点类型字典项', data) if (data && data.code === 0) { this.resourceTypeList = data.list } }) }, //选择子系统编码 subSystemChange (e) { // console.log('subSystemChange:', e) // this.systemList.forEach(a => { // if (a.name === e) { // this.dataForm.subCode = a.value // this.dataForm.subSystem = a.name // this.subCode = a.value // this.resourceSubCode = a.value // this.resourceSubId = a.id // } // }) }, //选择资源点类型 resourceTypeChange (e) { // console.log('resourceTypeChange:', e) // this.resourceTypeList.forEach(a => { // if (a.name === e) { // this.dataForm.resourceType = a.value // } // }) }, //查询时从第一页开始查询 reloadEventTypeDataList () { this.pageIndex = 1 this.getEventTypeDataList() }, // 获取事件列表 getEventTypeDataList () { this.$http({ url: this.$http.adornUrlAlarm('/linkResourceEvent/queryAlarmList'), method: 'post', data: { page: this.pageIndex, rows: this.pageSize, stationId: localStorage.getItem('stationId'), //subCode: this.dataForm.subCode, resourceType: this.dataForm.resourceType } }).then(data => { // console.log('初始化事件类型:', data) if (data && data.code === 0) { this.eventTypeDataList = data.page.rows this.totalPage = data.page.total } else { this.eventTypeDataList = [] this.totalPage = 0 } }) }, // 每页数 sizeChangeHandle (val) { this.pageSize = val this.pageIndex = 1 this.getEventTypeDataList() }, // 当前页 currentChangeHandle (val) { this.pageIndex = val this.getEventTypeDataList() }, //第二步 //初始化资源点树 initTree () { this.$http({ url: this.$http.adornUrl('/liResource/getTreeList'), method: 'post', data: { stationId: this.checkedData.sId, subCode: this.resourceSubCode, type: this.resourceType, queryInfo: 'queryInfo', glType: '2' } }).then(data => { // console.log('初始化线路树:', data.tree) if (data && data.code === 0) { this.treeData = data.tree if (!this.checkedData.sId) { this.defaultExpandedKeys = [this.treeData[0].children[0].id] //设置选中的节点 this.$refs.tree.setCurrentNode(this.treeData[0].children[0]) } // else { // this.initTreeStationMap(this.treeData[0], true) // } } }).then(() => { this.$refs.tree.setCheckedKeys(this.checkedResourceKeys) let checkedNodes = this.$refs.tree.getCheckedNodes(true) this.checkedResources = checkedNodes.filter(node => { if (node.level === 6) { return node } }) }) }, //初始化站点下的资源点 initTreeStationMap (node, flag) { this.$http({ url: this.$http.adornUrl('/liResource/getStationMapTreeList'), method: 'post', data: { stationId: node.id, subSystemDicId: this.resourceSubId, subCode: this.resourceSubCode, resourceName: this.resourceFilterText, resourceType: this.resourceType } }).then(data => { // console.log('初始化线路树:', data.nodes) if (data && data.code === 0) { this.$refs.tree.updateKeyChildren(node.id, data.nodes) } }).then(() => { if (this.checkedData.sId && flag) { this.defaultExpandedKeys = [this.treeData[0].children[0].id] //设置选中的节点 // console.log('默认选中节点', this.treeData[0].children[0]) this.$refs.tree.setCurrentNode(this.treeData[0].children[0]) this.initRightResourceList() } this.initStation(node.id) }) }, //站点级系统初始化右侧所有资源点 initRightResourceList () { this.$refs.tree.setCheckedKeys(this.checkedResourceKeys) let checkedNodes = this.$refs.tree.getCheckedNodes(true) this.checkedResources = checkedNodes.filter(node => { if (node.level === 6) { return node } }) }, //初始化资源点信息 initTreeResource (node) { let data = { lineId: this.checkedData.lineId, stationId: this.checkedData.stationId, tierId: this.checkedData.tierId, subCode: this.checkedData.subCode, name: this.resourceFilterText } // console.log('初始化线路树请求参数:', data) this.$http({ url: this.$http.adornUrlAlarm('/liResource/getResourceTreeList'), method: 'post', data: data }).then(data => { // console.log('初始化线路树:', data.nodes) if (data && data.code === 0) { this.$refs.tree.updateKeyChildren(node.id, data.nodes) } }) }, //初始化站点地图层级 initStation (id) { // console.log('初始化站点id:', id) this.$http({ url: this.$http.adornUrl(`/liStation/getId/${id}`), method: 'get', params: this.$http.adornParams() }).then(data => { if (data && data.code === 0) { this.checkedData.lineId = data.bean.lineId this.checkedData.lineName = data.bean.lineName this.checkedData.stationId = data.bean.id this.checkedData.stationName = data.bean.stationName this.checkedData.tierId = data.bean.mapList[0].id this.checkedData.tierName = data.bean.mapList[0].name } }).then(() => { this.showResourceByMapId() }) }, //移除选中的资源点 removeResource (id, index) { this.checkedResources.splice(index, 1) this.checkedResourceKeys.splice(index, 1) this.$refs.tree.setChecked(id, false) }, //资源点全选 handleCheckAllChange (val) { // console.log('handleCheckAllChange', val) this.checkedResources = val ? this.resourceList.map(res => { return res.id }) : [] this.isIndeterminate = false }, //资源点选择事件 handleCheckedResourcesChange (value) { // console.log('handleCheckedResourcesChange', value) let checkedCount = value.length this.checkAll = checkedCount === this.resourceList.length this.isIndeterminate = checkedCount > 0 && checkedCount < this.resourceList.length // console.log('this.checkedResources', this.checkedResources) }, //资源点树节点过滤 filterResourceNode (value, data) { if (!value) return true return data.name.indexOf(value) !== -1 }, //资源点树节点过滤 resourceSubSystemChange (e) { this.systemList.forEach(a => { if (a.value === e) { this.resourceSubCode = a.value this.resourceSubId = a.id } }) let node = this.$refs.tree.getNode(this.checkedData.sId).data this.initTreeStationMap(node, true) }, //第三步 initPlanLevelList () { this.planLevelList = [ { value: 1, label: 'Ⅰ级' }, { value: 2, label: 'Ⅱ级' }, { value: 3, label: 'Ⅲ级' }, { value: 4, label: 'Ⅳ级' } ] }, initPlanTypeList () { this.planTypeList = [ { value: 1, label: '单项预案' }, { value: 2, label: '综合预案' } ] }, //查询时从第一页开始查询 reloadPlanDataList () { this.pageIndexPlan = 1 this.getPlanDataList() }, // 获取预案列表 getPlanDataList () { this.$http({ url: this.$http.adornUrlAlarm('/planRegister/list'), method: 'post', data: { name: this.dataFormPlan.name, type: this.dataFormPlan.type, level: this.dataFormPlan.level, status: 2, stationId: this.dataFormPlan.stationId, page: this.pageIndexPlan, rows: this.pageSizePlan } }).then(data => { if (data && data.code === 0) { this.planList = data.page.rows this.totalPagePlan = data.page.total } else { this.planList = [] this.totalPagePlan = 0 } this.dataListLoadingPlan = false }) }, // 每页数 sizeChangeHandlePlan (val) { this.pageSizePlan = val this.pageIndexPlan = 1 }, // 当前页 currentChangeHandlePlan (val) { this.pageIndexPlan = val this.getPlanDataList() }, //资源点全选 handleCheckAllChangePlan (val) { // console.log('handleCheckAllChangePlan', val) this.checkedPlans = val ? this.planList.map(res => { return res.id }) : [] this.isIndeterminatePlan = false }, //资源点选择事件 handleCheckedResourcesChangePlan (value) { // console.log('handleCheckedResourcesChangePlan', value) let checkedCount = value.length this.checkAllPlan = checkedCount === this.planList.length this.isIndeterminatePlan = checkedCount > 0 && checkedCount < this.planList.length // console.log('this.checkedPlans', this.checkedPlans) }, //初始化预案关联信息 initDataFrom () { this.$http({ url: this.$http.adornUrlAlarm(`/planAssociated/getId`), method: 'get', params: { id: this.bean.id } }).then(data => { if (data && data.code === 0) { this.bean = data.bean this.etId = this.bean.etId this.subCode = this.bean.subCode this.resourceSubCode = this.bean.subCode this.systemList.forEach(e => { if (e.value === this.resourceSubCode) { this.resourceSubId = e.id } }) this.checkedResourceKeys = this.bean.resourceList.map(e => { return e.resourceId }) this.checkedPlans = this.bean.planList.map(e => { return e.planId }) // console.log('选择的事件类型id:', this.etId) // console.log('选择的资源点:', this.checkedResources) // console.log('选择的预案:', this.checkedPlans) } }) }, // 表单提交 dataFormSubmit (id) { this.clickFlag = true this.$http({ url: this.$http.adornUrlAlarm( `/planAssociated/${!this.bean.id ? 'save' : 'update'}` ), method: 'post', data: this.bean }).then(data => { console.log(data) if (data && data.code === 0) { this.$message({ message: '操作成功', type: 'success', duration: 1500, onClose: () => { this.visible = false this.clickFlag = false this.stepList[2].state = true this.$emit('refreshdatalist') } }) } else { this.$message.error(data.msg) } }) } } } </script> <style lang='scss' scoped> .radioDisSty /deep/.el-radio__input.is-disabled .el-radio__inner{ background-color: #FFF; } .radioDisSty /deep/ .el-radio__input.is-disabled+span.el-radio__label{ color: #606266; } .radioDisSty /deep/.el-radio__input.is-disabled.is-checked+.el-radio__label{ color: #32A5EA; } .radioDisSty /deep/ .el-radio__input.is-disabled.is-checked .el-radio__inner { border-color: #32A5EA; background: #32A5EA; } .radioDisSty /deep/ .el-radio__input.is-disabled.is-checked .el-radio__inner::after{ border: 1px solid #DCDFE6; background-color: #FFF; position: absolute; left: 50%; top: 50%; width: 4px; height: 4px; } .checkDisSty /deep/ .el-checkbox__input.is-disabled+span.el-checkbox__label{ color: #606266; } .checkDisSty /deep/ .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner { background-color: #32A5EA; border-color: #32A5EA; } .checkDisSty /deep/ .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after{ border-color: #FFF; } .checkDisSty /deep/ .el-checkbox__input.is-disabled .el-checkbox__inner{ background-color: #FFF; } .el-step:hover { cursor: pointer; } .radio-hover { &:hover { box-shadow: 2px 2px 2px 2px #cccccc; } } .radio-check-col { margin-bottom: 10px; } .radio-check-card { background: #F6F7FB !important; /*// &:hover { // background: #32a5ea; // .el-radio, // .el-checkbox { // color: #fff; // } // } // 文字换行 .el-radio, .el-checkbox { // word-break:normal; // width:auto; // display:block; // white-space:pre-wrap; // word-wrap : break-word ; // overflow: hidden ; }*/ } .checked { background:#E8F7FF !important; } .box-card{ width:1200px;margin:0 auto; max-height:460px !important; height:460px !important; } .box-steps{ width:1800px;margin:0 auto; } .box-card1{ border: 0; height:460px; .el-card__body{ padding:0 !important; } } .box-card2{ .el-card__body{ padding:0 !important; } } .box-card3{ .el-card__body{ padding:20px !important; } } .clearfix{ height:40px; background:#EFF9FE;padding-left:20px;line-height:40px; font-size:14px;font-weight:both; margin-bottom:10px; } </style>