You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
121 lines
2.6 KiB
121 lines
2.6 KiB
2 years ago
|
<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'
|
||
|
}
|
||
|
},
|
||
|
data() {
|
||
|
return {
|
||
|
chart: null
|
||
|
}
|
||
|
},
|
||
|
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.chart.setOption({
|
||
|
title: {
|
||
|
text: '漏斗图',
|
||
|
subtext: '纯属虚构'
|
||
|
},
|
||
|
tooltip: {
|
||
|
trigger: 'item',
|
||
|
formatter: '{a} <br/>{b} : {c}%'
|
||
|
},
|
||
|
toolbox: {
|
||
|
feature: {
|
||
|
dataView: { readOnly: false },
|
||
|
restore: {},
|
||
|
saveAsImage: {}
|
||
|
}
|
||
|
},
|
||
|
legend: {
|
||
|
data: ['展现', '点击', '访问', '咨询', '订单']
|
||
|
},
|
||
|
calculable: true,
|
||
|
series: [
|
||
|
{
|
||
|
name: '漏斗图',
|
||
|
type: 'funnel',
|
||
|
left: '10%',
|
||
|
top: 60,
|
||
|
bottom: 60,
|
||
|
width: '80%',
|
||
|
// height: {totalHeight} - y - y2,
|
||
|
min: 0,
|
||
|
max: 100,
|
||
|
minSize: '0%',
|
||
|
maxSize: '100%',
|
||
|
sort: 'descending',
|
||
|
gap: 2,
|
||
|
label: {
|
||
|
show: true,
|
||
|
position: 'inside'
|
||
|
},
|
||
|
labelLine: {
|
||
|
length: 10,
|
||
|
lineStyle: {
|
||
|
width: 1,
|
||
|
type: 'solid'
|
||
|
}
|
||
|
},
|
||
|
itemStyle: {
|
||
|
borderColor: '#fff',
|
||
|
borderWidth: 1
|
||
|
},
|
||
|
emphasis: {
|
||
|
label: {
|
||
|
fontSize: 20
|
||
|
}
|
||
|
},
|
||
|
data: [
|
||
|
{ value: 60, name: '访问' },
|
||
|
{ value: 40, name: '咨询' },
|
||
|
{ value: 20, name: '订单' },
|
||
|
{ value: 80, name: '点击' },
|
||
|
{ value: 100, name: '展现' }
|
||
|
]
|
||
|
}
|
||
|
]
|
||
|
})
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
</script>
|