可视化插件开发指南
1. 概述
善用可视化插件,可以为数据赋予更高的价值以及扩展观远BI和个人的可视化分析能力。本文将对可视化插件开发进行介绍,如果用户已经具备一定的前端基础能力,或对 BI 产品有一定的了解,那么相信会更加容易上手。
2. 使用指导
2.1. 开发准备
1. 进入仪表板页面,点击页面右上角的“新建卡片”按钮,出现如下弹窗,选择“自定义图表”。

2. 给卡片选择数据集并点击确定,进入卡片编辑页,将左边字段区中对应的字段拖动到绘制区中的相应位置,获得图表绘制数据。

3. 切换视图,点击页面顶端,从 数据视图 切换至 图表视图 。

以上步骤基本完成了所有的准备工作,下面正式进入开发。
2.2. 开发区域介绍
(1)编辑区域(从上往下,从左到右,参考下图)
a. 运行按钮:用于代码编写完成后查看效果;
b. 查看数据结构:数据视图里获取的数据,统一格式,后面会讲到;
c. HTML 书写区:一般书写一个图表所在容器即可,需要使用的图表绘制的 CDN 链接库也是写在这里;

d. CSS 书写区:样式区,不支持 SCSS/LESS 这类预处理类语言,只支持原生 CSS;
e. Javascript 书写区:详见下文第(2)点;
f. 图表预览区:图表最终绘制的地方,如下图。我们给每一个新建的自定义卡片做了一个默认的表格展示,可以看到我们的数据和其他一些配置(如主题颜色的使用)的结合使用。

注意:画布中c、d、e、f四个区域支持拖动和最大化。
(2)重点区域:Javascript区域
// 观远自带的渲染函数,一般不用去修改
function renderChart (data, clickFunc, config) {
/* ------ Custom Code Start ------ */
// 这里是你的代码书写位置
/* ------ Custom Code End ------ */
}
// 观远的插件代码,用于控制最终的图表渲染
new GDPlugin().init(renderChart)
若期望传入参数不满足条件时在图表区域进行提示,则可以按照如下方式自定义提示:
function renderChart (data, clickFunc, config) {
    if(data[0].length === 0) {
        const dom = document.getElementById('container')
        dom.innerHTML = "
数据为空"
        return
    }
}
3.2 渲染函数的入参
(1)data:数据视图区拖拽字段获得的数据,格式如下:
[
  // 视图1数据
  [
    {
      "name": "店铺名称",
      "numberFormat": null,
      "data": [
        "广东分店",
        "福建分店",
        "浙江分店",
        "江苏分店",
        "青海分店",
        "湖南分店",
        "山东分店"
      ]
    }
  ],
  // 视图2数据
  [
    {
      "name": "地域",
      "numberFormat": null,
      "data": [
        "GD",
        "FJ",
        "ZJ",
        "JS",
        "QH",
        "HN",
        "SD"
      ]
    }
  ]
]
整个数据格式为一个数组,每个视图的数据为一个数组元素,该数据里的每条元素就是在 数据视图 拖入的字段的数据,和 数据视图 里的表格一一对应。
(2)clickFunc:图表需要跳转或者图表之间往往会存在联动功能,从参数名上也能看出这是一个点击函数,那我们在跳转或者联动的时候,往往是以某一维度去看更详细的数据,所以我们也规范了 clickFunc 的入参格式:
function clickFunc(data) {}
// data 的格式如下:
{
	clickedItems: [ {
  	idx: [ 1, 2 ], // 列的index路径。eg. 第二个视图数据集的第三列 [ 1, 2 ]
    colName: 'xxx', // 列名称
    value: [ 'xxx', 'yyy' ], // 值格式
  } ]
}
(3)config:从外传入的对于自定义卡片的设置,具体有以下几个值:
const { theme, colors, customOptions, language } = config
a. theme:// 主题,对应的值有 LIGHT 和 DARK,适配我们平台的主题,使图表样式更好的适配平台。
b. colors:// 主题颜色,在 数据视图 右侧可配置,对应一个数组,格式如下。

[
  "#4379CE",
  "#99B8F1",
  "#FADB37",
  "#FC8602",
  "#FFA748",
  "#72B5EB",
  "#78CDED",
  "#AC9AE2",
  "#FAC36F",
  "#FD7F7F",
]
c. customOptions:// 自定义配置化设置,既然作为插件,那就应该自带图表配置,所以我们支持自定义图表的配置化,方便插件安装后更好的对图表进行设置。
// customOptions 为一个对象,字段可根据图表去自行定义,然后使用
{
  showLabel: false,
  fontSize: 12,
}
d. language :当前系统使用语言,5.6.0 支持。
4. 开发实践
以上整体介绍完后,我们就可以开始实践了,以画一个简单的 eCharts 图表为例:
(1)HTML
(2)CSS
#container {
    width: 100%;
    height: 100%;
    overflow: hidden;
}
(3)Javascript
const myChart = echarts.init(document.getElementById('container'))
const customOptions = {
    showToolbox: true
}
function renderChart (data, clickFunc, config) {
    /* ------ Custom Code Start ------ */
    // 读取配置
    const { theme, colors } = config
    const isDarkTheme = theme === 'DARK'
    // 配置化使用默认配置,后期接入
    const { showToolbox } = customOptions
    // 使用视图数据集1的数据
    const seriesData = data[0]
    const [ names, values ] = [ seriesData[0].data, seriesData[1].data ]
    const option = {
        legend: {
            top: 'bottom',
            textStyle: {
                color: isDarkTheme ? '#D1D8E3' : '#343D50',
            }
        },
        toolbox: {
            show: showToolbox,
            feature: {
                mark: { show: true },
                dataView: { show: true, readOnly: false },
                restore: { show: true },
                saveAsImage: { show: true }
            }
        },
        series: [
            {
                name: 'Nightingale Chart',
                type: 'pie',
                radius: [ 50, 250 ],
                center: [ '50%', '50%' ],
                roseType: 'area',
                itemStyle: {
                    borderRadius: 8
                },
                data: names.map((name, index) => ({
                    name,
                    value: values[index],
                })),
            }
        ],
        color: colors,
        label: {
            color: isDarkTheme ? '#D1D8E3' : '#343D50',
        },
    };
    myChart.setOption(option)
    myChart.on('click', function (params) {
        const { name, seriesIndex } = params
        clickFunc({
            clickedItems: [
                {
                    idx: [ 0, seriesIndex ],
                    colName: seriesData[0].name,
                    value: [ name ],
                }
            ]
    });
    myChart.resize()
    /* ------ Custom Code End ------ */
}
new GDPlugin().init(renderChart)
(4)展示
更多关于可视化插件的使用帮助可前往观远BI视频教程网站查看。

