统一图表方案设计

楼主
我是社区第55902位番薯,欢迎点我头像关注我哦~
经过这么多年的发展和积淀。FR给我们提供了非常丰富的图表库。每时每刻都有大量的用户在跟FR的图表进行着交互。然而在这丰富的图标库后面却给模板设计人员带来了一个不大不小的问题。风格统一和维护!有没有遇到这样一种情况~同一风格的柱形图在很多模板都用到了,仅仅是数据不同,但是风格样式设置都是一样的?如果仅仅是这样,我们可能还可以直接复制粘贴,然后改一下数据,就得到了另外一个一样的图表。但是技术人员和设计人员的矛盾永远是个问题,同一个图表你好容易复制了几十份,设计人员突然告诉你,这种类型的图某个位置要换个颜色,或者换种展现方式。你是不是要崩溃~几十个模板一个一个的打开修改么?是不是感觉维护好麻烦~
OK就不废话了~直接上今天的主角吧~通过Echarts来实现的~先引入echarts的JS【通过插件还是直接引入文件随你,这个demo是直接引入的】

这里的echarts.min.js就是echarts绝大部分图表组件需要的JS了~然后我们来看看其他几个JS
第一个public.js
  1. ;
  2. (function($){
  3.         FR.Components = {};
  4.         FR.DataUtils = {
  5.                 load:function(dsname,colarr,callback){
  6.                         var data = {
  7.                                 sessionID:_g().currentSessionID,
  8.                                 dsname:dsname,
  9.                                 cidxstr:colarr
  10.                         };
  11.                         FR.ajax({
  12.                                 url: FR.servletURL + "?op=tdfinder",
  13.                                 data: data,
  14.                                 type:'POST',
  15.                                 dataType:'json',
  16.                                 success:callback
  17.                         });
  18.                 }
  19.         }
  20. })(jQuery);
复制代码
很简单的一个方法,就是一个ajax,到后台把某个数据集的某些列取出来【后台服务代码自己写,我就不贴了】。
第二个fr.echarts.js
  1. ;
  2. (function($){
  3.         FR.Components.Echarts = {};
  4. })(jQuery);
复制代码
更简单,就是声明我们的图表组件库对象而已
第三个fr.echarts.line.js
  1. ;
  2. (function($){
  3.         var initOptions = function(options){
  4.                 var option = {
  5.                         tooltip : {
  6.                                 trigger: 'axis'
  7.                         },
  8.                         toolbox: {
  9.                                 show : true,
  10.                                 feature : {
  11.                                         mark : {show: true},
  12.                                         dataView : {show: true, readOnly: false},
  13.                                         magicType : {show: true, type: ['line', 'bar']},
  14.                                         restore : {show: true},
  15.                                         saveAsImage : {show: true}
  16.                                 }
  17.                         },
  18.                         calculable : true,
  19.                         xAxis : [{
  20.                                 type : 'category',
  21.                                 boundaryGap : false
  22.                         }],
  23.                         yAxis : [{
  24.                                 type : 'value',
  25.                                 axisLabel : {
  26.                                         formatter: '{value} °C'
  27.                                 }
  28.                         }],
  29.                         series : [
  30.                                 {
  31.                                         type:'line'
  32.                                 },{
  33.                                         type:'line'
  34.                                 }
  35.                         ]
  36.                 };
  37.                 $.extend(true,option,options);
  38.                 return option;
  39.         };
  40.        
  41.         FR.Components.Echarts.Line = function(element,options){
  42.                 var line = {
  43.                         init:function(){
  44.                                 element.innerHTML = "";
  45.                                 var myChart = echarts.init(element);
  46.                                 FR.DataUtils.load(options.dm.ds,options.dm.carr,function(data){
  47.                                         data = data.data;
  48.                                         var s = options.series;
  49.                                         var legend = {data:[]};
  50.                                         for(var i=0;i<s.length;i++){
  51.                                                 legend.data.push(s[i].name);
  52.                                                 s[i].data = data[i];
  53.                                         }
  54.                                         options.series = s;
  55.                                         options.legend = legend;
  56.                                         var xAxis = [{
  57.                                                 data : data[2]
  58.                                         }];
  59.                                         options.xAxis = xAxis;
  60.                                         myChart.setOption(initOptions(options));
  61.                                 });
  62.                                 this.chart = myChart;
  63.                         }
  64.                 };
  65.                 line.init();
  66.                 return line;
  67.         };
  68. })(jQuery);
复制代码
我们针对我们要的每一种风格的图表配置好options的样式部分,然后通过传递变化的数据部分,就能够做出一个图表了~

预览的效果图

通过这样共用样式的方式,我们就可以使我们的系统风格变得统一,同时也更容易维护。当然这个也可以作为引入第三方图表库的一个方法【缺陷就是不能打印和导出,其他都基本上都可以实现,只是可能越复杂的功能你的JS要写的部分就越多】。








分享扩散:
参与人数 +3 F豆 +82 理由
01vita10 + 10 默默地点个赞,然后闪人
影丶 + 6 骚年,我看好你哦
兔子酱 + 66 默默地点个赞,然后闪人

查看全部评分

沙发
发表于 2017-7-4 16:57:46
{:8_210:}这次我真的看懂了。应用场景很好,操作步骤也很清楚,照着楼主说的改一改就好了。

怎么感觉自己的回帖像是5毛党
板凳
发表于 2017-7-4 17:03:39
传说哥 发表于 2017-7-4 16:57
这次我真的看懂了。应用场景很好,操作步骤也很清楚,照着楼主说的改一改就好了。

怎么感觉自 ...

其实传说哥只是我请来的水军~
地板
发表于 2017-7-4 18:00:15
师傅,,,666666666666
5楼
发表于 2017-7-5 09:39:59
自己尝试下,对Echart不熟,没太看懂
6楼
发表于 2017-7-5 10:07:13
FR.ajax({
                               url: FR.servletURL + "?op=tdfinder",
                                data: data,
                                type:'POST',
                                dataType:'json',
                                success:callback
                        });
这句还是没看懂,帆软好像没有op=tdfinder,要自己写java类吗?怎么配置上去?
7楼
发表于 2017-7-5 10:39:43
jjchen 发表于 2017-7-5 10:07
FR.ajax({
                                url: FR.servletURL + "?op=tdfinder",
                    ...

FR有个接口叫Service,需要自己实现~
8楼
发表于 2017-7-5 14:30:34
看啊看啊看啊,看啊看啊看啊,……,真的好好简单啊。。。
9楼
发表于 2017-7-16 00:15:11
{:8_211:}
10楼
发表于 2017-10-11 17:46:23
蒙了哈哈哈哈h
11楼
发表于 2017-10-17 13:43:46
厉害!
12楼
发表于 2018-3-30 23:04:49
66666666666666
13楼
发表于 2018-5-2 13:24:33
很好,学习了
14楼
发表于 2021-4-6 16:45:51
FR有个接口叫Service,需要自己实现~,那这个Service是哪个文件呢
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

16回帖数 3关注人数 10411浏览人数
最后回复于:2021-4-6 16:45

返回顶部 返回列表