本文档主要介绍如何通过乐创者报表中,通过”扩展控件”进行自定义图表开发的实现原理及基本过程。
适合于有一定Web前端技术开发人员,如果还没有掌握前端技术,可参考以下资料:
javascript教程:https://www.w3school.com.cn/js/index.asp
css教程:https://www.w3school.com.cn/css/index.asp

1、配置过程

1.1、单元格设置扩展图表控件

1.2、设置初始化事件

2、自定义图表开发说明

初始化事件中,增加以下类似脚本:

ER.widget.extend(this, {
    type: 'echarts',
    theme: '图表主题名称',
    init: function(datas, element, echarts) {
        //如果图表要支持刷新,先要销毁已有的图表对象
        if(this.chartObject){
          try{
            this.chartObject.dispose();
          } catch(e){}
          this.chartObject = null;
        }

        //创建图表实例对象
        var chartObject = echarts.init(element);
        this.chartObject = chartObject;
        var option = {...}; //构建图表option

        // 图表点击事件,onChartClick会回调handleChartClickEvent
        chartObject.on('click', this.onChartClick);

        //设置option
        chartObject.setOption(option);
    },
    handleChartClickEvent: function(param) {
        //在此处处理图表的回调事件
    },
    resize: function() {
        //在此处响应单元格的resize事件
        this.chartObject.resize();
    },
    uploadImage: function() {
        //如果需要打印,需在此处生成图表图片数据,并返回
        return this.chartObject.getDataURL({
            type:'png',
            excludeComponents:['toolbox','dataZoom','visualMap']
        });
    }
})

1.1、参数说明

  • type String 【必选】
    扩展的单元格类型,值:’echarts’

  • theme String 【可选】
    主题名称,支持:macarons、infographic、dark、roma、shine、vintage、walden、simple、techon等。

1.2、方法说明

  • init Function 【必选】
    控件初始化入口函数。

    /**
    * 扩展图表初始化入口函数(作为用户构建图表实例的入口)
    * @param datas 图表数据集,格式:{'列名1':[列数据],'列名2':[列数据]}
    * @param element 扩展图表所属的element对象
    * @param echarts echarts对象,注意如果扩展的不是echarts的图表,此对象不能使用
    */
    init: function(datas, element, echarts) {
    }
  • handleChartClickEvent Function 【可选】
    响应图表点击事件。

    /**
    * 响应图表点击事件
    * @param param eharts图表点击时返回的上下文对象
    */
    handleChartClickEvent: function(param) {
    //将ECharts点击事件返回的param信息转换为lczReport需要的
    var variants =[];
    var series = option.series[param.seriesIndex];
    var seriesName = ""; //系列名
    var seriesCode = ""; //系列编码
    var value = "";   //值
    
    //处理从echarts中获取对应的参数值
    //....
    
    //填充待返回的变量信息,这些变量信息将改变报表中同名的参数
    //规范:{'name': '变量名称','value': '变量值','dispValue':'变量显示值'}
    如:
    variants.push({'name': 'chartSeries',
                   'value': seriesCode,
                   'dispValue':seriesName});
    variants.push({'name': 'chartValue',
                   'value': value});
    
    //触发单元格上的联动
    this.handleLinkage(variants);
    //触发单元格上的超链接
    this.handleLink('Link1',variants);
    }
  • resize Function 【可选】

    /**
    * 响应容器高度,宽度自适应
    */
    resize: function() {
    }
  • destroy Function 【可选】

    /**
    * 控件销毁事件
    */
    destroy: function() {
    }
  • beforeLinkage Function 【可选】

    /**
    * 联动前事件
    */
    beforeLinkage: function() {
    }
  • uploadImage Function 【可选】
    /**
    * 响应图片上传到服务器请求,返回图表的图片数据即可
    */
    uploadImage: function() {
    }

1.3、响应事件方法

  • handleLinkage(params) Function 【可选】
    触发联动事件.
    params : 图表点击后,回传相关的数据,格式:[{‘name’: ‘图表变量名称’,’value’: ‘变量值’,’dispValue’:’变量显示值’}]

  • handleLink(linkName, params) Function 【可选】
    触发链接事件.
    linkName: 待执行的超链接名称,为空时自动按第一个超链接执行。
    params : 图表点击后,回传相关的数据,格式:[{‘name’: ‘图表变量名称’,’value’: ‘变量值’,’dispValue’:’变量显示值’}]

    不同的图表支持的图表变量名不同,应按照超链接参数中值表达式中使用的图表参数名一致。如:超链接值表单式中使用“@图表分类”,那么这里的name应设置为”图表分类”。

1.4、暂不支持的功能

  • 被联动

    暂不支持自定义图表响应参数热点联动。

  • 快照预览

    报表生成的快照中,暂不支持自定义图表。

  • 智能报告中的表格指标

    智能报告中链接的表格指标中,暂不支持自定义图表。

1.5、其他功能约束

  • 服务端导出Excel、Word、pdf文件前,自定义图表必须要先在网页上预览过才能正常导出。
  • 客户端打印/打印预览前,自定义图表必须要先在网页上预览过才能正常打印/打印预览。
  • 客户端导出Excel/pdf前,自定义图表必须要先在网页上预览过才能正常导出。
作者:柳杨  创建时间:2023-08-31 10:07
最后编辑:柳杨  更新时间:2025-04-22 15:31