203 lines
4.7 KiB
Vue
203 lines
4.7 KiB
Vue
|
|
<template>
|
|||
|
|
<div class="left-center-warp">
|
|||
|
|
|
|||
|
|
<item :title="'电站区域分布'">
|
|||
|
|
<dv-loading v-if="loading">Loading...</dv-loading>
|
|||
|
|
<div v-else class="chart-box">
|
|||
|
|
<Chart :options="options" :class-name="'chart'" />
|
|||
|
|
</div></item>
|
|||
|
|
|
|||
|
|
</div>
|
|||
|
|
|
|||
|
|
</template>
|
|||
|
|
|
|||
|
|
<script>
|
|||
|
|
import item from './item-warp.vue'
|
|||
|
|
import { GetRegionalDistribution } from '@/api/screen/zzScreen'
|
|||
|
|
|
|||
|
|
export default {
|
|||
|
|
components: { item },
|
|||
|
|
data() {
|
|||
|
|
return {
|
|||
|
|
options: {},
|
|||
|
|
loading: true
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
methods: {
|
|||
|
|
async getData(deptId) {
|
|||
|
|
try {
|
|||
|
|
this.loading = true
|
|||
|
|
const res = await GetRegionalDistribution({
|
|||
|
|
deptId: deptId
|
|||
|
|
})
|
|||
|
|
this.initChart(res.data)
|
|||
|
|
} catch (error) {
|
|||
|
|
console.log(error)
|
|||
|
|
} finally {
|
|||
|
|
this.loading = false
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
initChart(val) {
|
|||
|
|
if (val.length) {
|
|||
|
|
val.sort((a, b) => b.regionValue - a.regionValue)
|
|||
|
|
|
|||
|
|
var ydata = []
|
|||
|
|
var legend = []
|
|||
|
|
val.forEach(i => {
|
|||
|
|
const param = {
|
|||
|
|
name: i.addName,
|
|||
|
|
value: i.regionValue
|
|||
|
|
}
|
|||
|
|
legend.push(param.name)
|
|||
|
|
ydata.push(param)
|
|||
|
|
})
|
|||
|
|
const count = this.arrCount(ydata)
|
|||
|
|
this.options = {
|
|||
|
|
title: [{
|
|||
|
|
text: '电站总数',
|
|||
|
|
subtext: count,
|
|||
|
|
|
|||
|
|
subtextStyle: {
|
|||
|
|
color: '#fff',
|
|||
|
|
fontSize: 37,
|
|||
|
|
fontWeight: 500
|
|||
|
|
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
left: '35%',
|
|||
|
|
top: '40%',
|
|||
|
|
padding: [0, 0],
|
|||
|
|
textStyle: {
|
|||
|
|
color: '#fff',
|
|||
|
|
fontSize: 18
|
|||
|
|
},
|
|||
|
|
textAlign: 'center'
|
|||
|
|
|
|||
|
|
}],
|
|||
|
|
tooltip: {},
|
|||
|
|
legend: {
|
|||
|
|
type: 'scroll',
|
|||
|
|
orient: 'vertical',
|
|||
|
|
right: 10,
|
|||
|
|
top: 20,
|
|||
|
|
bottom: 20,
|
|||
|
|
padding: [0, 10],
|
|||
|
|
data: legend,
|
|||
|
|
icon: 'circle',
|
|||
|
|
align: 'left',
|
|||
|
|
itemWidth: 8,
|
|||
|
|
itemHeight: 8,
|
|||
|
|
itemGap: 15,
|
|||
|
|
textStyle: {
|
|||
|
|
color: '#fff',
|
|||
|
|
rich: {
|
|||
|
|
name: {
|
|||
|
|
fontSize: 12,
|
|||
|
|
color: '#ffffff',
|
|||
|
|
padding: [0, 10, 0, 0]
|
|||
|
|
},
|
|||
|
|
num: {
|
|||
|
|
fontSize: 16,
|
|||
|
|
color: '#ffffff'
|
|||
|
|
},
|
|||
|
|
unit: {
|
|||
|
|
fontSize: 16,
|
|||
|
|
color: '#ffffff'
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
formatter: function(name) {
|
|||
|
|
const val = ydata.filter(item => {
|
|||
|
|
return item.name === name
|
|||
|
|
})
|
|||
|
|
const num = (((val[0].value / count)) * 100).toFixed(2)
|
|||
|
|
return [
|
|||
|
|
`{name|${name.length > 5 ? name.slice(0, 2) : name}}`,
|
|||
|
|
`{num|${num}}{unit|%}`
|
|||
|
|
].join(' ')
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
},
|
|||
|
|
series: [{
|
|||
|
|
name: '电站个数',
|
|||
|
|
type: 'pie',
|
|||
|
|
clockwise: false, // 饼图的扇区是否是顺时针排布
|
|||
|
|
minAngle: 20, // 最小的扇区角度(0 ~ 360)
|
|||
|
|
radius: ['60%', '75%'],
|
|||
|
|
center: ['35%', '50%'],
|
|||
|
|
avoidLabelOverlap: false,
|
|||
|
|
itemStyle: { // 图形样式
|
|||
|
|
normal: {
|
|||
|
|
borderColor: '#070A0C',
|
|||
|
|
borderWidth: 5
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
label: {
|
|||
|
|
normal: {
|
|||
|
|
show: false
|
|||
|
|
},
|
|||
|
|
emphasis: {
|
|||
|
|
show: false,
|
|||
|
|
position: 'outer',
|
|||
|
|
alignTo: 'edge',
|
|||
|
|
margin: 10,
|
|||
|
|
formatter: '{text|{b}}\n{value|{d}%}',
|
|||
|
|
rich: {
|
|||
|
|
text: {
|
|||
|
|
fontSize: 14,
|
|||
|
|
align: 'center',
|
|||
|
|
verticalAlign: 'middle',
|
|||
|
|
padding: 5
|
|||
|
|
},
|
|||
|
|
value: {
|
|||
|
|
fontSize: 24,
|
|||
|
|
align: 'center',
|
|||
|
|
verticalAlign: 'middle'
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
data: ydata
|
|||
|
|
}]
|
|||
|
|
}
|
|||
|
|
} else {
|
|||
|
|
this.options = {
|
|||
|
|
title: {
|
|||
|
|
text: '暂无数据',
|
|||
|
|
x: 'center',
|
|||
|
|
y: 'center',
|
|||
|
|
textStyle: {
|
|||
|
|
fontSize: 14,
|
|||
|
|
color: 'rgb(153, 153, 153)',
|
|||
|
|
fontWeight: 'normal'
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
arrCount(arr) {
|
|||
|
|
let count = 0
|
|||
|
|
arr.forEach(item => {
|
|||
|
|
count = count + item.value
|
|||
|
|
})
|
|||
|
|
return count
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
</script>
|
|||
|
|
|
|||
|
|
<style lang="scss" scoped>
|
|||
|
|
.left-center-warp {
|
|||
|
|
width: 100%;
|
|||
|
|
height: 100%;
|
|||
|
|
|
|||
|
|
.chart-box {
|
|||
|
|
width: 100%;
|
|||
|
|
height: 100%;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
</style>
|