218 lines
8.5 KiB
JavaScript
218 lines
8.5 KiB
JavaScript
|
/**
|
|||
|
* 顶部header
|
|||
|
*/
|
|||
|
Vue.component("cz-warning-survey", {
|
|||
|
template: `
|
|||
|
<div :style="{height: height+'px'}" id="warningSurvey">
|
|||
|
|
|||
|
</div>
|
|||
|
`,
|
|||
|
props: {
|
|||
|
title:{
|
|||
|
type: String,
|
|||
|
},
|
|||
|
height:{
|
|||
|
type: Number,
|
|||
|
},
|
|||
|
distribute:{
|
|||
|
type: Array,
|
|||
|
},
|
|||
|
},
|
|||
|
data() {
|
|||
|
return {
|
|||
|
active:0
|
|||
|
}
|
|||
|
},
|
|||
|
mounted(){
|
|||
|
this.init()
|
|||
|
},
|
|||
|
methods: {
|
|||
|
init(){
|
|||
|
this.warningChart(this.distribute,'warningSurvey','次')
|
|||
|
},
|
|||
|
//预警概况 Echart
|
|||
|
warningChart(datas,id,unit){
|
|||
|
let newPromise = new Promise((resolve) => {
|
|||
|
resolve()
|
|||
|
})
|
|||
|
//然后异步执行echarts的初始化函数
|
|||
|
newPromise.then(() => {
|
|||
|
var myChart = echarts.init(document.getElementById(id));
|
|||
|
var isSet = true // 为了做判断:当鼠标移动上去的时候,自动高亮就被取消
|
|||
|
var charPie3currentIndex = 0
|
|||
|
var startCharts;
|
|||
|
let legendData = []
|
|||
|
for (var j = 0; j < datas.length; j++) {
|
|||
|
var data = {
|
|||
|
name: datas[j].name,
|
|||
|
//icon: 'circle',
|
|||
|
textStyle: {
|
|||
|
fontSize: 14,
|
|||
|
color: '#c1d1f3',
|
|||
|
}
|
|||
|
}
|
|||
|
legendData.push(data)
|
|||
|
}
|
|||
|
let objData = array2obj(datas, 'name')
|
|||
|
var colorList = ['#00fff1', '#04c8fa', '#aa01fe', '#4e84fe', '#ff7b79','#edae5e', '#fe4101','#14d18f']
|
|||
|
var chChart1 = echarts.init(document.getElementById(id));
|
|||
|
option1 = {
|
|||
|
tooltip: {
|
|||
|
show:true,
|
|||
|
trigger: 'item',
|
|||
|
formatter: function(params,tichet,callback){
|
|||
|
var name = params.name;
|
|||
|
var value = params.value;
|
|||
|
var percent=params.percent
|
|||
|
res = '<div style="text-align: center;font-size: 16px;color: #c1d1f3;font-weight: bold;" id="toolTipBox1">' +
|
|||
|
'<p style="padding-bottom:10px;">' +
|
|||
|
'<span style="color: #01fff0;font-size: 20px;padding-right: 5px">'+value+'</span> '+
|
|||
|
'<span style="color: #01fff0;font-size: 20px">'+percent+'%</span>' +
|
|||
|
'</p>'+
|
|||
|
'<p>'+name+'</p>'+
|
|||
|
'</div>'
|
|||
|
//res =''+params.name+'\n\n'+params.value+'('+params.percent+'%)'
|
|||
|
return res;
|
|||
|
},
|
|||
|
position: function(point,params ,dom,rect, size){
|
|||
|
var marginW = Math.ceil(size.contentSize[0]/2);
|
|||
|
var marginH = Math.ceil(size.contentSize[1]/2);
|
|||
|
dom.style.marginLeft = "-" + marginW + "px";
|
|||
|
dom.style.marginTop = "-" + marginH + "px";
|
|||
|
return ['50%', '30%']
|
|||
|
},
|
|||
|
alwaysShowcontent:true,
|
|||
|
backgroundColor:'none',
|
|||
|
textStyle:{
|
|||
|
color:'#fff'
|
|||
|
}
|
|||
|
//formatter: '{b}\n\n{c} ({d}%)'
|
|||
|
},
|
|||
|
legend: {
|
|||
|
orient: 'vertical',
|
|||
|
itemWidth: 15,
|
|||
|
itemHeight: 10,
|
|||
|
itemGap: 10,
|
|||
|
|
|||
|
top: '55%',
|
|||
|
left: 'center',
|
|||
|
data: legendData,
|
|||
|
formatter: function (name) {
|
|||
|
return `${name} ${objData[name].value} ${unit} ${objData[name].percent}% `
|
|||
|
},
|
|||
|
},
|
|||
|
series: [
|
|||
|
{
|
|||
|
type: 'pie',
|
|||
|
radius: ['28%', '45%'],
|
|||
|
center: ['50%', '30%'],
|
|||
|
avoidLabelOverlap: false,
|
|||
|
//selectedMode: 'single',
|
|||
|
data:datas,
|
|||
|
itemStyle: {
|
|||
|
|
|||
|
normal: {
|
|||
|
borderWidth: 7,
|
|||
|
borderColor: "#040e27",
|
|||
|
color: function(params) {
|
|||
|
return colorList[params.dataIndex]
|
|||
|
}
|
|||
|
}
|
|||
|
},
|
|||
|
label: {
|
|||
|
show: false,
|
|||
|
position: 'center',
|
|||
|
},
|
|||
|
emphasis: {
|
|||
|
itemStyle: {
|
|||
|
shadowBlur: 10,
|
|||
|
shadowOffsetX: 0,
|
|||
|
shadowColor: 'rgba(0, 0, 0, 0.5)'
|
|||
|
},
|
|||
|
label : {
|
|||
|
show: false,
|
|||
|
fontSize: '20',
|
|||
|
color: "#fff",
|
|||
|
fontWeight: 'bold',
|
|||
|
formatter: "{b}\n\n{c} ({d}%)"
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
]
|
|||
|
};
|
|||
|
|
|||
|
chChart1.setOption(option1);
|
|||
|
window.onresize = chChart1.resize;
|
|||
|
|
|||
|
function array2obj (array, key) {
|
|||
|
var resObj = {}
|
|||
|
for (var i = 0; i < array.length; i++) {
|
|||
|
resObj[array[i][key]] = array[i]
|
|||
|
}
|
|||
|
return resObj
|
|||
|
}
|
|||
|
chChart1.on('mouseover', function (param) {
|
|||
|
isSet = false
|
|||
|
clearInterval(startCharts)
|
|||
|
// 取消之前高亮的图形
|
|||
|
chChart1.dispatchAction({
|
|||
|
type: 'downplay',
|
|||
|
seriesIndex: 0,
|
|||
|
dataIndex: charPie3currentIndex
|
|||
|
})
|
|||
|
// 高亮当前图形
|
|||
|
chChart1.dispatchAction({
|
|||
|
type: 'highlight',
|
|||
|
seriesIndex: 0,
|
|||
|
dataIndex: param.dataIndex
|
|||
|
})
|
|||
|
// 显示 tooltip
|
|||
|
chChart1.dispatchAction({
|
|||
|
type: 'showTip',
|
|||
|
seriesIndex: 0,
|
|||
|
dataIndex: param.dataIndex
|
|||
|
})
|
|||
|
$("#toolTipBox1").fadeOut(3000)
|
|||
|
})
|
|||
|
var chartHover = function () {
|
|||
|
var dataLen = option1.series[0].data.length
|
|||
|
// 取消之前高亮的图形
|
|||
|
chChart1.dispatchAction({
|
|||
|
type: 'downplay',
|
|||
|
seriesIndex: 0,
|
|||
|
dataIndex: charPie3currentIndex
|
|||
|
})
|
|||
|
charPie3currentIndex = (charPie3currentIndex + 1) % dataLen
|
|||
|
// 高亮当前图形
|
|||
|
chChart1.dispatchAction({
|
|||
|
type: 'highlight',
|
|||
|
seriesIndex: 0,
|
|||
|
dataIndex: charPie3currentIndex
|
|||
|
})
|
|||
|
// 显示 tooltip
|
|||
|
chChart1.dispatchAction({
|
|||
|
type: 'showTip',
|
|||
|
seriesIndex: 0,
|
|||
|
dataIndex: charPie3currentIndex,
|
|||
|
})
|
|||
|
$("#toolTipBox1").fadeOut(3000)
|
|||
|
}
|
|||
|
startCharts = setInterval(chartHover, 3000)
|
|||
|
// 4、鼠标移出之后,恢复自动高亮
|
|||
|
chChart1.on('mouseout', function (param) {
|
|||
|
if (!isSet) {
|
|||
|
startCharts = setInterval(chartHover, 3000)
|
|||
|
isSet = true
|
|||
|
}
|
|||
|
})
|
|||
|
|
|||
|
})
|
|||
|
},
|
|||
|
},
|
|||
|
watch:{
|
|||
|
distribute: function (n,o) {
|
|||
|
this.warningChart(this.distribute,'warningSurvey','次')
|
|||
|
}
|
|||
|
},
|
|||
|
})
|