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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
| <template>
| <div class="event-data-analysis">
| <div class="little-title">行业数据分析</div>
| <div class="chart" ref="echartsRef"></div>
| </div>
| </template>
| <script setup>
| import { getEventIndustryData } from '@/api/home/event'
| import * as echarts from 'echarts'
| import useEchartsResize from '@/hooks/useEchartsResize'
|
| const echartsRef = ref(null)
| let { chart } = useEchartsResize(echartsRef)
|
| const echartsOption = {
| tooltip: {
| trigger: 'axis',
| axisPointer: {
| type: 'shadow',
| },
| formatter: function (params) {
| let result = ''
| params.forEach(item => {
| const color = item.color.colorStops[1].color
| const marker = `<span style="display:inline-block;margin-right:5px;border-radius:50%;width:10px;height:10px;background-color:${color};"></span>`
| result += `${marker}${item.seriesName}: ${item.value}<br/>`
| })
| return result
| },
| },
| grid: {
| top: '5%',
| left: 0,
| right: 0,
| bottom: 0,
| containLabel: true,
| },
| xAxis: {
| type: 'category',
| axisLabel: {
| rotate: -45, // 旋转角度
| interval: 0, // 显示所有标签
| color: '#FFFFFF',
| fontFamily: 'Source Han Sans CN, Source Han Sans CN',
| fontWeight: 400,
| fontSize: 10,
| },
| data: [],
| },
| yAxis: [
| {
| type: 'value',
| axisLabel: {
| interval: 0, // 显示所有标签
| color: '#FFFFFF',
| fontFamily: 'Source Han Sans CN, Source Han Sans CN',
| fontWeight: 400,
| fontSize: 10,
| },
| axisLine: {
| lineStyle: {
| color: '#ffffff',
| },
| },
| splitLine: {
| lineStyle: {
| color: 'rgba(255, 255, 255, 0.1)',
| type: 'dashed', // 设置为虚线
| },
| },
| },
| ],
| series: [],
| }
|
| const seriesObj = (colorList) =>{
| const offsets = [0,1,1]
| return {
| type: 'bar',
| barWidth: 6,
| emphasis: {
| focus: 'series',
| },
| itemStyle: {
| color: new echarts.graphic.LinearGradient(
| 0,
| 0,
| 0,
| 1, // 渐变方向从上到下
| colorList.map((color,index) => ({ offset:offsets[index], color}))
| ),
| },
| data: [],
| }
| }
|
| const seriesList = [
| {
| name: '事件',
| ...seriesObj(['#FFFFFF','rgba(44,134,240,0.48)','#DDECFD']),
| },
| {
| name: '任务',
| ...seriesObj(['#FFFFFF', 'rgba(33,218,229,0.48)', '#E5FEFF']),
| },
| ]
| const params = inject('eventOverviewParams')
|
| watch(params, () => {
| getData()
| })
|
| // 获取数据
| const getData = async () => {
| const res = await getEventIndustryData(params.value)
| const list = res?.data?.data || []
| echartsOption.xAxis.data = list.map(item => item.name)
| //
| seriesList.forEach(item => {
| item.data = []
| })
| list.forEach(item => {
| item.data.forEach(item1 => {
| seriesList.forEach(item2 => {
| item2.name === item1.name && item2.data.push(item1.value)
| })
| })
| })
| echartsOption.series = seriesList
| chart.value.setOption(echartsOption)
| }
|
| onMounted(() => {
| getData()
| })
| </script>
| <style scoped lang="scss">
| .event-data-analysis {
| height: 280px;
|
| .little-title {
| background: url('@/assets/images/little-title-bg.png') no-repeat center / 100% 100%;
| width: 372px;
| height: 28px;
| line-height: 28px;
| padding-left: 16px;
| }
|
| .chart {
| margin-top: 10px;
| width: 356px;
| height: 240px;
| }
| }
| </style>
|
|