<template> <div id="app"> <router-view v-if="isRouterAlive" /> <div> <div v-for="(item, index) in showList" :key="index" v-if="index < 4 && ishowAlarm" > <div :class="'tip' + (index + 1)"> <div class="title"> <el-row :span="24"> <el-col :sm="15" style="color: red; font-size: 20px" >{{ item.eventTypeName }} </el-col> <el-col :sm="9" style="text-align: right; padding-right: 10px" >等级: <span class="tip_level" v-if="item.eventLevel == 1" style="color: red" >特别重大</span > <span class="tip_level" v-if="item.eventLevel == 2" style="color: red" >重大</span > <span class="tip_level" v-if="item.eventLevel == 3">一般</span> </el-col> </el-row> </div> <el-divider></el-divider> <div class="tip_warp"> <el-row class="tip_content" type="flex" justify="space-around"> <el-col :span="15"> <el-row :span="24"> <el-col :span="24" style="color: red" >报警地点:{{ item.occurrenceSite }} </el-col> <el-col :span="24" >报警时间:{{ item.occurrenceTime }}</el-col > <el-col :title="item.type" :span="24" >报警类型:{{ item.eventTypeName }} </el-col> <el-col :title="item.resourceName + item.eventTypeName" :span="24" > 报警说明:{{ item.resourceName }}{{ item.eventTypeName }} </el-col> </el-row> </el-col> <el-col class="tip_imgwarp" :span="8"> <img v-if="item.path" :src="urlPath + item.path" alt="" /> <img v-else src="./assets/images/videoImg.png" alt="" /> </el-col> </el-row> <el-row class="btn_warp alarms_warp" type="flex" justify="space-around" > <el-col :span="3" :offset="1"> <el-button class="tip_btn" type="primary" size="medium" round @click="doBtn(item)" >去处理 </el-button> </el-col> <el-col :span="4"> <el-button class="tip_btn" type="info" size="medium" round @click="closeTip(item.id, index)" >关闭 </el-button> </el-col> </el-row> </div> </div> </div> </div> <dispose-info v-if="queryDetailVisible" ref="queryDetail"></dispose-info> <el-dialog :close-on-click-modal="false" title="申请接管站点信息" :visible.sync="dialogVisible" width="30%" class="takeover_dialog" :before-close="takeoverClose" :show-close="false" > <div slot="title"> <span class="title-bold">申请接管站点信息</span> </div> <el-form ref="takeoverForm" :model="takeoverInfo" label-width="140px" size="mini" > <el-form-item label="申请接管站点单位:"> <font>{{ takeoverInfo.takeoverOrgName }}</font> </el-form-item> <el-form-item label="申请人:"> <font>{{ takeoverInfo.applyUserName }}</font> </el-form-item> <el-form-item label="接管类型:"> <font>{{ takeoverInfo.takeoverType === 1 ? '主动接管' : '被动接管' }}</font> </el-form-item> <el-form-item label="申请时间:"> <font>{{ takeoverInfo.applyTime }}</font> </el-form-item> <el-form-item label="申请理由:"> <font>{{ takeoverInfo.reason }}</font> </el-form-item> </el-form> <div slot="footer" align="center"> <el-button class="btn" type="primary" @click="disagree">拒绝</el-button> <el-button class="btn" type="primary" @click="agreed">同意</el-button> </div> </el-dialog> </div> </template> <script> export default { name: 'app', provide() { return { reload: this.reload } }, data() { return { is3DShow: false, ishowAlarm: true, dialogVisible: false, isRouterAlive: true, queryDetailVisible: false, urlPath: window.CONFIG.urlPath, showList: [], takeoverInfo: '' } }, watch: { takeover(newValue) { // console.log(2222, newValue) if (newValue) { this.takeoverInfo = newValue this.dialogVisible = true } else { this.dialogVisible = false } } }, computed: { takeover() { return this.$store.state.d2admin.takeover.takeover } }, mounted() { this.initWebSocket() this.initWebSocket2() this.getDateList() let paramsList = JSON.parse(sessionStorage.getItem('paramsList')) this.$store.dispatch('d2admin/paramsList/set', paramsList) }, destroyed: function () { this.websocketclose() }, methods: { reload() { this.isRouterAlive = false this.$nextTick(function () { this.isRouterAlive = true }) }, //初始化weosocket initWebSocket() { if (typeof WebSocket === 'undefined') { alert('您的浏览器不支持WebSocket') return false } // websocket地址? const wsuri = this.$http.adornUrl('').slice(5) console.log('wsuriLog:' + wsuri) let webpath = '' //wsuri.substring(0, wsuri.indexOf(':')) if (wsuri != null && wsuri.indexOf(':') <= -1) { webpath = 'ws://59.110.43.122:8091/websocket/1001' // webpath = 'ws://10.20.72.31:8091/websocket/1001' } else { webpath = 'ws:' + wsuri.substring(0, wsuri.indexOf(':')) + ':8091/websocket/1001' } console.log('webpathLog:' + webpath) this.websock = new WebSocket(webpath) this.websock.onopen = this.websocketonopen this.websock.onmessage = this.websocketonmessage this.websock.onerror = this.websocketonerror this.websock.onclose = this.websocketclose // 监听窗口关闭事件,当窗口关闭时,主动去关闭websocket连接,防止连接还没断开就关闭窗口,server端会抛异常。 window.onbeforeunload = this.websocketclose }, //连接成功 websocketonopen() { console.log('WebSocket连接成功') // this.send() }, //接收后端返回的数据 websocketonmessage(e) { if ( sessionStorage.getItem('token') && sessionStorage.getItem('token') != undefined ) { var paramsInfo = JSON.parse(e.data) console.log('paramsInfo:', paramsInfo) sessionStorage.setItem('paramsList', JSON.stringify(paramsInfo)) this.$store.dispatch('d2admin/paramsList/set', paramsInfo) } }, //连接建立失败重连 websocketonerror(e) { console.log(`连接失败的信息:`, e) this.initWebSocket() // 连接失败后尝试重新连接 }, //关闭连接 websocketclose(e) { console.log('断开连接', e) }, // ==================================== //初始化weosocket2 initWebSocket2() { if (typeof WebSocket === 'undefined') { alert('您的浏览器不支持WebSocket') return false } // websocket地址? const wsuri = this.$http.adornUrl('').slice(5) console.log('wsuriLog:' + wsuri) let webpath = '' //wsuri.substring(0, wsuri.indexOf(':')) if (wsuri != null && wsuri.indexOf(':') <= -1) { webpath = 'ws://59.110.43.122:8091/websocket/1002' // webpath = 'ws://10.20.72.31:8091/websocket/1002' } else { webpath = 'ws:' + wsuri.substring(0, wsuri.indexOf(':')) + ':8091/websocket/1002' } console.log('webpathLog:' + webpath) this.websock2 = new WebSocket(webpath) this.websock2.onopen = this.websocketonopen2 this.websock2.onmessage = this.websocketonmessage2 this.websock2.onerror = this.websocketonerror2 this.websock2.onclose = this.websocketclose2 // 监听窗口关闭事件,当窗口关闭时,主动去关闭websocket连接,防止连接还没断开就关闭窗口,server端会抛异常。 window.onbeforeunload = this.websocketclose2 }, //连接成功 websocketonopen2() { console.log('WebSocket连接成功2') // this.takeoverInfo = 1 // this.send2() }, //接收后端返回的数据 websocketonmessage2(e) { // 在这里使用后端返回的数据,对数据进行处理渲染 if ( sessionStorage.getItem('token') && sessionStorage.getItem('token') != undefined ) { //登录才能获取 // this.tipList = JSON.parse(e.data) console.log('接管数据' + e.data) let st = e.data.split('_')[0] let bean = JSON.parse(e.data.split('_')[1]) if (st === 'one') { //重连查询接管信息--站点用 if (bean && bean.status === 1) { // 申请接管 sessionStorage.removeItem('takeover') this.takeoverInfo = bean this.dialogVisible = true } else if (bean && bean.valids === 1 && bean.status === 2) { // 已经被接管 this.ishowAlarm = false sessionStorage.setItem('takeover', true) } else { //没有被接管 sessionStorage.removeItem('takeover') } return } else if (st === 'list') { //重连查询---线路路网用 return } if (bean && bean.status === 1) { // 申请接管 this.takeoverInfo = bean this.dialogVisible = true } else if (bean && bean.status === 5 && bean.valids === 0) { // 提示断开接管 sessionStorage.removeItem('takeover') this.$message.warning(bean.lineName + '放弃了对此站点的接管') // this.dialogVisible = false this.ishowAlarm = true } else if (bean && bean.valids === 1 && bean.status === 2) { this.ishowAlarm = false this.$message.success('同意了接管申请') sessionStorage.setItem('takeover', true) this.takeoverClose() location.reload(true) } else if (bean && bean.valids === 1 && bean.status === 3) { this.ishowAlarm = true this.$message.success('拒绝了接管申请') sessionStorage.removeItem('takeover') this.$store.dispatch('d2admin/takeover/set', true) this.takeoverClose() } else if (bean && bean.valids === 0 && bean.status === 4) { sessionStorage.removeItem('takeover') this.$message.success('中断了接管') this.ishowAlarm = true location.reload(true) } // 设置刷新页面(站点接管管理页面) this.$store.dispatch('d2admin/takeover/set', true) // console.log(this.takeoverInfo, '-------') } }, //关闭连接 takeoverClose() { //直接关闭 this.takeoverInfo = {} this.dialogVisible = false this.$store.dispatch('d2admin/takeover/setTakeover', null) }, clickClose(id) { if (id && id === this.takeoverInfo.id) { //有id的话只关闭id跟后台传递过来id相同的弹出层,不一样不关。防止一边同意一边立马申请,申请后发的但是先到了。websocket先发但是后到 console.log('关闭的时候', this.takeoverInfo) //只关闭id跟返回的id一样的数据 this.takeoverClose() } }, //连接建立失败重连 websocketonerror2(e) { console.log(`连接失败的信息2:`, e) this.initWebSocket2() // 连接失败后尝试重新连接 }, //关闭连接 websocketclose2(e) { console.log('断开连接2', e) }, // 同意被接管 agreed() { let item = this.takeoverInfo item.status = 2 // 修改表中数据 this.$http({ url: this.$http.adornUrl('/sysStationTakeover/agree'), method: 'post', data: item }).then((data) => { if (data && data.code === 0) { // this.$message.success('操作成功') sessionStorage.setItem('takeover', true) this.takeoverClose() location.reload(true) } }) }, // 不同意 disagree() { let item = this.takeoverInfo item.status = 3 // 修改表中数据 this.$http({ url: this.$http.adornUrl('/sysStationTakeover/agree'), method: 'post', data: item }).then((data) => { if (data && data.code === 0) { // this.$message.success('操作成功') sessionStorage.removeItem('takeover') this.$store.dispatch('d2admin/takeover/set', true) this.takeoverClose() } }) }, // ==================================== //登录后页面刷新的时候获取 getDateList() { if ( sessionStorage.getItem('token') && sessionStorage.getItem('token') != undefined ) { this.$http({ url: this.$http.adornUrl('/equipment/getListParam'), method: 'get', params: this.$http.adornParams({}) }).then((data) => { if (data && data.code === 0) { console.log('paramsList:', data.bean) sessionStorage.setItem('paramsList', JSON.stringify(data.bean)) this.$store.dispatch('d2admin/paramsList/set', data.bean) } }) } else { } }, doBtn(item) { this.queryDetailVisible = true this.$nextTick(() => { this.$refs.queryDetail.init(item) }) }, closeTip(id, index) { var ruleForm = { id: id, status: 2, beSend: true } this.$http({ url: this.$http.adornUrlAlarm(`/alarmsInfo/update`), method: 'post', data: ruleForm }).then((data) => { if (data && data.code === 0) { this.$message({ message: '操作成功', type: 'success', duration: 1500 }) //目前websocket未移到alarms项目,使用下列关闭 // this.tipList.splice(index, 1) // console.log(this.showList, '-------') this.$store.dispatch('d2admin/toast/set', this.tipList.length) } else { this.$message.error(data.msg) } }) } } } </script> <style lang="scss"> @import '~@/assets/style/public-class.scss'; .takeover_dialog { .el-form-item--mini.el-form-item { margin-bottom: 0 !important; } } // openlayer 样式 .resource-container { .ol-overviewmap { left: 87%; button { display: none; } } } //-- 公共样式--// // page页背景色 // 弹出框 .el-dialog__title { line-height: 24px; font-size: 18px; color: #303133; padding-left: 10px; } .el-dialog__header { border-top: 3px solid #21acfc; padding: 14px 20px 10px !important; background-color: #edeef1; border-bottom: 1px solid #e9e9e9; } // 自定义=============== // 标题加粗 .title-bold { font-weight: bold; font-size: 17px; } // 标题左侧颜色 .title-left-color { border-left: 5px solid #21acfc; padding-left: 10px; } .treeCard .el-card__header { height: 42px; line-height: 42px; background: #e1edf4; padding: 0 0 0 10px !important; } .treeCard > div { padding: 0 !important; } .tableCard .el-card__header { height: 42px; line-height: 42px; background: #edeef1; padding: 0 0 0 10px !important; } .tableHeader .el-table__header-wrapper { height: 42px; line-height: 42px; background: #edeef1; padding: 0 0 0 0 !important; transform: translateY(0px); } .tableHeader .has-gutter { transform: translateY(-12px); } //-- 公共样式--// .my_checkbox { .el-checkbox__input.is-checked + .el-checkbox__label { color: #32a5ea !important; } .el-checkbox__input.is-disabled + span.el-checkbox__label { color: #606266; } .el-checkbox__input.is-disabled .el-checkbox__inner { background-color: #fff; } .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner { background-color: #32a5ea; border-color: #32a5ea; } .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after { border-color: #fff; } } .my_radio { .el-radio__input.is-disabled + span.el-radio__label { color: #606266; } .el-radio__input.is-checked + .el-radio__label { color: #32a5ea !important; } .el-radio__input.is-checked .el-radio__inner { border-color: #32a5ea; background: #32a5ea; } .el-radio__input.is-disabled.is-checked .el-radio__inner::after { background-color: #f5f7fa; } .el-radio__input.is-disabled .el-radio__inner { background-color: #fff; } .el-radio__input.is-disabled.is-checked .el-radio__inner { border-color: #32a5ea; background: #32a5ea; } } .mycard { /* width: 80% !important; */ margin: 0 auto !important; } .mywidth { width: 100% !important; } .box_main { margin-top: 10px; padding: 10px 20px !important; background-color: white; .el-card { border: 0; box-shadow: 0 0 !important; .el-table { border-left: 1px solid #ebeef5; border-right: 1px solid #ebeef5; border-top: 1px solid #ebeef5; } } .el-card__body { padding: 0; } } //文本域样式 .el-textarea__inner { // font: 400 13.3333px Arial; font-weight: 400; font-family: Arial, Helvetica, sans-serif; font-size: inherit; } //按钮样式 .el-button--text { font-size: 14px !important; font-family: Arial, Helvetica, sans-serif !important; } //el-step步骤样式 .is-vertical { flex-basis: auto !important; } .box_footer { background-color: white; } .el-icon-back2 { background: url(assets/images/icon/back.png) center no-repeat; background-size: cover; } .el-icon-back2:before { content: '替'; font-size: 10px; visibility: hidden; } .el_container-style { padding: 0px; height: 77.6vh; } .el_header-style { height: 42px !important; line-height: 42px; border: 1px solid rgba(195, 195, 195, 1); background: #f4f4f4; } .el-table td div { text-overflow: ellipsis !important; overflow: hidden !important; white-space: nowrap !important; } .el-table td, .el-table th { padding: 0 !important; line-height: 40px; height: 40px; } </style> <style lang="scss" scoped> .tip1 { width: 400px; height: 220px; position: fixed; z-index: 100; bottom: 80px; right: 10px; border: 1px solid #ccc; background: white; .title { height: 40px; line-height: 40px; text-indent: 15px; background: #f1f5f8; span { font-size: 17px; font-weight: 400; } } .tip_warp { height: 180px; background: #f1f5f8; .tip_content { padding: 10px; color: #000000; .tip_level { font-size: 17px; color: red; } } .tip_imgwarp { img { width: 130px; height: 85px; } } .btn_warp { padding-top: 10px; .tip_btn { width: 80px; } } } } .tip2 { width: 400px; height: 220px; position: fixed; z-index: 100; bottom: 80px; right: 420px; border: 1px solid #ccc; background: white; .title { height: 40px; line-height: 40px; text-indent: 15px; background: #f1f5f8; span { font-size: 17px; font-weight: 400; } } .tip_warp { height: 180px; background: #f1f5f8; .tip_content { padding: 10px; color: #000000; .tip_level { font-size: 17px; color: red; } } .tip_imgwarp { img { width: 130px; height: 85px; } } .btn_warp { padding-top: 10px; .tip_btn { width: 80px; } } } } .tip3 { width: 400px; height: 220px; position: fixed; z-index: 100; bottom: 80px; right: 830px; border: 1px solid #ccc; background: white; .title { height: 40px; line-height: 40px; text-indent: 15px; background: f1f5f8; span { font-size: 17px; font-weight: 400; } } .tip_warp { height: 180px; background: #f1f5f8; .tip_content { padding: 10px; color: #000000; .tip_level { font-size: 17px; color: red; } } .tip_imgwarp { img { width: 130px; height: 85px; } } .btn_warp { padding-top: 10px; .tip_btn { width: 80px; } } } } .tip4 { width: 400px; height: 220px; position: fixed; z-index: 100; bottom: 80px; right: 1240px; border: 1px solid #ccc; background: white; .title { height: 40px; line-height: 40px; text-indent: 15px; background: f1f5f8; span { font-size: 17px; font-weight: 400; } } .tip_warp { height: 180px; background: #f1f5f8; .tip_content { padding: 10px; color: #000000; .tip_level { font-size: 17px; color: red; } } .tip_imgwarp { img { width: 130px; height: 85px; } } .btn_warp { padding-top: 10px; .tip_btn { width: 80px; } } } } .el-divider--horizontal { margin: 1px 0; padding: 1px 1px; background: 0 0; border-top: 1px dashed; } // ie 弹出层闪烁 .el-dialog__wrapper { transition: none !important; &.dialog-fade-enter-active { transition: none !important; -ms-animation: none !important; } &.dialog-fade-leave-active { transition: none !important; -ms-animation: none !important; } } </style>