<template> <div id="ylfxJCFX"> <div id="HeaderEcharts"></div> <el-divider>管网历史分析</el-divider> <div id="BodyFenXi"> <div class="flex flex-justcontent-spacebetween"> <div class="eachInfo"> <div class="name">所属雨水分区:</div> <div class="text">{{ listData.rainArea }}</div> </div> <div class="eachInfo"> <div class="name">运维片区:</div> <div class="text">{{ listData.watchAreaName }}</div> </div> </div> <div class="tableBox"> <div class="name">历史经验:</div> <div class="text popUpTable"> <el-table :data="listData.rainHistoryList" class="w100" stripe> <el-table-column prop="time" label="降雨日期" width="140px"> </el-table-column> <el-table-column prop="rain" label="日降雨量(mm)" /> <el-table-column prop="jyjb" label="降雨级别"> <template #default="scope"> <div> {{ RainfallLevelFun(scope.row.rain) }} </div> </template> </el-table-column> <el-table-column prop="maxData" label="最大雨强(mm)" /> <el-table-column prop="zdss" label="最大水深(cm)" /> <el-table-column prop="cmd" label="充满度" /> <el-table-column prop="warn" label="风险" /> <el-table-column prop="duration" label="风险时长(分钟)" width="140px" /> </el-table> </div> </div> <div class="eachInfo"> <div class="name">周边环境分析:</div> <div class="text">{{ listData.zbhjfx }}</div> </div> </div> </div> </template> <script setup name="ylfxJCFX"> import { ref, reactive, toRefs, onMounted, nextTick } from "vue"; import * as echarts from "echarts"; import { drainageDispatchRainAnalysisByGwjcd, getEchart } from "@/api/MonitorAssetsOnMap"; import moment from "moment"; const props = defineProps({ // 数据id dataID: { type: String, }, dataCode: { type: String, }, arrstcode: { type: Array, }, arrid: { type: Array, }, Getproperties: { type: Object, }, }); const AllData = reactive({ chart: null, yAxis: [], yAxis_Name: "降雨量", yAxis3: [], yAxis3_Name: "水深", xAxis: [], MGSW: 0, GSW: 0, MG: 0, YL: 0, }); const Timers = ref([ moment().subtract(3, "day").format("YYYY-MM-DD HH:mm:ss"), moment().format("YYYY-MM-DD HH:mm:ss"), ]); const init = () => { //先获取Dom上的实例 let chartDom = echarts.getInstanceByDom(document.getElementById("HeaderEcharts")); //然后判断实例是否存在,如果不存在,就创建新实例 if (chartDom == null) { chartDom = echarts.init(document.getElementById("HeaderEcharts")); var option = { tooltip: { trigger: "axis", backgroundColor: "#004284", borderColor: "#0B9BFF", borderRadius: 6, // 设置圆角大小 // 自定义提示框文本样 textStyle: { // 字体颜色 color: "white", // 字体大小 fontSize: 14, }, }, legend: { data: [AllData.yAxis_Name, AllData.yAxis3_Name], textStyle: { color: "#FFFFFF", fontSize: 12, }, }, grid: { left: 30, right: 100, bottom: 20, containLabel: true, }, xAxis: { type: "category", boundaryGap: true, data: AllData.xAxis, axisLabel: { color: "rgba(255,255,255,1)", fontSize: 12, fontFamily: "AlibabaPuHuiTi", }, }, dataZoom: [ { // show: true, show: false, height: 4, bottom: 10, start: 0, end: 100, handleSize: "100%", fillerColor: "#94FA41", borderColor: "transparent", backgroundColor: "rgba(148, 250, 65, 0.2)", handleStyle: { color: "#94FA41", }, moveHandleSize: 0, textStyle: { color: "#fff", }, }, { type: "inside", show: true, height: 15, start: 0, end: 100, }, ], yAxis: [ { name: AllData.yAxis_Name, type: "value", // minInterval: 1, axisLabel: { color: "#AAC1CF", show: true, formatter: function (value) { return value.toFixed(2); // 保留两位小数 }, }, min: 0, nameTextStyle: { color: "#19D5FF", }, splitLine: { lineStyle: { type: "dashed", color: "#2161a8", }, }, alignTicks: true, position: "left", inverse: true, nameLocation: "start", }, { name: AllData.yAxis3_Name, type: "value", // minInterval: 1, max: function (value) { return value.max > AllData.YL ? value.max : AllData.YL; }, min: 0, axisLabel: { color: "#AAC1CF", show: true, formatter: function (value) { return value.toFixed(2); // 保留两位小数 }, }, nameTextStyle: { color: "#99FF55", }, splitLine: { lineStyle: { type: "dashed", color: "#2161a8", }, }, alignTicks: true, }, ], series: [ { name: AllData.yAxis_Name, type: "bar", data: AllData.yAxis, barWidth: "30%", // 可以是具体像素值 '20px' 或百分比 '50%' // 修改数据点颜色 itemStyle: { borderRadius: [0, 0, 50, 50], color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [ { offset: 0, color: "#08B1FF" }, { offset: 1, color: "#19D6FF" }, ]), // 数据点颜色 }, }, { name: AllData.yAxis3_Name, type: "line", data: AllData.yAxis3, yAxisIndex: 1, symbolSize: 7, // 修改折线颜色 lineStyle: { color: "#99FF55", // 折线颜色 width: 2, // 折线宽度 }, // 修改数据点颜色 itemStyle: { color: "#99FF55", // 数据点颜色 }, // yAxisIndex: 1, markLine: { data: [], symbol: ["none", "none"], // 这里设置标记线两端的标记为'none',即不显示箭头 }, }, ], }; if (AllData.MGSW > 0) { option.series[1].markLine.data.push({ yAxis: AllData.MGSW, // 这是水平线的 Y 轴值 lineStyle: { type: "dashed", color: "red", // 线的颜色 }, label: { show: true, // formatter: "满管水位" + props.data.yAxis6_YJ, formatter: "溢流风险:" + AllData.MGSW, color: "red", fontSize: 12, position: "middle", }, }); } if (AllData.GSW > 0) { option.series[1].markLine.data.push({ yAxis: AllData.GSW, // 这是水平线的 Y 轴值 lineStyle: { type: "dashed", color: "yellow", // 线的颜色 cap: "round", }, label: { show: true, formatter: "高水位:" + AllData.GSW, color: "yellow", fontSize: 12, position: "middle", }, }); } if (AllData.MG > 0) { option.series[1].markLine.data.push({ yAxis: AllData.MG, // 这是水平线的 Y 轴值 lineStyle: { type: "dashed", color: "rgba(255, 191, 0, 1)", // 线的颜色 cap: "round", }, label: { show: true, formatter: "满管:" + AllData.MG, color: "rgba(255, 191, 0, 1)", fontSize: 12, position: "middle", }, }); } if (AllData.YL > 0) { option.series[1].markLine.data.push({ yAxis: AllData.YL, // 这是水平线的 Y 轴值 lineStyle: { type: "dashed", color: "#610404", // 线的颜色 cap: "round", }, label: { show: true, formatter: "溢流:" + AllData.YL, color: "#610404", fontSize: 12, position: "middle", }, }); } option && chartDom.setOption(option, true); AllData.chart = chartDom; } }; const resizeTheChart = () => { if (AllData.chart) { AllData.chart.resize(); } }; const getChartsData = () => { getEchart({ stType: props.Getproperties.stType, stCode: props.Getproperties.stCode, dataCode: props.Getproperties.dataCode, start: Timers.value[0], end: Timers.value[1], }).then((res) => { if (res && res.code == 200) { AllData.xAxis = res.data.times; res.data.datas.forEach((element) => { switch (element.dataKey) { case "z": AllData.yAxis3 = element.datas; element.cordonLineList.forEach((element) => { if (element.code == "ylfx") { AllData.MGSW = Number(element.lineValue); } if (element.code == "gsw") { AllData.GSW = Number(element.lineValue); } if (element.code == "mg") { AllData.MG = Number(element.lineValue); } if (element.code == "yl") { AllData.YL = Number(element.lineValue); } }); break; case "pn05": AllData.yAxis = element.datas; break; } }); init(); } }); }; const listData = ref({}); function gitDataFun() { let params = { id: props.Getproperties.id, }; drainageDispatchRainAnalysisByGwjcd(params).then( (res) => { console.log("监测分析渍水风险降雨历史", res); if (res && res.code == 200) { listData.value = res.data; } }, (error) => {} ); } function RainfallLevelFun(rain) { let sum = Number(rain); let text = ""; switch (true) { // 江河水位 case sum > 200: text = "特大暴雨"; break; case sum > 100: text = "大暴雨"; break; case sum > 50: text = "暴雨"; break; case sum > 25: text = "大雨"; break; case sum > 10: text = "中雨"; break; case sum > 0: text = "小雨"; break; default: text = "无雨"; } return text; } onMounted(() => { nextTick(() => { if (props.Getproperties.daterange) { Timers.value = props.Getproperties.daterange; } getChartsData(); gitDataFun(); window.addEventListener("resize", resizeTheChart); }); }); </script> <style lang="scss" scoped> #ylfxJCFX { width: 100%; height: 100%; #HeaderEcharts { width: 1198px; height: 320px; } #BodyFenXi { width: 100%; height: 250px; .eachInfo { display: flex; align-items: center; font-weight: bold; font-size: 14px; margin-bottom: 10px; .name { color: #ccdfff; width: 100px; text-align: right; padding-right: 10px; } .text { flex: 1; min-width: 300px; min-height: 37px; color: #8fbffe; background: #0d2359; border-radius: 6px; border: 1px solid #0b9bff; padding: 7px 12px; } } .tableBox { display: flex; font-size: 14px; margin-bottom: 10px; color: #ccefff; .name { color: #ccdfff; min-width: 100px; text-align: right; padding-right: 10px; } .text { width: calc(100% - 100px); } :deep(.el-scrollbar__wrap) { max-height: 120px; overflow-y: auto; } } } } </style>