[ABI 5.1] 酷屏引入日历图报错

20184
12

nannan 数据老手Lv5

发表于2020-11-10 14:39

悬赏10

已解决

楼主
js代码:var chart = null;
/*
* 初始化方法
*
* @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]}
*/
function init(cwidget, vardata, events, storagedata, resources){
    var basedom = cwidget.basedom;
    cwidget.defdata = vardata;
    renderChart(cwidget,vardata);

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

/**
* 渲染环形图
*/
function renderChart(cwidget,vardata){
    var option = getOption(cwidget,vardata);
   if(!window["echarts"]) {
                EUI.include("vfs/root/products/ebi/sys/coolrpt/coolresource/js/third/echartse.js");
    }
    if(!chart){
        chart = echarts.init(cwidget.basedom);
        chart.setOption(option);

    }else{
        chart.clear();
        chart.setOption(option);

    }
}

function getVirtulData(year) {
    var date = new Date();
    year = date.getFullYear();
    var date = +echarts.number.parseDate(year + '-01-01');
    var end = +echarts.number.parseDate((+year + 1) + '-01-01');
    var dayTime = 3600 * 24 * 1000;
    var data = [];
    for (var time = date; time < end; time += dayTime) {
        data.push([
            echarts.format.formatTime('yyyy-MM-dd', time),
            Math.floor(Math.random() * 1000)
        ]);
    }
    console.log(data[data.length - 1]);
    return data;
}

function getMon(date){
    var date = new Date();
    var seperator1 = "-";
    var year = date.getFullYear(); //获取完整的年份(4位)
    var mon = date.getMonth()+1; //获取当前月份(0-11,0代表1月)
        if (mon >= 1 && mon <= 9) {
        mon = "0" + mon;
    }
    var date = year + seperator1 + mon;
    return date ;
}  //获取当前月

function getOption(cwidget,vardata) {
    var date = new Date();
    var year = date.getFullYear();
    var data = getVirtulData(year);
    var mon = getMon(date);

    var y = JSON.parse(vardata.data);
    var name=JSON.parse(vardata.name);
    var color=JSON.parse(cwidget.getProperty('color'));
    var colorx=JSON.parse(cwidget.getProperty('colorx'));
    var colorf=JSON.parse(cwidget.getProperty('colorf'));
    var colorw=JSON.parse(cwidget.getProperty('colorw'));
    var cellSize = [40, 40]; //格子大小
        var option= {
     backgroundColor: '#02111E',
     tooltip: {
    },
    calendar: [{
        left: '2%',
        top: 'middle',
        orient: 'vertical',
        cellSize: cellSize,
        splitLine:{
                        show:true,
                        lineStyle:{
                                color: colorf[0],
                width:0.6,
                type:'solid'
                        }
                },  //网格线设置
        yearLabel: {show:false},
        dayLabel: {
            margin: 8,
            color: colorx[0],
            fontSize: Number(cwidget.getProperty("size")),
            fontFamily: 'normal',
            firstDay: 1,
            nameMap: 'cn'
        },  //星期字体设置
       itemStyle: {
            color: '#02111E',
            borderWidth: 0.2,
            borderColor:colorw[0]
        }, //小格子样式设置
        monthLabel: {
            show: false
        },
        range: '2020-11' //时间范围
    }],
    series: [{
        type: 'scatter',
        coordinateSystem: 'calendar', //坐标系为日历
        dimensions: [null, {type: 'ordinal'}],
        symbolSize: function (val) {
            return val[1] / 60;
        },
        label: {
            normal: {
                show: true,
                formatter: function (params) {
                    return echarts.format.formatTime('dd', params.value[0]);
                },
                offset: [-cellSize[0] / 2 + 10, -cellSize[1] / 2 + 10],
                textStyle: {
                       color: colorx[0],
                       fontSize: Number(cwidget.getProperty("size")),
                       fontFamily: 'normal',
                }
            }
        },
        data: data
    }]
};
return option;
}

function hexToRgb(hex,opacity){
    var color1, color2, color3;
    hex = ""+hex;
    if (typeof hex !== "string") return;
    if (hex.charAt(0) == "#") {
        hex = hex.substring(1);
    }
    if (hex.length == 3) {
        hex = hex[0]+hex[0]+hex[1]+hex[1]+hex[2]+hex[2];
    }
    if (/^[0-9a-fA-F]{6}$/.test(hex)) {
    color1 = parseInt(hex.substr(0,2), 16);
    color2 = parseInt(hex.substr(2,2), 16);
    color3 = parseInt(hex.substr(4,2), 16);
    return "rgba("+color1+","+color2+","+color3+","+opacity+")";
    }
}




/**
* 定义了自定义属性时,必须实现该方法,方法名为setProperty
* 当在属性面板上修改属性后,会调用该方法
* @param key  属性名
* @param value  属性值
* @param cwidget  组件对象
* @returns
*/
function setProperty(key, value, cwidget) {
    if (key === 'color' || key === 'colorx' || key === 'colorf' || key === 'colorw' || key === 'size') {
        //修改属性xxx时,触发的事
        renderChart(cwidget,cwidget.defdata,value);
    } else if (key === 'yyy') {
            //修改属性yyy时,触发的事

    }
}

/**
* 刷新操作,数据改变时,调用该方法,重新渲染数据
* @param cwidget 组件对象
* @param vardata 取数定义中定义的变量,json格式:{'var1':'xxx'}
* @param storagedata  组件自己需要存储的值,字符串格式
* @returns
*/
function refreshDatas(cwidget, vardata, storagedata){
    var basedom = cwidget.basedom;
   renderChart(cwidget,vardata);

}

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


/**
* 获取组件的参数值
* @param cwidget 组件对象
* @returns
*/
function getValue(cwidget){

}

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

}


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

点击预览后可以显示我做出来的图,但是只要点击计算酷屏就会报错,这个报错是啥意思呀,如果是js有问题为什么在组件里点击预览不会报错呢

最近看过此主题的会员

zhouxm

亿信华

esen_4XHIXNY0LN

l1236

伶俐

dddfrr

阿蜀

esen_4YO0F42DH6

esen_4S16N8ACZA

v笑向前走

zzz123xzawdw

hero851815

最佳答案
代码里引用js的语句是正确的,所以还是没有引用正确的echart的js 。建议您到echart官网更换其他js试试
12个回答

只看楼主

凹凸曼 初学数据Lv2

发表于2020-11-10 14:55

只看该作者

取消 关注该作者的回复

沙发

自定义组件可以自己检查一下代码问题,看着是没echart导致的看看是不是引用或者使用的时候没有定义

nannan 数据老手Lv5

发表于2020-11-10 15:18

只看该作者

取消 关注该作者的回复

板凳

凹凸曼 发表于 2020-11-10 14:55
自定义组件可以自己检查一下代码问题,看着是没echart导致的看看是不是引用或者使用的时候没有定义 ...

function renderChart(cwidget,vardata){
    var option = getOption(cwidget,vardata);
   if(!window["echarts"]) {
                EUI.include("vfs/root/products/ebi/sys/coolrpt/coolresource/js/third/echartse.js");
    }
    if(!chart){
        chart = echarts.init(cwidget.basedom);
        chart.setOption(option);

    }else{
        chart.clear();
        chart.setOption(option);

    }
}
是不是这里出了问题,因为我看酷屏的全局资源里面并没有日历图相关的js,但是如果我需要引入日历图相关的js是要去echarts的官网下载吗?

凹凸曼 初学数据Lv2

发表于2020-11-10 15:28

只看该作者

取消 关注该作者的回复

地板

nannan 发表于 2020-11-10 15:18
function renderChart(cwidget,vardata){
    var option = getOption(cwidget,vardata);
   if(!window[ ...

对啊引用外部js肯定需要js存在呀,酷屏中引入外部js做自定义组件可以看看这个帖子的教程https://bbs.esensoft.com/thread-132641-1-1.html

nannan 数据老手Lv5

发表于2020-11-10 15:49

只看该作者

取消 关注该作者的回复

5#

凹凸曼 发表于 2020-11-10 15:28
对啊引用外部js肯定需要js存在呀,酷屏中引入外部js做自定义组件可以看看这个帖子的教程https://bbs.esen ...

我知道这个方法,但是不知道外部js去哪里引入

凹凸曼 初学数据Lv2

发表于2020-11-10 15:53

只看该作者

取消 关注该作者的回复

6#

nannan 发表于 2020-11-10 15:49
我知道这个方法,但是不知道外部js去哪里引入

下载官网的js然后传到系统设置中的资源管理器中再用EUI.include引用js
EUI.include("资源管理器路径");

nannan 数据老手Lv5

发表于2020-11-10 15:59

只看该作者

取消 关注该作者的回复

7#

凹凸曼 发表于 2020-11-10 15:53
下载官网的js然后传到系统设置中的资源管理器中再用EUI.include引用js
EUI.include("资源管理器路径"); ...

是把这里的js复制出来弄成一个js文件传到资源管理器里面是吗,但是我下载了资源管理器里面原有的一些echarts文件,里面都很复杂啊

凹凸曼 初学数据Lv2

发表于2020-11-10 17:28

只看该作者

取消 关注该作者的回复

8#

nannan 发表于 2020-11-10 15:59
是把这里的js复制出来弄成一个js文件传到资源管理器里面是吗,但是我下载了资源管理器里面原有的一些echa ...

把需要调用的js上传到资源管理器中,具体例子看上面发的那个帖子

nannan 数据老手Lv5

发表于2020-11-10 18:09

只看该作者

取消 关注该作者的回复

9#

凹凸曼 发表于 2020-11-10 17:28
把需要调用的js上传到资源管理器中,具体例子看上面发的那个帖子

那个帖子里没有写啊哭了,只写了引入外部js文件

凹凸曼 初学数据Lv2

发表于2020-11-10 18:12

只看该作者

取消 关注该作者的回复

10#

nannan 发表于 2020-11-10 18:09
那个帖子里没有写啊哭了,只写了引入外部js文件

需要调用的上传到资源管理器中,再在自定义组件中调用就行了

nannan 数据老手Lv5

发表于2020-11-10 19:00

只看该作者

取消 关注该作者的回复

11#

凹凸曼 发表于 2020-11-10 18:12
需要调用的上传到资源管理器中,再在自定义组件中调用就行了

我这样试了不行,感觉哪里有问题

上一页12下一页共2页

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

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

小时

全天响应

分钟

快速处理问题

工程师强势助力

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

400咨询:400-0011-866

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

产品建议邮箱yixin@esensoft.com

关注我们

扫TA学习更多干货

一对一专家交流

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