getEchart.js 9.55 KB
/*  目前按照数据来源及图表组合方式分三种类型
    1:完全由服务端查询结果组装图表,服务器端查询结果+图形组装
    2:多数据结果,返回至客户端进行组装图表,服务器端分散查询结果+客户端组装
    3:客户端现成数据,加载以后进行组装图表,客户端数据加载进行组装
*/
//参数:数据组装类型,X轴内容、统计项、图表名称、图表类型、where条件

var xAxisName = "";
var legendName = "";
var chartTitle = "";
var chartType = "";
var whereStr = "";
var grid ;
var option;
var myChart;  

var chartlegendValue = "";
var chartxAxisValue = "";
var chartseriesValue = "";
var chartValue = "";
// 基于准备好的dom,初始化echarts图表
(function($) {
	require.config({
	    paths: {
	        echarts: './echart'
	    }
	});
})
// X轴内容(字段名:字段类型:日期格式:orderby)、legend内容(格式同X轴)、图表标题、图表类型、where查询条件、url、grid,div
function getEchart_server(xAxisName,legendName,chartTitle,chartType,whereStr,url,grid,divName,line,dataTime){
//	grid = grid;
	 $.ajax({
		 	type:'post',
			url : url,
			data: [
				{ name: 'xAxisName', value:  xAxisName },// x轴内容字段名:字段类型:日期格式:orderby
															// //"accident_date:date:yyyy"
				{ name: 'legendName', value: legendName },// 统计字段名:字段类型:日期格式:orderby
		        { name: 'chartTitle', value:  chartTitle },
		        { name: 'chartType', value:  chartType },
		        { name: 'whereStr', value:  whereStr },
		        { name: 'line', value: line},
		        { name: 'dataTime', value:  dataTime}
		     ],
			success : function(data) {
//				// 统计表
//				grid.set('data', {
//				dataList : data.dataList
//			});
				// 统计图
				option = eval('(' + data.option + ')'); 
				require(
			            [
			                'echarts',
			                'echarts/chart/line',   // 按需加载所需图表,如需动态类型切换功能,别忘了同时加载相应图表
			                'echarts/chart/bar',
			             	'echarts/chart/pie',
			             	'echarts/chart/funnel'
			            ], DrawEChart // 异步加载的回调函数绘制图表
			        );   				
				function DrawEChart(ec) {
		            myChart = ec.init(document.getElementById(divName));
		            myChart.setOption(option);
		        }   				
			},
			error : function(message) {
				console.log(message);
			}
		});
	
}
//end

// 客户端处理,数据是json格式
function getEchart_client(data,chartTitle,chartType,divName){   
	// 统计图
	require(
            [
                'echarts',
                'echarts/chart/line',   // 按需加载所需图表,如需动态类型切换功能,别忘了同时加载相应图表
                'echarts/chart/bar',
             	'echarts/chart/pie',
             	'echarts/chart/funnel'
            ], DrawEChart // 异步加载的回调函数绘制图表
        );   				
	function DrawEChart(ec) {
        myChart = ec.init(document.getElementById(divName));
        option = graphConfig(data,chartType,chartTitle);
        myChart.setOption(option);
    }   
}


    //////////////////数据格式化////////////////////////
    function FormateData(data,chartType,chartTitle) {
        var xAxis = [];
        var group = [];
        var series = [];        
        if(data[0].group=='undefined'||data[0].group=='' ||data[0].group==null){
        	/////////////////单个分组的数据源,如饼图、柱形图等/////////////////////////////
        	 var dataTemp = [];
        	 var seriesTemp = [];
        	for (var i = 0; i < data.length; i++) {        		
        		group.push(data[i].name || "");                
        		seriesTemp.push({ name: data[i].name, value: data[i].value || 0 });
        		dataTemp.push(data[i].value || 0 );
        	}
	        switch (chartType) {
		        case 'pie':
		            series = seriesTemp;
		            break;
		        default:
		            series.push({  type:chartType, data: dataTemp });
		     }           	
            return { category: "", xAxis: group, series: series };
        }else{
        	/////////////////多个分组的数据源/////////////////////////////
        	for (var i = 0; i < data.length; i++) {
                for (var j = 0; j < xAxis.length && xAxis[j] != data[i].name; j++);
                if (j == xAxis.length)
                    xAxis.push(data[i].name);
                for (var k = 0; k < group.length && group[k] != data[i].group; k++);
                if (k == group.length)
                    group.push(data[i].group);
            }

            for (var i = 0; i < group.length; i++) {
                var temp = [];
                for (var j = 0; j < data.length; j++) {
                    if (group[i] == data[j].group) {
                    	temp.push(data[j].value); 
                    }
                }
                switch (chartType) {
                    case 'bar':
                        var series_temp = { name: group[i], data: temp, type: chartType };
                        break;
                    case 'line':
                        var series_temp = { name: group[i], data: temp, type: chartType };                   
                        break;
                    default:
                        var series_temp = { name: group[i], data: temp, type: chartType };
                }
                series.push(series_temp);
            }
            return { category: group, xAxis: xAxis, series: series };
        }
        
    }
    
    
// //////////////////////图形配置/////////////////////////////////
    function  graphConfig(data,chartType,chartTitle){
    	chartValue = FormateData(data,chartType,chartTitle);
    	var optionTemp;
    	if(chartType=='pie'){
    		optionTemp = {
    			    title : {
    			        text: chartTitle,
    			        x:'center'
    			    },
    			    tooltip : {
    			        trigger: 'item',
    			        formatter: "{a} <br/>{b} : {c} ({d}%)"
    			    },
    			    legend: {
    			        orient : 'vertical',
    			        x : 'left',
    			        data:chartValue.xAxis
    			    },
    			    toolbox: {
    			        show : true,
    			        feature : {
    			            mark : {show: true},
    			            dataView : {show: true, readOnly: false},
    			            magicType : {
    			                show: true, 
    			                type: ['pie', 'funnel']
    			            },
    			            restore : {show: true},
    			            saveAsImage : {show: true}
    			        }
    			    },
    			    calculable : true,
    			    series : [
    			        {
    			        	name: chartTitle || "",
                            type: 'pie',
                            radius: '65%',
                            center: ['50%', '50%'],
                            data: chartValue.series
    			        }
    			    ]
    			};          
    	}
    	if(chartType=='bar'){
    		optionTemp = {
    			    title : {
    			        text: chartTitle
    			    },
    			    tooltip : {
    			        trigger: 'axis'
    			    },    			   
    			    toolbox: {
    			        show : true,
    			        feature : {
    			            mark : {show: true},
    			            dataView : {show: true, readOnly: false},
    			            magicType : {show: true, type: ['line', 'bar','stack']},
    			            restore : {show: true},
    			            saveAsImage : {show: true}
    			        }
    			    },
    			    calculable : true,
    			    xAxis: [{
                        type: 'category',
                        data: chartValue.xAxis,
                        axisLabel: {
                            show: true,
                            interval: 'auto',
                            rotate: 0,
                            margion: 8
                        }
                    }],

                    yAxis: [{
                        type: 'value',
                        splitArea: { show: true }
                    }],
                    series: chartValue.series
    			};        		
    	}
    	
    	if(chartType=='line'){
    		optionTemp = {
    				title : {
    			        text: chartTitle
    			    },
    			    tooltip : {
    			        trigger: 'axis'
    			    },
    			    toolbox: {
    			        show : true,
    			        feature : {
    			            mark : {show: true},
    			            dataZoom : {show: true},
    			            dataView : {show: true, readOnly: false},
    			            magicType : {show: true, type: ['line', 'bar']},
    			            restore : {show: true},
    			            saveAsImage : {show: true}
    			        }
    			    },
                    xAxis: [{
                        type: 'category', //X轴均为category,Y轴均为value
                        data: chartValue.xAxis,
                        boundaryGap: false//数值轴两端的空白策略
                    }],
                    yAxis: [{
                        type: 'value',
                        splitArea: { show: true }
                    }],
                    series: chartValue.series
                };     
    	}
    	//多分组的需要加入legend数据
    	if(!(data[0].group=='undefined'||data[0].group=='' ||data[0].group==null)){
			optionTemp["legend"] = {data:chartValue.category,y:'bottom'};
		}
    	return optionTemp ;
    }