后端-MyEcharts.js

MyEcharts.js

 

var   ECharts = {

    ChartConfig: function (container, option) {

        var chart_path = "js/echarts/echarts"; //配置图表请求路径
        //引入常用的图表类型的配置
        require.config({
            paths: {
                echarts: chart_path,
                'echarts/chart/bar': chart_path,
                'echarts/chart/pie': chart_path,
                'echarts/chart/line': chart_path,
                'echarts/chart/k': chart_path,
                'echarts/chart/scatter': chart_path,
                'echarts/chart/radar': chart_path,
                'echarts/chart/chord': chart_path,
                'echarts/chart/force': chart_path
            }
        });

        this.option = {chart: {}, option: option, container: container};
        return this.option;

    },

    ChartDataFormate: {
        FormateNOGroupData: function (data) {
            //data的格式如上的Result1,这种格式的数据,多用于饼图、单一的柱形图的数据源
            var categories = [];
            var datas = [];
            for (var i = 0; i < data.length; i++) {
                categories.push(data[i].name || "");
                datas.push({name: data[i].name, value: data[i].value || 0});
            }
            return {category: categories, data: datas};
        },


        FormateGroupData: function (data, type, seriesTemp, is_stack) {
            //data的格式如上的Result2,type为要渲染的图表类型:可以为line,bar,is_stack表示为是否是堆积图,这种格式的数据多用于展示多条折线图、分组的柱图
            var chart_type = 'line';
            if (type)
                chart_type = type || 'line';

            var xAxis = [];
            var group = [];
            var series = [];

            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) {
                        if (type == "map") {
                            temp.push({name: data[j].name, value: data[i].value});
                        } else {
                            temp.push(data[j].value);
                        }
                    }

                }


                switch (type) {
                    case 'bar':
                        var series_temp = {name: group[i], data: temp, type: chart_type};
                        if (is_stack)
                            series_temp = $.extend({}, {stack: 'stack'}, series_temp);
                        break;

                    case 'map':
                        var series_temp = {
                            name: group[i], type: chart_type, mapType: 'china', selectedMode: 'single',
                            itemStyle: {
                                normal: {label: {show: true}},
                                emphasis: {label: {show: true}}
                            },
                            data: temp
                        };
                        break;

                    case 'line':
                        var series_temp = {name: group[i],symbol:'circle', data: temp, type: chart_type};
                        if (seriesTemp && typeof (seriesTemp) == 'object') {
                            for ( var key in seriesTemp) {
                                if (key.match(/^_/)) {
                                    continue;
                                }
                                series_temp[key] = seriesTemp[key];
                            }
                        };

                       /* var series_temp = {name: group[i],symbol:'circle', data: temp, type: chart_type,itemStyle: {normal: {areaStyle: {color:'red',type: 'default'}}},
                            center: ['1%', '0%'],
                        smooth:true};*/
                        if (is_stack)
                            series_temp = $.extend({}, {stack: 'stack',symbol:'circle',itemStyle: {normal: {areaStyle: {type: 'default'}}},
                                center: ['1%', '0%'],
                                smooth:true}, series_temp);
                        break;

                    default:
                        var series_temp = {name: group[i], data: temp,symbol:'circle', type: chart_type,itemStyle: {normal: {areaStyle: {type: 'default'}}},
                            center: ['1%', '0%'],
                            smooth:true};
                }
                series.push(series_temp);
            }
            return {category: group, xAxis: xAxis, series: series};
        }
    }
    ,


    ChartOptionTemplates: {
        CommonOption: {
            //通用的图表基本配置
            tooltip: {
                trigger: 'axis'//tooltip触发方式:axis以X轴线触发,item以每一个数据项触发 
            },
            toolbox: {
                show: true, //是否显示工具栏 
                feature: {
                    mark: true,
                    dataView: {readOnly: false}, //数据预览
                    restore: true, //复原 
                    saveAsImage: true //是否保存图片 
                }
            }
        },

        CommonLineOption: {//通用的折线图表的基本配置 
            tooltip: {
                trigger: 'axis'
            },
            calculable: true,
            toolbox: {
                show: true,
                feature: {
                    dataView: {readOnly: false}, //数据预览
                    restore: true, //复原
                    saveAsImage: true, //是否保存图片
                    magicType: ['line', 'bar']//支持柱形图和折线图的切换 
                }
            }
        },


        Pie: function (data, name) {
            //data:数据格式:{name:xxx,value:xxx}...
            var pie_datas = ECharts.ChartDataFormate.FormateNOGroupData(data);

            var option = {
                tooltip: {
                    trigger: 'item',
                    formatter: '{b} : {c} ({d}/%)',
                    show: true
                },

                legend: {
                    orient: 'vertical',
                    x: 'left',
                    data: pie_datas.category
                },

                calculable: true,

                toolbox: {
                    show: true,
                    feature: {
                        mark: {show: true},
                        dataView: {show: true, readOnly: true},
                        restore: {show: true},
                        saveAsImage: {show: true}
                    }
                },
                series: [
                    {
                        name: name || "",
                        type: 'pie',
                        radius: '65%',
                        center: ['50%', '50%'],
                        data: pie_datas.data
                    }
                ]
            };
            return $.extend({}, ECharts.ChartOptionTemplates.CommonOption, option);
        },


        Lines: function (data,seriesTemp, isShowLegend, name, is_stack) {

            //data:数据格式:{name:xxx,group:xxx,value:xxx}...
            var stackline_datas = ECharts.ChartDataFormate.FormateGroupData(data, 'line', seriesTemp, is_stack);
            var option = {
                legend: {
                    data: isShowLegend ? stackline_datas.category:""
                },
                grid: {
                    x:30,
                    y:5,
                    x2:30,
                    y2:30
                },
                xAxis: [{
                    type: 'category', //X轴均为category,Y轴均为value 
                    data: stackline_datas.xAxis,
                    boundaryGap: false//数值轴两端的空白策略
                }],


                yAxis: [{
                    name: name || '',
                    type: 'value',
                    splitArea: {show: true}
                }],
                series: stackline_datas.series
            };
            return $.extend({}, ECharts.ChartOptionTemplates.CommonLineOption, option);
        },


        Bars: function (data, name, is_stack) {
            //data:数据格式:{name:xxx,group:xxx,value:xxx}...
            var bars_dates = ECharts.ChartDataFormate.FormateGroupData(data, 'bar', is_stack);
            var option = {
                legend: bars_dates.category,
                xAxis: [{
                    type: 'category',
                    data: bars_dates.xAxis,
                    axisLabel: {
                        show: true,
                        interval: 'auto',
                        rotate: 0,
                        margion: 8
                    }
                }],

                yAxis: [{
                    name: name || '',
                    type: 'value',
                    splitArea: {show: true}
                }],
                series: bars_dates.series
            };
            return $.extend({}, ECharts.ChartOptionTemplates.CommonLineOption, option);
        }
    },Charts: {
        RenderChart: function (option) {
            require([
                    'echarts',
                    'echarts/chart/line',
                    'echarts/chart/bar',
                    'echarts/chart/pie',
                    'echarts/chart/k',
                    'echarts/chart/scatter',
                    'echarts/chart/radar',
                    'echarts/chart/chord',
                    'echarts/chart/force'
                ],function (ec) {
                    echarts = ec;
                    if (option.chart && option.chart.dispose)
                        option.chart.dispose();

                    option.chart = echarts.init(option.container);

                    window.onresize = option.chart.resize;

                    option.chart.setOption(option.option, true);

                });
        }
    },RenderMap: function (option) {
    }


};
  

  

posted @ 2021-11-29 22:33  mimimikasa  阅读(69)  评论(0)    收藏  举报