效果图:

代码:

function(chartOption){

chartOption = $nps$.deepCopyTo({}, chartOption);

var chartDataList_region = this.__portal.componentItemMap.root.chartDataList_region || [];
var chartDataList_manufacturer = this.__portal.componentItemMap.root.chartDataList_manufacturer || [];
var chartDataList_cpName = this.__portal.componentItemMap.root.chartDataList_cpName || [];

chartOption.series = [];

// 标题
chartOption.title.text = "{icon|} 各维度劣化TOP3";
chartOption.title.textStyle.rich = {
icon: {
backgroundColor: '#3c8cd0',
width: 2,
height: 15
}
};

var seriesData_region = this.getSeriesData(chartDataList_region, 'region');
var seriesData_manufacturer = this.getSeriesData(chartDataList_manufacturer, 'manufacturer');
var seriesData_cpName = this.getSeriesData(chartDataList_cpName, 'cpName');

// // 转换中文牌照方 厂商
var seriesData_manufacturer_zh = [],seriesData_cpName_zh = [];
seriesData_manufacturer.forEach(function(item) {
item.name = $nps$.appData.manufacturerMap[item.name] || item.name || '未知';
seriesData_manufacturer_zh.push(item);
})
seriesData_cpName.forEach(function(item) {
item.name = $nps$.appData.cpNameMap[item.name] || item.name || '未知';
seriesData_cpName_zh.push(item);
})

chartOption.legend = {show: false};
chartOption.tooltip = {
show: true,
formatter: function(option){
return option.seriesName + '<br/>' + option.data.name + ': ' + option.value + '('+option.percent+'%)';
}
};
chartOption.series.push({
name: '区域劣化告警数',
type: 'pie',
animation: false,
radius : '65%',
center: ['15%', "46%"],
data: seriesData_region,
itemStyle: {
emphasis: {
shadowBlur: 10,
shadowOffsetX: 0,
shadowColor: 'rgba(0, 0, 0, 0.5)'
}
}
});
chartOption.series.push({
name: '厂家劣化告警数',
type: 'pie',
animation: false,
radius : '65%',
center: ['45%', "46%"],
label: {
normal: {
show: true
}
},
data: seriesData_manufacturer_zh,
itemStyle: {
emphasis: {
shadowBlur: 10,
shadowOffsetX: 0,
shadowColor: 'rgba(0, 0, 0, 0.5)'
}
}
});
chartOption.series.push({
name: '牌照方劣化告警数',
type: 'pie',
animation: false,
radius : '65%',
center: ['75%', "46%"],
label: {
normal: {
show: true
}
},
data: seriesData_cpName_zh,
itemStyle: {
emphasis: {
shadowBlur: 10,
shadowOffsetX: 0,
shadowColor: 'rgba(0, 0, 0, 0.5)'
}
}
});


console.log('告警用户劣化TOP3', chartOption);
return chartOption;
}

方法:

getSeriesData:

function(chartDataList, key){

var colors = ['#9bd049', '#1d9af9', '#663db7', '#f9c928', '#d05221', '#21d0b4'];

var dataMap = {};
chartDataList.map(function(item){
dataMap[item._time] = dataMap[item._time] || {list: [], map: {}};
dataMap[item._time].list.push(item);
dataMap[item._time].map[item[key]] = item;
});
var timeKeys = Object.keys(dataMap);
timeKeys.sort(); // 根据时间排序

// 最近一个时间点数据
var dataItem1 = dataMap[timeKeys[timeKeys.length-1]] || {list: [], map: {}};
// 前一个时间点数据
var dataItem2 = dataMap[timeKeys[timeKeys.length-2]] || dataItem1;
var increaseData = dataItem1.list.map(function(item){
var item2 = dataItem2.map[item[key]];
// 忽略 key 为空的值
if (item[key] && item2) {
return {key: item[key], increase: (item.alarmUsers-item2.alarmUsers) || 0};
} else {
return {key: item[key], increase: -1};
}
});
increaseData.sort(function(item1, item2){return Number(item2.increase)-Number(item1.increase);})
var seriesData = [];
let limitCount = $nps$._appData.data.params && $nps$._appData.data.params.overview_history ? $nps$._appData.data.params.overview_history.limitAlertCount : 3;
for (var i = 0; i < increaseData.length && seriesData.length< limitCount; i ++) {
var dataItem = increaseData[i];
if (dataItem.key) {
seriesData.push({
value: dataItem.increase,
name: dataItem.key,
itemStyle: {normal: {color: colors[i]}}
});
}
}

return seriesData;
}

最新文章

  1. linux磁盘分区模式
  2. iOS8后core location框架启动定位服务的步骤
  3. ObjC 利用反射和KVC实现嵌套对象序列化成JSON数据
  4. FZU 2184 逆序数还原
  5. 树莓派3 Windows 10 IoT Core
  6. sql工作问题总结
  7. Row Cache Objects
  8. Xcode制作插件
  9. NewLife.XCode 上手指南2018版(一)代码生成
  10. 解决window.showModalDialog在Firefox无法支持
  11. 分布式队列神器 Celery
  12. 目前的.NET(C#)世界里,主流的ORM框架
  13. Cetos 中添加bbr服务
  14. [转]10 Awesome Indicator Applets for Ubuntu’s Unity Desktop
  15. python ---解决高并发超卖问题
  16. 关于Laravel 迁移数据库的问题
  17. 《算法》第三章部分程序 part 5
  18. mui学习
  19. appium通过同级别(兄弟关系)元素找到元素
  20. 输入一批考生的的准考证号码,如果是 15 位,表示输入正确,否则重新输入。然后判断这个人的考试类别(号码中如果是以奇数结尾则考试类别为“A 类”,否则为“B 类”),最后输出此准考证的前 5 位和后 4 位,其他位用“*”来代替。说明:使用 StringBuffer 类的相关方法完成实验内容。

热门文章

  1. 记录将Base64字符串转化为图片遇到的问题
  2. js中的加法运算
  3. flex_bison
  4. Java-获取真实用户ip
  5. JAVA查漏补缺 1
  6. 原生js创建节点,添加节点,删除节点
  7. spring mvc问题:源服务器未能找到目标资源的表示或者是不愿公开一个已经存在的资源表示
  8. JWT 工具类的编写
  9. AI口算批改、练习小程序
  10. ios打开第三方地图app