echars饼图动态赋值并给饼图添加联动事件

在给echars饼图赋值数据data的同时,我们需要知道它所需要的诗句格式是什么样的,饼图与玫瑰图的数据格式都为key-value,即Map<String,Object>这样的数据格式,下面我们看看具体代码,之后我做具体说明

 

var departmentRes = echarts.init(document.getElementById('department_res'));
//这一行是初始化echars图表对象,这就不多说了,看重点
option = {
     toolbox: {
        feature: {
            dataView: {show: true, readOnly: false},
            magicType: {show: true},
            restore: {show: true},
	    myTool : {
                show : true,
                title : '自定义扩展方法',
                icon : 'image://http://echarts.baidu.com/images/favicon.png',
                onclick : function (){
                    pieToLine();
                }
            },
            saveAsImage: {show: true}
        }
    },
    tooltip : {
        trigger: 'item',
        formatter: "{a} <br/>{b} : {c} ({d}%)"
    },
    visualMap: {
        show: false,
        min: 80,
        max: 600,
         inRange: {
             colorLightness: [0, 1]
         }
    },
    series : [
        {
            name:'访问来源',
            type:'pie',
            radius : '70%',
            center: ['50%', '50%'],
            data:[     // series中的data数据清空删除掉,因为我们要动态赋值 
            ].sort(function (a, b) { return a.value - b.value}),
            roseType: 'angle',
            label: {
                normal: {
                    textStyle: {
                       
                    }
                }
            },
            labelLine: {
                normal: {
                    smooth: 0.2,
                    length: 10,
                    length2: 20
                }
            },
            itemStyle: {
                normal: {
		    color: '#c23531',//每块元素的颜色    
                    shadowBlur: 20,//阴影模糊程度    
                    shadowColor: 'rgba(0, 0, 0, 0.5)'//阴影的颜色
                }
            }
        }
    ]
};
// 使用刚指定的配置项和数据显示图表。
departmentRes.setOption(option);

//查询,我这是点击按钮或者onload的时候调用方法显示图表
function loadDrugs() {
	var date = $("#time2").val();
    	$.post('$!{urlTool.getResourcePoolDataURL('DEPARTMENT_RES_PIE')}', {
		date: date    // 后台controller需要查询条件,所以需要
	}, function(data) {
		var array = [];	  //这就是我们所需要的data数据数组了,
		var colors = [];
		if (departmentRes)
		{
			// 清空当前实例,会移除实例中所有的组件和图表。清空后调用 getOption 方法返回一个{}空对象。
			departmentRes.clear();
		}
		var data = eval('(' + data + ')');
		
		for(var i=0;i<data.length;i++)
		{
			var departmentPublish ={};       // 先来创建一个js对象
            		departmentPublish.name = data[i].deptName;   // 我们给这个对象名字,name 为饼图的name 
           		departmentPublish.value = data[i].publishCount;   // 我们给这个对象值,value为饼图的value
			departmentPublish.id=data[i].deptId;   // 此id值会在图表显示,但是如果你要做事件的话可以用到
			array[i] = departmentPublish;
			//colors[i] = "rgb(" + (12*i+5) + "," + (15*i+10) + "," + (18*i+15) + ")";
		}
  		option.series[0].data = array;		// 赋值结束
		//option.color = colors;
		
  		departmentRes.setOption(option);
	}
	)
	$("#time2").val(date);
} 

下面来说说联动事件是怎么做的

// 图表点击事件
departmentRes.on('click',function(param){
		//param可以获取一些图中信息, param.dataIndex是第几个的意思
		var index = param.dataIndex;
		var pieId = option.series[0].data[index].id;	// 这时就用到了上面所说的Id属性了
		var flag = true;
		$.ajax({
			async: false,
			type: "post",
			url: "$!{urlTool.getResourcePoolDataURL('OWN_THREE_DEPARTMENT')}",
			dataType: "json",
			success: function(data){
				if(data == "pass")
				{
					var date = $("#time2").val();
					var ifr = document.getElementById('mainframe4');   // 此为父页面中的iframe框页面重定向刷新
					ifr.src = "$!{urlTool.getResourcePoolDataURL('DEPART_RES_RANKE_IFRAME')}" +"?date=" + date + "&departmentId=" + pieId; 
				}else{
    				// 返回信息
    				var result = typeof data == "object" ? data : eval('(' + data + ')');
    				result.forEach(function(e){
    					if(e.id == pieId){
    						flag = false;
    						var date = $("#time2").val();
    						var ifr = document.getElementById('mainframe4');
    						ifr.src = "$!{urlTool.getResourcePoolDataURL('DEPART_RES_RANKE_IFRAME')}" +"?date=" + date + "&departmentId=" + pieId; 
    					}
    				});
    				if(flag){
    					$.popDialog.warning("该部门不是您所管辖的部门!");
    				}
				}
			},
			error:function(){
				$.popDialog.error("程序发生错误,请联系技术人员!");
			}
		});
	}
);


下面来看看后台返回到前台的数据格式List<map<string,object>>转json

"[{\"deptName\":\"测试部\",\"publishCount\":128,\"deptId\":\"44\"},{\"deptName\":\"板材事业部\",\"publishCount\":339,\"deptId\":\"461\"},{\"deptName\":\"武汉交易中心\",\"publishCount\":8,\"deptId\":\"475\"},{\"deptName\":\"POP产品研发部\",\"publishCount\":752,\"deptId\":\"721\"}]"

学会了吗,学会的留个脚印评论以下。


点关注,不迷路

文章每周持续更新,可以微信搜索「 十分钟学编程 」第一时间阅读和催更,如果这个文章写得还不错,觉得有点东西的话 ~求点赞👍 求关注❤️ 求分享❤️ 
各位的支持和认可,就是我创作的最大动力,我们下篇文章见!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蒋老湿

你的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值