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.
237 lines
5.7 KiB
237 lines
5.7 KiB
<template>
|
|
<div id="mainOther" :style="{height:height,width:width}" style="margin-top: -20px;" />
|
|
</template>
|
|
|
|
<script>
|
|
import * as echarts from 'echarts'
|
|
import resize from '@/views/dashboard/mixins/resize'
|
|
|
|
export default {
|
|
name: 'EchartsComponent',
|
|
mixins: [resize],
|
|
props: {
|
|
memoryTotal: {
|
|
type: Number,
|
|
require: true,
|
|
default: function() {
|
|
return 0
|
|
}
|
|
},
|
|
memoryFree: {
|
|
type: Number,
|
|
require: true,
|
|
default: function() {
|
|
return 0
|
|
}
|
|
},
|
|
width: {
|
|
type: String,
|
|
default: '50%'
|
|
},
|
|
height: {
|
|
type: String,
|
|
default: '100%'
|
|
}
|
|
},
|
|
watch: {
|
|
'memoryTotal': {
|
|
handler(val) {
|
|
setTimeout(() => {
|
|
this.initChart()
|
|
}, 100)
|
|
},
|
|
immediate: true,
|
|
deep: true
|
|
},
|
|
'memoryFree': {
|
|
handler(val) {
|
|
setTimeout(() => {
|
|
this.initChart()
|
|
}, 100)
|
|
},
|
|
immediate: true,
|
|
deep: true
|
|
}
|
|
},
|
|
mounted() {
|
|
this.initChart()
|
|
// window.addEventListener('resize', this.__resizeHandler)
|
|
},
|
|
methods: {
|
|
initChart() {
|
|
const chartDom = document.getElementById('mainOther')
|
|
const myChart = echarts.init(chartDom)
|
|
|
|
const dataValue = this.memoryTotal === 0 ? 0 : ((this.memoryTotal - this.memoryFree) / this.memoryTotal * 100).toFixed(0)
|
|
|
|
const axisLineHandler = (value) => {
|
|
const ratio = Number(value / 100)
|
|
if (ratio <= 0.7) {
|
|
return [
|
|
[ratio, '#56BC91'], // 进度色
|
|
[1, 'rgba(216, 216, 216, 1)'] // 背景色
|
|
]
|
|
} else if (ratio <= 0.9) {
|
|
return [
|
|
[ratio, '#FF973E'], // 进度色
|
|
[1, 'rgba(216, 216, 216, 1)'] // 背景色
|
|
]
|
|
} else if (ratio <= 1) {
|
|
return [
|
|
[ratio, '#fd666d'], // 进度色
|
|
[1, 'rgba(216, 216, 216, 1)'] // 背景色
|
|
]
|
|
}
|
|
}
|
|
|
|
const itemStyleHandler = (value) => {
|
|
if (value <= 70) {
|
|
return `#56BC91`
|
|
} else if (value <= 90) {
|
|
return `#FF973E`
|
|
} else if (value <= 100) {
|
|
return `#fd666d`
|
|
}
|
|
return ''
|
|
}
|
|
|
|
// const dataNameHandler = (value) => {
|
|
// if (value <= 60) {
|
|
// return value + '°C'
|
|
// } else if (value <= 80) {
|
|
// return value + '°C'
|
|
// } else if (value <= 100) {
|
|
// return value + '°C'
|
|
// }
|
|
// return ''
|
|
// }
|
|
|
|
const option = {
|
|
series: [
|
|
{
|
|
type: 'gauge',
|
|
center: ['40%', '38%'],
|
|
radius: 60,
|
|
startAngle: 200,
|
|
endAngle: -20,
|
|
min: 0,
|
|
max: 100,
|
|
splitNumber: 10,
|
|
itemStyle: {
|
|
color: itemStyleHandler(dataValue)
|
|
},
|
|
progress: {
|
|
show: true,
|
|
width: 20
|
|
},
|
|
pointer: {
|
|
show: false
|
|
},
|
|
axisLine: {
|
|
lineStyle: {
|
|
width: 14,
|
|
color: axisLineHandler(dataValue)
|
|
}
|
|
},
|
|
axisTick: {
|
|
show: false,
|
|
distance: -35,
|
|
splitNumber: 5,
|
|
lineStyle: {
|
|
width: 2,
|
|
color: 'auto'
|
|
}
|
|
},
|
|
splitLine: {
|
|
show: false,
|
|
distance: -42,
|
|
length: 14,
|
|
lineStyle: {
|
|
width: 3,
|
|
color: 'auto'
|
|
}
|
|
},
|
|
axisLabel: {
|
|
show: false,
|
|
distance: -40,
|
|
color: 'inherit',
|
|
fontSize: 14
|
|
},
|
|
anchor: {
|
|
show: false
|
|
},
|
|
title: {
|
|
show: true,
|
|
offsetCenter: [0, '50%'],
|
|
fontSize: 14,
|
|
color: '#000'
|
|
},
|
|
detail: {
|
|
valueAnimation: true,
|
|
width: '60%',
|
|
lineHeight: 40,
|
|
borderRadius: 8,
|
|
offsetCenter: [0, '0'],
|
|
fontSize: 26,
|
|
fontWeight: 'bolder',
|
|
formatter: '{value} %',
|
|
color: 'auto'
|
|
},
|
|
data: [
|
|
{
|
|
value: dataValue,
|
|
name: ((this.memoryTotal - this.memoryFree) / 1024).toFixed(2) + 'G' + ' / ' + (this.memoryTotal / 1024).toFixed(0) + 'G'
|
|
}
|
|
]
|
|
},
|
|
// 最外侧
|
|
{
|
|
type: 'gauge',
|
|
radius: 66, // 半径
|
|
center: ['40%', '38%'], // 位置
|
|
min: 0,
|
|
max: 100,
|
|
startAngle: 200,
|
|
endAngle: -20,
|
|
axisLine: {
|
|
show: false,
|
|
lineStyle: {
|
|
width: 1,
|
|
color: '#999'
|
|
}
|
|
},
|
|
axisTick: {
|
|
show: true,
|
|
splitNumber: 8,
|
|
length: 2,
|
|
lineStyle: {
|
|
width: 1,
|
|
color: '#999'
|
|
}
|
|
},
|
|
splitLine: {
|
|
show: false
|
|
},
|
|
axisLabel: {
|
|
show: false
|
|
},
|
|
pointer: {
|
|
show: false
|
|
},
|
|
detail: {
|
|
show: false
|
|
}
|
|
}
|
|
]
|
|
}
|
|
|
|
if (option) {
|
|
myChart.setOption(option)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style scoped>
|
|
</style>
|