lg_frontend/components/Bar.vue

141 lines
3.3 KiB
Vue
Raw Permalink Normal View History

2024-02-18 03:20:00 +00:00
<template>
<VueEcharts :options="options" autoresize style="width: 100%;height: 100%;"></VueEcharts>
</template>
<script>
import * as echarts from 'echarts'
import echartsMixin from "../mixins/echarts.mixin";
export default {
name: "Bar",
mixins: [echartsMixin],
data () {
return {
}
},
computed: {
options () {
const { xAxis, dataObj } = this.translateData()
return {
xAxis: {
type: 'category',
axisLabel: {
fontSize: 14,
textStyle: {
color: '#7da4d4',
},
},
axisLine: {
show: true,
lineStyle: {
color: ['#36537D'],
type: 'solid',
},
},
axisTick: {
show: false,
},
splitLine: {
show: false,
},
splitArea: {
show: false,
},
data: xAxis
},
grid: {
left: '0',
right: '0',
bottom: '3%',
top: '15%',
containLabel: true,
},
tooltip: {
trigger: 'axis',
axisPointer: {
// 坐标轴指示器,坐标轴触发有效
type: 'shadow', // 默认为直线,可选为:'line' | 'shadow'
},
},
legend: {
left: 'right',
top: '4%',
textStyle: {
color: '#ffffff',
fontSize: 14,
},
lineStyle: {
width: 4
}
},
yAxis: {
type: 'value',
show: true,
minInterval: 1,
splitNumber: 5,
axisTick: {
show: false,
},
axisLine: {
show: false,
},
axisLabel: {
fontSize: 14,
textStyle: {
color: '#7da4d4',
},
},
splitLine: {
show: true,
lineStyle: {
color: ['#36537D'],
type: 'solid',
},
},
splitArea: {
show: false,
areaStyle: {
color: 'rgba(54,101,146,0.15)',
},
},
},
series: Object.keys(dataObj).map((item, attrIndex) => {
const data = dataObj[item]
const _data = data.map((datum, index) => {
if (datum.name === xAxis[index]) {
return datum.value
}
return null
})
const colors = this.colors[attrIndex]
const [ startColor, endColor ] = colors
return {
barWidth: 6,
type: 'bar',
name: item,
data: _data,
itemStyle: {
normal: {
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
{
offset: 0,
color: this.hexToRgba(startColor || '#1EB5FF', '1'),
},
{
offset: 1,
color: this.hexToRgba(endColor || startColor || this.colors[attrIndex] || '#1EB5FF', '0.2'),
},
]),
},
},
}
})
}
}
}
}
</script>
<style scoped>
</style>