<template>
<div id="pubTaxesFsz" style="height: 100%; width: 100%"></div>
</template>
<script lang="ts" setup name="PubTaxesFsz">
import * as echarts from 'echarts/core';
import { LabelLayout, UniversalTransition } from 'echarts/features';
import {
GridComponent,
LegendComponent,
TitleComponent,
ToolboxComponent,
TooltipComponent,
DatasetComponent,
TransformComponent
} from 'echarts/components';
import { BarChart, LineChart } from 'echarts/charts';
import { SVGRenderer } from 'echarts/renderers';
import { onMounted } from 'vue';
echarts.use([
TitleComponent,
ToolboxComponent,
TooltipComponent,
GridComponent,
LegendComponent,
DatasetComponent,
TransformComponent,
BarChart,
LineChart,
LabelLayout,
UniversalTransition,
SVGRenderer
]);
let monitorContainer: HTMLElement;
// let monitorChart: echarts.ECharts;
onMounted(() => {
monitorContainer = document.getElementById('pubTaxesFsz');
const monitorChart = echarts.init(monitorContainer);
const myColors = {
国内增值税: '#ce83f1',
企业所得税: '#66e7ed',
个人所得税: '#4bf26d',
城镇土地使用税: '#d3d90b',
城市维护建设税: '#7683f8'
};
const data = [
['国内增值税', '6月', 11.3],
['国内增值税', '7月', 12.3],
['国内增值税', '8月', 13.3],
['国内增值税', '9月', 16.3],
['企业所得税', '6月', 15.1],
['企业所得税', '7月', 18.1],
['企业所得税', '8月', 12.1],
['企业所得税', '9月', 18.1],
['个人所得税', '6月', 10.4],
['个人所得税', '7月', 13.4],
['个人所得税', '8月', 18.4],
['个人所得税', '9月', 28.4],
['城镇土地使用税', '6月', 5.4],
['城镇土地使用税', '7月', 3.4],
['城镇土地使用税', '8月', 8.4],
['城镇土地使用税', '9月', 9.4],
['城市维护建设税', '6月', 17.4],
['城市维护建设税', '7月', 22.4],
['城市维护建设税', '8月', 36.4],
['城市维护建设税', '9月', 46.4]
];
const gqxsrOption = {
grid: {
top: 40,
bottom: 30,
left: 110,
right: 50
},
// legend: {
// show: true,
// textStyle: {
// color: '#FFF'
// }
// },
tooltip: {
transitionDuration: 0, // 防止宽度溢出外层div
trigger: 'axis'
},
dataset: [
{
source: data.filter(function (d) {
return d[1] === '6月';
})
}
],
xAxis: {
name: '金额',
max: 'dataMax',
// axisLabel: {
// textStyle: {
// show: true,
// fontFamily: '微软雅黑',
// color: '#FFFFFF',
// fontSize: '12',
// fontWeight: 'bolder'
// }
// },
axisLine: {
// x轴线
show: true,
lineStyle: {
// 属性lineStyle控制线条样式
color: '#FFFFFF'
}
},
axisTick: {
// x轴刻度线
show: true,
lineStyle: {
// 属性lineStyle控制线条样式
color: '#FFFFFF'
}
},
splitLine: {
// 网格线
show: true,
lineStyle: {
// 属性lineStyle控制线条样式
type: 'dashed',
color: 'rgba(255,255,255,0.39)'
}
}
},
yAxis: {
name: '税种',
nameLocation: 'start',
type: 'category',
inverse: true, // 表示 Y 轴从下往上是从小到大的排列
// max: 4,//显示前n+1条,不加默认显示全部的
axisLabel: {
// y轴下刻度标签相关样式
show: true,
fontSize: 12,
color: '#ffffff'
},
axisLine: {
// 轴线
show: true,
lineStyle: {
color: '#FFF'
}
},
axisTick: {
// y轴刻度线
show: true,
alignWithLabel: true,
lineStyle: {
// 属性lineStyle控制线条样式
color: '#FFFFFF'
}
},
splitLine: {
// 网格线
show: false,
lineStyle: {
// 属性lineStyle控制线条样式
type: 'dashed',
color: '#FFFFFF'
}
},
animationDuration: 300,
animationDurationUpdate: 300
},
series: [
{
realtimeSort: true, // 表示开启该系列的动态排序效果
// seriesLayoutBy: 'column',
type: 'bar',
itemStyle: {
color(param) {
return myColors[param.value.item] || '#5470c6';
}
},
encode: {
// tooltip: ['item', 'zzl'],
x: [2], // 表示维度 3、1、5 映射到 x 轴。
y: [0] // 表示维度 2 映射到 y 轴。
},
label: {
show: true,
valueAnimation: true, // 开启标签动画,存在bug或冲突,目前无效,且开启会导致标签不显示
position: 'right',
color: '#ffffff'
}
}
],
// Disable init animation.
animation: true,
animationDuration: 3000, // 设为 0,表示第一份数据不需要从 0 开始动画(如果希望从 0 开始则设为和 animationDurationUpdate 相同的值)
animationDurationUpdate: 3000, // 建议设为 3000 表示每次更新动画时长,这一数值应与调用 setOption 改变数据的频率相同
// animationEasing: 'linear',
// animationEasingUpdate: 'linear',
graphic: {
// 图形元素,可悬浮,用于做水印等
elements: [
{
type: 'text',
right: 80,
bottom: 60,
style: {
text: '6月',
font: 'bolder 80px monospace',
fill: 'rgba(255,255,255,0.66)'
},
z: 100
}
]
}
};
monitorChart.setOption(gqxsrOption);
for (let i = 6; i < 10; ++i) {
(function (i) {
setTimeout(function () {
console.log('===setTimeout===i==', i);
updateYear(i);
}, (i - 6) * 3000);
})(i);
}
function updateYear(year) {
const source = data.filter(function (d) {
return d[1] === `${year}月`;
});
gqxsrOption.dataset[0].source = source;
gqxsrOption.graphic.elements[0].style.text = `${year}月`;
monitorChart.setOption(gqxsrOption);
}
});
</script>