101 lines
2.0 KiB
Vue
101 lines
2.0 KiB
Vue
<template>
|
|
<div :class="className" :style="{height:height,width:width}" />
|
|
</template>
|
|
|
|
<script>
|
|
import echarts from 'echarts'
|
|
require('echarts/theme/macarons') // echarts theme
|
|
import { debounce } from '@/utils'
|
|
|
|
export default {
|
|
props: {
|
|
className: {
|
|
type: String,
|
|
default: 'chart'
|
|
},
|
|
width: {
|
|
type: String,
|
|
default: '100%'
|
|
},
|
|
height: {
|
|
type: String,
|
|
default: '300px'
|
|
},
|
|
chartData: {
|
|
type: Object,
|
|
required: true
|
|
}
|
|
},
|
|
data() {
|
|
return {
|
|
chart: null
|
|
}
|
|
},
|
|
watch: {
|
|
chartData: {
|
|
deep: true,
|
|
handler() {
|
|
this.setOptions()
|
|
}
|
|
}
|
|
},
|
|
mounted() {
|
|
this.initChart()
|
|
this.__resizeHandler = debounce(() => {
|
|
if (this.chart) {
|
|
this.chart.resize()
|
|
}
|
|
}, 100)
|
|
window.addEventListener('resize', this.__resizeHandler)
|
|
},
|
|
beforeDestroy() {
|
|
if (!this.chart) {
|
|
return
|
|
}
|
|
window.removeEventListener('resize', this.__resizeHandler)
|
|
this.chart.dispose()
|
|
this.chart = null
|
|
},
|
|
methods: {
|
|
initChart() {
|
|
this.chart = echarts.init(this.$el, 'macarons')
|
|
this.setOptions()
|
|
},
|
|
setOptions() {
|
|
this.chart.setOption({
|
|
title: {
|
|
text: this.chartData.name,
|
|
subtext: this.chartData.pieSubTest,
|
|
left: 'center'
|
|
},
|
|
tooltip: {
|
|
trigger: 'item'
|
|
},
|
|
legend: {
|
|
orient: 'vertical',
|
|
left: 'left',
|
|
data: ['有货', '空闲', '禁用']
|
|
},
|
|
color: ['#e0a803', '#27aa0f', '#d2d1d1'], // 修改图饼颜色
|
|
series: [
|
|
{
|
|
name: this.chartData.name,
|
|
type: 'pie',
|
|
radius: '70%',
|
|
center: ['50%', '58%'],
|
|
data: this.chartData.data,
|
|
emphasis: {
|
|
itemStyle: {
|
|
shadowBlur: 10,
|
|
shadowOffsetX: 0,
|
|
shadowColor: 'rgba(0,0,0,0.5)'
|
|
}
|
|
}
|
|
}
|
|
]
|
|
})
|
|
}
|
|
}
|
|
}
|
|
</script>
|