echart封装,前端简单路由,图表设置自动化

https://github.com/cclient/EhartDemoSetByAngular

后端node.js

前端插件

echart,jquery,jqueryui,datapicker,angularjs,tag-it

bootstrap(这个坑死我,选型失误datapicker样式和bootstrap 不兼容,记录在http://www.cnblogs.com/zihunqingxin/p/4435815.html)

源码内容

封装了echart的

大地图(上级下级跳转,echar有个缺陷,找不到修改的地方,用户体验不太好,这个较费时)

时间线饼图

对比图(X,Y轴)

饼图(Pie)

未封装完整,因封装作到一半,转了项目。

碰到jquery兼容性问题

项目引用了 datapicker其调用curCSS方法,官方样例默认引用的jq1.7

项目主体引用jquery1.11没有curCSS 方法

两版本对照查代码可知

Jquery.curCSS = Jquery.css;

打补丁如下

//jquery 兼容性问题,引的1.11没有curCSS方法,datapicker用的curCSS引的jq1.7
(function (Jquery) {
    Jquery.curCSS = Jquery.css;
    Date.prototype.toChineseDate = function () {
        return this.getFullYear() + ‘年‘ + (this.getMonth() + 1) + ‘月‘ + this.getDate() + ‘日‘;
    }
})($)

jq拓展封装库

//jquery 兼容性问题,引的1.11没有curCSS方法,datapicker用的curCSS引的jq1.7

echart主要封装代码

createchartobj.js

/**
 * Created by cdpmac on 14/12/17.
 */
(function ChartNameSpace() {
    function getYYYYMMDD(date, spliter) {
        spliter = spliter != undefined ? spliter : ‘-‘;
        return date.getFullYear() + spliter
            + (‘0‘ + (date.getMonth() + 1)).slice(-2) + spliter
            + (‘0‘ + date.getDate()).slice(-2);
    };
    function BaseChartObj() {
    };
    BaseChartObj.prototype.bindEvent = function () {
        var self = this;
        if (self.tableDOMId) {
            $(‘#‘ + this.tableDOMId + ‘‘).on(‘xhr.dt‘, function (e, settings, json) {
                self._ajaxComplete(json);
            });
        }
        if (self.otherIni) {
            self.otherIni();
        }
    };
    BaseChartObj.prototype.iniTable = function () {
        var self = this;
        if (!self.tableDOMId) return;
        var orderindex; //media  4 date
        function isOrderByGroupColumns(orderindex) {
            return self.groupColumnIndex && self.groupColumnIndex.indexOf(orderindex) != -1
        }
        var language = {
            "lengthMenu": "每页显示 _MENU_ 行",
            "sZeroRecords": "0条结果",
            "sInfo": "第 _PAGE_ 页 [共 _PAGES_ 页]",
            "sInfoEmpty": "无数据",
            "sSearch": "过滤:",
            "oPaginate": {
                "sFirst": "首页",
                "sLast": "最后",
                "sNext": "下一页",
                "sPrevious": "上一页"
            },
            "sInfoFiltered": "(从 _MAX_ 行中过滤)"
        };
        var columnDefs = self.groupColumnIndex ? [
            { "visible": false, "targets": self.groupColumnIndex[0] }
        ] : [];
        var columns=self.showDataValue.map(function(item){
            return   { "data": item,"defaultContent":‘‘ }
        })
        var order = self.groupColumnIndex ? [
//            [ self.groupColumnIndex[0], ‘asc‘ ],[self.provinceIndex,‘asc‘]
            [ self.groupColumnIndex[0], ‘asc‘ ]
        ] : [];
        self.table = $(‘#‘ + self.tableDOMId + ‘‘).DataTable({
            "columnDefs": columnDefs,
            "columns":columns,
            "order": order,
            "language": language,
            "displayLength": 25,
            "drawCallback": function (settings) {
                if (self.groupColumnIndex && self.groupColumnIndex.length > 0 && settings.aLastSort.length > 0) {
                    orderindex = settings.aLastSort[0].col;
                    if (orderindex == undefined) {
                        orderindex = self.groupColumnIndex[0];
                    }
                    if (self.table && orderindex == self.groupColumnIndex[0]) {
                        self.table.column(self.groupColumnIndex[0]).visible(false);
                        self.table.column(self.groupColumnIndex[1]).visible(true);
                    }
                    if (self.table && orderindex == self.groupColumnIndex[1]) {
                        self.table.column(self.groupColumnIndex[1]).visible(false);
                        self.table.column(self.groupColumnIndex[0]).visible(true);
                    }
                    if (!isOrderByGroupColumns(orderindex)) {
                        self.table.column(self.groupColumnIndex[1]).visible(true);
                        self.table.column(self.groupColumnIndex[0]).visible(true);
                    }
                    var api = this.api();
                    var rows = api.rows({page: ‘current‘}).nodes();
                    var last = null;
                    if (isOrderByGroupColumns(orderindex)) {
                        api.column(orderindex, {page: ‘current‘}).data().each(function (group, i) {
                            if (last !== group) {
                                $(rows).eq(i).before(
                                        ‘<tr class="group" style="background-color:bisque "><td colspan="9">‘ + group + ‘</td></tr>‘
                                );
                                last = group;
                            }
                        });
                    }
                }

            }
        });
        // Order by the grouping
        $(‘#‘ + self.tableDOMId + ‘ tbody‘).on(‘click‘, ‘tr.group‘, function () {
            var currentOrder = self.table.order()[0];
            if (currentOrder[0] === orderindex && currentOrder[1] === ‘asc‘) {
                table.order([ orderindex, ‘desc‘ ]).draw();
            }
            else {
                table.order([ orderindex, ‘asc‘ ]).draw();
            }
        });
    };
    BaseChartObj.prototype._ajaxComplete = function (json) {
        var self = this;
        self.jsonData=[];
        if (self.maindivDOMId) {
            if (json && json.data && json.data.length > 0) {
                $(‘#‘ + self.maindivDOMId + ‘‘).css(‘display‘, ‘block‘);
                self.jsonData = json.data || json;
                self.drawCanvas();
            }
        }
        $.Prompt({close:true});
    };
    BaseChartObj.prototype.loadData = function (geturlpar) {
        var self = this;
        self.queryString = geturlpar;
        var linkchar = ‘?‘;
        if (self.queryString.indexOf(‘?‘) >= 0) {
            linkchar = ‘&‘;
        }
        if (self.showDataValue) self.queryString += linkchar + ‘columns=‘ + self.showDataValue;
        linkchar = ‘&‘;
        if (self.datebegin) self.queryString += linkchar + ‘datebegin=‘ + self.datebegin;
        if (self.dateend) self.queryString += linkchar + ‘dateend=‘ + self.dateend;
        if (self.tableDOMId)
            self.table.ajax.url(self.searchUrl + self.queryString).load();
        else {
            $.get(self.searchUrl + self.queryString, function (data, status) {
                self._ajaxComplete(data);
            });
        }
    };
    BaseChartObj.prototype.prepareCanvas = function () {
        var self = this;
        if (self._myChart && self._myChart.dispose) {
            self._myChart.dispose();
        }
        if (!self.domMain) {
            self.domMain = document.getElementById(self.maindivDOMId);
        }
        self._myChart = echarts.init(self.domMain);
        window.onresize = self._myChart.resize;
        self._myChart.showLoading();
    };
    BaseChartObj.prototype.iniDom = function (parentdomid) {
        var jqparentdom = $("#" + parentdomid + "");
        var self = this;
        if (self.maindivDOMId) {
            var maindivhtml = ‘<div class="col-xs-‘ + self.maindivDOMWidth + ‘"><div id="‘ + self.maindivDOMId + ‘" style="display: none; height: ‘ + self.maindivDOMHeight + ‘px; cursor: default; background-color: rgba(0, 0, 0, 0);"></div></div>‘;
            jqparentdom.append(maindivhtml);
        }
        if (self.tableDOMId) {
            var tablehtml = ‘‘;
            tablehtml += ‘<div class="col-xs-‘ + self.tableDOMWidth + ‘"><table id="‘ + self.tableDOMId + ‘" class="display" cellspacing="0" width="100%">‘;
            var theadhtml = ‘‘, tfoothtml = ‘‘;
            theadhtml += ‘ <thead><tr>‘;
//            tfoothtml+=‘ <tfoot><tr>‘;
            for (var i = 0; i < self.showDataName.length; i++) {
                theadhtml += ‘<th>‘ + self.showDataName[i] + ‘</th>‘;
//                tfoothtml+=‘<th>‘+self.showDataName[i]+‘</th>‘;
            }
//            tfoothtml+=‘</tr></tfoot>‘;
            theadhtml += ‘</tr></thead>‘;
            tablehtml += theadhtml;
//            tablehtml+=tfoothtml;
            tablehtml += ‘</table></div>‘;
            jqparentdom.append(tablehtml);
        }
        if (self.otherDomIni) {
            self.otherDomIni(self.maindivDOMId);
        }
    };

    var PieTimeLineAnlysisPrototype = new BaseChartObj();
    PieTimeLineAnlysisPrototype.drawCanvas = function () {
        var self = this;
        self.prepareCanvas();
        var datebegin = new Date(self.datebegin.getTime());
        self.dateRange = [];
        while (datebegin < self.dateend) {
            self.dateRange.push(getYYYYMMDD(datebegin));
            datebegin.addDays(1);
        }
        var option = {
            timeline: {
                label: {
//                formatter : function(s) {
//                    return s.slice(0, 9);
//                }
                }
            },
            options: [
                {
                    title: {
                        text: self.title,
//                        subtext: ‘纯属虚构‘
                    },
                    tooltip: {
                        trigger: ‘item‘,
                        formatter: "{a} <br/>{b} : {c} ({d}%)"
                    },
                    legend: {
//                    data:[‘Chrome‘,‘Firefox‘,‘Safari‘,‘IE9+‘,‘IE8-‘]
                    },
                    toolbox: {
                        show: true,
                        feature: {
                            mark: {show: true},
                            dataView: {show: true, readOnly: false},
                            magicType: {
                                show: true,
                                type: [‘pie‘, ‘funnel‘],
                                option: {
                                    funnel: {
                                        x: ‘25%‘,
                                        width: ‘50%‘,
                                        funnelAlign: ‘left‘,
                                        max: 1700
                                    }
                                }
                            },
                            restore: {show: true},
                            saveAsImage: {show: true}
                        }
                    }
                },
            ]
        };
        option.timeline.data = [];
        function getindex(date) {
            for (var i = 0; i < self.jsonData.length; i++) {
                if (self.jsonData[i][‘date‘] == date) {
                    return i;
                }
            }
            return -1;
        }
        for (var i = 0; i < self.dateRange.length; i++) {
            var date = self.dateRange[i];
            option.timeline.data.push(date);
            var series = [
                {
                    name: ‘浏览器(数据纯属虚构)‘,
                    type: ‘pie‘
                }
            ]
            series[0].data = [];
            var thisdateindex = getindex(date);
            for (var j = self.dataRange[0]; j <= self.dataRange[1]; j++) {
                if (thisdateindex >= 0) {
                    var datedata = self.jsonData[thisdateindex];
                    series[0].data.push({value: datedata[self.showDataValue[j]], name: self.showDataName[j]});
                }
                else
                    series[0].data.push({value: 0, name: self.showDataName[j]});
            }
            option.options[i] = option.options[i] || {};
            option.options[i].series = series;
        }
        option.options[0].legend.data = self.showDataName.slice(self.dataRange[0], self.dataRange[1] + 1);
        self._myChart.hideLoading();
        self._myChart.setOption(option, true);
    };
    function PieTimeLineAnlysis() {
        this.showDataValue = [];
        this.showDataName = [];
        this.dateRange = [];
        this.dataRange = [];
        this.searchUrl = ‘‘;
        this.tableDOMId = ‘example‘;
    };
    PieTimeLineAnlysis.prototype = PieTimeLineAnlysisPrototype;

    var ChinaMapAnlysisPrototype = new BaseChartObj();
    ChinaMapAnlysisPrototype.drawCanvas = function () {
        var self = this;
        self.prepareCanvas();
        var echartlegend = self.showDataName.slice(self.lengendRange[0], self.lengendRange[1] + 1);
        var currentLengend = ‘‘;
        var curIndx = 0;
        var mapType = [
            ‘china‘,
            // 23个省
            ‘广东‘, ‘青海‘, ‘四川‘, ‘海南‘, ‘陕西‘,
            ‘甘肃‘, ‘云南‘, ‘湖南‘, ‘湖北‘, ‘黑龙江‘,
            ‘贵州‘, ‘山东‘, ‘江西‘, ‘河南‘, ‘河北‘,
            ‘山西‘, ‘安徽‘, ‘福建‘, ‘浙江‘, ‘江苏‘,
            ‘吉林‘, ‘辽宁‘, ‘台湾‘,
            // 5个自治区
            ‘新疆‘, ‘广西‘, ‘宁夏‘, ‘内蒙古‘, ‘西藏‘,
            // 4个直辖市
            ‘北京‘, ‘天津‘, ‘上海‘, ‘重庆‘,
            // 2个特别行政区
            ‘香港‘, ‘澳门‘
        ];
        var mapdatacache = {};
        function updateResultDataRange(seriedata) {
            var valuelist = [];
            for (var j = 0; j < seriedata.length; j++) {
                valuelist.push(seriedata[j].value);
            }
            var max = (seriedata.length > 0) ? ( Math.max.apply(Math, valuelist)) : 0;
            var min = (seriedata.length > 0) ? ( Math.min.apply(Math, valuelist)) : 0;
            self.result.dataRange.min = min;
            self.result.dataRange.max = max;
        }
        function Bindmapdata(mapname) {
            if (mapdatacache.hasOwnProperty(mapname)) {
                self.result = mapdatacache[mapname];
                if (currentLengend) {
                    for (var i = 0; i < self.result.series.length; i++) {
                        if (self.result.series[i].name == currentLengend) {
                            updateResultDataRange(self.result.series[i].data);
                            break;
                        }
                    }
                }
                self._myChart.setOption(self.result, true);
            }
            else {
                self.result = {
                    title: {
                        text: ‘全国34个省市自治区统计数据‘,
//                        subtext : ‘(点击切换)‘
                    },
                    tooltip: {
                        trigger: ‘item‘
//            formatter: ‘{b}‘
                    },
                    legend: {
                        selectedMode: ‘single‘,
                        orient: ‘vertical‘,
                        x: ‘right‘
                    },
                    dataRange: {
                        min: 0,
                        max: 100000,
//                        color:[‘orange‘,‘yellow‘],
                        color: [‘orangered‘, ‘yellow‘, ‘lightskyblue‘],
                        text: [‘高‘, ‘低‘],           // 文本,默认为数值文本
                        calculable: true
                    }
                };
                var lastname = (mapname == ‘china‘ ? ‘‘ : ‘市‘);
                self.result.legend.data = echartlegend;
                self.result.legend.selected = {};
                self.result.series = [];
                var seriesdata = {};
                for (var j = 0; j < self.jsonData.length; j++) {
                    var item = self.jsonData[j];
                    for (var i = 0; i < echartlegend.length; i++) {
                        var legendname = echartlegend[i];
                        seriesdata[legendname] = seriesdata[legendname] || [];
                        var nameindex = (mapname == ‘china‘ ? self.provinceIndex : self.cityIndex);
                        if (item[self.showDataValue[ i + self.lengendRange[0]]] && (mapname == ‘china‘ || mapname.indexOf(item[self.showDataValue[self.provinceIndex]]) != -1))
                        {
                            var ishas = false;
                            for (var z = 0; z < seriesdata[legendname].length; z++) {
                                if (seriesdata[legendname][z].name == item[self.showDataValue[nameindex]] + lastname) {
                                    seriesdata[legendname][z].value += item[self.showDataValue[i + self.lengendRange[0]]];
                                    ishas = true;
                                }
                            }
                            if (!ishas) {
                                seriesdata[legendname].push({name: item[self.showDataValue[nameindex]] + lastname, value: item[self.showDataValue[i + self.lengendRange[0]]]});
                            }
                        }
                    }
                }
                for (var i = 0; i < echartlegend.length; i++) {
                    var legendname = echartlegend[i];
                    var serie = {
                        name: legendname, type: ‘map‘,
                        mapType: mapname,
                        selectedMode: ‘single‘,
                        itemStyle: {
                            normal: {label: {show: true}},
                            emphasis: {label: {show: true}}
                        }
                    };
                    serie.data = seriesdata[legendname] || [];
                    if (currentLengend && currentLengend == legendname) {
                        self.result.legend.selected[legendname] = true;
                        updateResultDataRange(serie.data);
                    }
                    else {
                        self.result.legend.selected[legendname] = false;
                    }
                    self.result.series.push(serie);
                }
                if (!currentLengend) {
                    self.result.legend.selected[echartlegend[0]] = true;
                    updateResultDataRange(self.result.series[0].data);
                }
                mapdatacache[mapname] = self.result;
                self._myChart.hideLoading();
                self._myChart.setOption(self.result, true);
            }
        }

//      self._myChart.on(ecConfig.EVENT.MAP_SELECTED, function (param){
        self._myChart.on(‘mapSelected‘, function (param) {
            var len = mapType.length;
            var mt = mapType[curIndx % len];
            if (mt == ‘china‘) {
                // 全国选择时指定到选中的省份
                var selected = param.selected;
                for (var i in selected) {
                    if (selected[i]) {
                        mt = i;
                        while (len--) {
                            if (mapType[len] == mt) {
                                curIndx = len;
                            }
                        }
                        break;
                    }
                }
            }
            else {
                curIndx = 0;
                mt = ‘china‘;
            }
            if(mt!=‘china‘){
                self.table.column(self.provinceIndex).search(mt).draw();

            }
            else{
                self.table.column(self.provinceIndex).search("").draw();
            }
            Bindmapdata(mt);
        });
        self._myChart.on(‘legendSelected‘, function (param) {
            self.result.legend.selected = param.selected;
            for (var legend in param.selected) {
                if (param.selected[legend] === true) {
                    var index = echartlegend.indexOf(legend);
                    var seriedata = self.result.series[index];
                    currentLengend = legend;
                    updateResultDataRange(seriedata.data);
                    break;
                }
            }
            self._myChart.setOption(self.result, true);
        });
        Bindmapdata(‘china‘);
    };
    function ChinaMapAnlysis() {
        this.lengendRange = [2, 7];
        this.showDataValue = [‘pubID‘, ‘date‘, ‘click‘, ‘ipClick‘, ‘ipPv‘, ‘pv‘, ‘uvClick‘, ‘uvPv‘, ‘province‘, ‘city‘];
        this.showDataName = [‘媒体名称‘, ‘日期‘, ‘点击‘, ‘ip点击‘, ‘ip展示‘, ‘展示‘, ‘uv点击‘, ‘uv展示‘, ‘省‘, ‘市‘];
        this.provinceIndex = this.showDataValue.length - 2;
        this.cityIndex = this.showDataValue.length - 1;
        this.groupColumnIndex = [0, 1];
        this.searchUrl = ‘/media/search‘;
//        this.tableDOMId = ‘example‘;
//        this.maindivDOMId = ‘chinamapmain‘;
    };
    ChinaMapAnlysis.prototype = ChinaMapAnlysisPrototype;

    var XYCompareAnlysisprototype = new BaseChartObj();
    XYCompareAnlysisprototype.drawCanvas = function () {
        var self = this;
        self.prepareCanvas();
        var XValueIndex = self.xIndex;
        var groupIndex = self.objIdIndex;
        var YValueIndex = self.showDataValue.indexOf($(‘#‘ + self.compareValueSelectDOMId + ‘‘).val());
        var  Xname=self.showDataValue[XValueIndex];

        var Yname=self.showDataValue[YValueIndex];
        var Gname=self.showDataValue[groupIndex];
        var medias = [];
        for (var i = 0; i < self.jsonData.length; i++) {
            medias.push(self.jsonData[i][Gname]);
        }
        medias = $.unique(medias);
        var allmediadata = {};
        for (var i = 0; i < self.jsonData.length; i++) {
//            var medianame = self.jsonData[i][groupIndex];
            var medianame = self.jsonData[i][Gname];
            allmediadata[medianame] = allmediadata[medianame] || {};
            if (self.jsonData[i][Yname]) {
                allmediadata[medianame][self.jsonData[i][Xname]] = allmediadata[medianame][self.jsonData[i][Xname]] || 0;
                allmediadata[medianame][self.jsonData[i][Xname]] += (self.jsonData[i][Yname] || 0);
            }
        }
        self.dateranges = [];
        var datebegin = new Date(self.datebegin.getTime());
        while (datebegin < self.dateend) {
            self.dateranges.push(getYYYYMMDD(datebegin));
            datebegin.addDays(1);
        }
        var option = {
            title: {
                text: self.title
            },
            tooltip: {
                trigger: ‘axis‘
            },
            legend: {},
            toolbox: {
                show: true,
                feature: {
                    mark: {show: true},
                    dataView: {show: true, readOnly: false},
                    magicType: {show: true, type: [‘line‘, ‘bar‘]},
                    restore: {show: true},
                    saveAsImage: {show: true}
                }
            },
            calculable: true,
            xAxis: [
                {
                    type: ‘category‘,
                    boundaryGap: false,
//                data : [‘周一‘,‘周二‘,‘周三‘,‘周四‘,‘周五‘,‘周六‘,‘周日‘]
                }
            ],
            yAxis: [
                {
                    type: ‘value‘,
                    axisLabel: {
                        formatter: ‘{value}‘
                    }
                }
            ],
            series: []
        };
        option.legend.data = medias;
        for (var z = 0; z < option.legend.data.length; z++) {
            var serie = {
                type: ‘line‘,
//            data:[11, 11, 15, 13, 12, 13, 10],
                markPoint: {
                    data: [
                        {type: ‘max‘, name: ‘最大值‘},
                        {type: ‘min‘, name: ‘最小值‘}
                    ]
                },
                markLine: {
                    data: [
                        {type: ‘average‘, name: ‘平均值‘}
                    ]
                }
            };
            serie.name = option.legend.data[z];
            var data = [];
            for (var t = 0; t < self.dateranges.length; t++) {
                var medianame = option.legend.data[z];
                if (allmediadata[medianame][self.dateranges[t]]) {
                    data.push(allmediadata[medianame][self.dateranges[t]]);
                } else   data.push(0);

            }
            serie.data = data;
            option.series.push(serie);
        }
        option.title.text = ‘‘;
        option.xAxis[0].data = self.dateranges;
        console.log(JSON.stringify(option));
        self._myChart.hideLoading();
        self._myChart.setOption(option, true)
    };
    XYCompareAnlysisprototype.otherDomIni = function (parentdomid) {
        var self = this;

        if (self.compareValueSelectDOMId) {
//            console.log("#" + parentdomid + "");
//            console.log("#" + parentdomid + "");
            var jqparentdom = $("#" + parentdomid + "");
            var maindivhtml = ‘<div class="col-xs-12"><lable>比较内容</lable><select id="‘ + self.compareValueSelectDOMId + ‘" class="form-control"></select></div>‘;
            jqparentdom.before(maindivhtml);
        }
    };
    XYCompareAnlysisprototype.otherIni = function () {
        var self = this;
        if (this.compareValueSelectDOMId) {
            var themeSelector = $(‘#‘ + this.compareValueSelectDOMId + ‘‘);
            if (themeSelector) {
                var optionstring = ‘‘;
                for (var i = self.compareRange[0]; i <= self.compareRange[1]; i++) {
                    if (i != 0) {
                        optionstring += ‘<option  value="‘ + self.showDataValue[i] + ‘">‘ + self.showDataName[i] + ‘</option>‘
                    }
                    else {
                        optionstring += ‘<option selected="true"   value="‘ + self.showDataValue[i] + ‘">‘ + self.showDataName[i] + ‘</option>‘
                    }
                }
            }
            themeSelector.html(
                optionstring
            );
            $(themeSelector).on(‘change‘, function () {
                self.drawCanvas();
            });
        }
    };
    function XYCompareAnlysis() {
        this.showDataValue = [‘pubID‘, ‘date‘, ‘click‘, ‘ipClick‘, ‘ipPv‘, ‘pv‘, ‘uvClick‘, ‘uvPv‘, ‘province‘, ‘city‘];
        this.showDataName = [‘媒体名称‘, ‘日期‘, ‘点击‘, ‘ip点击‘, ‘ip展示‘, ‘展示‘, ‘uv点示‘, ‘uv展示‘, ‘省‘, ‘市‘];
        this.groupColumnIndex = [0, 1];
        this.objIdIndex = 0;
        this.xIndex = 1;
        this.compareRange = [2, 7];
        this.searchUrl = ‘/media/search‘;
        this.compareValueSelectDOMId = ‘value-select‘;
        this.searchUrl = ‘/media/search‘;
        this.queryString = ‘‘;
        this.maindivDOMId = ‘xymain‘;
        this.tableDOMId = ‘example‘;
        this.jsonData = ‘‘;
        this.dateranges = [];
    };
    XYCompareAnlysis.prototype = XYCompareAnlysisprototype;

    var PieAnlysisPrototype = new BaseChartObj();
    PieAnlysisPrototype.drawCanvas = function () {
        var self = this;
        self.prepareCanvas();
        var option = {
            title: {
                text: self.title,
//                subtext: ‘纯属虚构‘,
                x: ‘center‘
            },
            tooltip: {
                trigger: ‘item‘,
                formatter: "{a} <br/>{b} : {c} ({d}%)"
            },
            legend: {
                orient: ‘vertical‘,
                x: ‘left‘,
//                data:[‘直接访问‘,‘邮件营销‘,‘联盟广告‘,‘视频广告‘,‘搜索引擎‘]
            },
            toolbox: {
                show: true,
                feature: {
                    mark: {show: true},
                    dataView: {show: true, readOnly: false},
                    magicType: {
                        show: true,
                        type: [‘pie‘, ‘funnel‘],
                        option: {
                            funnel: {
                                x: ‘25%‘,
                                width: ‘50%‘,
                                funnelAlign: ‘left‘,
                                max: 1548
                            }
                        }
                    },
                    restore: {show: true},
                    saveAsImage: {show: true}
                }
            },
            calculable: true,
            series: [
                {
                    name: ‘访问来源‘,
                    type: ‘pie‘,
                    radius: ‘55%‘,
                    center: [‘50%‘, ‘60%‘],
//                    data:[
//                        {value:335, name:‘直接访问‘},
                }
            ]
        };
            option.legend.data = self.showDataName.slice(self.dataRange[0], self.dataRange[1] + 1);
        var data = [];
        for (var z = self.dataRange[0]; z <= self.dataRange[1]; z++) {
            data.push({name: self.showDataName[z], value: self.jsonData[0][self.showDataValue[z]]});
        }
        option.series[0].data = data;
        self._myChart.hideLoading();
        this._myChart.setOption(option, true);
    };
    function PieAnlysis() {
        this.showDataValue = [];
        this.showDataName = [];
        this.dataRange = [];
        this.searchUrl = ‘‘;
    };
    PieAnlysis.prototype = PieAnlysisPrototype;

    $.createChartObj = function (chartjson) {
        for (var key in chartjson) {
            if (chartjson[key].indexOf && chartjson[key].indexOf(‘[‘) > -1) {
                var temarr = eval(chartjson[key]);
                if ($.isArray(temarr)) {
                    console.log(chartjson[key]);
                    chartjson[key] = temarr;
                }
            }
        }
        if (chartjson.charttype == ‘pietimeline‘) {
            var pietimelineobj = new PieTimeLineAnlysis();
            $.extend(pietimelineobj, chartjson);
            return pietimelineobj;
        }
        else if (chartjson.charttype == ‘bigmap‘) {
            var chinamapanlysis = new ChinaMapAnlysis();
            $.extend(chinamapanlysis, chartjson);
            return chinamapanlysis;
        }
        else if (chartjson.charttype == ‘xycompare‘) {
            var xyanlysis = new XYCompareAnlysis();
            $.extend(xyanlysis, chartjson);
            return xyanlysis;
        }
        else if (chartjson.charttype == ‘pie‘) {
            var pieanlysis = new PieAnlysis();
            $.extend(pieanlysis, chartjson);
            return pieanlysis;
        }
    };
//根据QueryString参数名称获取值
    $.getQueryStringByName = function (name) {
        var result = location.search.match(new RegExp("[\\?\\&]" + name + "=([^\\&]+)", "i"));
        if (result == null || result.length < 1) {
            return "";
        }
        return result[1];
    };
    $.iniMenu = function (menuid) {
        if (!$.configMenu) {
            $.ajax(
                {
                    url: "/getmenu",
                    async: false,
                    type: "GET",
//                    context: document.body,
                    success: function (data, satus) {
                        var data = data.nodes;
                        $.configMenu = data;
                        var html = ‘‘;
                        html += ‘<li class="active"><a href="/"><i class="fa fa-dashboard"></i> <span>Dashboard</span></a></li>‘;
                        for (var i = 0; i < data.length; i++) {
                            if (data[i].showtype != ‘页面‘ && data[i].showtype != ‘图表‘) {
                                html += ‘<li class="treeview"><a href="#"><i class="fa  fa-pencil"></i><span>‘ + data[i].title + ‘</span><i class="fa pull-right fa-angle-left"></i></a><ul class="treeview-menu" style="display: none;">‘
                                var children = data[i].nodes;
                                for (var j = 0; j < children.length; j++) {
                                    html += ‘<li><a href="‘ + children[j].href + ‘?id=‘ + children[j].id + ‘" style="margin-left: 10px;"><i class="fa fa-angle-double-right"></i>‘ + children[j].title + ‘</a></li>‘;
                                }
                                html += ‘</ul></li>‘;
                            }
                            else {
                                html += ‘<li><a href="‘ + data[i].href + ‘"><i class="fa fa-dashboard"></i> <span>‘ + data[i].title + ‘</span></a></li>‘;
                            }
                        }
                        $("#" + menuid + "").html(html);
                    }
                }
            );
        }
    };
    $.findChartJsons = function () {
        var id = $.getQueryStringByName(‘id‘);
        var jsons = [];
        function findcharts(obj) {
            for (var i = 0; i < obj.length; i++) {
                if (obj[i].id == id) {
                    jsons.push(obj[i]);
                }
                else {
                    findcharts(obj[i].nodes);
                }
            }
        }
        findcharts($.configMenu);
        return id ? jsons[0].nodes : undefined;
    };
    $.iniMenu("sidebar-menu");
})(window, $)

anjular-tree设置模块

(function () {
    ‘use strict‘;
    angular.module(‘treeApp‘, [‘ui.tree‘])
        .controller(‘treeCtrl‘, function ($scope, $http) {
            $scope.load = function (scope) {
                $http({
                    method: ‘get‘,
                    url: ‘/getmenu‘
                }).success(function (data, status) {
                    var arr = [];
                    arr.push(data);
                    $scope.data = arr;
                }).error(function (data, status) {
                    console.log(data);
                    console.log(status);
                });
            };
            $scope.remove = function (scope) {
//                            $scope.currentModel=null;
            };
            $scope._setChartObj = function (currentModel) {
                var commonproperty = [‘id‘, ‘title‘, ‘nodes‘, ‘charttype‘, ‘showtype‘, ‘host‘, ‘searchurl‘, ‘maindivDOMHeight‘, ‘maindivDOMWidth‘, ‘maindivDOMId‘, ‘tableDOMWidth‘, ‘tableDOMId‘, ‘groupColumnIndex‘, ‘showDataName‘, ‘showDataValue‘, ‘queryString‘, ‘searchUrl‘,‘lengendrange‘];
                if (currentModel.charttype) {
                    currentModel[currentModel.charttype] = {};
                    for (var key in currentModel) {
                        if (currentModel.hasOwnProperty(key) && commonproperty.indexOf(key) == -1) {
                            if (key != currentModel.charttype) {
                                currentModel[currentModel.charttype][key] = currentModel[key];
                                currentModel[key] = undefined;
                            }
                        }
                    }
                }
            }
            $scope.edit = function (scope) {
                $scope.currentModel = {};
                angular.extend($scope.currentModel, scope.$modelValue);
                $scope.currentModel.showtype = ‘模块‘;
                var subdepth = scope.maxSubDepth();
                var thisdepth = scope.depth();
                if ((thisdepth == 2 && subdepth <= 1) || (thisdepth > 2 && subdepth == 1)) {
                    $scope.currentModel.href = $scope.currentModel.href || ‘/‘;
                    $scope.currentModel.showtype = ‘页面‘;
                }
                else if (subdepth == 0) {
                    $scope.currentModel.showtype = ‘图表‘;
                    $scope.currentModel.host = ‘‘;
                    $scope.currentModel.searchurl = ‘‘;
                    $scope._setChartObj($scope.currentModel);
                }
            }
            $scope.log = function (scope) {
                console.log($scope.data);
            }
            $scope.save = function (scope) {
                function updateData(inputobj, savaobj) {
                    if (inputobj.id == savaobj.id) {
                        angular.extend(inputobj, savaobj);
                    }
                    else {
                        for (var i = 0; i < inputobj.nodes.length; i++) {
                            updateData(inputobj.nodes[i], savaobj);
                        }
                    }
                }
                if ($scope.currentModel) {
                    if ($scope.currentModel.charttype && $scope.currentModel[$scope.currentModel.charttype]) {
                        angular.extend($scope.currentModel, $scope.currentModel[$scope.currentModel.charttype]);
                        $scope.currentModel[$scope.currentModel.charttype] = undefined;
                    }
                    updateData($scope.data[0], $scope.currentModel);
                    $scope._setChartObj($scope.currentModel);

                }
                console.log(JSON.stringify($scope.data));
            }
            $scope.toggle = function (scope) {
                scope.toggle();
            };

            $scope.moveLastToTheBeginning = function () {
                var a = $scope.data.pop();
                $scope.data.splice(0, 0, a);
            };
            $scope.newSubItem = function (scope) {
                var thisdepth = scope.depth();
                if (thisdepth <= 3) {
                    $scope.currentModel = null;
                    var nodeData = scope.$modelValue;
                    nodeData.nodes.push({
                        id: nodeData.id * 10 + nodeData.nodes.length,
                        title: nodeData.title + ‘.‘ + (nodeData.nodes.length + 1),
                        nodes: []
                    });
                }
            };
            $scope.collapseAll = function () {
                $scope.$broadcast(‘collapseAll‘);
            };
            $scope.expandAll = function () {
                $scope.$broadcast(‘expandAll‘);
            };
            $scope.data = [
                {
                    "id": 1,
                    "title": "模块",
                    "nodes": []
                }
            ];
            $scope.update = function () {

                $http({
                    data: {"menu": $scope.data},
                    method: ‘post‘,
                    url: ‘/updatemenu‘
                }).success(function (data, status) {

                    if (data == ‘success‘) {
                        alert(‘更新成功‘);
                    }
                    else {
                        alert(‘更新失败‘)
                    }
                }).error(function (data, status) {
                    console.log(data);
                    console.log(status);
                    alert(‘更新失败‘);
                });
            }
        });
})();

加载图表代码

/**
 * Created by cuidapeng on 14-12-3.
 */

var echarts;
var allchartjson = $.findChartJsons();
var allchartobj = [];
if (allchartjson) {
    for (var i = 0; i < allchartjson.length; i++) {
        var queryobj = $.createChartObj(allchartjson[i]);
        if (queryobj) allchartobj.push(queryobj);
    }
}

$(document).ready(function () {
    for (var i = 0; i < allchartobj.length; i++) {
        var queryobj = allchartobj[i];
        queryobj.iniDom(‘initest‘);
        queryobj.iniTable();
        queryobj.bindEvent();
    }
    $(‘#search‘).click(function () {
        $.Prompt("正在加载,请稍后");
        var alldate = $(‘#datepicker-calendar‘).DatePickerGetDate();
        var allmedianames = $("#myTags").tagit("assignedTags");
        for (var i = 0; i < allchartobj.length; i++) {
            var queryobj = allchartobj[i];
            queryobj.datebegin = alldate[0][0];
            queryobj.dateend = alldate[0][1];
            var ajaxurlpar = ‘?medianames=‘ + allmedianames;
            queryobj.loadData(ajaxurlpar);
        }
//        $.Prompt({close:true});
    });
    var lastcompletedata;
    //tags
    $("#myTags").tagit({
        beforeTagAdded: function (event, ui) {
            if (!lastcompletedata || lastcompletedata.indexOf(ui.tagLabel) == -1) {
                return false;
            }
        },
        autocomplete: {delay: 0, minLength: 2, source: function (request, response) {
            console.log(request);
            $.get(‘/media/ajaxautomedia‘, {input: request.term}, function (data, status) {
                    console.log(this);
                    lastcompletedata = data;
                    response(data);
                }
            );
        }}
    });
});
时间: 2024-10-12 09:12:09

echart封装,前端简单路由,图表设置自动化的相关文章

Javascript实现前端简单路由

http://www.helloweba.com/view-blog-385.html WEB开发中路由概念并不陌生,我们接触到的有前端路由和后端路由.后端路由在很多框架中是一个重要的模块,如Thinkphp,Wordpress中都应用了路由功能,它能够让请求的url地址变得更简洁.同样前端路由在单页面应用也很常见,它使得前端页面体验更流畅. 前端路由在很多开源的js类库框架中都得到支持,如angularJS,Backbone,Reactjs等等.前端路由和后端路由原理一样,是让所有的交互和展现

导出Excel之Epplus使用教程3(图表设置)

导出Excel之Epplus使用教程1(基本介绍) 导出Excel之Epplus使用教程2(样式设置) 导出Excel之Epplus使用教程3(图表设置) 导出Excel之Epplus使用教程4(其他设置) Epplus的图表实现是很简单的,它支持的图表类型也很多,基本上能满足我们的需求.创建图表分为三步(以柱状图举例): 1.创建图表 ExcelChart chart = worksheet.Drawings.AddChart("chart", eChartType.ColumnCl

Linux下简单防火墙的设置

对于个人VPS来说,简单的防火墙设置也是有必要的,具体方法如下: 1. 先检查一下防火墙的功能是否开启: # /etc/init.d/iptables status 2. 设定输入.输出和转发三个链的预设政策: # iptables -P INPUT ACCEPT # iptables -P OUTPUT ACCEPT # iptables -P FORWARD ACCEPT 3. 清空全部预设的防火墙: # iptables -F # iptables -X # iptables -Z 4.

vue.js路由vue-router(一)——简单路由基础

前言 vue.js除了拥有组件开发体系之外,还有自己的路由vue-router.在没有使用路由之前,我们页面的跳转要么是后台进行管控,要么是用a标签写链接.使用vue-router后,我们可以自己定义组件路由之间的跳转,还可以设置稍复杂的嵌套路由,创建真正的spa(单页面应用).我之前用vue-cli脚手架写了一个简单的人员管理实例,现在我们不用脚手架,就用原生的vue来写,本文也主要是通过实例来讲解vue.js+vue-router相关知识. 简单路由跳转实例 1.起步 下载vue-route

代码改变世界 | 如何封装一个简单的 Koa

下面给大家带来:封装一个简单的 KoaKoa 是基于 Node.js 平台的下一代 web 开发框架Koa 是一个新的 web 框架,可以快速而愉快地编写服务端应用程序,本文将跟大家一起学习:封装一个简单的 Koa一个简单的 http 服务使用 node 提供的 http 模块,可以很容易的实现一个基本的 http 服务器,新建一个 application.js 文件,内容如下: const http = require('http') const server = http.createSer

Directx11学习笔记【四】 封装一个简单的Dx11DemoBase

根据前面两个笔记的内容,我们来封装一个简单的基类,方便以后的使用. 代码和前面类似,没有什么新的内容,直接看代码吧(由于代码上次都注释了,这次代码就没怎么写注释o(╯□╰)o) Dx11DemoBase.h Dx11DemoBase.h #pragma once #include <d3d11.h> #include <D3DX11.h> #include <DxErr.h> class Dx11DemoBase { public: Dx11DemoBase(); vi

机智的Popup,带着简单的图表感觉酷酷的

之前有提过用 InfoTemplate 类对 FeatureLayer 的基本信息进行展示,今天为大家介绍 esri/dijit/Popup 的使用,这东西还有 简单的图表展示功能呢! <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta name="

[3] 用D3.js做一个简单的图表吧!

本人的个人博客为: www.ourd3js.com csdn博客为: blog.csdn.net/lzhlzz 转载请注明出处,谢谢. 前面说了几节,都是对文字进行处理,这一节中将用 D3.js 做一个简单的柱形图. 做柱形图有很多种方法,比如用 HTML 的 div 标签,或用 svg . 推荐用 SVG 来做各种图形.SVG 意为可缩放矢量图形(Scalable Vector Graphics),SVG 使用 XML 格式定义图像,不清楚什么是SVG的朋友请先在 w3cschools 学习下

文顶顶 iOS开发UI篇—iOS开发中三种简单的动画设置

iOS开发UI篇—iOS开发中三种简单的动画设置 [在ios开发中,动画是廉价的] 一.首尾式动画 代码示例: // beginAnimations表示此后的代码要“参与到”动画中 [UIView beginAnimations:nil context:nil]; //设置动画时长 [UIView setAnimationDuration:2.0]; self.headImageView.bounds = rect; // commitAnimations,将beginAnimation之后的所