From 866a84f5da963fc6567b9f7116ae39cde68f21c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9C002001lixiaobang=E2=80=9D?= <2547956374@qq.com> Date: Tue, 12 Dec 2023 17:47:36 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/energyMonitoring/index.vue | 257 ++++++++++++++++++++---- src/views/overview/index.vue | 282 ++++++++++++++++++++++++++- 2 files changed, 497 insertions(+), 42 deletions(-) diff --git a/src/views/energyMonitoring/index.vue b/src/views/energyMonitoring/index.vue index 1c7cac1..6ccd309 100644 --- a/src/views/energyMonitoring/index.vue +++ b/src/views/energyMonitoring/index.vue @@ -15,7 +15,7 @@
负荷分类
-
+
@@ -134,10 +134,10 @@ function getDailyElectricityConsumption() { }, buildPath: function (ctx, shape) { const xAxisPoint = shape.xAxisPoint; - const c0 = [shape.x - 10, shape.y]; - const c1 = [shape.x + 10, shape.y]; - const c2 = [xAxisPoint[0] + 10, xAxisPoint[1]]; - const c3 = [xAxisPoint[0] - 10, xAxisPoint[1]]; + const c0 = [shape.x - 7, shape.y]; + const c1 = [shape.x + 7, shape.y]; + const c2 = [xAxisPoint[0] + 7, xAxisPoint[1]]; + const c3 = [xAxisPoint[0] - 7, xAxisPoint[1]]; ctx .moveTo(c0[0], c0[1]) .lineTo(c1[0], c1[1]) @@ -155,10 +155,10 @@ function getDailyElectricityConsumption() { }, buildPath: function (ctx, shape) { const xAxisPoint = shape.xAxisPoint; - const c1 = [shape.x + 9, shape.y]; - const c2 = [xAxisPoint[0] + 9, xAxisPoint[1]]; - const c3 = [xAxisPoint[0] + 9 + 8, xAxisPoint[1] - 10]; - const c4 = [shape.x + 7 + 8, shape.y - 5]; + const c1 = [shape.x + 7, shape.y]; + const c2 = [xAxisPoint[0] + 7, xAxisPoint[1]]; + const c3 = [xAxisPoint[0] + 7 + 7, xAxisPoint[1] - 10]; + const c4 = [shape.x + 7 + 7, shape.y - 5]; ctx .moveTo(c1[0], c1[1]) .lineTo(c2[0], c2[1]) @@ -175,10 +175,10 @@ function getDailyElectricityConsumption() { y: 0, }, buildPath: function (ctx, shape) { - const c1 = [shape.x - 10, shape.y]; - const c2 = [shape.x + 10, shape.y]; + const c1 = [shape.x - 7, shape.y]; + const c2 = [shape.x + 8, shape.y]; const c3 = [shape.x + 15, shape.y - 5]; - const c4 = [shape.x - 5, shape.y - 5]; + const c4 = [shape.x - 2, shape.y - 5]; ctx .moveTo(c1[0], c1[1]) .lineTo(c2[0], c2[1]) @@ -193,16 +193,16 @@ function getDailyElectricityConsumption() { echarts.graphic.registerShape("CubeRight", CubeRight); echarts.graphic.registerShape("CubeTop", CubeTop); let xAxisData = [ - "北京", - "上海", - "天津", - "南京", - "深圳", - "重庆", - "青岛", - "大连", - "沈阳", - "哈尔滨", + "08:00", + "09:00", + "10:00", + "11:00", + "12:00", + "13:00", + "14:00", + "15:00", + "16:00", + "17:00", ]; let seriesData = [100, 200, 300, 400, 200, 250, 360, 250, 340, 280]; // 绿色渐变 @@ -210,8 +210,8 @@ function getDailyElectricityConsumption() { // 蓝色渐变 let colorArr = [ ["rgba(0, 170, 193, 1)"], - ["rgba(0, 224, 255, 1)", "rgba(13,8,16,0)"], - ["rgba(0, 224, 255, 1)", "rgba(14,156,185,0)"], + ["rgba(0, 224, 255, 1)", "rgba(0, 224, 255,0)"], + ["rgba(0, 224, 255, 1)", "rgba(0, 224, 255,0)"], ]; let myChart = echarts.init( document.getElementById("dailyElectricityConsumption") @@ -228,9 +228,9 @@ function getDailyElectricityConsumption() { }, }, grid: { - left: "5%", - right: "10%", - top: "15%", + left: "4%", + right: "5%", + top: "18%", bottom: "5%", containLabel: true, }, @@ -241,31 +241,37 @@ function getDailyElectricityConsumption() { show: true, lineStyle: { width: 1, - color: "rgba(255, 255, 255, 0.60)", + type: "solid", + color: "rgba(255, 255, 255, 0.20)", }, }, axisTick: { show: false, }, axisLabel: { + color: "rgba(221, 255, 253, 1)", fontSize: 14, - interval: 0, + interval: 1, // 使用函数模板,函数参数分别为刻度数值(类目),刻度的索引 - formatter: function (value) { - const length = value.length; - if (length > 3) { - const start = Math.floor(length / 2); - const str = - value.slice(0, start) + "\n" + value.slice(start, length); - return str; - } - return value; - }, + // formatter: function (value) { + // const length = value.length; + // if (length > 3) { + // const start = Math.floor(length / 2); + // const str = + // value.slice(0, start) + "\n" + value.slice(start, length); + // return str; + // } + // return value; + // }, }, }, yAxis: { type: "value", - minInterval: 1, + name: "单位:kW/h", + nameTextStyle: { + color: "#DDFFFD", + }, + // minInterval: 1, // y轴(竖直线) axisLine: { show: false, @@ -285,7 +291,7 @@ function getDailyElectricityConsumption() { // y轴文字 axisLabel: { fontSize: 14, - color: "rgba(255, 255, 255, 0.60)", + color: "#DDFFFD", }, }, series: [ @@ -397,12 +403,181 @@ function getDailyElectricityConsumption() { }; myChart.setOption(option); } +//负荷分类 +function getLoadClassification() { + var trafficWay = [ + { + name: "三类项目", + value: 20, + }, + { + name: "天分重点", + value: 30, + }, + { + name: "集团重点", + value: 50, + }, + ]; + var total = 0; + for (var i = 0; i < trafficWay.length; i++) { + total += trafficWay[i].value; + } + + var data = []; + var color = ["rgba(1, 246, 139, 1)", "rgba(91, 250, 241,1)", "rgba(255, 221, 0, 1)"]; + for (var i = 0; i < trafficWay.length; i++) { + data.push( + { + value: trafficWay[i].value, + name: trafficWay[i].name, + itemStyle: { + normal: { + borderWidth: 5, + shadowBlur: 20, + borderRadius: 10, + borderColor: color[i], + shadowColor: color[i], + }, + }, + }, + { + value: total * 0.04, + name: "", + itemStyle: { + normal: { + label: { + show: false, + }, + labelLine: { + show: false, + }, + color: "rgba(0, 0, 0, 0)", + borderWidth: 0, + }, + }, + } + ); + } + let myChart = echarts.init(document.getElementById("loadClassification")); + var option = { + color: color, + title: [ + { + text: "1694", + x: "47%", + y: "42%", + textAlign: "center", + textStyle: { + fontFamily: "Verdana-Bold", + fontSize: "24", + fontWeight: "bold", + color: "#FFF", + }, + }, + { + text: "kw", + x: "56%", + y: "45%", + textAlign: "center", + textStyle: { + fontSize: "14", + fontWeight: "100", + color: "#FFF", + }, + }, + { + text: "总负荷", + left: "49%", + top: "55%", + textAlign: "center", + textStyle: { + fontFamily: "MicrosoftYaHei", + fontSize: "14", + fontWeight: "100", + color: "#fff", + }, + }, + ], + tooltip: { + show: true, + }, + series: [ + { + name: "", + type: "pie", + clockWise: false, + radius: [55, 59], + hoverAnimation: false, + itemStyle: { + normal: { + label: { + show: true, + position: "outside", + color: "#FFFFFF", + fontSize: 16, + formatter: function (params) { + var percent = 0; + // var total = 0 + // for (var i = 0; i < trafficWay.length; i++) { + // total += trafficWay[i].value + // } + percent = params.percent; + // percent = ((params.value / total) * 100).toFixed(0) + if (params.name !== "") { + return ( + params.name + + "\n" + + `{a${params.dataIndex / 2}|` + + percent + + "%}" + ); + } else { + return ""; + } + }, + textStyle: { + rich: { + a0: { + color: "#36E461", + padding: [10, 0], + fontSize: 15, + }, + a1: { + color: "#0BEFF9", + padding: [10, 0], + fontSize: 15, + }, + a2: { + color: "#9429E1", + padding: [10, 0], + fontSize: 15, + }, + }, + }, + }, + labelLine: { + length: 30, + length2: 50, + show: true, + color: "#00ffff", + }, + }, + }, + data: data, + }, + ], + }; + myChart.setOption(option); +} //加载完dom执行 onMounted(() => { //实时负荷 getRealTimeLoad(); //当日累计用电量 getDailyElectricityConsumption(); + //负荷分类 + getLoadClassification(); }); diff --git a/src/views/overview/index.vue b/src/views/overview/index.vue index a9c31a8..5fe996a 100644 --- a/src/views/overview/index.vue +++ b/src/views/overview/index.vue @@ -4,6 +4,8 @@ import * as echarts from 'echarts' import {onMounted} from "vue"; onMounted(()=>{ drawPowerEcharts() + //碳排放 + getCarbonEmission() }) const drawPowerEcharts = () =>{ let myChart = echarts.init(document.getElementById('power')) @@ -110,6 +112,284 @@ const drawPowerEcharts = () =>{ }; myChart.setOption(option) } +//碳排放 +function getCarbonEmission() { + const offsetX = 10; //bar宽 + const offsetY = 5; //倾斜角度 + // 绘制左侧面 + const CubeLeft = echarts.graphic.extendShape({ + shape: { + x: 0, + y: 0, + }, + buildPath: function (ctx, shape) { + const xAxisPoint = shape.xAxisPoint; + const c0 = [shape.x - 7, shape.y]; + const c1 = [shape.x + 7, shape.y]; + const c2 = [xAxisPoint[0] + 7, xAxisPoint[1]]; + const c3 = [xAxisPoint[0] - 7, xAxisPoint[1]]; + ctx + .moveTo(c0[0], c0[1]) + .lineTo(c1[0], c1[1]) + .lineTo(c2[0], c2[1]) + .lineTo(c3[0], c3[1]) + .closePath(); + ctx.stroke(); + }, + }); + // 绘制右侧面 + const CubeRight = echarts.graphic.extendShape({ + shape: { + x: 0, + y: 0, + }, + buildPath: function (ctx, shape) { + const xAxisPoint = shape.xAxisPoint; + const c1 = [shape.x + 7, shape.y]; + const c2 = [xAxisPoint[0] + 7, xAxisPoint[1]]; + const c3 = [xAxisPoint[0] + 7 + 7, xAxisPoint[1] - 10]; + const c4 = [shape.x + 7 + 7, shape.y - 5]; + ctx + .moveTo(c1[0], c1[1]) + .lineTo(c2[0], c2[1]) + .lineTo(c3[0], c3[1]) + .lineTo(c4[0], c4[1]) + .closePath(); + ctx.stroke(); + }, + }); + // 绘制顶面 + const CubeTop = echarts.graphic.extendShape({ + shape: { + x: 0, + y: 0, + }, + buildPath: function (ctx, shape) { + const c1 = [shape.x - 7, shape.y]; + const c2 = [shape.x + 8, shape.y]; + const c3 = [shape.x + 15, shape.y - 5]; + const c4 = [shape.x - 2, shape.y - 5]; + ctx + .moveTo(c1[0], c1[1]) + .lineTo(c2[0], c2[1]) + .lineTo(c3[0], c3[1]) + .lineTo(c4[0], c4[1]) + .closePath(); + ctx.stroke(); + }, + }); + // 注册三个面图形 + echarts.graphic.registerShape("CubeLeft", CubeLeft); + echarts.graphic.registerShape("CubeRight", CubeRight); + echarts.graphic.registerShape("CubeTop", CubeTop); + let xAxisData = [ + "1月", + "2月", + "3月", + "4月", + "5月", + "6月", + "7月", + ]; + let seriesData = [100, 200, 300, 400, 200, 250,]; + // 绿色渐变 + // let colorArr = [["#12D5AF"], ["#0BC19D", "rgba(13,8,16,0)"], ["#68EFD4", "rgba(14,185,151,0)"]] + // 蓝色渐变 + let colorArr = [ + ["rgba(0, 193, 113, 1)"], + ["rgba(0, 255, 140, 1)", "rgba(0, 255, 140,0)"], + ["rgba(0, 255, 140, 1)", "rgba(0, 255, 140,0)"], + ]; + let myChart = echarts.init( + document.getElementById("carbonEmission") + ); + const option = { + tooltip: { + trigger: "axis", + axisPointer: { + type: "shadow", + }, + formatter: function (params, ticket, callback) { + const item = params[1]; + return item.name + " : " + item.value; + }, + }, + grid: { + left: "4%", + right: "5%", + top: "18%", + bottom: "5%", + containLabel: true, + }, + xAxis: { + type: "category", + data: xAxisData, + axisLine: { + show: true, + lineStyle: { + width: 1, + type: "solid", + color: "rgba(255, 255, 255, 0.20)", + }, + }, + axisTick: { + show: false, + }, + axisLabel: { + color: "rgba(221, 255, 253, 1)", + fontSize: 14, + interval: 0, + // 使用函数模板,函数参数分别为刻度数值(类目),刻度的索引 + // formatter: function (value) { + // const length = value.length; + // if (length > 3) { + // const start = Math.floor(length / 2); + // const str = + // value.slice(0, start) + "\n" + value.slice(start, length); + // return str; + // } + // return value; + // }, + }, + }, + yAxis: { + type: "value", + name: "单位:kW/h", + nameTextStyle: { + color: "#DDFFFD", + }, + // minInterval: 1, + // y轴(竖直线) + axisLine: { + show: false, + }, + // y轴横向 标线 + splitLine: { + show: true, + lineStyle: { + type: "dashed", + color: "rgba(1, 39, 37, 0.30)", + }, + }, + // y轴刻度线 + axisTick: { + show: false, + }, + // y轴文字 + axisLabel: { + fontSize: 14, + color: "#DDFFFD", + }, + }, + series: [ + { + type: "custom", + renderItem: (params, api) => { + const location = api.coord([api.value(0), api.value(1)]); + return { + type: "group", + children: [ + // 左侧面 + { + type: "CubeLeft", + shape: { + api, + xValue: api.value(0), + yValue: api.value(1), + x: location[0], + y: location[1], + xAxisPoint: api.coord([api.value(0), 0]), + }, + style: { + fill: new echarts.graphic.LinearGradient(0, 0, 0, 1, [ + { + offset: 0, + color: colorArr[1][0], + }, + { + offset: 1, + color: colorArr[1][1], + }, + ]), + }, + }, + // 右侧面 + { + type: "CubeRight", + shape: { + api, + xValue: api.value(0), + yValue: api.value(1), + x: location[0], + y: location[1], + xAxisPoint: api.coord([api.value(0), 0]), + }, + style: { + fill: new echarts.graphic.LinearGradient(0, 0, 0, 1, [ + { + offset: 0, + color: colorArr[2][0], + }, + { + offset: 1, + color: colorArr[2][1], + }, + ]), + }, + }, + // 顶部 + { + type: "CubeTop", + shape: { + api, + xValue: api.value(0), + yValue: api.value(1), + x: location[0], + y: location[1], + xAxisPoint: api.coord([api.value(0), 0]), + }, + style: { + fill: new echarts.graphic.LinearGradient(0, 0, 0, 1, [ + { + offset: 0, + color: colorArr[0][0], + }, + { + offset: 1, + color: colorArr[0][0], + }, + ]), + }, + }, + ], + }; + }, + data: seriesData, + }, + { + type: "bar", + label: { + normal: { + show: false, + position: "top", + formatter: (e) => { + return e.value; + }, + fontSize: 16, + color: "#43C4F1", + offset: [0, -5], + }, + }, + itemStyle: { + color: "transparent", + }, + tooltip: {}, + data: seriesData, + }, + ], + }; + myChart.setOption(option); +}