UNPKG

landers.angular

Version:

landers.angular

252 lines (244 loc) 10.2 kB
;angular.module('Landers.angular') // Highcharts .factory('DrawHighCharts', ['Flat', function (Flat) { Highcharts.setOptions({ global: { useUTC: false, }, lang: { loading: '<div style="margin: 130px auto;">图表正在绘制中...<div class="load8"> <div class="load8-container container1"> <div class="circle1"></div> <div class="circle2"></div> <div class="circle3"></div> <div class="circle4"></div> </div> <div class="load8-container container2"> <div class="circle1"></div> <div class="circle2"></div> <div class="circle3"></div> <div class="circle4"></div> </div> <div class="load8-container container3"> <div class="circle1"></div> <div class="circle2"></div> <div class="circle3"></div> <div class="circle4"></div> </div> </div>', // loading : '<img src="/static/svg/loader/tail-spin.svg" style="width:40px; margin-top:-30px"/>' }, credits: { enabled: false } }); var colors1 = [ '#50ABF7', '#F5AB31', '#8FBA0E', '#9658FB', '#36F8AB', '#11B7E0', '#C9F600', '#CD0074', '#ff3e3e', '#ff8acc', '#00bbec', '#fff537', '#f04b5a', '#846add', '#2c6ed5', '#ff8300', '#f24285', '#e748e5', '#d73765', '#e03e9c', '#a3a3e8', '#ffd84f', '#00b26f', '#e3b1fa', '#7292e4', '#f18162', '#89d6aa', '#ffb26a', '#af867b', '#ff9c8f' ]; function DrawHighCharts(scope, lines, propname, opts){ opts = opts || {}; var $chart = $('#' + propname + '-chart'); $chart.width($chart.parent().parent().width()); scope[propname] = { loading: true, title: { text: false, }, // xAxis: {type: 'categories', categories: []}, xAxis: opts.xAxis, yAxis: opts.yAxis, options: { plotOptions: { series: { marker: { enabled: false } } }, chart: { zoomType: 'xy', type: 'areaspline', animation: Highcharts.svg, events: { load: function () { } }, }, tooltip: { // formatter:function(){ // try { // var a = ['<b>' + Highcharts.dateFormat('%Y-%m-%d %H:%M:%S', this.x) + '</b>']; // angular.element.each(this.points, function(i, point){ // var arr = [], // unit = point.series.tooltipOptions.valueSuffix; // arr.push('<span>' + point.series.name + '</span>:'); // arr.push('<b>' + point.y + '</b>' + unit); // a.push(arr.join('')); // }); // return a.join('<br>'); // } catch(e) {} // }, crosshairs: { color: '#7ac943', dashStyle: 'shortdot', width : 1 }, shared: true, valueDecimals: opts.tooltip.valueDecimals }, colors: colors1 }, series : [] }; this.loading = function(is_show){ scope[propname].loading = is_show; }; this.drawInit = function (chartDatas) { scope[propname].loading = true; scope[propname].series = []; for (var i = 0; i < lines.length; i++) { var cfg = lines[i]; var series = [], categories = []; for ( var j = 0; j < chartDatas.length; j++) { var x = chartDatas[j]['time']*1000; var y = Flat.get(chartDatas[j], cfg.datakey); // series.push([x, y]); categories.push(chartDatas[j]['timeHuman']); series.push(y); } scope[propname].xAxis.categories = categories; scope[propname].series.push({ name: cfg.name, type: 'areaspline', yAxis: cfg.yAxis, data: series, tooltip: { valueSuffix: cfg.unit } }); } this.loading(false); }; this.drawAppend = function(chartData) { if (!chartData) return; var category = chartData['timeHuman']; var len = scope[propname].xAxis.categories.length; if (scope[propname].xAxis.categories[len-1] != category) { scope[propname].xAxis.categories.push(category); } var chart = $chart.highcharts(); if ( chart ) { for (var i = 0; i < lines.length; i++) { var cfg = lines[i]; var y = Flat.get(chartData, cfg.datakey); // var point = [chartData['time']*1000, y]; var point = y; chart.series[i].addPoint(point , true, true); } } }; } return { make:function(scope, lines, propname, opts){ return new DrawHighCharts(scope, lines, propname, opts); } }; }]) // Chart.js .factory('DrawCharts', ['Flat', function (Flat) { function DrawCharts(scope, lines, propname){ var props = { labels : propname + 'Labels', datas : propname + 'Datas', series : propname + 'Series', options : propname + 'Options', colours : propname + 'Colours' }; var buildSeries = function(){ var ret = []; for (var i = 0; i < lines.length; i++) { var cfg = lines[i]; ret.push(cfg.name); } return ret; }, buildPointLabels = function(datas){ var ret = []; for (var i = 0; i < datas.length; i++) { var time = Landers.utils.time.unix2human(datas[i].time); ret.push(time); } return ret; }, buildLineData = function(linekey, chartDatas) { var ret = []; for (var j = 0; j < chartDatas.length; j++) { var chartData = chartDatas[j]; var point = Flat.get(chartData, linekey); ret.push(point); } return ret; }; this.drawInit = function (chartDatas) { scope[props.options] = { animation: false, showScale: true, showTooltips: true, pointDot: false, datasetStrokeWidth: 1 }; scope[props.colours] = [ { // grey fillColor: 'rgba(148,159,177,0.2)', strokeColor: 'rgba(148,159,177,1)', pointColor: 'rgba(148,159,177,1)', pointStrokeColor: '#fff', pointHighlightFill: '#fff', pointHighlightStroke: 'rgba(148,159,177,0.8)' }, { // dark grey fillColor: 'rgba(77,83,96,0.2)', strokeColor: 'rgba(77,83,96,1)', pointColor: 'rgba(77,83,96,1)', pointStrokeColor: '#fff', pointHighlightFill: '#fff', pointHighlightStroke: 'rgba(77,83,96,1)' } ]; scope[props.series] = buildSeries(); scope[props.labels] = buildPointLabels(chartDatas); scope[props.datas] = []; for (var i = 0; i < lines.length; i++) { var cfg = lines[i]; scope[props.datas].push(buildLineData(cfg.datakey, chartDatas)); } }; this.drawAppend = function(chartData) { scope[props.labels].shift(); var time = Landers.utils.time.unix2human(chartData.time); scope[props.labels].push(time); var datas = scope[props.datas]; for (var i = 0; i < lines.length; i++) { var cfg = lines[i]; var point = Flat.get(chartData, cfg.datakey); scope[props.datas][i].shift(); scope[props.datas][i].push(point); } }; } return { make:function(scope, lines, props){ return new DrawCharts(scope, lines, props); } }; }]);