plus-ui/src/views/dashboard/PieChart.vue

80 lines
1.7 KiB
Vue
Raw Normal View History

<template>
2025-06-07 15:51:05 +08:00
<div :class="className" :style="{ height: height, width: width }" />
</template>
<script>
import * as echarts from 'echarts';
2025-06-07 15:51:05 +08:00
require('echarts/theme/macarons'); // echarts theme
import resize from './mixins/resize';
export default {
mixins: [resize],
props: {
className: {
type: String,
default: 'chart'
},
width: {
type: String,
default: '100%'
},
height: {
type: String,
default: '300px'
}
},
data() {
return {
chart: null
2025-06-07 15:51:05 +08:00
};
},
mounted() {
this.$nextTick(() => {
2025-06-07 15:51:05 +08:00
this.initChart();
});
},
2025-06-07 15:51:05 +08:00
beforeUnmount() {
if (!this.chart) {
2025-06-07 15:51:05 +08:00
return;
}
2025-06-07 15:51:05 +08:00
this.chart.dispose();
this.chart = null;
},
methods: {
initChart() {
2025-06-07 15:51:05 +08:00
this.chart = echarts.init(this.$el, 'macarons');
this.chart.setOption({
tooltip: {
trigger: 'item',
formatter: '{a} <br/>{b} : {c} ({d}%)'
},
legend: {
left: 'center',
bottom: '10',
data: ['Industries', 'Technology', 'Forex', 'Gold', 'Forecasts']
},
series: [
{
name: 'WEEKLY WRITE ARTICLES',
type: 'pie',
roseType: 'radius',
radius: [15, 95],
center: ['50%', '38%'],
data: [
{ value: 320, name: 'Industries' },
{ value: 240, name: 'Technology' },
{ value: 149, name: 'Forex' },
{ value: 100, name: 'Gold' },
{ value: 59, name: 'Forecasts' }
],
animationEasing: 'cubicInOut',
animationDuration: 2600
}
]
2025-06-07 15:51:05 +08:00
});
}
}
2025-06-07 15:51:05 +08:00
};
</script>