ECharts组件开发

使用echarts-easyv命令行工具快速把echarts转换成easyv组件,面向具备easyv组件开发和echarts开发技术的人员,目前支持React的开发方式。

工程目录结构

一个较为完整的项目结构如下:

echarts-components

├── package.json

└── src

       ├── build

       │     ├── fieldLanguage.js    // 全局的字段语言库

       │     ├── fieldConfig.js    // 全局的字段配置

├── common

│     └── EChartsComponent.jsx    // Easyv组件的基类

└── components

       │

       └── echartsBasicBar    // 单个EasyV组件的目录

              │

       ├── index.jsx    // EasyV组件入口文件

              ├── options.js    // Echarts组件的option代码

              ├── build

                  ├── fieldLanguage.js    // 组件自定义的字段语言库

                  └── fieldConfig.js    // 组件自定义的字段配置

              │

              └── config

                     │

                     ├── main.json    // 生成的EasyV配置项

                     └── main.data.json   // 生成的EasyV组件的默认数据


快速生成EasyV组件的流程

安装全局库

在全局安装npm库echarts-easyv: npm i echarts-easyv -g

如下所示:

C:\Users\Xie\Documents\dtstack\echarts-group> npm i echarts-easyv -g
C:\Users\Xie\AppData\Roaming\npm\echarts-easyv -> C:\Users\Xie\AppData\Roaming\npm\node_modules\echarts-easyv\index.js 
+ echarts-easyv@1.0.0
updated 1 package in 0.994s

创建新项目

使用创建EasyV组件的命令行创建一个空的项目:easyv create <project name>


初始化

在空项目的根目录执行初始化目录结构:echarts-easyv init

一个空项目只能初始化一次,初始化会在package.json中插入依赖库,清空src/components下的原有文件。

C:\Users\Xie\Documents\dtstack\echarts-group> echarts-easyv init
初始化成功

添加新组件

在项目根目录执行命令添加新的组件:echarts-easyv add <组件模块名称> <组件中文名称>

C:\Users\Xie\Documents\dtstack\echarts-group> echarts-easyv add basicLine 基本折线图
添加成功

复制Option

从ECharts官网的Demo页面选择一个图表,从示例编辑标签页下复制出该图表使用的option。

复制到项目结构中的options.js文件中。

注意:需要将option的对象默认导出,默认使用es6的导出模式。

如下所示:

export default {
    xAxis: {
        type: 'category',
        data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
    },
    yAxis: {
        type: 'value'
    },
    series: [{
        data: [150, 230, 224, 218, 135, 147, 260],
        type: 'line'
    }]
};

编译时会把代码中的export default替换成return,然后将option.js中的代码文本作为函数调用,获取调用结果用于实际转换的option。实现的伪代码如下:

let optionCodeStr; //读取option.js文件后获取的字符串
option = Function(optionCodeStr.replace("export default", "return"))();
//option用于转换成main.json和main.data.json

执行构建命令

在项目根目录执行命令:echarts-easyv build <组件模块名称>

componentName为要编译的组件的组件名。是可选参数,若为空,则编译components目录下的所有组件。

C:\Users\Xie\Documents\dtstack\echarts-group> echarts-easyv build basicLine
start build: basicLine
build success: basicLine

编译时将option.js中的option对象编译转换,输出配置项到main.json,输出组件默认数据到main.data.json。

至此,简单的ECharts组件的转换基本完成(还需安装npm库),可作为EasyV组件在本地运行组件或发布。


字段转换设置

段转换设置包括字段配置语言库两个配置文件,也分为全局设置自定义设置

全局设置

项目中build目录下有fieldLanguage.js和fieldConfig.js,是所有组件转换时通用的字段转换设置

自定义设置

单个组件的build目录下也有fieldLanguage.js和fieldConfig.js,是当前组件转换时专属的字段转换设置。build目录和两个文件初始时不存在,需要的时候,按照目录结构新建对应的文件即可。在编译转换时,自定义设置将合并(已存在的覆盖,不存在的新增)到全局设置中。



字段配置

字段配置控制某个字段转换成main.json时的转换方式或额外的配置信息,也可用于指定字段转换后的main.json中EasyV配置项字段的固定值

字段配置的文件fieldConfig.js中的代码文本,在编译转换时会作为一个函数来调用,并取返回值作为最终的配置对象,同上述的option.js的作用方式。

例如,组件的option.js如下所示:(代码A)

// 代码A
// option.js
export default {
  xAxis: {
    type: "time",
    axisLabel: {
      color: "#fff"
    }
};

为了指定对xAxis.type的字段配置,可在fieldConfig.js写入如下代码:(代码B

// 代码B
// fieldConfig.js
return {
  __global__: {
		color: {
			type: "multicolor"
    }
  },
  xAxis:{
    type: {
        _hidden: true, //隐藏该字段
        _options: ['log', 'time'] //下拉列表的所有下拉选项
    }
  }
};

还需配置语言库fieldLanguage.js:

// 代码C
// fieldLanguage.js
export default {
  xAxis:"X轴",
  type:"类型",
  axisLabel:"轴标签",
  color:"颜色"
};

以上文件将生成如下的main.json:

// main.json
{
  // ...
  //省略了config字段相关内容
  
	"configuration": [
    {
      "name":"xAxis",
      "dispalyName":"X轴",
      "value":[
        // 以下为实际不会生成的内容,因为xAxis.type配置了隐藏
        //{
          //"name":"type",
          //"dispalyName":"类型",
          //"value":"time",
          //"type":"select",
          //"config":{
            //"options":[
              //{
                //"name":"日志",
                //"value":"log"
              //},
              //{
                //"name":"时间",
                //"value":"time"
              //}
            //]
          //}
        //},
        {
          "name":"axisLabel",
          "dispalyName":"轴标签",
          "value":[
            {
              "name":"color",
              "dispalyName":"颜色",
              "value":"#fff",
              // type字段的值默认解析成"color"
              // 由于在option.js中指定了全局的color字段的type
              // 所以最终用"multicolor"覆盖"color"
              "type":"multicolor" 
            }
          ]
        }
      ]
    }
	]
}

在fieldConfig.js中写入与option.js一样的层级结构,即可指定该字段的字段配置

编译转换时,fieldConfig.js中同层级结构的字段下的所有字段都将合并(已存在的覆盖,不存在的新增)到main.json对应层级结构的EasyV配置项下。

保留字段

fieldConfig.js的层级结构中,非保留字段的字段名都被认为是option.js中对应层级结构的字段的字段配置,而保留字段有特殊的意义,不可用于指定字段。

保留字段分类两类:

一种是以下划线开头的,该类型的字段作用于自身的上一层结构的字段名。在代码B中,_hidden作用于xAxis.type,表示在main.json中隐藏该字段。

另一个种是“__name__”结构(名字左右两边都是双下划线)的字段。在代码B,__global__是特殊意义的字段名,表示全局字段。

目前支持的保留字段如下:

保留字段

类型

意义

_hidden

boolean

在main.json隐藏该字段,即不显示该字段

_options

string[]

该字段为下拉列表,并给出下拉列表中所有下拉选项

_readOnly

boolen

该字段配置数组类型的字段下,表示该数组为只读数组,不可增删元素,实际转换时,将转换成对象,以数组下标作为字段名。

__global__

object

全局字段,写在它里面的字段将对所有同名字段应用该配置。在代码B中,color写在__global__里面,所有对option中出现在任意层级结构中的color字段都生效,所以可以对代码B中的xAxis.axisLabel.color生效。

字段语言库

如上文中的代码C所示,这种表示英文到中文的映射结构,即为字段名转换时用到的语言库,编译转换时将转换的EasyV配置项的displayName字段替换成该中文。



index.jsx文件

生成的EasyV组件必须继承EChartsComponent抽象类,并从外部引入option配置项的JS对象,在构造函数中调用父类方法setOption设置实例类的option。

import EChartsComponent from "../../common/EChartsComponent";
import option from "./options";

export default class EChartsBasicBar extends EChartsComponent {
    constructor(props) {
        super(props);
        this.setOption(option);
    }
}


组件定制化的配置

完善配置项

在option.js中包含的配置才会转化到main.json中,才能在配置面板上显示以便用户使用。官网实例的option一般较为简单,只包含能实现该类组件的基本字段。一般需要开发者根据组件需求,在option.js补全所需配置。

配置下拉菜单选项

某些配置项的值是字符串,且只能取自某些字符串的集合。如borderType字段只能取自['solid', 'dashed', 'dotted']三者中的一个。为了更佳的用户体验,这种字段一般在配置面板上显示成下拉菜单的样式。所以需要查阅官方文档,在字段配置中列举该字段的取值集合。全局字段配置中默认配置了一些常用字段的取值集合,除此之处的,需要开发者自行配置。

完善语言配置

全局语言配置中默认配置常用字段的中文名,除此之外的,需要开发者自行配置。或者某些字段翻译不准确的,可配置在组件的字段配置中,以覆盖全局配置。

无法转换的字段类型

option.js中写入的字段,如果是复合类型、函数类型、对象类型,则无法成功转换成easyv配置项,或者转换不准确。

echarts中有些字段可以取多种类型的值,全局字段配置中配置了强制将某些字段转换为某一种类型,如果该类型不符合组件需求,则可在组件的配置中覆盖全局配置。若没有在字段配置中强制配置类型,则取该字段option.js中的值的类型作为easyv配置项的类型。

图表类型

可支持的图表类型

是一些有轴(包含xAxis, yAxis, singleAxis, radiusAxis, angleAxis)的一般的基本图表,包括:折线图、柱状图、饼图、K线图、雷达图、热力图、漏斗图

不支持的图标类型

以下图表可能会完全不支持或者兼容性不佳,包括但不限于:散点图、地理坐标/地图、盒须图、关系图、路径图、树图、矩形树图、旭日图、平行坐标系、桑基图、仪表盘、象形柱图、主题河流图、日历坐标图、自定义系列、(各种3d组件)。

错误码

代码

描述

解释

1000

读取文件失败

检查文件是否存在或者文件名是否正确

1001

文件为空

检查文件是否为空

1002

文件中没有包含export default

JS文件必须包含export default

1003

调用JS代码失败

检查JS代码的语法或逻辑是否正确

1004

解析JSON文件失败

检查文件是否符合JSON格式

2000

字段不合法

查阅本文档检查是否符合规则

2001

字段类型错误

查阅本文档检查是否符合规则

2002

读取轴数据失败

option.js必须包含一种类型的轴。轴数据是从轴字段下读取的data字段

3000

写入文件失败

正常情况下不会出现。可检查文件是否读写锁定

3001

对象转JSON字符串失败

正常情况下不会出现


如遇其他使用问题,可扫描下方二维码,获取更多产品支持~

400-8505-905复制
免费试用
在线咨询
微信社区
易知微-数据可视化
微信扫一扫入群