ABI-酷屏自定义组件(echarts)

7841
4

橙子 小试身手Lv3

发表于2019-7-31 11:23

楼主
需求:ABI酷屏自定义组件(echarts)。
去echarts官网(https://echarts.baidu.com/examples/editor.html?c=line-simple)找效果图,以基础的折线图为例,整体两个data分别代表x轴数据和y轴数据,还有一个lineStyle的color属性,可以通过改变它的值来控制折线颜色。

步骤:
1.在自定义组件或分组上右键,选择新建HTML组件。
2.去取数定义里设置我们需要的变量,就是指x轴(xdata)和y轴(ydata)对应的数据。
3. 去属性中添加一个color属性来控制折线颜色。colorText
4.开始写代码,default.js用来写js代码,default.css是样式文件,如果还需要别的文件,可以点击加号添加,js和css最多可以各添加5个,每个大小在100k以下。

5.
写js,定义两个全局变量来存放我们的折线图对象和折线颜色。 chart=null;var colorTest=null;
6.去初始化init方法里,用变量存放取数得到的变量。 var initdatax =eval(vardata.xdata); var initdatay =eval(vardata.ydata);  
7.判断是否引入文件,没有则引 if(!window["echarts4"]){EUI.include("vfs/root/products/ebi/sys/coolrpt/coolresource/js/echarts.js");}
8.初始化chart对象。chart = echarts4.init(basedom); 自定义第三方echarts组件.pdf (390.93 KB, 下载次数: )
9.实现并调用getValue,初始化属性面板属性值。

10.写getOption方法用来传给chart对象,并调用。

11.调用chart.setOption(opt);

12. 颜色属性设置,实现setProperty。

13. 联动刷新数据,实现refreshDatas()。

14. 实现自适应resize。

15. 实现销毁dispose。
***附件是折线图组件(可以直接选择导入组件)、word文档详细制作自定义组件。
完整default.js 如果直接粘贴default.js 。
1)注意
取数定义(xdata)和y轴(ydata)。
2)属性中添加一个color属性来控制折线颜色。colorTest)
/*
* 初始化方法
*
* @params cwidget 组件对象
* @params vardata 取数定义中定义的变量,json格式:{'var1':'xxx'}
* @params storagedata 组件自己需要存储的值,字符串格式
* @params events 事件,用户在右边属性上设置的事件, json格式:{'evt1': function(){...}, 'evt2':function(){....}}
* @params resources 资源及权限校验,json格式:{'resids': ['EBI$12$xxx$1$xxx.rpttpl','EBI$12$xxx$1$xxx.coolrpt'], 'pms': [true, false]}
*/
var chart=null;
var colorTest=null;
function init(cwidget, vardata, events, storagedata, resources){
    var basedom = cwidget.basedom;
    debugger;
    //1、得到取数的变量
    var initdatax =eval(vardata.xdata);  
    var initdatay =eval(vardata.ydata);  
    //2.引入外部js
    if(!window["echarts4"])
    {        
            EUI.include("vfs/root/products/ebi/sys/coolrpt/coolresource/js/echarts.js");         
     }
         //3初始化charts对象
    chart = echarts4.init(basedom);
    //4.实现getValue,初始化属性面板属性值
    getValue(cwidget);
    //5.写getoption方法用来给chart传对象
    var opt=getOption(initdatax,initdatay);
    //6.调用chart的setOption
    chart.setOption(opt);
    //渲染option(官网option示例)
    function getOption(initdatax,initdatay){
        var option = {
    xAxis: {
        type: 'category',
        data: initdatax
    },
    yAxis: {
        type: 'value'
    },
    series: [{
        data: initdatay,
        type: 'line',
        lineStyle:{
            color: colorTest
        }
};
        return option;
    }

    if(cwidget.isresultview){
        //只在结果界面的时候执行,例如只想在结果界面绑定click事件
    }
}

/**
* 定义了自定义属性时,必须实现该方法,方法名为setProperty
* 当在属性面板上修改属性后,会调用该方法
* @param key  属性名
* @param value  属性值
* @param cwidget  组件对象
* @returns
*/
function setProperty(key, value, cwidget) {
     //7.颜色属性设置,实现setProperty
    var opt=chart.getOption();
    if (key === 'color') {
            //修改属性xxx时,触发的事
     opt.series[0].lineStyle.color = value;
    }
    chart.setOption(opt);
}

/**
* 刷新操作,数据改变时,调用该方法,重新渲染数据
* @param cwidget 组件对象
* @param vardata 取数定义中定义的变量,json格式:{'var1':'xxx'}
* @param storagedata  组件自己需要存储的值,字符串格式
* @returns
*/
function refreshDatas(cwidget, vardata, storagedata){
     //8.联动刷新数据,实现refreshDatas()
    var basedom = cwidget.basedom;
    var opt=chart.getOption();
    var initdatax =eval(vardata.xdata);  
    var initdatay =eval(vardata.ydata);  
    opt.xAxis[0].data=initdatax;
    opt.series[0].data=initdatay;
   chart.setOption(opt);
}

/**
* 组件大小改变时执行
* @param cwidget 组件对象
* @returns
*/
function resize(cwidget){
    //9.实现自适应resize
    chart.resize();
}

/**
* 获取组件的参数值
* @param cwidget 组件对象
* @returns
*/
function getValue(cwidget){
     colorTest = cwidget.getProperty("color");
}

/**
* 获取组件的参数名称
* @param cwidget 组件对象
* @returns
*/
function getParamName(cwidget){

}


/*
* 销毁操作,销毁自己相关的东西
*/
function dispose(cwidget){
       //10.实现销毁dispose
    chart.dispose();
    chart = null;
    colorTest = null;
}






803b2ee95727463688b10784d4df75f6.zip (535.83 KB, 下载次数: ) 引入资源管理器js.zip (529.6 KB, 下载次数: )

最近看过此主题的会员

zhzh

chestnut

esen_4UYRF6XO3U

liu20220622

esen_4UUKEMYGNT

wxw

武威

DJY

youya1888

15350939

4个回答

只看楼主

辰哥 管理员

发表于2019-12-5 11:36

只看该作者

取消 关注该作者的回复

沙发

感谢楼主分享!很棒的技能操作贴

yangm 数据达人Lv4

发表于2020-6-28 15:18

只看该作者

取消 关注该作者的回复

板凳

郑少玲 数据小白Lv1

发表于2020-12-10 13:09

只看该作者

取消 关注该作者的回复

地板

辰哥 发表于 2019-12-5 11:36
感谢楼主分享!很棒的技能操作贴

你好,echarts是一整个包来着的,怎么把包放到项目里并且引入呢

橙子 小试身手Lv3

发表于2021-1-20 17:47

只看该作者

取消 关注该作者的回复

5#

郑少玲 发表于 2020-12-10 13:09
你好,echarts是一整个包来着的,怎么把包放到项目里并且引入呢

是echarts嘛?可以把js库放到资源管理器引入呢~

登录后可回答问题,请登录注册

快速回复 返回顶部 返回列表

小时

全天响应

分钟

快速处理问题

工程师强势助力

明星产品
解决方案
联系合作

渠道咨询电话:137-0120-6790

技术支持QQ:400-0011-866(工作日9:00-18:00)

产品建议邮箱yixin@esensoft.com

关注我们

扫TA学习更多干货

一对一专家交流

版权所有© 2006-2024 北京亿信华辰软件有限责任公司 京ICP备07017321号 京公网安备11010802016281号