kakapay后台管理系统
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.
 
 
 
 

579 lines
15 KiB

<template>
<div
ref="charts"
style="min-width: 12vw;max-height:220px;height:220px;"
/>
</template>
<script>
import * as echarts from 'echarts'
import { debounce } from '@/utils'
export default {
props: {
config: Object
},
watch: {
config: {
handler: function(val) {
this.$nextTick(() => {
this.init()
})
},
immediate: true,
deep: true,
}
},
data() {
return {
chart: null
}
},
computed: {
option() {
let percent = 0;
if (this.config.total === 0) {
percent = 0
} else {
percent = ((this.config.value / this.config.total) * 100).toFixed(2)
}
const center = ['50%', '55%']
const self = this
return {
grid: {
left: '0',
top: '0',
right: '0',
bottom: '0',
containLabel: false
},
// backgroundColor: '#0E1327',
backgroundColor: 'transparent',
tooltip: {
show: false
},
angleAxis: {
show: false,
max: 100 * 360 / 270, //-45度到225度,二者偏移值是270度除360度
type: 'value',
startAngle: 225, //极坐标初始角度
splitLine: {
show: false
}
},
barMaxWidth: '11%', //圆环宽度
radiusAxis: {
show: false,
type: 'category'
},
//圆环位置和大小
polar: {
center: center,
radius: '100%'
},
series: [
// 最外圈的边框(左右)
{
name: '内部透明起始结束的圆边',
type: 'gauge',
center: center,
radius: '80%',
splitNumber: 10,
axisLine: {
lineStyle: {
color: [
// 右/下/左/上
[0.3, new echarts.graphic.LinearGradient(
1, 0, 0, 0,
[{
offset: 0.4,
color: this.config.opacityBorder[0]
}, {
offset: 1,
color: this.config.opacityBorder[1]
}]
)],
[0.7, new echarts.graphic.LinearGradient(
0, 0, 1, 0,
[{
offset: 0,
color: this.config.opacityBorder[0]
}, {
offset: 1,
color: this.config.opacityBorder[0]
}]
)],
[1, new echarts.graphic.LinearGradient(
0, 0, 1, 0,
[{
offset: 0.4,
color: this.config.opacityBorder[0]
}, {
offset: 1,
color: this.config.opacityBorder[1]
}]
)]
],
width: 2
}
},
z: 4,
axisLabel: {
show: false
},
axisTick: {
show: false
},
splitLine: {
show: false
},
//仪表盘详情,用于显示数据。
detail: {
show: true,
offsetCenter: [0, '95%'],
color: '#fff',
formatter(params) {
return `{t1|${self.config.valueLabel}}\n{t2|${self.config.totalLabel}}`
},
rich: {
t1: {
fontFamily: 'PingFang TC',
fontSize: '5%',
color: '#C6CEEC',
lineHeight: 18
},
t2: {
fontFamily: 'PingFang TC',
fontSize: '10%',
color: '#FFFFFF',
lineHeight: 18
}
}
},
label: {
show: false
},
pointer: {
show: false
},
title: {
//标题
show: false
},
data: [
{
name: percent + '%',
value: percent
}
]
},
// 带有阴影的边框
{
name: 'border',
type: 'pie',
clockWise: false,
radius: '70%',
center: center,
animation: false,
z: 0,
data: [{
value: 0,
color: 'transparent',
label: {
show: false
},
labelLine: {
show: false
},
emphasis: {
disabled: true
},
select: {
disabled: true
},
tooltip: {
show: false
},
itemStyle: {
color: '#071422',
shadowColor: this.config.shadowColor,
shadowBlur: 25,
shadowOffsetX: 0,
shadowOffsetY: -25
}
}]
},
// 阴影的边框(中间)
{
name: '内部透明起始结束的圆边',
type: 'gauge',
center: center,
radius: '70%',
axisLine: {
lineStyle: {
color: [
// 右/下/左/上
[0.4, new echarts.graphic.LinearGradient(
1, 0, 0, 0,
[{
offset: 0,
color: this.config.opacityBorder[0]
}, {
offset: 1,
color: this.config.opacityBorder[1]
}]
)],
[0.6, new echarts.graphic.LinearGradient(
1, 0, 0, 0,
[{
offset: 0,
color: this.config.opacityBorder[0]
}, {
offset: 1,
color: this.config.opacityBorder[0]
}]
)]
],
width: 2
}
},
z: 4,
axisLabel: {
show: false
},
axisTick: {
show: false
},
splitLine: {
show: false
},
detail: {
show: false
},
label: {
show: false
},
pointer: {
show: false
},
title: {
//标题
show: false
},
data: [
{
name: percent + '%',
value: percent
}
]
},
// 刻度
{
name: '外部刻度',
type: 'gauge',
center: center,
radius: '75%',
min: 0, //最小刻度
max: 100, //最大刻度
splitNumber: 10, //刻度数量
startAngle: 225,
endAngle: -45,
axisLine: {
show: false,
lineStyle: {
width: 1,
color: [
[1, 'rgba(0,0,0,0)']
]
}
},
//仪表盘轴线
axisLabel: {
show: false
}, //刻度标签。
axisTick: {
show: true,
splitNumber: 4,
lineStyle: {
//用颜色渐变函数不起作用
color: '#6DCBFF',
width: 1
},
length: 1
},
//刻度样式
splitLine: {
show: true,
length: 2,
lineStyle: {
//用颜色渐变函数不起作用
color: '#6DCBFF'
}
}, //分隔线样式
detail: {
show: false
},
pointer: {
show: false
}
},
// 最宽的圆环,上层, 显示彩色的进度条
{
type: 'bar',
data: [
{
value: percent,
itemStyle: {
//图形渐变颜色方法,四个数字分别代表,右,下,左,上,offset表示0%到100%
color: {
type: 'linear',
x: 0,
y: 1,
x2: 0,
y2: 0,
colorStops: [
{
offset: 0,
color: this.config.progressBar[0]
}, {
offset: 1,
color: this.config.progressBar[1]
}
]
}
}
}
],
barGap: '-100%', //柱间距离,上下两层圆环重合
coordinateSystem: 'polar',
roundCap: true, //顶端圆角从 v4.5.0 开始支持
//圆环层级,同zindex
z: 2
},
// 最宽的圆环,下层, 显示底色的进度条
{
type: 'bar',
data: [
{
value: 100,
itemStyle: {
color: this.config.progressBarBG
}
}
],
barGap: '-100%',
coordinateSystem: 'polar',
roundCap: true,
z: 1
},
{
name: '内部透明起始结束的圆边',
type: 'gauge',
center: center,
radius: '40%',
splitNumber: 10,
axisLine: {
lineStyle: {
color: [
[0, new echarts.graphic.LinearGradient(
0, 1, 0, 0,
[{
offset: 0,
color: this.config.circle2Color[0]
}, {
offset: 1,
color: this.config.circle2Color[1]
}]
)],
[0.2, new echarts.graphic.LinearGradient(
0, 1, 0, 0,
[{
offset: 0,
color: this.config.circle2Color[0]
}, {
offset: 1,
color: this.config.circle2Color[1]
}]
)],
[0.8, new echarts.graphic.LinearGradient(
0, 0, 1, 0,
[{
offset: 0,
color: this.config.circle2Color[1]
}, {
offset: 1,
color: this.config.circle2Color[1]
}]
)],
[1, new echarts.graphic.LinearGradient(
0, 0, 0, 1,
[{
offset: 0,
color: this.config.circle2Color[1]
}, {
offset: 1,
color: this.config.circle2Color[0]
}]
)]
],
width: 1
}
},
z: 4,
axisLabel: {
show: false
},
axisTick: {
show: false
},
splitLine: {
show: false
},
detail: {
show: false
},
label: {
show: false
},
pointer: {
show: false
},
title: {
//标题
show: false
},
data: [
{
name: percent + '%',
value: percent
}
]
},
// 内圆的边框
{
name: '外边框',
type: 'pie',
clockWise: false,
hoverAnimation: false,
radius: ['35%', '35%'],//边框大小
center: center,//边框位置
tooltip: {
show: false
},
label: {
show: false
},
data: [
{
value: 10,
itemStyle: {
normal: {
borderWidth: 1,//设置边框粗细
borderColor: this.config.circle2Color[1]//边框颜色
}
}
}
]
},
// 内圆
{
type: 'pie',
radius: '35%',
center: center,
z: 1,
itemStyle: {
normal: {
color: new echarts.graphic.RadialGradient(.5, .5, .8, [
{
offset: 0,
color: this.config.innerCircle[0]
},
{
offset: .5,
color: this.config.innerCircle[1]
},
{
offset: 1,
color: this.config.innerCircle[2]
}
],
false
),
label: {
show: false
},
labelLine: {
show: false
}
}
},
hoverAnimation: false,
label: {
normal: {
show: true,
position: 'center',
color: '#4c4a4a',
formatter: `{t1|${percent}%}\n{t2|${this.config.value}}\n{t3|${this.config.unit}}`,
rich: {
t1: {
fontFamily: 'PingFang TC',
fontSize: '5%',
color: '#C6CEEC',
lineHeight: 14
},
t2: {
fontFamily: 'PingFang TC',
fontSize: '10%',
color: '#FFFFFF',
lineHeight: 14,
fontWeight: 600
},
t3: {
fontFamily: 'PingFang TC',
fontSize: '5%',
color: '#C6CEEC',
lineHeight: 14
}
}
},
emphasis: {//中间文字显示
show: true
}
},
tooltip: {
show: false
},
data: [100]
}
]
}
}
},
mounted() {
window.addEventListener('resize', debounce(() => {
this.chart?.resize()
}, 200))
},
methods: {
init() {
if (!this.chart) {
this.chart = echarts.init(this.$refs.charts)
}
this.chart.setOption(this.option)
}
}
}
</script>
<style scoped>
</style>