yudao-dev/src/views/dashboard/deepDashboard/BarChart.vue
2025-03-17 15:31:00 +08:00

311 lines
6.7 KiB
Vue

<template>
<div :class="className" :style="{ height: height, width: width }" />
</template>
<script>
import * as echarts from 'echarts';
require('echarts/theme/macarons'); // echarts theme
import resize from '../mixins/resize';
import { max } from 'moment';
const animationDuration = 6000;
export default {
mixins: [resize],
props: {
echartData: {
type: Array,
default: () => [],
},
className: {
type: String,
default: 'chart',
},
width: {
type: String,
default: '100%',
},
height: {
type: String,
default: '380px',
},
},
data() {
return {
chart: null,
};
},
mounted() {
this.$nextTick(() => {
this.initChart();
});
},
beforeDestroy() {
if (!this.chart) {
return;
}
this.chart.dispose();
this.chart = null;
},
methods: {
initChart(permission) {
var option = {
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'cross',
crossStyle: {
color: '#999',
},
},
},
grid: {
top: 100,
left: '2%',
right: '3%',
bottom: '3%',
containLabel: true,
},
legend: {
data: [
'产量',
{
name: '成本',
icon: 'path://M1255.570286 1024a512 512 0 1 0 0-1024 512 512 0 0 0 0 1024z m641.609143-512c0 37.376-3.072 74.020571-8.923429 109.714286h393.069714c59.611429 0 107.958857-49.152 107.958857-109.714286s-48.274286-109.714286-107.958857-109.714286h-393.069714c5.851429 35.693714 8.923429 72.338286 8.923429 109.714286zM156.745143 621.714286h453.12a672.914286 672.914286 0 0 1 0-219.428572H156.745143C97.133714 402.285714 48.786286 451.437714 48.786286 512s48.274286 109.714286 107.958857 109.714286z',
},
{
name: '良品率',
icon: 'path://M1255.570286 1024a512 512 0 1 0 0-1024 512 512 0 0 0 0 1024z m641.609143-512c0 37.376-3.072 74.020571-8.923429 109.714286h393.069714c59.611429 0 107.958857-49.152 107.958857-109.714286s-48.274286-109.714286-107.958857-109.714286h-393.069714c5.851429 35.693714 8.923429 72.338286 8.923429 109.714286zM156.745143 621.714286h453.12a672.914286 672.914286 0 0 1 0-219.428572H156.745143C97.133714 402.285714 48.786286 451.437714 48.786286 512s48.274286 109.714286 107.958857 109.714286z',
},
],
itemWidth: 18,
itemHeight: 18,
textStyle: {
fontSize: 18,
color: '#DFF1FE',
},
top: 15,
right: 20,
},
xAxis: [
{
type: 'category',
data: this.echartData.map((item) => {
return item.time;
}),
axisPointer: {
type: 'shadow',
},
axisLine: {
lineStyle: {
type: 'solid',
color: '#97B3FF', // 左边线的颜色
width: '1', // 坐标线的宽度
},
},
},
],
yAxis: [
{
type: 'value',
name: '单位/片',
min: 0,
position: 'left',
alignTicks: true,
axisLabel: {
color: 'white',
},
nameTextStyle: {
color: 'white',
},
axisLine: {
show: true,
lineStyle: {
type: 'solid',
color: '#97B3FF', // 左边线的颜色
width: '1', // 坐标线的宽度
},
},
splitLine: {
lineStyle: {
color: '#b6c1e1',
},
},
splitArea: {
show: false,
},
},
{
type: 'value',
name: '%',
max: 100,
min: 0,
minInterval: 1,
position: 'right',
axisLabel: {
color: 'white',
},
nameTextStyle: {
color: 'white',
},
axisLine: {
show: true,
lineStyle: {
type: 'solid',
color: '#97B3FF', // 左边线的颜色
width: '1', // 坐标线的宽度
},
},
splitLine: {
lineStyle: {
color: '#b6c1e1',
},
},
splitArea: {
show: false,
},
},
{
type: 'value',
name: '万元',
min: 0,
position: 'right',
alignTicks: true,
offset: 40,
axisLabel: {
color: 'white',
},
nameTextStyle: {
color: 'white',
},
axisLine: {
show: true,
lineStyle: {
type: 'solid',
color: '#97B3FF', // 左边线的颜色
width: '1', // 坐标线的宽度
},
},
splitLine: {
lineStyle: {
color: '#b6c1e1',
},
},
splitArea: {
show: false,
},
},
],
series: [
{
name: '产量',
type: 'bar',
barWidth: '14px',
data: this.echartData.map((item) => {
return Number(item.out).toFixed(1);
}),
animationDuration,
tooltip: {
valueFormatter: function (value) {
return value + ' 片';
},
},
itemStyle: {
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
{ offset: 0, color: '#5CB7FF' },
{ offset: 1, color: '#364BFE' },
]),
},
},
{
name: '成本',
type: 'line',
symbol: 'circle',
symbolSize: 8,
yAxisIndex: 2,
data: this.echartData.map((item) => {
return Number(item.price).toFixed(1);
}),
animationDuration,
tooltip: {
valueFormatter: function (value) {
return value + ' 万元';
},
},
lineStyle: {
color: '#FF1295',
},
itemStyle: {
color: '#FF1295',
borderWidth: 1, // 圆点边框宽度(可选)
},
areaStyle: {
opacity: 0.2,
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
{
offset: 0,
color: '#FF1295',
},
{
offset: 1,
color: 'transparent',
},
]),
},
},
{
name: '良品率',
type: 'line',
symbol: 'circle',
symbolSize: 8,
yAxisIndex: 1,
data: this.echartData.map((item) => {
return Number(item.ratio).toFixed(1);
}),
animationDuration,
tooltip: {
valueFormatter: function (value) {
return value + ' %';
},
},
lineStyle: {
color: '#12FFF5',
},
itemStyle: {
color: '#12FFF5',
borderWidth: 1, // 圆点边框宽度(可选)
},
areaStyle: {
opacity: 0.2,
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
{
offset: 0,
color: '#12FFF5',
},
{
offset: 1,
color: 'transparent',
},
]),
},
},
],
};
if(permission){
option.series[1]=[]
}
if (this.chart) {
this.chart.setOption(option);
} else {
this.chart = echarts.init(this.$el, 'macarons');
this.chart.setOption(option);
}
window.addEventListener('resize', () => {
this.chart.resize();
});
},
},
};
</script>