1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
| <script lang="ts">
| import type { EChartsOption } from 'echarts';
|
| import { defineComponent, onActivated, onMounted, ref, watch } from 'vue';
|
| import {
| EchartsUI,
| type EchartsUIType,
| useEcharts,
| } from '@vben/plugins/echarts';
|
| export default defineComponent({
| components: { EchartsUI },
| props: {
| data: {
| default: () => [],
| type: Array,
| },
| },
| setup(props, { expose }) {
| expose({});
|
| const chartRef = ref<EchartsUIType>();
| const { renderEcharts, resize } = useEcharts(chartRef);
|
| watch(
| () => props.data,
| () => {
| if (!chartRef.value) return;
| setEchartsOption(props.data);
| },
| { immediate: true },
| );
|
| onMounted(() => {
| setEchartsOption(props.data);
| });
| /**
| * 从其他页面切换回来会有一个奇怪的动画效果 需要调用resize
| * 该饼图组件需要关闭animation
| */
| onActivated(() => resize(false));
|
| function setEchartsOption(data: any[]) {
| const option: EChartsOption = {
| series: [
| {
| animationDuration: 1000,
| animationEasing: 'cubicInOut',
| center: ['50%', '50%'],
| data,
| name: '命令',
| radius: [15, 95],
| roseType: 'radius',
| type: 'pie',
| },
| ],
| tooltip: {
| formatter: '{a} <br/>{b} : {c} ({d}%)',
| trigger: 'item',
| },
| };
| renderEcharts(option);
| }
|
| return {
| chartRef,
| };
| },
| });
| </script>
|
| <template>
| <EchartsUI ref="chartRef" height="400px" width="100%" />
| </template>
|
|