<template> <div class="chartBox" :id="id"></div> </template> <script setup name="pieChartGszl"> import { guid } from '@/utils/ruoyi'; const { proxy } = getCurrentInstance(); import { nowSize } from '@/utils/util.js'; import moment from 'moment'; const props = defineProps({ //刷新标志 refresh: { type: [String, Number], default: 1, }, //数据 echartData: { type: Object, default: {}, }, }); const id = guid(); const myChart = shallowRef(''); watch( () => props.refresh, value => { //先销毁实例 myChart.value && myChart.value.dispose(); intChart(); } ); //自适应 function resizeTheChart() { if (myChart.value) { myChart.value.resize(); } } //初始化 function intChart() { myChart.value = proxy.echarts.init(document.getElementById(id)); myChart.value.clear(); // 绘制图表 myChart.value.setOption({ tooltip: { trigger: 'axis', axisPointer: { type: 'shadow', label: { show: true, }, }, }, grid: { top: nowSize(30, 1920), bottom: nowSize(30, 1920), //也可设置left和right设置距离来控制图表的大小 left: nowSize(50, 1920), right: nowSize(10, 1920), }, xAxis: { data: props.echartData.dateRange, axisLine: { show: true, //隐藏X轴轴线 lineStyle: { color: 'rgba(44, 110, 189, 1)', }, }, axisTick: { show: false, //隐藏X轴刻度 lineStyle: { color: 'rgba(44, 110, 189, 1)', }, }, axisLabel: { show: true, color: 'rgba(179, 194, 209, 1)', fontSize: nowSize(12, 1920), formatter: value => { return moment(value).format('HH:mm'); }, }, }, yAxis: { type: 'value', name: '单位:mm', nameTextStyle: { color: 'rgba(179, 194, 209, 1)', fontSize: nowSize(14, 1920), }, axisLine: { show: false, }, axisLabel: { show: true, color: 'rgba(179, 194, 209, 1)', fontSize: nowSize(12, 1920), }, splitLine: { //网格线 lineStyle: { type: 'dashed', color: 'rgba(44, 110, 189, 1)', //设置网格线类型 dotted:虚线 solid:实线 }, show: true, //隐藏或显示 }, }, series: { type: 'bar', name: '雨量', data: props.echartData.totalData, barWidth: nowSize(8, 1920), itemStyle: { barBorderRadius: nowSize(15, 1920), color: parms => { let color1 = new proxy.echarts.graphic.LinearGradient(0, 0, 0, 1, [ { offset: 0, color: '#48a0fb', }, { offset: 1, color: 'rgba(57, 247, 255, 0.2)', }, ]); let color2 = new proxy.echarts.graphic.LinearGradient(0, 0, 0, 1, [ { offset: 0, color: 'rgba(254,203,21, 1)', }, { offset: 1, color: 'rgba(254,203,21, 0.2)', }, ]); if (parms.dataIndex < props.echartData.history.length) { return color1; } else { return color2; } }, }, }, }); } onMounted(() => { intChart(); window.addEventListener('resize', resizeTheChart); }); </script> <style lang="scss" scoped> .chartBox { width: 100%; height: 100%; } </style>