<!-- @format --> <script> import { defineComponent } from 'vue'; import BaseBar from './BaseBar.vue'; import { tranNumber, lineToolTips, colorTransferToRgb } from '../tool.js'; export default defineComponent({ name: 'MultipleBar', extends: BaseBar, props: { yAxis: { type: Array, required: true, }, series: { type: Array, required: true, }, axisLabelRotate: { type: Number, default: 0, }, colorDatas: { type: Array, default: () => { return [ '#085779', '#16C5EC', '#087D76', '#14FFF1', '#135572', '#1593C9', '#04613F', '#11D683', ]; }, }, }, data() { return { colorRgb: [], }; }, computed: {}, created() {}, mounted() { for (let i = 0; i < this.colorDatas.length; i++) { this.colorRgb.push(colorTransferToRgb(this.colorDatas[i])); } let optionData = this.optionHandle(); this.setOption(optionData); this.renderChart(); }, methods: { getChangeData() { var seriesDatas = []; var legendDatas = []; for (let i = 0; i < this.series.length; i++) { legendDatas.push({ name: this.series[i].name, icon: 'rect', }); seriesDatas.push({ name: this.series[i].name, type: 'bar', barMaxWidth: '40%', showBackground: false, stack: 'total', barMinWidth: 5, label: { show: true, color: '#FFFFFF', distance: 0, formatter: function (params) { if (params.value > 0) { return params.value; } else { return ''; } }, // position:'insideRight' }, emphasis: { focus: 'series', showBackground: false, }, data: this.series[i].data, itemStyle: { color: { type: 'linear', x: 0, y: 0, x2: 1, y2: 0, colorStops: [ { offset: 0, color: `rgba(${this.colorRgb[i * 2].r},${this.colorRgb[i * 2].g},${ this.colorRgb[i * 2].b },1)`, // 0% 处的颜色 }, { offset: 1, color: `rgba(${this.colorRgb[i * 2 + 1].r},${this.colorRgb[i * 2 + 1].g},${ this.colorRgb[i * 2 + 1].b }, 1)`, // 100% 处的颜色 }, ], }, }, type: 'bar', }); } return { series: seriesDatas, legendData: legendDatas }; }, optionHandle() { let colorDatas = this.colorDatas; let changeData = this.getChangeData(); var option = { animationDuration: 300, animationEasing: 'linear', textStyle: { color: '#fff', fontFamily: 'Microsoft YaHei', }, tooltip: { trigger: 'axis', backgroundColor: 'rgba(0,0,0,0.65)', borderColor: 'rgba(0,0,0,0.65)', padding: [4, 8], axisPointer: { type: 'shadow', shadowStyle: { color: '#ffffff', opacity: 0.08, width: 'auto', }, }, formatter: function (params) { let res = ''; for (let i = 0; i < params.length; i++) { let { name, data, seriesName } = params[i]; let color = colorDatas[i * 2]; var resDiv = lineToolTips(name, color, data, seriesName, i); res += resDiv; } return res; }, }, legend: { x: 'right', //可设定图例在左、右、居中 y: 'top', //可设定图例在上、下、居中 padding: [0, 24, 0, 0], //可设定图例[距上方距离,距右方距离,距下方距离,距左方距离] show: true, textStyle: { color: '#FFFFFF', opacity: 0.85, }, itemHeight: 8, itemWidth: 8, itemGap: 28, data: changeData.legendData, top: '24', }, grid: { left: '24', right: '24', bottom: '24', containLabel: true, }, xAxis: [ { type: 'value', position: 'bottom', axisLine: { show: true, onZero: false, lineStyle: { color: '#ffffff', width: 1, opacity: 0.2, }, }, axisLabel: { show: true, opacity: 0.65, fontSize: 11, }, splitLine: { show: true, interval: 2, lineStyle: { color: '#FFFFFF', width: 1, opacity: 0.2, }, }, axisTick: { //x轴刻度线去掉 show: false, }, }, { type: 'value', position: 'top', axisLine: { show: true, onZero: false, lineStyle: { color: '#ffffff', width: 1, opacity: 0.2, }, }, splitLine: { show: true, interval: 2, lineStyle: { color: '#FFFFFF', width: 1, opacity: 0.2, }, }, axisTick: { //x轴刻度线去掉 show: false, }, }, ], yAxis: { type: 'category', data: this.yAxis, show: true, axisLine: { show: true, onZero: false, lineStyle: { color: '#ffffff', width: 1, opacity: 0.2, }, }, splitLine: { show: false, onZero: false, }, axisLabel: { show: true, opacity: 0.65, fontSize: 11, rotate: this.axisLabelRotate, }, axisTick: { //y轴刻度线去掉 show: false, }, }, series: changeData.series, }; return option; }, }, }); </script>