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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
  | <template> 
 |      <div ref="main1" style="width: 100%; height: 300px;"></div> 
 |  </template> 
 |    
 |  <script setup lang="ts"> 
 |      import {ref, inject, onMounted, defineProps, onUnmounted} from 'vue' 
 |    
 |      // 获取ref对象 
 |      const main1 = ref() 
 |    
 |      // 接收父级组件参数 
 |      const props = defineProps({ 
 |          legendData: { 
 |              type: Array, 
 |              required: true 
 |          }, 
 |          seriesData: { 
 |              type: Array, 
 |              required: true 
 |          } 
 |      }) 
 |    
 |      // 获取echarts实例对象 
 |      const echarts: any = inject('ec') 
 |    
 |      // 赋值操作 
 |      const init = (): void => { 
 |          let myChart = echarts.init(main1.value) 
 |          let option = { 
 |              tooltip: { 
 |                  trigger: "item", 
 |                  backgroundColor: "#ffffff", 
 |                  axisPointer: { 
 |                      type: 'shadow' 
 |                  }, 
 |                  confine: true, 
 |                  textStyle: { 
 |                      color: "#000000", 
 |                      fontSize: 15 
 |                  } 
 |              }, 
 |              grid: { 
 |                  top: '0%', 
 |                  left: '2%', 
 |                  right: '2%', 
 |                  containLabel: true 
 |              }, 
 |              legend: { 
 |                  bottom: '0', 
 |                  itemHeight: 10, 
 |                  itemWidth: 10, 
 |                  data: props.legendData 
 |              }, 
 |              series: [ 
 |                  { 
 |                      type: "pie", 
 |                      top: '-20%', 
 |                      radius: ["30%", "40%"], 
 |                      labelLine: { 
 |                          normal: { 
 |                              length: 20, 
 |                              length2: 60, 
 |                          } 
 |                      }, 
 |                      label: { 
 |                          formatter: "{per|{d}%}{b|{b}}\n\n", 
 |                          borderWidth: 20, 
 |                          borderRadius: 4, 
 |                          padding: [0, -70], 
 |                          rich: { 
 |                              b: { 
 |                                  color: "#000", 
 |                                  fontSize: 12, 
 |                                  lineHeight: 33 
 |                              }, 
 |                              per: { 
 |                                  fontSize: 12, 
 |                                  padding: [2, 4], 
 |                                  borderRadius: 2 
 |                              } 
 |                          } 
 |                      }, 
 |                      data: props.seriesData 
 |                  } 
 |              ] 
 |          } 
 |    
 |          myChart.setOption(option) 
 |      } 
 |    
 |      const resizeEvent = () => { 
 |          let myChart = echarts.init(main1.value) 
 |          myChart.resize() 
 |      } 
 |    
 |      // 初始化图表 
 |      onMounted(() => { 
 |          init() 
 |          window.addEventListener('resize', resizeEvent, false) 
 |      }) 
 |    
 |      // 组件销毁 
 |      onUnmounted(() => { 
 |          window.removeEventListener('resize', resizeEvent) 
 |      }) 
 |  </script> 
 |    
 |  <style lang="scss" scoped> 
 |    
 |  </style> 
 |  
  |