<template> <div id="ZHRQ"> <PublicHead /> <div :class="['LeftBox', 'animate__animated', showPanel ? 'animate__fadeOutLeft' : 'animate__fadeInLeft']"> <div class="ComBox LeftBox1_1"> <div class="Box_header">管道风险评估</div> <div class="Box_Body"> <div class="TJListBox"> <div class="TJList TJList_RQ" @click="TuChengClick(0)"> <img class="TJListImg" src="@/assets/images/Sponge_screen/RQ/RQ_RQ.png" alt="" /> <span class="TJListName">燃气管道</span> <span class="TJListValue">4549km</span> </div> <div class="TJList TJList_GZ"> <img class="TJListImg" src="@/assets/images/Sponge_screen/RQ/RQ_GZ.png" alt="" /> <span class="TJListName">需改造</span> <span class="TJListValue">1922km</span> </div> </div> <div class="RQ_EchartsBox" id="Echarts2Box"></div> </div> </div> <div class="ComBox LeftBox1_2"> <div class="Box_header">风险监测</div> <div class="Box_Body"> <div class="TJListBox"> <div class="TJList2" @click="showIndexOver()"> <span class="TJList2Name">指标超标</span> <span class="TJList2Value">10</span> </div> <div class="TJList2" @click="showIndexWarning()"> <span class="TJList2Name">预警站点数</span> <span class="TJList2Value">1</span> </div> </div> <div class="TableChange"> <div class="TableChangeList" :class="AllData.TableChangeIndex == item.id ? 'TableCheck' : ''" v-for="item in AllData.ChangeData" @click="AllData.TableChangeIndex = item.id" > {{ item.name }} </div> </div> <!-- 弹性盒子 --> <div class="TableBox"> <div class="tableHeader"> <span class="tableHeaderList tableList1">指标</span> <span class="tableHeaderList tableList2">数值</span> <span class="tableHeaderList tableList3">状态</span> <span class="tableHeaderList tableList4">操作</span> </div> <div class="tableBody"> <div class="tableBodyList" v-for="item in AllData.FXJCData"> <span class="tableBodyList_span1" @click="FengXianClick(item)">{{ item.zb }}</span> <span class="tableBodyList_span2" @click="FengXianClick(item)" >{{ item.sz }} <el-icon v-if="item.szzt" color="lime" size="14"><Top /> </el-icon> <el-icon v-else color="#f54444" size="14"> <Bottom /> </el-icon> </span> <span class="tableBodyList_span3" :class="item.zt == 0 ? 'YJClass' : ''">{{ item.zt == 0 ? '预警' : '正常' }}</span> <span class="tableBodyList_span4" @click="PaiFa(item)">派发</span> </div> </div> <div class="tableFoot">更新时间:2024-09-27 10:00</div> </div> </div> </div> <div class="ComBox LeftBox1_3"> <div class="Box_header">预警统计</div> <div class="Box_Body"> <div class="TableChange2"> <div class="TableChangeList2" :class="AllData.YJChangeIndex == item.id ? 'TableCheck2' : ''" v-for="item in AllData.YJChangeData" @click="initEcharts(item.id)" > {{ item.name }} </div> </div> <div id="YJEchartsBox"></div> </div> </div> </div> <div :class="['RightBox', 'animate__animated', showPanel ? 'animate__fadeOutRight' : 'animate__fadeInRight']"> <div class="ComBox RightBox1_1"> <div class="Box_header">辅助决策</div> <div class="Box_Body"> <div class="JCListBox" v-for="item in AllData.JCData"> <div class="JCListBox_List"> <span class="JCListBox_List_label">风险区域:</span> <span class="JCListBox_List_value">{{ item.wranLocation }}</span> </div> <div class="JCListBox_List"> <span class="JCListBox_List_label">风险特征:</span> <span class="JCListBox_List_value">{{ item.riskProfile }}</span> </div> <div class="JCListBox_List"> <span class="JCListBox_List_label">历史事件:</span> <span class="JCListBox_List_value">{{ item.warnFrequency }}</span> </div> <div class="JCListBox_List"> <span class="JCListBox_List_label">问题研判:</span> <span class="JCListBox_List_value color_red">{{ item.assessment }}</span> </div> <div class="JCListBox_List JCListBox_List_BTN"> <el-button style="background: #03b6a0; color: white; border: none" size="small" @click="GongDanPaiFa(item)" >工单派发</el-button > <el-button style="background: #03b6a0; color: white; border: none" size="small" @click="XianChangLianXian(item)" >现场联线</el-button > </div> </div> </div> </div> <div class="ComBox RightBox1_2"> <div class="Box_header">预警处置</div> <div class="Box_Body"> <div class="FK_headerBox"> <div class="FK_headerBox_list" @click="dealOrNoDeal(1)"><span class="FK_headerBox_list_colorBox1"></span> 未处理</div> <div class="FK_headerBox_list" @click="dealOrNoDeal(2)"><span class="FK_headerBox_list_colorBox2"></span> 已处理</div> </div> <div class="FK_bodyBox"> <div class="FK_bodyBox_list" v-for="item in AllData.XCFKData"> <span class="FK_bodyBox_list_label" @click="XunChaFanKui(item)">{{ item.name }}</span> <div class="FK_BigBox"> <div class="FK_CenBox1" :style="getWidth(item, 1)">{{ item.num1 }}</div> <div class="FK_CenBox2" :style="getWidth(item, 2)">{{ item.num2 }}</div> </div> </div> </div> </div> </div> </div> <!-- <div :class="['TopBox', 'animate__animated', showPanel ? 'animate__fadeOutUp' : 'animate__fadeInDown']"> <div class="TopTableHeader"> <span class="TopTableListSpan TopTableListSpan1">时间</span> <span class="TopTableListSpan TopTableListSpan2">事件明细</span> <span class="TopTableListSpan TopTableListSpan3">地点</span> <span class="TopTableListSpan TopTableListSpan4">状态</span> <span class="TopTableListSpan TopTableListSpan5">责任单位</span> <span class="TopTableListSpan TopTableListSpan6">督办</span> </div> <Vue3SeamlessScroll :list="AllData.TopTableData" :singleHeight="34" :hover="true" class="TopTableBody"> <div class="TopTableBody_list" v-for="item in AllData.TopTableData"> <span class="TopTableListSpan TopTableListSpan1">{{ item.sj }}</span> <span class="TopTableListSpan TopTableListSpan2">{{ item.mx }}</span> <span class="TopTableListSpan TopTableListSpan3">{{ item.dd }}</span> <span class="TopTableListSpan TopTableListSpan4">{{ item.zt == 0 ? "未处理" : "已处理" }}</span> <span class="TopTableListSpan TopTableListSpan5">{{ item.dw }}</span> <span class="TopTableListSpan TopTableListSpan6"> <img class="TopTableListSpanImg2" src="@/assets/images/Sponge_screen/RQ/RQ_XX.png" alt="" @click="PaiFa(item)" /> <img class="TopTableListSpanImg" src="@/assets/images/Sponge_screen/RQ/RQ_SP.png" alt="" @click="XianChangLianXian(item)" /> </span> </div> </Vue3SeamlessScroll> </div> --> <!-- <div :class="[ 'bottomBox', 'animate__animated', showPanel ? 'animate__bounceOutDown' : 'animate__fadeInUpBig', ]" > <div class="TopTableHeader"> <span class="TopTableListSpan TopTableListSpan1">指挥中心</span> <span class="TopTableListSpan TopTableListSpan2">动态</span> <span class="TopTableListSpan TopTableListSpan3">时间</span> <span class="TopTableListSpan TopTableListSpan4">指令状态</span> </div> <Vue3SeamlessScroll :list="AllData.bottomTableData" :singleHeight="34" :hover="true" class="TopTableBody" > <div class="TopTableBody_list" v-for="item in AllData.bottomTableData"> <span class="TopTableListSpan TopTableListSpan1">{{ item.zhzx }}</span> <span class="TopTableListSpan TopTableListSpan2">{{ item.dt }}</span> <span class="TopTableListSpan TopTableListSpan3">{{ item.sj }}</span> <span class="TopTableListSpan TopTableListSpan4">{{ item.zlzt }}</span> </div> </Vue3SeamlessScroll> </div> --> <div class="IssueWarning" @click="WarningClick">发布预警</div> </div> </template> <script setup name="ZHRQ"> import { ref, reactive, toRefs, onMounted, onBeforeUnmount, nextTick } from 'vue'; import PublicHead from './PublicHead'; import moment from 'moment'; import * as echarts from 'echarts'; import bus from '@/bus'; import { Vue3SeamlessScroll } from 'vue3-seamless-scroll'; import sheBeiLost from '@/assets/sheBeiLost.json'; import xiaXian from '@/assets/xiaXian.json'; import yiBian from '@/assets/yiBian.json'; import zaWuDuiFang from '@/assets/zaWuDuiFang.json'; import rq_QiTa from '@/assets/rq_QiTa.json'; import no_sheBeiLost from '@/assets/no_sheBeiLost.json'; import no_xiaXian from '@/assets/no_xiaXian.json'; import no_yiBian from '@/assets/no_yiBian.json'; import no_zaWuDuiFang from '@/assets/no_zaWuDuiFang.json'; import no_rq_QiTa from '@/assets/no_rq_QiTa.json'; import yanAnRQoverindex from '@/assets/yanAnRQoverindex.json'; import yanAnWarring from '@/assets/yanAnWarring.json'; // 辅助决策 import { commonWarningList } from '@/api/RQWarning'; const { proxy } = getCurrentInstance(); const { module_type } = proxy.useDict('module_type'); console.log('🚀 ~ module_type:', module_type); const AllData = reactive({ xunChaStatic: null, showTipsData: {}, xunChaLayers: [ 'alreadyDeal_DF', 'alreadyDeal_DS', 'alreadyDeal_XX', 'alreadyDeal_YB', 'alreadyDeal_QT', 'noDeal_DF', 'noDeal_DS', 'noDeall_XX', 'noDeal_YB', 'noDeal_QT', ], ChangeData: [ { name: '枣园', id: 1, }, { name: '杨家湾', id: 2, }, { name: '丰富川', id: 3, }, ], TableChangeIndex: 1, // 风险监测 FXJCData: [ { zb: '甲烷浓度', sz: '3%', szzt: true, zt: 0, //0预警 1 正常 value: 'JWND', }, { zb: '压力', sz: '5MPa', szzt: false, zt: 1, //0预警 1 正常 value: 'YL', }, { zb: '温度', sz: '25C°', szzt: true, zt: 1, //0预警 1 正常 value: 'WD', }, ], YJChangeData: [ { name: '综合', id: 1, }, { name: '压力', id: 2, }, { name: '温度', id: 3, }, ], YJChangeIndex: 1, //辅助决策 JCData: [ { qy: '宝塔区凤凰山街道二道街', tz: '压力监测异常波动', sj: 5, yp: '设施故障', value: '001', //语音识别内容编码-前段自己设置的,后期项目有接口就直接替换数据唯一id }, { qy: '宝塔区凤凰山街道二道街', tz: '燃气管道压力过大', sj: 5, yp: '燃气爆管风险', value: '002', }, { qy: '宝塔区凤凰山街道二道街', tz: '高峰期流量持续降低', sj: 4, yp: '燃气泄漏风险', value: '003', }, ], // 巡查反馈 XCFKData: [ { name: '堆放杂物', num1: 20, num2: 80, }, { name: '设备丢失', num1: 12, num2: 88, }, { name: '下陷', num1: 32, num2: 68, }, { name: '异变', num1: 30, num2: 70, }, { name: '其他', num1: 20, num2: 80, }, ], // 顶部表格数据 TopTableData: [ { sj: '2024-09-26 10:00:29', mx: '燃气常规检查发现泄漏', dd: '宝塔区凤凰山街道二道街', zt: 0, //0未处理 1已处理 dw: '延安市燃气总公司', value: null, }, { sj: '2024-09-27 16:10:248', mx: '燃气常规检查发现泄漏', dd: '宝塔区凤凰山街道二道街', zt: 0, //0未处理 1已处理 dw: '延安市燃气总公司', value: null, }, { sj: '2024-09-26 10:00:29', mx: '燃气常规检查发现泄漏', dd: '宝塔区凤凰山街道二道街', zt: 0, //0未处理 1已处理 dw: '延安市燃气总公司', value: null, }, { sj: '2024-09-27 16:10:248', mx: '燃气常规检查发现泄漏', dd: '宝塔区凤凰山街道二道街', zt: 0, //0未处理 1已处理 dw: '延安市燃气总公司', value: null, }, ], // 底部表格数据 bottomTableData: [ { zhzx: '预警发布', dt: '启动预警并通知成员单位', sj: '10-20 08:30', zlzt: '预警下发给城管局各单位,燃气供应处', }, { zhzx: '预警启动', dt: '起草燃气安全预警应急行动', sj: '10-20 07:00', zlzt: '起草了预警通知', }, ], timer: null, }); const { JCData } = toRefs(AllData); // 预警统计echarts实例 const myChart = shallowRef(null); // 管道风险评估echarts实例 const myChart2 = shallowRef(null); //面板展开收起 const showPanel = ref(true); // 面板内容展开收起控制 const props = defineProps({ showPanel: { type: Boolean, }, }); // 初始化预警统计的Echarts const initEcharts = id => { AllData.YJChangeIndex = id; let Data1 = []; let Data2 = []; if (AllData.YJChangeIndex == 1) { Data1 = [6, 2, 1, 5, 7, 6, 3]; Data2 = [16, 7, 8, 12, 16, 13, 12]; } else if (AllData.YJChangeIndex == 2) { Data1 = [2, 3, 8, 3, 2, 1, 4]; Data2 = [7, 16, 13, 16, 12, 8, 12]; } else { Data1 = [6, 4, 3, 5, 8, 3, 8]; Data2 = [8, 12, 16, 13, 16, 7, 12]; } if (!!AllData.timer) { clearTimeout(AllData.timer); } if (!!myChart.value) { myChart.value.dispose(); } myChart.value = echarts.init(document.getElementById('YJEchartsBox')); myChart.value.off('click'); myChart.value.setOption({ color: ['#18A7F2', '#1AF7AA'], tooltip: { trigger: 'axis', }, grid: { top: '30%', left: '3%', right: '4%', bottom: '3%', containLabel: true, }, legend: { data: ['预警次数', '持续时长'], textStyle: { color: '#fffd', // 图例文字颜色 }, x: '40', y: '10', }, xAxis: [ { type: 'category', data: ['今日', '09/27', '09/26', '09/25', '09/24', '09/23', '09/22'], axisPointer: { type: 'shadow', }, textStyle: { color: '#EBFEFF', }, axisLine: { lineStyle: { color: '#EBFEFF', }, }, // boundaryGap: false, }, ], yAxis: [ { type: 'value', name: '预警次数', min: 0, max: 12, interval: 2, axisLabel: { formatter: '{value}', }, axisLine: { lineStyle: { color: '#AAC1CF', }, }, splitLine: { lineStyle: { // 使用深浅的间隔色 color: ['#184E5A'], }, }, }, { type: 'value', name: '持续时长', min: 0, max: 30, interval: 5, axisLabel: { formatter: '{value}', }, axisLine: { lineStyle: { color: '#AAC1CF', }, }, splitLine: { lineStyle: { // 使用深浅的间隔色 color: ['#184E5A'], }, }, }, ], series: [ { name: '预警次数', type: 'bar', barWidth: '10px', showBackground: true, tooltip: { valueFormatter: function (value) { return value + ' 次'; }, }, itemStyle: { // borderRadius: 10, // 统一设置四个角的圆角大小 borderRadius: [10, 10, 0, 0], //(顺时针左上,右上,右下,左下) }, data: Data1, }, { name: '持续时长', type: 'line', yAxisIndex: 1, tooltip: { valueFormatter: function (value) { return value + 'min'; }, }, areaStyle: { opacity: 0.8, color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [ { offset: 0, color: '#1AF7AA', }, { offset: 1, color: '#1AF7AA00', }, ]), }, data: Data2, }, ], }); myChart.value.on('click', param => { console.log(param); let data = { title: '风险监测', comIDs: ['RQ_FengXianJianCe'], }; bus.emit('publicDialog', data); let a = { value: '全部', endTime: '2024-10-05', }; setTimeout(() => { bus.emit('getDataListFxjc', a); }, 500); }); animateChart(); }; const animateChart = () => { let length = 7; let i = 0; AllData.timer = setInterval(() => { i++; if (i == length) i = 0; myChart.value.dispatchAction({ type: 'showTip', seriesIndex: 0, dataIndex: i, }); }, 2000); }; // 初始化管道风险的Echarts: ["市政老化", "庭院老化", "立管老化", "其他"] const initEcharts2 = () => { if (!!myChart2.value) { myChart2.value.dispose(); } myChart2.value = echarts.init(document.getElementById('Echarts2Box')); myChart2.value.off('click'); myChart2.value.setOption({ tooltip: { trigger: 'axis', axisPointer: { type: 'shadow', }, }, grid: { left: '5%', top: '5%', right: '5%', bottom: '5%', containLabel: true, }, xAxis: { type: 'category', triggerEvent: true, axisLine: { show: false, }, axisLabel: { color: '#FFFFFF', fontSize: '14', // interval: 0, // rotate: rotate//文字旋转角度 }, axisTick: { // show: false, alignWithLabel: true, lineStyle: { color: '#0C4F81', type: 'solid', }, }, // data: xAxisData, data: ['市政老化', '庭院老化', '立管老化', '其他'], }, yAxis: { type: 'value', nameTextStyle: { color: '#4F88BD', padding: [0, 25, -5, 0], fontSize: 12, fontFamily: 'Microsoft YaHei', }, axisLine: { show: true, lineStyle: { color: '#0C4F81', }, }, axisLabel: { color: '#4F88BD', fontSize: '12', formatter: '{value}', }, splitLine: { lineStyle: { type: 'dotted', color: '#0C4F81', }, }, axisTick: { show: false, }, }, series: [ { z: 2, type: 'pictorialBar', symbolPosition: 'end', data: [410, 420, 520, 520], symbol: 'diamond', symbolOffset: ['0', '-40%'], //盖子的位置 symbolSize: [15, 13], //盖子的大小 itemStyle: { color: { type: 'linear', x: 0, x2: 1, y: 0, y2: 0, colorStops: [ { offset: 0, color: 'rgba(1, 224, 238, 1 )' }, { offset: 1, color: 'rgba(1, 224, 238, 1)' }, ], }, //盖子的颜色 }, tooltip: { show: false, }, }, { z: 1, type: 'bar', barWidth: 15, barGap: '50%', data: [410, 420, 520, 520], itemStyle: { color: { type: 'linear', x: 0, x2: 1, y: 0, y2: 0, colorStops: [ { offset: 0, color: 'rgba(1, 224, 238, 0.8)' }, { offset: 0.5, color: 'rgba(1, 224, 238, 0.5)' }, { offset: 0.5, color: 'rgba(1, 224, 238, 0.1)' }, { offset: 1, color: 'rgba(1, 224, 238, 0.8)' }, ], }, }, }, ], }); myChart2.value.on('click', param => { console.log(param); TuChengClick(param.dataIndex - 1); }); }; // 动态计算盒子的宽度 const getWidth = (item, num) => { let widthNum = 0; if (num == 1) { widthNum = (item.num1 / (item.num1 + item.num2)) * 100; } else { widthNum = (item.num2 / (item.num1 + item.num2)) * 100; } return `width:${widthNum}%`; }; // 工单派发 const GongDanPaiFa = item => { console.log(item); let data = { title: item.wranLocation, comIDs: ['gdpf'], getSiteId: item.id, }; bus.emit('publicDialog', data); }; // // 风险 // const FengXianClick = (item) => { // console.log(item); // let data = { // title: item.zb + " 风险监测", // comIDs: ["RQ_FengXianJianCe"], // }; // bus.emit("publicDialog", data); // }; // 风险监测派发 const PaiFa = item => { console.log(item); let data = { title: '智慧外呼', comIDs: ['RQ_ZhiHuiWaiHu'], getSiteId: item.value, }; bus.emit('publicDialog', data); }; //巡查反馈处理、未处理 const dealOrNoDeal = item => { AllData.xunChaStatic = item; newfiberMapbox.map.easeTo({ center: [109.488, 36.596], zoom: 12, pitch: 55, }); bus.emit('removeMapDatas', ['warning_monitor']); if (item == 1) { let removedLayer = AllData.xunChaLayers.filter(layer => layer.includes('noDeal')); let selectedLayer = AllData.xunChaLayers.filter(layer => layer.includes('alreadyDeal')); bus.emit('removeMapDatas', AllData.xunChaLayers); bus.emit('setGeoJSON', { json: zaWuDuiFang, key: 'alreadyDeal_DF' }); bus.emit('setGeoJSON', { json: sheBeiLost, key: 'alreadyDeal_DS' }); bus.emit('setGeoJSON', { json: xiaXian, key: 'alreadyDeal_XX' }); bus.emit('setGeoJSON', { json: yiBian, key: 'alreadyDeal_YB' }); bus.emit('setGeoJSON', { json: rq_QiTa, key: 'alreadyDeal_QT' }); selectedLayer.forEach(layer => { bus.emit('setLayerVisible', { layername: layer, isCheck: true }); }); } else { let removedLayer = AllData.xunChaLayers.filter(layer => layer.includes('alreadyDeal')); let selectedLayer = AllData.xunChaLayers.filter(layer => layer.includes('noDeal')); bus.emit('removeMapDatas', AllData.xunChaLayers); bus.emit('setGeoJSON', { json: no_zaWuDuiFang, key: 'onDeal_DF' }); bus.emit('setGeoJSON', { json: no_sheBeiLost, key: 'onDeal_DS' }); bus.emit('setGeoJSON', { json: no_xiaXian, key: 'onDeal_XX' }); bus.emit('setGeoJSON', { json: no_yiBian, key: 'onDeal_YB' }); bus.emit('setGeoJSON', { json: no_rq_QiTa, key: 'onDeal_QT' }); selectedLayer.forEach(layer => { bus.emit('setLayerVisible', { layername: layer, isCheck: true }); }); } }; // 巡查反馈 const XunChaFanKui = item => { let removedLayer = []; let selectedLayer = []; newfiberMapbox.map.easeTo({ center: [109.488, 36.596], zoom: 12, pitch: 55, }); switch (item.name) { case '堆放杂物': removedLayer = AllData.xunChaLayers.filter(layer => layer != 'alreadyDeal_DF' && layer != 'noDeal_DF'); selectedLayer = AllData.xunChaLayers.filter(layer => layer == 'alreadyDeal_DF' || layer == 'noDeal_DF'); selectedLayer.forEach(layer => { bus.emit('setLayerVisible', { layername: layer, isCheck: true }); }); removedLayer.forEach(layer => { bus.emit('setLayerVisible', { layername: layer, isCheck: false }); }); break; case '设备丢失': removedLayer = AllData.xunChaLayers.filter(layer => layer != 'alreadyDeal_DS' && layer != 'noDeal_DS'); selectedLayer = AllData.xunChaLayers.filter(layer => layer == 'alreadyDeal_DS' || layer == 'noDeal_DS'); selectedLayer.forEach(layer => { bus.emit('setLayerVisible', { layername: layer, isCheck: true }); }); removedLayer.forEach(layer => { bus.emit('setLayerVisible', { layername: layer, isCheck: false }); }); break; case '下陷': removedLayer = AllData.xunChaLayers.filter(layer => layer != 'alreadyDeal_XX' && layer != 'noDeal_XX'); selectedLayer = AllData.xunChaLayers.filter(layer => layer == 'alreadyDeal_XX' || layer == 'noDeal_XX'); selectedLayer.forEach(layer => { bus.emit('setLayerVisible', { layername: layer, isCheck: true }); }); removedLayer.forEach(layer => { bus.emit('setLayerVisible', { layername: layer, isCheck: false }); }); break; case '异变': removedLayer = AllData.xunChaLayers.filter(layer => layer != 'alreadyDeal_YB' && layer != 'noDeal_YB'); selectedLayer = AllData.xunChaLayers.filter(layer => layer == 'alreadyDeal_YB' || layer == 'noDeal_YB'); selectedLayer.forEach(layer => { bus.emit('setLayerVisible', { layername: layer, isCheck: true }); }); removedLayer.forEach(layer => { bus.emit('setLayerVisible', { layername: layer, isCheck: false }); }); break; case '其他': removedLayer = AllData.xunChaLayers.filter(layer => layer != 'alreadyDeal_QT' && layer != 'noDeal_QT'); selectedLayer = AllData.xunChaLayers.filter(layer => layer == 'alreadyDeal_QT' || layer == 'noDeal_QT'); selectedLayer.forEach(layer => { bus.emit('setLayerVisible', { layername: layer, isCheck: true }); }); removedLayer.forEach(layer => { bus.emit('setLayerVisible', { layername: layer, isCheck: false }); }); break; } }; // 风险评估 const TuChengClick = item => { newfiberMapbox.map.easeTo({ center: [109.488, 36.596], zoom: 12, pitch: 55, }); switch (item) { case 0: bus.emit('setLayerVisible', { layername: 'rq_SZLH', isCheck: false }); bus.emit('setLayerVisible', { layername: 'rq_TYLH', isCheck: false }); bus.emit('setLayerVisible', { layername: 'rq_LGLH', isCheck: false }); bus.emit('setLayerVisible', { layername: 'rq_other', isCheck: false }); bus.emit('setLayerVisible', { layername: 'rq_all', isCheck: true }); //所有管网rq_all、市政rq_SZLH、庭院rq_TYLH、立管rq_LGLH、其他rq_other break; case 1: bus.emit('setLayerVisible', { layername: 'rq_all', isCheck: false }); //所有管网rq_all、市政rq_SZLH、庭院rq_TYLH、立管rq_LGLH、其他rq_other bus.emit('setLayerVisible', { layername: 'rq_SZLH', isCheck: true }); bus.emit('setLayerVisible', { layername: 'rq_TYLH', isCheck: false }); bus.emit('setLayerVisible', { layername: 'rq_LGLH', isCheck: false }); bus.emit('setLayerVisible', { layername: 'rq_other', isCheck: false }); break; case 2: bus.emit('setLayerVisible', { layername: 'rq_all', isCheck: false }); //所有管网rq_all、市政rq_SZLH、庭院rq_TYLH、立管rq_LGLH、其他rq_other bus.emit('setLayerVisible', { layername: 'rq_SZLH', isCheck: false }); bus.emit('setLayerVisible', { layername: 'rq_TYLH', isCheck: true }); bus.emit('setLayerVisible', { layername: 'rq_LGLH', isCheck: false }); bus.emit('setLayerVisible', { layername: 'rq_other', isCheck: false }); break; case 3: bus.emit('setLayerVisible', { layername: 'rq_all', isCheck: false }); //所有管网rq_all、市政rq_SZLH、庭院rq_TYLH、立管rq_LGLH、其他rq_other bus.emit('setLayerVisible', { layername: 'rq_SZLH', isCheck: false }); bus.emit('setLayerVisible', { layername: 'rq_TYLH', isCheck: false }); bus.emit('setLayerVisible', { layername: 'rq_LGLH', isCheck: true }); bus.emit('setLayerVisible', { layername: 'rq_other', isCheck: false }); break; case 4: bus.emit('setLayerVisible', { layername: 'rq_all', isCheck: false }); //所有管网rq_all、市政rq_SZLH、庭院rq_TYLH、立管rq_LGLH、其他rq_other bus.emit('setLayerVisible', { layername: 'rq_SZLH', isCheck: false }); bus.emit('setLayerVisible', { layername: 'rq_TYLH', isCheck: false }); bus.emit('setLayerVisible', { layername: 'rq_LGLH', isCheck: false }); bus.emit('setLayerVisible', { layername: 'rq_other', isCheck: true }); break; } }; // 风险 const FengXianClick = item => { let data = { title: item.zb + ' 风险监测', comIDs: ['RQ_FengXianJianCe'], }; bus.emit('publicDialog', data); // 传给组件数据 setTimeout(() => { bus.emit('getDataListFxjc', item); }, 500); }; // 现场连线 const XianChangLianXian = item => { bus.emit('OpenRY'); }; // 发布预警 const WarningClick = item => { let data = { title: '发布预警', comIDs: ['RQ_Warning'], }; bus.emit('publicDialog', data); setTimeout(() => { bus.emit('RQ_PrimaryType', 1); }); }; watch( () => props.showPanel, () => { showPanel.value = props.showPanel; }, { immediate: true } ); //燃气超标 const showIndexOver = () => { bus.emit('removeMapDatas', AllData.xunChaLayers); let key = 'warning_monitor'; bus.emit('getGeojsonByType', { type: key, callback: geojson => { if (!!!geojson.features.length) bus.emit('setGeoJSON', { json: yanAnRQoverindex, key: 'warning_monitor' }); bus.emit('setLayerVisible', { type: 'point', layername: key, isCheck: true }); }, }); newfiberMapbox.map.easeTo({ center: [109.488, 36.596], zoom: 13, }); }; //燃气告警 const showIndexWarning = () => { bus.emit('removeMapDatas', AllData.xunChaLayers); let key = 'warning_monitor'; bus.emit('getGeojsonByType', { type: key, callback: geojson => { if (!!!geojson.features.length) bus.emit('setGeoJSON', { json: yanAnWarring, key: 'warning_monitor' }); bus.emit('setLayerVisible', { type: 'point', layername: key, isCheck: true }); }, }); newfiberMapbox.map.easeTo({ center: [109.488, 36.596], zoom: 13, }); }; // 辅助决策 const getCommonWarningList = async () => { try { const res = await commonWarningList({ moduleType: 'Gas' }); JCData.value = res.data; // console.log('🚀 ~ getCommonWarningList ~ res:', res); } catch (error) { console.log('🚀 ~ getCommonWarningList ~ error:', error); } }; onMounted(() => { let initeRQTimer = setInterval(() => { if (!newfiberMapbox) return; if (!newfiberMapbox.map.getLayer('rq_pipeline_info')) return; if (!newfiberMapbox.map.getLayer('sx_ya_smx_rq_point')) return; newfiberMapbox.map.easeTo({ center: [109.488, 36.596], zoom: 12, }); //告警点事件 let warningPoint = newfiberMapbox.getLayers().filter(feature => feature.newfiberId == 'warning_monitor')[0]; if (warningPoint) { warningPoint.on('click', e => { let popupData = e.feature.properties; debugger; console.log('popupData---', '告警---------', popupData); FengXianClick({ zb: '甲烷浓度', sz: '3%', szzt: true, zt: 0, //0预警 1 正常 value: 'JWND', }); }); } bus.emit('setLayerVisible', { layername: 'rq_SZLH', isCheck: true }); //所有管网rq_all、市政rq_SZLH、庭院rq_TYLH、立管rq_LGLH、其他rq_other bus.emit('setLayerVisible', { layername: 'rq_SZLH', isCheck: true }); bus.emit('setLayerVisible', { layername: 'sx_ya_smx_rq_line_sz', isCheck: true }); bus.emit('setLayerVisible', { layername: 'rq_TYLH', isCheck: true }); bus.emit('setLayerVisible', { layername: 'sx_ya_smx_rq_line_zg', isCheck: true }); clearInterval(initeRQTimer); }, 100); initEcharts(1); initEcharts2(); getCommonWarningList(); }); onBeforeUnmount(() => { bus.emit('setLayerVisible', { layername: 'rq_all', isCheck: false }); bus.emit('setLayerVisible', { layername: 'rq_SZLH', isCheck: false }); bus.emit('setLayerVisible', { layername: 'rq_TYLH', isCheck: false }); bus.emit('setLayerVisible', { layername: 'rq_LGLH', isCheck: false }); bus.emit('setLayerVisible', { layername: 'rq_other', isCheck: false }); bus.emit('removeMapDatas', AllData.xunChaLayers); bus.emit('removeMapDatas', ['warning_monitor']); bus.emit('setLayerVisible', { layername: 'warning_monitor', isCheck: false }); bus.emit('closeCesiumPopup'); bus.emit('SetLayerShow', ['蓝色地图']); if (!!newfiberMapbox.getLayerByName('rqLine')) { newfiberMapbox.removeLayer(newfiberMapbox.getLayerByName('rqLine')); } }); </script> <style lang="scss" scoped> @import '@/assets/styles/transition_oneMap.scss'; #ZHRQ { .warningPrompt { position: absolute; top: 120px; left: 970px; width: 670px; height: 34px; border-radius: 48px; transform: translateX(-50%); z-index: 20; padding: 0 12px; font-size: 14px; font-weight: 400; color: #ffffff; border: 1px solid #ff0303; animation: blink 1s linear infinite; span { margin: 0 2px; } @keyframes blink { 0% { box-shadow: 0 0 0 rgba(255, 3, 3, 0.1) inset; } 50% { box-shadow: 0 0 10px rgba(255, 3, 3, 0.6) inset; } 100% { box-shadow: 0 0 20px rgba(255, 3, 3, 0.8) inset; } } } .radBg { display: block; line-height: 22px; background: linear-gradient(180deg, #5c0000 0%, #ff0000 100%); border-radius: 2px 2px 2px 2px; border: 1px solid #ff5449; padding: 0 3px; } .LeftBox { width: 450px; height: calc(100% - 98px); position: absolute; left: 10px; top: 70px; background: linear-gradient(0deg, rgba(0, 43, 67, 0.8) 0%, rgba(0, 69, 108, 0.8) 100%); border-radius: 6px; border: 1px solid #47eef3; box-sizing: border-box; padding: 10px; box-shadow: inset 0 0 5px 5px #47eef38a; .LeftBox1_1 { height: 365px; .TJListBox { height: 42px; margin-top: 10px; width: 100%; display: flex; flex-direction: row; flex-wrap: nowrap; justify-content: space-between; align-items: center; .TJList { height: 42px; width: calc(50% - 9px); display: flex; .TJListImg { width: 22px; height: 22px; margin: 9px; } .TJListName { font-family: Source Han Sans CN; font-weight: 400; font-size: 14px; color: #f4f9ff; width: 65px; height: 40px; line-height: 40px; } .TJListValue { font-family: Source Han Sans CN; font-weight: bold; font-size: 20px; width: calc(100% - 110px); height: 40px; line-height: 40px; text-align: right; } } .TJList_RQ { background: rgba(7, 54, 102, 0.3); border-radius: 4px; border: 1px solid #15d2fd; box-shadow: inset 0 0 10px #15d2fdb0; /* 水平偏移|垂直偏移|模糊半径|颜色 */ cursor: pointer; .TJListValue { color: #12f9ff; } } .TJList_GZ { background: rgba(164, 74, 8, 0.3); border-radius: 4px; border: 1px solid #ffd97f; box-shadow: inset 0 0 10px #ffd97fb0; /* 水平偏移|垂直偏移|模糊半径|颜色 */ .TJListValue { color: #ffd97f; } } } .RQ_EchartsBox { width: 100%; height: calc(100% - 72px); margin-top: 10px; // background: url("@/assets/images/Sponge_screen/RQ/Ech.png") no-repeat center; position: relative; .ClickDiv1 { width: 80px; height: 250px; // background: #ff000063; position: absolute; bottom: 0px; left: 60px; cursor: pointer; } .ClickDiv2 { width: 80px; height: 250px; // background: #ff000063; position: absolute; bottom: 0px; left: 160px; cursor: pointer; } .ClickDiv3 { width: 80px; height: 250px; // background: #ff000063; position: absolute; bottom: 0px; left: 255px; cursor: pointer; } .ClickDiv4 { width: 80px; height: 250px; // background: #ff000063; position: absolute; bottom: 0px; left: 340px; cursor: pointer; } } } .LeftBox1_2 { height: calc(100% - 365px - 275px - 10px); margin-bottom: 10px; // 风险监测 .TJListBox { height: 42px; margin-top: 10px; width: 100%; display: flex; flex-direction: row; flex-wrap: nowrap; justify-content: space-between; align-items: center; .TJList2 { height: 42px; width: calc(50% - 9px); display: flex; background: url('@/assets/images/Sponge_screen/RQ/RQ_FX.png') no-repeat center; background-size: 100% 100%; cursor: pointer; .TJList2Name { width: 50%; font-family: Source Han Sans CN; font-weight: 400; font-size: 14px; color: #f4f9ff; height: 40px; line-height: 40px; text-align: left; box-sizing: border-box; padding-left: 20px; } .TJList2Value { width: 50%; font-family: Source Han Sans CN; font-weight: bold; font-size: 20px; color: #12f9ff; height: 40px; line-height: 40px; text-align: center; } } } .TableChange { height: 42px; width: 100%; box-sizing: border-box; padding: 10px 0px; display: flex; flex-direction: row; flex-wrap: nowrap; justify-content: flex-end; align-items: center; .TableChangeList { width: 60px; height: 22px; background: #00344f; border-radius: 2px; font-family: Source Han Sans CN; font-weight: 500; font-size: 14px; color: #c1d3d4; text-align: center; line-height: 20px; cursor: pointer; } .TableCheck { background: #00344f; border-radius: 2px; border: 1px solid #1cf5fc; font-family: Source Han Sans CN; font-weight: bold; font-size: 12px; color: #ebfeff; background: #1cf4fc22; } } .TableBox { width: 100%; height: calc(100% - 94px); .tableHeader { width: 100%; height: 34px; background: linear-gradient(0deg, #00fbffa3 0%, #00fbff00 100%); border-radius: 2px; border: 1px solid #74dde1; display: flex; .tableHeaderList { font-family: Source Han Sans CN; font-weight: 400; font-size: 14px; color: #ffffff; height: 34px; line-height: 34px; text-align: center; } .tableList1 { width: 20%; } .tableList2 { width: 30%; } .tableList3 { width: 30%; } .tableList4 { width: 20%; } } .tableBody { width: 100%; height: calc(100% - 68px); overflow: auto; .tableBodyList { height: 34px; line-height: 34px; width: 100%; display: flex; /* 选择偶数行 */ &:nth-child(even) { background: linear-gradient(0deg, #008599 0%, #08596d 100%); } .tableBodyList_span1 { font-family: Source Han Sans CN; font-weight: 400; font-size: 14px; color: #ffffff; height: 34px; line-height: 34px; text-align: center; width: 20%; cursor: pointer; } .tableBodyList_span2 { font-family: Source Han Sans CN; font-weight: 400; font-size: 14px; color: #ffffff; height: 34px; line-height: 34px; text-align: center; width: 30%; cursor: pointer; } .tableBodyList_span3 { font-family: Source Han Sans CN; font-weight: 400; font-size: 14px; color: #ffffff; height: 34px; line-height: 34px; text-align: center; width: 30%; } .YJClass { color: #ffe243; } .tableBodyList_span4 { font-family: Source Han Sans CN; font-weight: 400; font-size: 14px; color: #ffffff; height: 34px; line-height: 34px; text-align: center; width: 20%; cursor: pointer; } } } .tableFoot { width: 100%; height: 34px; background: linear-gradient(0deg, #008599b7 0%, #08596d91 100%); font-family: Source Han Sans CN; font-weight: 400; font-size: 14px; color: #ebfeff; line-height: 34px; text-align: center; } } } .LeftBox1_3 { height: 275px; .TableChange2 { height: 42px; width: 200px; box-sizing: border-box; padding: 10px 0px; display: flex; flex-direction: row; flex-wrap: nowrap; justify-content: flex-end; align-items: center; position: absolute; top: 0px; right: 0px; z-index: 999; .TableChangeList2 { width: 60px; height: 22px; background: #00344f; border-radius: 2px; font-family: Source Han Sans CN; font-weight: 500; font-size: 16px; color: #c1d3d4; text-align: center; line-height: 20px; cursor: pointer; } .TableCheck2 { background: #00344f; border-radius: 2px; border: 1px solid #1cf5fc; font-family: Source Han Sans CN; font-weight: bold; font-size: 16px; color: #ebfeff; background: #1cf4fc22; } } #YJEchartsBox { width: 100%; height: 100%; } } } .RightBox { width: 450px; height: calc(100% - 98px); position: absolute; right: 10px; top: 70px; background: linear-gradient(0deg, rgba(0, 43, 67, 0.8) 0%, rgba(0, 69, 108, 0.8) 100%); border-radius: 6px; border: 1px solid #47eef3; box-sizing: border-box; padding: 10px; box-shadow: inset 0 0 5px 5px #47eef38a; .RightBox1_1 { height: calc(100% - 298px); margin-bottom: 10px; box-sizing: border-box; // padding: 0 10px; .JCListBox { margin-top: 10px; width: 100%; height: 196px; background: linear-gradient(0deg, #008599 0%, #08596d 100%); border-radius: 4px; overflow: hidden; .JCListBox_List { width: 100%; height: 28px; margin-top: 10px; display: flex; flex-direction: row; flex-wrap: nowrap; justify-content: space-evenly; align-items: center; .JCListBox_List_label { display: inline-block; font-family: Source Han Sans CN; font-weight: 400; font-size: 14px; color: #ffffff; height: 28px; line-height: 28px; text-align: right; width: 70px; } .JCListBox_List_value { display: inline-block; border: 1px solid #1cf5fc; width: 290px; height: 28px; line-height: 28px; font-family: Source Han Sans CN; font-weight: 400; font-size: 14px; color: #ffffff; text-align: center; } } .JCListBox_List_BTN { justify-content: center; align-items: center; } } } .RightBox1_2 { height: 288px; .FK_headerBox { width: 100%; height: 45px; display: flex; flex-direction: row; flex-wrap: nowrap; justify-content: center; align-items: center; cursor: pointer; .FK_headerBox_list { font-family: Source Han Sans CN; font-weight: bold; font-size: 14px; color: #ebfeff; width: 100px; text-align: center; .FK_headerBox_list_colorBox1 { display: inline-block; width: 10px; height: 10px; background: #ee5777; } .FK_headerBox_list_colorBox2 { display: inline-block; width: 10px; height: 10px; background: #00ffbe; } } } .FK_bodyBox { width: 100%; height: 200px; overflow: auto; box-sizing: border-box; padding: 0 30px; .FK_bodyBox_list { width: 100%; height: 20px; margin-bottom: 20px; display: flex; .FK_bodyBox_list_label { display: block; font-family: Source Han Sans CN; font-weight: 500; font-size: 14px; color: #ffffff; width: 80px; cursor: pointer; } .FK_BigBox { display: block; width: calc(100% - 80px); height: 20px; .FK_CenBox1 { display: inline-block; height: 20px; background: linear-gradient(-90deg, #f35f7f 0%, #c21439 100%); font-family: Source Han Sans CN; font-weight: bold; font-size: 14px; color: #ffffff; text-align: right; line-height: 20px; box-sizing: border-box; padding: 0 10px; } .FK_CenBox2 { display: inline-block; height: 20px; background: linear-gradient(90deg, #20d9aa 0%, #0882a0 100%); font-weight: bold; font-size: 14px; color: #ffffff; text-align: right; line-height: 20px; box-sizing: border-box; padding: 0 10px; } } } } } } .TopBox { width: calc(100% - 1040px); height: 122px; position: absolute; left: 520px; top: 110px; background: linear-gradient(0deg, rgba(0, 43, 67, 0.8) 0%, rgba(0, 69, 108, 0.8) 100%); border-radius: 6px; border: 1px solid #47eef3; box-sizing: border-box; box-shadow: inset 0 0 5px 5px #47eef38a; padding: 10px; .TopTableHeader { width: 100%; height: 34px; background: linear-gradient(0deg, #00fbffa3 0%, #00fbff00 100%); border: 1px solid #74dde1; display: flex; } .TopTableBody { width: 100%; height: calc(100% - 34px); overflow: auto; // display: flex; // flex-direction: column; // flex-wrap: nowrap; .TopTableBody_list { display: inline-block; width: 100%; height: 34px; /* 选择偶数行 */ &:nth-child(even) { background: linear-gradient(0deg, #008599 0%, #08596d 100%); } } } .TopTableListSpan { font-family: Source Han Sans CN; font-weight: 400; font-size: 14px; color: #ffffff; height: 34px; line-height: 34px; display: inline-block; box-sizing: border-box; overflow: hidden; text-overflow: ellipsis; /* 超出宽度后显示省略号 */ white-space: nowrap; /* 限制不允许换行 */ } .TopTableListSpan1 { width: 20%; text-align: left; padding-left: 10px; } .TopTableListSpan2 { width: 25%; text-align: center; } .TopTableListSpan3 { width: 20%; text-align: center; } .TopTableListSpan4 { width: 10%; text-align: center; } .TopTableListSpan5 { width: 15%; text-align: center; } .TopTableListSpan6 { width: 10%; text-align: right; padding-right: 10px; .TopTableListSpanImg { width: 15px; height: 19px; margin: 7px; cursor: pointer; } .TopTableListSpanImg2 { width: 19px; height: 19px; margin: 7px; cursor: pointer; } } } .bottomBox { width: calc(100% - 1040px); height: 122px; position: absolute; left: 510px; bottom: 180px; background: linear-gradient(0deg, rgba(0, 43, 67, 0.8) 0%, rgba(0, 69, 108, 0.8) 100%); border-radius: 6px; border: 1px solid #47eef3; box-sizing: border-box; box-shadow: inset 0 0 5px 5px #47eef38a; padding: 10px; .TopTableHeader { width: 100%; height: 34px; background: linear-gradient(0deg, #00fbffa3 0%, #00fbff00 100%); border: 1px solid #74dde1; display: flex; } .TopTableBody { width: 100%; height: calc(100% - 34px); overflow: auto; // display: flex; // flex-direction: column; // flex-wrap: nowrap; .TopTableBody_list { display: inline-block; width: 100%; height: 34px; /* 选择偶数行 */ &:nth-child(even) { background: linear-gradient(0deg, #008599 0%, #08596d 100%); } } } .TopTableListSpan { font-family: Source Han Sans CN; font-weight: 400; font-size: 14px; color: #ffffff; height: 34px; line-height: 34px; display: inline-block; box-sizing: border-box; overflow: hidden; text-overflow: ellipsis; /* 超出宽度后显示省略号 */ white-space: nowrap; /* 限制不允许换行 */ } .TopTableListSpan1 { width: 25%; text-align: left; padding-left: 10px; } .TopTableListSpan2 { width: 25%; text-align: center; } .TopTableListSpan3 { width: 25%; text-align: center; } .TopTableListSpan4 { width: 25%; text-align: right; padding-right: 10px; } } // 左右两侧展示板块公共样式 .ComBox { width: 100%; box-sizing: border-box; .Box_header { width: 100%; height: 43px; background: url('@/assets/images/Sponge_screen/Box_HeaderBackground.png') no-repeat center; background-size: cover; font-family: PangMenZhengDao; font-weight: 400; font-size: 23px; color: #ebfeff; line-height: 43px; box-sizing: border-box; padding-left: 35px; } .Box_Body { width: 100%; height: calc(100% - 43px); box-sizing: border-box; position: relative; overflow: auto; } } .color_red { color: #ff3f3f !important; } .IssueWarning { width: 40px; height: 60px; position: absolute; top: 100px; left: 480px; font-family: Source Han Sans CN; font-weight: 400; font-size: 13px; color: #ffffff; text-align: center; background: #003756; border-radius: 28px; border: 1px solid #53c6c9; display: flex; align-items: center; cursor: pointer; box-shadow: inset 0 0 5px 2px #47eef38a; } } </style>