亿信ABI
当前版本:5.6.1

自定义敏捷看板组件-统计图组件

1.概述

本文档用于介绍如何自定义敏捷看板组件-统计图组件。

2.操作说明

2.1新建组件

进入【组件库管理】-【组件库】-【敏捷看板组件】中,打开自定义组件标签页,点击新建组件。

2.2组件的html结构

<div style="width:100%;height:100%"></div>

普通统计图一般是用echarts实现的,所以只用定义一个div作为容器即可,里面用echarts生成统计图

2.3组件的js脚本

1)内置对象

目前工程已经内置了一些对象,来处理公共的属性,对象如下。

对象

对象说明

BaseChart

简单的封装了echarts对象,相当于一个中间过渡对象。【用户设置-->BaseChart-->Echart】

Legend

图例,负责将用户设置的属性转变为echarts需要的图例设置。【用户的图例设置->BaseChart.ChartLegend-->Echarts.legend】

ChartAxisMgr

轴管理,负责将用户设置的属性转变成echarts需要的轴设置,持有ChartAxis对象。【用户的轴设置->BaseChart.ChartAxisMgr-->Echarts.axis】

ChartWall

背景墙,负责将用户设置的属性转变成echarts需要的wall设置。【用户的背景设置->BaseChart.ChartWall-->Echarts.wall】

ChartTitle

标题,负责将用户设置的属转为echarts需要的title设置。【用户的标题设置->BaseChart.ChartTitle-->Echarts.title】

ChartSeries

系列,统计图关于系列相关的操作

详细说明见:基类统计图属性名称列表

2)定义一个统计图类

为每个统计图类型定义一个类,以线状图为例,先定义一个LineChart对象

var basechart = require("ewonderwidget/dist/resource/basechart/basechart");

/*

* 线状统计图

*/

function LineChart(options) {

  basechart.BaseChart.call(this, options);

  

}

EUI.extendClass(LineChart, basechart.BaseChart, "LineChart");

 

/**

* 【必须】销毁方法

*/

LineChart.prototype.dispose = function() {

  LineChart._superClass.property.dispose.call(this);

}

/**

 * 初始化其他,这里为serie对象添加相应属性处理的方法

 */

LineChart.prototype.initOther = function(){

this.getSeriesObject().setSerieSize = function(value, serieIndex) {

value = value || {

lineWidth : 6

};

this.setSerieExtend({

lineStyle : {

width : value.lineWidth

}

}, serieIndex);

}

this.getSeriesObject().setSerieShow = function(value, serieIndex) {

value = value || {

lineSmooth : true

};

// 只改某个系列,还是所有的都改

this.setSerieExtend({

showSymbol: value.showLinePoint,

smooth : value.lineSmooth,

symbol: value.lineShape,

symbolSize: value.pointSize

}, serieIndex);

}

}

/**

*【必须】生成统计图配置之前执行的逻辑

*可以在这时候处理取数数据到相应的对象中

*/

LineChart.prototype.beforeSave = function(){

  var axisRcData = this.getZbInfos("axis");

  var serieRcData = this.getZbInfos("serie");

  var serieColorRcData = this.getZbInfos("serieColor");

  

  var axisVarData = this.vardata["axis"];

  var serieVarData = this.vardata["serie"];

  //看有几个指标

  var serieCount = serieRcData.length;

  // 收集系列,这里只是指标对应的系列,维度对应的系列是在getSerieConfig的地方生成的

  var newSeries = [];

  for (var i = 0, len = serieCount; i < len; i++) {

var zbInfos = serieRcData[i];

newSeries.push({

data : serieCount == 1 ? serieVarData : serieVarData[i],

name : zbInfos.caption,

zbname: zbInfos.name

});

  }

  //重置系列【必须调用】

  this.getSeriesObject().resetSeries(newSeries);

  //重置坐标轴【根据统计图是否需要有轴来调用】

  this.getAxisMgrObject().setCategoryData(axisVarData);

}

 

//【可选】如果希望在自定义组件预览时显示特定的系列指标名称,可以覆盖父类的默认实现

LineChart.prototype.getPreviewRcData = function(vardata){

return {

axis: [ {

name : "",

caption : "日期"

} ],

serie:[ {

name : "",

caption : "曝光量"

} ],

serieColorRcData:[ {

name : "",

caption : "颜色"

} ]

}

}

/**

 * 【必须】获取系列的配置

 * @param {ChartSerie} chartSerie 系列对象,注意这里指的属性面板配置的系列

 * @param {Number} index 系列的索引

 * @returns 返回echart的series部分的配置,可以是单个,也可以是数组

 */

LineChart.prototype.getSerieConfig = function(chartSerie, index) {

//先获取默认的配置

var config = chartSerie.getConfig(), serieCount = this.getRealSerieCount();

//保证系列类型的存在

config.type = config.type || "line";

var serieShow = chartSerie.getProperty("serieShow");

if(serieShow.showZero){

//0值显示

var data = chartSerie.getConfig().data;

//测试0值显示效果:data[2] = "0";

var length = data.length;

for(var i=0;i<length;i++){

if(data[i] === "0"){

data[i] = "-";

}

}

}

//最后一步去取颜色,保证数据都生成好了

var serieColor = this.getSerieColor(chartSerie, index, serieCount);

if(config.type == "line") {

config.lineStyle = config.lineStyle || {};

config.lineStyle.color = serieColor;

}

config.itemStyle = config.itemStyle || {};

if(!config.itemStyle.color) {

config.itemStyle.color = serieColor;//没有设置折点颜色的时候才设置为系列颜色

}

//折点颜色在data里面设置,防止改变折点颜色导致图例颜色进行了修改

if(serieShow.lineColor || serieShow.lineBorderColor){

var data = config.data;

var itemStyle = {};

if(serieShow.lineColor){

itemStyle["color"] = serieShow.lineColor;

}

if(serieShow.lineBorderColor){

itemStyle["borderColor"] = serieShow.lineBorderColor;

}

data.forEach(function(item, index){

var value = {};

value["value"] = item;

value["itemStyle"] = itemStyle;

data[index] = value;

});

}

return config;

}

 

3)实现自定义组件接口-init方法

/**

 * 组件的初始化方法

 *

 * @params widget 自定义组件对象

 * @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(widget, vardata) {

widget.lineChart = new LineChart({

    wnd:widget.wnd,

    widget:widget,

    parentElement:widget.basedom

  });

  widget.lineChart.setVarData(vardata);

  widget.lineChart.initChart();

}

 

4)实现自定义组件接口-refreshDatas方法

/**

* 刷新操作,数据改变时,调用该方法,重新渲染数据

* @param widget 组件对象

* @param vardata 取数定义中定义的变量,json格式:{'var1':'xxx'}

* @param storagedata  组件自己需要存储的值,字符串格式

* @returns

*/

function refreshDatas(widget, vardata, storagedata) {

// 清除上次的数据,防止数据错乱

widget.lineChart.setVarData(vardata);

var newchartdata = widget.lineChart.toJson();

widget.lineChart.setOption(newchartdata, true);

}

 

5)其他的必要方法

/**

* 定义了自定义属性时,必须实现该方法,方法名为setProperty

* 当在属性面板上修改属性后,会调用该方法

* @param key  属性名

* @param value  属性值

* @param widget  组件对象

*/

/**

* 定义了自定义属性时,必须实现该方法,方法名为setProperty

* 当在属性面板上修改属性后,会调用该方法

* @param key  属性名

* @param value  属性值

* @param widget  组件对象

*/

function setProperty(key,value,widget){

  return widget.lineChart.setProperty(key,value);

}

/**

* 定义了自定义属性时,必须实现该方法,方法名为getProperty

* 当选中组件时,会调用该方法获取属性值,显示在属性面板上

* @param key  属性名

* @param widget  组件对象

*/

function getProperty(key,widget){

   if(widget.lineChart){

 return widget.lineChart.getProperty(key);

}

}

 

/**

* 组件大小改变时执行

*/

function resize(widget) {

  widget.lineChart.resize();

}

/*

* 销毁操作,销毁自己相关的东西

*/

function dispose(widget) {

  widget.lineChart.dispose();

  widget.lineChart = null;

}

2.4属性

统计图的属性设置比较复杂,很多不是普通的输入框下拉框,因此都写定义成了内置的自定义属性对象

1)属性类型说明

目前自定义组件支持选择的属性类型:

属性类型

使用说明

脚本示例

输入框

edit

直接选择

 

文本框

textarea

直接选择

 

下拉框

select

选择此类型后,在待选项脚本中返回下拉项的内容

function userFunc(widget){
return [['top','居上'],['center','居中'],['bottom','居下']];
}

复选框

checkbox

直接选择

 

维下拉框editcombobox

直接选择

 

日历框calendarcombobox

直接选择

 

颜色拾取框

color

直接选择

 

分组

选择分组后,在带选项脚本中返回分组的属性

 

如果是tab页: function userFunc(widget){ return {type:"tab"}};
如果是普通group:function userFunc(widget){return {hasswitch:true}}
生成属性普通分组时默认不显示开关组件,如果需要开关组件,需要在待选项函数中返回{"hasswitch":"true"},并且提供相应的set方法处理开关值改边后的效果

自定义

custom

所有不是上方能支持的属性项效果,以及下面几个简单的,都选这个类型。

然后在待选项脚本中返回一个new的自定义的属性对象

对象参考propitems.js里实现即可

function userFunc(widget){
 var gridLines = require("ewonderwidget/dist/resource/js/gridlines");
return new gridLine.GridLine({wnd:widget.wnd});
}

特殊的几个属性,也可以直接使用,但是需要在"高级编辑"里输入:

属性类型

类型

使用说明

 

type改为font

 或 custom

在脚本中写它的选项

function userFunc(widget){return ['fn','sz','stl','cl','agn','vgn'];}

返回的数组中:fn:字体,sz:字号,stl:粗细,cl:颜色,agn:水平位置,vgn:垂直位置。(选项可选)

type为custom时,需要加上下面脚本

function userFunc(widget){
var propitems = require("ewonderwidget/dist/resource/js/propitems");
var obj = new propitems.FontCustomEditorItem({wnd:widget.wnd,wids:["fn","sz","stl","cl"]});
return obj;
}

 

type改为editslider

function userFunc(widget){return return {minValue:0,maxValue:100,step:1};}

 

type改为spinner

 

 

type改为switch

或者

type未custom

type为custom时,需要加上下面脚本

function userFunc(widget){
var propitems = require("ewonderwidget/dist/resource/js/propitems");
var obj = new propitems.SwitchCustomEditorItem({wnd:widget.wnd});
return obj;
}

 

type改为radiogroup
在脚本中写它的选项

function userFunc(widget){
return [['top','居上'],['center','居中'],['bottom','居下']];
}

图片拾取框

type为 editbrowser

并在type平级的地方增加属性

dlgtype:"img"

 

2)属性配置要求

(1) 所有name都要用小写驼峰的格式

(2) 需要内置的常用对象处理的属性,必须以特定字符开头,系列(serie)、图例(legend)、标题(title)、轴(axis)、背景(background)

(3) 新加的属性,不要通过改代码,去加特定逻辑实现,都通过custom类型实现

(4) 关于属性的联动,都通过下面的方式配置

{

 "name": "legendOrient",

 "caption": "布局方式",

 "type": "select",

 "pname": "legendGroup",

 "options": "function userFunc(widget){\nreturn [['horizontal','水平'],['vertical','垂直']];\n}\n",

 "defattr": "horizontal",

 "isedit": "true",

 "isshow": "true",

 "onchanged": { //refresh、visible、enable可以任选

"refresh":["name1","name2"],//属性值变化时,刷新name1和name2的值

    "visible":{

"horizontal":["name3","name4"], //属性值变化时,name3和name4显示,name5和name6隐藏

"vertical":["name5","name6"], //属性值变化时,name3和name4隐藏,name5和name6显示

     },

"enable":{

"horizontal":["name3","name4"], //属性值变化时,name3和name4可用,name5和name6禁用

"vertical":["name5","name6"], //属性值变化时,name3和name4禁用,name5和name6可用

     }

  }

 }

 

3)属性配置示例

(1) 线状图属性-常用

分组名称

分组配置

属性名称

属性配置

属性值

常用

{
"name": "usual",
"caption": "常用",
"type": "group",
"options": "function userFunc(widget){\nreturn {type:\"tab\"}\n}",
"defattr": "",
"isedit": "true",
"isshow": "true",
"pname": ""
}

 

 

系列(分组)

{
"name": "serie",
"caption": "系列",
"type": "group",
"options": "function userFunc(widget){\nreturn {type:\"float\"}\n}",
"defattr": "",
"isedit": "true",
"isshow": "true",
"pname": "usual"
}

类型注意必须要有默认值,就是echarts中

serie.type的值

{
"name": "serieType",
"caption": "类型",
"type": "custom",
"options": "function userFunc(widget){\n var seriesType= require(\"ewonderwidget/dist/resource/js/seriestype\");\n var obj = new seriesType.SeriesType({\n wnd:widget.wnd,\n title:\"类型\",\n type:\"line\"\n });\n return obj;\n}",

"defattr": "line",
"isedit": "true",
"isshow": "true",
"pname": "serie"
}

{String}

line|bar|horzbar|area

 

 

颜色

{
"name": "serieColor",
"caption": "颜色",
"type": "custom",
"options": "function userFunc(widget){\n var upload = require(\"ewonderwidget/dist/resource/js/upload\");\n var obj = new upload.UpLoadDlg({\n wnd:widget.wnd,\n title:\"颜色\",\n property:\"serieColor\" });\n return obj;\n}",
"isedit": "true",
"isshow": "true",
"pname": "serie"
}

{field:{},//字段信息

property:{

serieColor:{

type:"custom",//自定义颜色

custom:[["#6c33da","#8f85ee"],["#30cca0","#86f3e0"]]

}}}

 

 

大小

{
"name": "serieSize",
"caption": "大小",
"type": "custom",
"options": "function userFunc(widget){\n var upload = require(\"ewonderwidget/dist/resource/js/upload\");\n var obj = new upload.UpLoadDlg({\n wnd:widget.wnd,\n title:\"大小\",\n property:[{\ntype:\"editslider\",caption:\"线宽\",name:\"lineWidth\",options:{maxValue:100,minValue:1,step:5}\n}] });\n return obj;\n}",
"isedit": "true",
"isshow": "true",
"pname": "serie"
}

{field:{},//字段信息

property:{

lineWidth:"100" //线宽100像素

}

}

 

 

数据标志

{
"name": "serieDataMark",
"caption": "数据标志",
"type": "custom",
"options": "function userFunc(widget){\n var upload = require(\"ewonderwidget/dist/resource/js/upload\");\n var obj = new upload.UpLoadDlg({\n wnd:widget.wnd,\n title:\"数据标志\",\n property:\"serieDataMark\" });\n return obj;\n}",
"isedit": "true",
"isshow": "true",
"pname": "serie"
}

 

 

 

提示

{
"name": "serieTip",
"caption": "提示",
"type": "custom",
"options": "function userFunc(widget){\n var upload = require(\"ewonderwidget/dist/resource/js/upload\");\n var obj = new upload.UpLoadDlg({\n wnd:widget.wnd,\n title:\"提示\",\n property:\"serieTip\"});\n return obj;\n}",
"isedit": "true",
"isshow": "true",
"pname": "serie",
"defattr": "{\"field\":{},\"property\":{\"tipFormat\":\"9\",\"tipBkcl\":\"#333\",\"tipTransp\":\"50\",\"tipFont\":{}}}"
}

 

 

 

显示

{
"name": "serieShow",
"caption": "显示",
"type": "custom",
"options": "function userFunc(widget){\n var upload = require(\"ewonderwidget/dist/resource/js/upload\");\n var obj = new upload.UpLoadDlg({\n wnd:widget.wnd,\n title:\"显示\",\n property:\"serieShow_line\" });\n return obj;\n}",
"isedit": "true",
"isshow": "true",
"pname": "serie"
}

 

标题(分组)

{
"name": "titlegroup",
"caption": "标题",
"type": "group",
"options": "function userFunc(widget){\nreturn {hasswitch:\"true\"}\n}\n",
"defattr": "",
"isedit": "true",
"isshow": "true",
"pname": "usual"
}

标题

{
"name": "title",
"caption": "标题",
"type": "custom",
"options": "function userFunc(widget){\n var qtitleprop = require(\"ewonderwidget/dist/resource/js/qtitleprop\");\n var obj = new qtitleprop.QTitleProp({wnd:widget.wnd});\n return obj;\n}",
"isedit": "true",
"isshow": "true",
"pname": "titlegroup"
}

 

图例(分组)

{
"name": "legendGroup",
"caption": "图例",
"type": "group",
"pname": "usual",
"options": "function userFunc(widget){\nreturn {hasswitch:\"true\"}\n}\n",
"defattr": "",
"isedit": "true",
"isshow": "true",
"desc": ""
}

图例宽度

{
"name": "legendWidth",
"caption": "图例宽度",
"type": "edit",
"pname": "legendGroup",
"options": "",
"defattr": "20",
"isedit": "true",
"isshow": "true",
"desc": ""
}

 

 

 

图例高度

{
"name": "legendHeight",
"caption": "图例高度",
"type": "edit",
"pname": "legendGroup",
"options": "",
"defattr": "15",
"isedit": "true",
"isshow": "true",
"desc": ""
}

 

 

 

布局方式

{
"name": "legendOrient",
"caption": "布局方式",
"type": "select",
"pname": "legendGroup",
"options": "function userFunc(widget){\nreturn [['horizontal','水平'],['vertical','垂直']];\n}\n",
"defattr": "horizontal",
"isedit": "true",
"isshow": "true",
"desc": ""
}

 

 

 

水平安放

{
"name": "legendX",
"caption": "水平安放",
"type": "select",
"pname": "legendGroup",
"options": "function userFunc(widget){\nreturn [['left','居左'],['center','居中'],['right','居右']];\n}\n",
"defattr": "center",
"isedit": "true",
"isshow": "true",
"desc": ""
}

 

 

 

垂直安放

{
"name": "legendY",
"caption": "垂直安放",
"type": "select",
"pname": "legendGroup",
"options": "function userFunc(widget){\nreturn [['top','居上'],['center','居中'],['bottom','居下']];\n}\n",
"defattr": "top",
"isedit": "true",
"isshow": "true",
"desc": ""
}

 

 

 

图例形状

{
"name": "legendShape",
"caption": "图例形状",
"type": "select",
"options": "function userFunc(widget){\nreturn [['circle','圆形'],['rect','矩形'],['roundRect','圆角矩形'],['triangle','三角形'],['diamond','菱形'],['arrow','箭头']];\n}\n",
"defattr": "circle",
"isedit": "true",
"isshow": "true",
"desc": "",
"pname": "legendGroup"
}

 

 

 

字体

{
"name": "legendFont",
"caption": "字体",
"type": "font",
"pname": "legendGroup",
"options": "function userFunc(widget){\nreturn ['fn','sz','stl','cl'];\n}\n",
"defattr": "",
"isedit": "true",
"isshow": "true",
"desc": ""
}

 

 

 

边框

{
"name": "legendBorder",
"caption": "边框",
"type": "custom",
"options": "function userFunc(widget){\n var propitems = require(\"ewonderwidget/dist/resource/js/propitems\");\n var obj = new propitems.LegendBorderItem({\n wnd:widget.wnd,\n title:\"边框\",\n property:[] });\n return obj;\n}",
"defattr": "",
"isedit": "true",
"isshow": "true",
"desc": "",
"pname": "legendGroup"
}

 

 

 

填充

{
"name": "legendFillColor",
"caption": "填充",
"type": "color",
"pname": "legendGroup",
"options": "",
"defattr": "",
"isedit": "true",
"isshow": "true",
"desc": ""
}

 

 

 

透明度

{
"name": "legendOpacity",
"caption": "透明度",
"type": "editslider",
"pname": "legendGroup",
"options": "function userFunc(widget){\n return {minValue:0,maxValue:100,step:1}\n}\n",
"defattr": "0",
"isedit": "true",
"isshow": "true",
"desc": ""
}

 

单位

{
"name": "titleUnitGroup",
"caption": "单位",
"type": "group",
"pname": "usual",
"options": "function userFunc(widget){\nreturn {hasswitch:\"true\"}\n}\n",
"defattr": "",
"isedit": "true",
"isshow": "true",
"desc": "",
"switch": "true"
}

单位

{
"name": "titleUnit",
"caption": "单位",
"type": "edit",
"pname": "titleUnitGroup",
"options": "",
"defattr": "",
"isedit": "true",
"isshow": "true",
"desc": ""
}

 

 

 

文字

{
"name": "titleUnitFont",
"caption": "文字",
"type": "font",
"pname": "titleUnitGroup",
"options": "function userFunc(widget){\nreturn ['fn','sz','cl','stl'];\n}\n",
"defattr": "",
"isedit": "true",
"isshow": "true",
"desc": ""
}

 

 

 

垂直方向

 {
            "isshow": "true",
            "isedit": "true",
            "defattr": "top",
            "pname": "titleUnitGroup",
            "name": "titleUnitY",
            "options": "function userFunc(widget){\nreturn [['top','居上'],['center','居中'],['bottom','居下']];\n}\n",
            "caption": "垂直方向",
            "type": "select",
            "desc": ""
        },

 

 

 

水平方向

  {
            "isshow": "true",
            "isedit": "true",
            "defattr": "right",
            "pname": "titleUnitGroup",
            "name": "titleUnitX",
            "options": "function userFunc(widget){\nreturn [['left','居左'],['center','居中'],['right','居右']];\n}\n",
            "caption": "水平方向",
            "type": "select",
            "desc": ""
        },

 

(2) 线状图属性-高级

分组名称

分组配置

属性名称

属性配置

高级

{
"name": "advanced",
"caption": "高级",
"type": "group",
"options": "function userFunc(widget){\nreturn {type:\"tab\"}\n}",
"defattr": "",
"isedit": "true",
"isshow": "true",
"pname": ""
}

 

背景

{
"name": "backgroundGroup",
"caption": "背景",
"type": "group",
"pname": "advanced",
"options": "",
"defattr": "",
"isedit": "true",
"isshow": "true",
"desc": "",
"switch": "true"
}

透明度

{
"name": "opa",
"caption": "透明度",
"type": "editslider",
"pname": "backgroundGroup",
"options": "function userFunc(widget){\n return {minValue:0,maxValue:100,step:1}\n}\n",
"defattr": "0",
"isedit": "true",
"isshow": "true",
"desc": ""
}

 

 

背景颜色

{
"name": "bgcl",
"caption": "背景颜色",
"type": "color",
"options": "",
"defattr": "",
"isedit": "true",
"isshow": "true",
"desc": "",
"pname": "backgroundGroup"
}

 

 

背景图片

{
"name": "bgimg",
"caption": "背景图片",
"type": "editbrowser",
"pname": "backgroundGroup",
"options": "",
"defattr": "",
"isedit": "true",
"isshow": "true",
"desc": "",
"dlgtype": "img"
}

 

 

背景拉伸

{
"name": "bgsz",
"caption": "背景拉伸",
"type": "select",
"pname": "backgroundGroup",
"options": "function userFunc(widget){\nreturn [['11','双向拉伸'],['10','水平拉伸'],['01','垂直拉伸'],['00','不拉伸']];\n}\n",
"defattr": "00",
"isedit": "true",
"isshow": "true",
"desc": ""
}

 

 

平铺方式

{
"name": "bgrepeat",
"caption": "平铺方式",
"type": "select",
"options": "function userFunc(widget) {\nreturn [['no-repeat','不平铺'],['repeat-x','横向平铺'],['repeat-y','纵向平铺'],['repeat','平铺']];\n}\n",
"defattr": "repeat",
"isedit": "true",
"isshow": "true",
"pname": "backgroundGroup"
}

 

 

背景位置

{
"name": "bgpos",
"caption": "背景位置",
"type": "edit",
"options": "",
"defattr": "",
"isedit": "true",
"isshow": "true",
"pname": "backgroundGroup"
}

坐标轴

{
"name": "axisGroup",
"caption": "坐标轴",
"type": "group",
"options": "",
"defattr": "",
"isedit": "true",
"isshow": "true",
"pname": "advanced"
}

坐标轴

{
"isshow": "true",
"isedit": "true",
"defattr": "",
"pname": "axisGroup",
"name": "axises",
"options": "function userFunc(widget){\n\tvar propitems = require(\"ewonderwidget/dist/resource/js/propitems\");\n\tvar obj = new propitems.CoordinateCustomEditorItem({\n\t\twnd:widget.wnd,\n\t\tbtns: [{caption:\"左轴\",value:\"yLAxis\"},{caption:\"右轴\",value:\"yRAxis\"}, {caption:\"底轴\",value:\"xAxis\"}]\n\t});\n\treturn obj;\n}",
"caption": "启用",
"type": "custom",
"desc": ""
}

网格线

{
"name": "axisSplitLinesGroup",
"caption": "网格线",
"type": "group",
"options": "",
"defattr": "",
"isedit": "true",
"isshow": "true",
"pname": "advanced"
}

网格线

{
"name": "axisSplitLines",
"caption": "启用",
"type": "custom",
"options": "function userFunc(widget){\n var gridLines = require(\"ewonderwidget/dist/resource/js/gridlines\");\n var obj = new gridLines.GridLines({\n wnd:widget.wnd,\n data:{xAxis:\"1px solid #FFFFFF\"}\n });\n return obj;\n}",
"defattr": "",
"isedit": "true",
"isshow": "true",
"desc": "",
"pname": "axisSplitLinesGroup"
}

堆积

{
"name": "serieStack",
"caption": "堆积",
"type": "group",
"options": "function userFunc(widget){\nreturn {hasswitch:\"true\"}\n}\n",
"defattr": "",
"isedit": "true",
"isshow": "true",
"pname": "advanced"
}

 

参考线

{
"isshow": "true",
"isedit": "true",
"defattr": "",
"pname": "advanced",
"name": "seriesReferLineGroup",
"caption": "参考线",
"type": "group"
}

 

{
"isshow": "true",
"isedit": "true",
"defattr": "",
"pname": "seriesReferLineGroup",
"name": "seriesReferLine",
"options": "function userFunc(widget){\n var propitems = require(\"ewonderwidget/dist/resource/js/propitems\");\n var obj = new propitems.ReferenceCustomEditorItem({wnd:widget.wnd});\n return obj;\n}\n",
"caption": "",
"type": "custom"
}

数据格式

{
"name": "dataFormatGroup",
"caption": "数据格式",
"type": "group",
"options": "function userFunc(widget){\nreturn {hasswitch:\"true\"}\n}\n",
"defattr": "",
"isedit": "true",
"isshow": "true",
"pname": "advanced"
}

1.指标

-

2.舍位

-

3.数据格式

-

4.小数位数

{
"name": "index",
"caption": "指标",
"type": "edit",
"options": "",
"defattr": "全部指标",
"isedit": "false",
"isshow": "true",
"desc": "",
"pname": "dataFormatGroup"
},
{
"name": "dataFormat",
"caption": "数据格式",
"type": "radiogrouphint",
"options": "function userFunc(widget) {\nreturn [['thousands','千分符'],['percent','百分号','百分号'],['percentage','百分比换算','百分比换算']];\n}\n",
"defattr": "",
"isedit": "true",
"isshow": "true",
"pname": "dataFormatGroup"
},
{
"name": "surrender",
"caption": "舍位",
"type": "select",
"options": "function userFunc(widget) {\nreturn [['1','无'],['10000','万'],['1000000','百万'],['10000000','千万'],['100000000','亿']];\n}\n",
"defattr": "1",
"isedit": "true",
"isshow": "true",
"desc": "",
"pname": "dataFormatGroup"
},
{
"name": "decimalPlace",
"caption": "小数位数",
"type": "spinner",
"options": "",
"defattr": "",
"isedit": "true",
"isshow": "true",
"pname": "dataFormatGroup"
}

其他

{
"name": "otherGroup",
"caption": "其他",
"type": "group",
"defattr": "",
"isedit": "true",
"isshow": "true",
"pname": "advanced"
}

1.展示数据量

-

2.计算规则

-

3.连接方式

-

4.空显示为0

-

5.定时刷新

-

6.维过滤

-

7.自适应

-

8.缓存

-

显示空值项

{
"name": "datasize",
"caption": "展示数据量",
"type": "edit",
"options": "",
"defattr": "",
"isedit": "true",
"isshow": "true",
"pname": "otherGroup"
},
{
"name": "calcrule",
"caption": "计算规则",
"type": "select",
"options": "function userFunc(widget) {\nreturn [['dimconsistency','按一致性维度进行分析'],['joinfirst','多指标先连接后分组']];\n}\n",
"defattr": "dimconsistency",
"isedit": "true",
"isshow": "true",
"pname": "otherGroup",
"desc": "分析多个主题的指标时,按一致性维度规则处理,即主题的字段分别在自己的主题中与自己主题内的维一起查询,然后多个查询按维度字段关联"
},
{
"name": "linktype",
"caption": "连接方式",
"type": "select",
"options": "function userFunc(widget) {\nreturn [['inherit','继承主题集设置'],['left','左连接'],['right','右连接'],['inner','内连接'],['full','全连接']];\n}\n",
"defattr": "inherit",
"isedit": "true",
"isshow": "true",
"pname": "otherGroup",
"desc": "设置多个子查询间连接方式,表示主查询(最开始进行的查询)连接上子查询的方式"
},
{
"name": "nullsequalzero",
"caption": "空显示为0",
"type": "select",
"options": "function userFunc(widget) {\nreturn [['','无'],['true','是'],['false','否']];\n}\n",
"defattr": "",
"isedit": "true",
"isshow": "true",
"pname": "otherGroup"
},

{
"name": "timedRefresh",
"caption": "定时刷新",
"type": "custom",
"options": "function userFunc(widget){\n\tvar propitems = require(\"ewonderwidget/dist/resource/js/propitems\");\n\tvar obj = new propitems.TimedRefresh({wnd:widget.wnd});\n\treturn obj;\n}\n",
"defattr": "",
"isedit": "true",
"isshow": "true",
"pname": "otherGroup"
},

{
"name": "dimfilter",
"caption": "维过滤",
"type": "select",
"options": "function userFunc(widget) {\nreturn [['0','无'],['1','补足维数据'],['2','过滤不在维中的数据'],['3','以上皆选']];\n}\n",
"defattr": "0",
"isedit": "true",
"isshow": "true",
"pname": "otherGroup"
},
{
"name": "adaptive",
"caption": "自适应",
"type": "switch",
"defattr": "",
"isedit": "true",
"isshow": "true",
"pname": "otherGroup"
},
{
"name": "cache",
"caption": "缓存",
"type": "switch",
"options": "",
"defattr": "",
"isedit": "true",
"isshow": "true",
"pname": "otherGroup"
},
{
"name": "shownull",
"caption": "显示空值项",
"type": "switch",
"options": "",
"defattr": "",
"isedit": "true",
"isshow": "true",
"pname": "otherGroup"
}

2.5取数

根据统计图对应的行列面板样式设置取数即可。

(1)取数部分

· 行列面板部分:根据统计图对应的行列面板,有几行就配置几个取数【见下方表格】(这个对应的init方法里的vardata数据)

· 属性部分:需要拖入指标维度的属性,也要定义一个取数变量

(2)模型部分

· 将属性面板上的取数设置为隐藏

· 计算方式和数据格式要根据图的属性去设置

· 模型设置对应的是计算时的sql

取数结果格式说明:

### 1个模型:

| dim1 | zb1 | zb2 |

| ----- | ----- | ----- |

| 维度1 | 指标1 | 取数1 |

| 维度2 | 指标2 | 取数2 |

| 维度3 | 指标3 | 取数3 |

| 维度4 | 指标4 | 取数4 |

#### vardata格式

{

dim: ['维度1', '维度2', '维度3', '维度4'],

zb: [['指标1', '指标2', '指标3', '指标4'], ['取数1', '取数2', '取数3', '取数4']]

}

### 2个模型

模型1:

| dim1 | zb1 | zb2 |

| ----- | ----- | ----- |

| 维度1 | 指标1 | 取数1 |

| 维度2 | 指标2 | 取数2 |

| 维度3 | 指标3 | 取数3 |

| 维度4 | 指标4 | 取数4 |

模型2:

dim color 2个取数

| dim1 | color |

| ----- | ----- |

| 维度1 | 颜色1 |

| 维度2 | 颜色2 |

| 维度3 | 颜色3 |

| 维度4 | 颜色4 |

#### vardata格式

[{

dim: ['维度1', '维度2', '维度3', '维度4'],

zb: [['指标1', '指标2', '指标3', '指标4'], ['取数1', '取数2', '取数3', '取数4']]

}, {

dim: ['维度1', '维度2', '维度3', '维度4'],

color: ['颜色1', '颜色2', '颜色3', '颜色4']

}]

 

序号

图表类型

行列面板名称

1

交叉表

行维度
列维度
指标

2

明细表

数据

3

分组表


4

柱状图


系列

5

象形柱图


系列

6

象形条形图


系列

7

线状图


系列

8

条形图


系列

9

饼图


系列

10

玫瑰图


系列

11

多系列饼图


系列

12

多维度饼图


系列

13

旋转饼图


系列

14

环饼图


系列

15

跑道图


系列

16

HTML5饼图


系列

17

交互面圈图


系列

18

嵌套圈饼图


系列

19

面积图


系列

20

横向面积图


系列

21

散点图

x
y
系列

22

仪表盘

指针

23

多系列仪表盘

系列
指针

24

占比图

总值
占比值

25

雷达图


系列

26

气泡图

x
y
r
系列

27

螺旋气泡图

x
y
r
系列

28

K线图

系列

29

箱线图


系列

30

漏斗图


系列

31

瀑布图


系列

32

平行坐标图

颜色
竖轴

33

阈值图


系列

34

帕累托图


系列

35

金字塔图


系列

36

极坐标图


系列

37

桑基图


流量

38

组织架构图

维度
指标

39

标准和弦图

起点
终点
权重

40

节点和旋图

起点
终点
关系
权重

41

混合图


系列

42

关系网络


目标
关系
权重

43

树形网络


目标
关系
权重

44

风险图谱


系列

45

人口图

维度
左值
右值

46

矩形热力图


系列

47

矩形树图


流量

48

标准词云图


系列

49

词云球图


系列

50

单指标卡

指标

51

多指标卡

52

股权穿透图

投资方
被投资方
探查内容

53

流向图

起始
结束

54

主干线图

起始
结束

55

双线图

起始
结束

56

渲染地图

地区

57

标点地图

地区

58

渲染标点地图

地区

59

热力图

地区

60

GIS热力地图

经度
纬度

61

GIS标点地图

经度
纬度

62

GIS流向地图

起点经度
起点纬度
终点经度
终点纬度

63

GIS路由地图

路线编号
站点编号
经度
维度

64

GIS渲染地图

经度
纬度

65

GIS统计图

经度
纬度

66

实时线状图


系列

67

实时柱状图


系列

68

实时混合图


系列

69

预测


系列

70

正态分布

数据

71

聚类

数据

72

回归分析

x
y

73

相关性矩阵

数据

2.6配色方案

(1) 配色方案对于统计图来说是一组属性

(2) 跟第5节定义的属性名是对应的,当然,可以也定义额外的属性,只要统计图的对象有处理即可

2.7发布

预览没有问题的时候,发布组件。组件发布后才能使用。

3.组件流程

(1) 拖拽指标或维度–> lineChart.setProperty(option) --> 生成统计图

(2) 修改统计图属性->调用相应对象的setProperty方法 --> 直接刷新属性的相应部分

(3) 再次拖入指标维度->触发计算-> 调用refreshData --> 清空chart->再调用echarts.setOption重新生成图

 

附件列表

0

文档内容仅供参考
如果您需要解决具体问题,还可以登录亿信社区
在提问求助板块提问,30分钟内帮您解决问题

如果您认为本词条还有待完善,请编辑

上一篇自定义敏捷看板组件

下一篇

请先登录