前端SDK工具包

2025-4-10 About 35 min

# 前端SDK工具包

# 数据服务/cboard-common

cboard-common 依赖包含:

  • 所有restful请求服务接口
  • 数据转换服务
  • 工具包
  • 部分业务对象BO定义

包含下列模块:

名称 说明
_axios HTTP 请求单例
commonService 基础服务
loginService 登录认证服务
adminService 用户角色管理服务
datasourceService 数据源管理服务
datasetService 数据集管理服务
widgetService 组件管理服务
boardService 仪表板管理服务
dashboardService 仪表盘服务
dataService 数据处理服务
jobService 任务管理服务
metaService 元数据管理服务
folderService 文件夹管理服务
chartConf 图表配置
DateUtil 日期工具

Business Object

名称 说明
Widget 图表BO

# CommonService

CommonService 包含一些基础服务方法, 对外主要包含以下两个方法

方法名 说明 参数 返回值
getBaseServerUrl() 获取基础服务器 URL String
setBaseServerUrl(url) 设置基础服务器 URL BI服务器地址, 确保Restful服务请求之前设置一次
export declare class CommonService {
    getBaseServerUrl()
    setBaseServerUrl(url)
}
1
2
3
4
import {commonService} from 'cboard-common';

commonService.setBaseServerUrl('http://localhost:8026/cboard');
1
2
3

# LoginService

登陆认证服务

export declare class loginService {
    isSDK: Boolean
    getTokenInfo(key)
    getToken()
    getUserName()
    getUserId()
    auth(username, password)
    authDigest(username, password)
    authByJwtToken(token)
    authByShareId(shareId)
}
1
2
3
4
5
6
7
8
9
10
11
方法名/属性 说明 参数 返回值
isSDK 属性: 是否为 SDK 模式 默认: false, 设置为 true 防止登录失败跳转 BI 登录页面 boolean
getTokenInfo(key) 获取指定 Token 信息 key - Token 键名 Token 信息对象
getToken() 获取当前 Token string(Token 字符串)
getUserName() 获取当前用户名 string(用户名)
getUserId() 获取当前用户 ID string(用户ID)
auth(username, password) 后端服务请求,进行用户名密码认证 username - 用户名,password - 密码 Promise(AuthResult)
authDigest(username, password) 进行 MD5 加密密码认证 username - 用户名,password - 密码 Promise(AuthResult)
authByJwtToken(token) 使用 JWT Token 认证 token - JWT 令牌 Promise(AuthResult)
authByShareId(shareId) 使用看板分享 ID 认证 shareId - 分享 ID Promise(AuthResult)
import { loginService } from 'cboard-common';

loginService.isSDK = true;
loginService.auth('admin', 'root123').then(res => {
    console.log(res)
    const {valid, token} = res.data;
    if (valid) {
       console.log(res)
       this.token = token;
    }
});
1
2
3
4
5
6
7
8
9
10
11

# AuthResult

public class AuthResult {
  boolean valid;
  String token;
  User user;
  String msg;
}
1
2
3
4
5
6

# WidgetBO

export class Widget {
  constructor(args) {
    let {name} = args || {};
    Object.assign(this, {
      name,
      data: {
        datasetId: null,
        datasource: null,
        query: {
          _sid: randomId(),
        },
        config: {
          chart_type: 'table',
          selects: [],
          keys: [],
          groups: [],
          values: [
            {series_type: null, name: '', cols: []}
          ],
          filters: [],
          option: {},
          calColumns: [],// 图表级计算字段
        },
        expressions: [], // 图表级表达式
        filterGroups: [], // 图表级过滤组合
        variables: [], // 图表级变量
      }
    });
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
属性 说明 后续简称
data widget的配置数据 WidgetConfig
data.config 多维查询配置/图表配置 ChartConfig
import { Widget } from 'cboard-common';
new Widget();
1
2

# WidgetConfig

class WidgetConfig {
  // 数据源查询配置
  datasetId: null;
  datasource: null;
  query: { _sid: randomId, };
  // 多维查询配置/图表配置
  config: ChartConfig
  // 图表级表达式
  expressions: [];
  // 图表级过滤组合
  filterGroups: [];
  // 图表级变量
  variables: []; 
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# ChartConfig

多维查询配置/图表配置

class ChartConfig {
  String chart_type;
  List<Dim> keys;
  List<Dim> groups;
  List<Dim> filters;
  List<Value> values;
  Object option = new Object();
  calColumns: [];// 图表级计算字段
}
1
2
3
4
5
6
7
8
9
// 维度
class Dim {
  //String sid; // 在DSL中唯一id
  //如果需要使用层级下钻功能,id必须与维度层级下面的维度相对应
  String id; // 数据集节点id
  String rawDataType; // 原始数据类型
  String alias; // 字段别名
  @required
  String column; // 字段
  String dateFormat; // 日期字段格式化, 与Java中日期格式化对应
  FilterType type; // 过滤类型  3.1中 <filterType> 类型
  List<Object> values; // 比较值 参照3.1 过滤之数组 <filterValues>
  String sort = "asc"; // 维度值排序 ['asc', 'desc']
}

// 指标栏
class Value {
  String sort = "asc"; // 维度值排序 ['asc', 'desc']
  // 双轴图: 'line', 'arealine', 'stackline', 'percentline', 'bar', 'stackbar', 'percentbar'; 
  // 饼图: 'pie', 'coxcomb', 'doughnut'
  String series_type; 
  List<Metric> cols; // 指标列
}

// 与SQL中的聚合函数类似 `aggregate_type(col)`
class Metric  {
  String sid; // 在DSL中唯一id
  String id; // 数据集节点id
  String alias; // 数据集节点.a 可以修改为新的名称
  AggType aggregate_type; // 汇总类型, 聚合函数
  @required
  String col; // 数据集节点.column
  String f_type; // 过滤类型 枚举 只能选择3.1中 <filterType> 类型
  ValueType valueType; // 值显示方式
  List<Object> f_values;
  @required
  String type; // 数据集节点.t
  String exp; // 非必须, String, 汇总表达式, measure 的 exp 属性
}

/**
- <filterValues>: 过滤值数组,与<filterType>组合形成过滤条件,数组中多余的值会被忽略,如
- <dateFormat>: String, 日期格式化, 当 字段 为 'date' 类型时,可以对字段进行格式化 Pattern列表:
  - yyyy,年,2025
  - Q,季度, 1-4
  - MM,月,01-12
  - dd,日,01-31
**/
enum FilterType {
  // 等值与不等值 相当于sql中的`in`与`not in`
  '=', '≠'
  // 开区间
  '≥', '≤',
  // 闭区间
  '[a,b]', // 相当于sql中的between
  'like', 'not like'
}

enum AggType {
  sum, min, max, avg, distinct
}

enum ValueType {
  value, //原始值
  percentByColumn, // 列占比, 行维度方向上计算占比
  percentByRow, // 行占比, 列维度方向上计算占比
  percentByTotal, // 总占比
  row_number, // 序号
  cum_cum, // 累加
  cum_sum_% // 累加占比
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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
61
62
63
64
65
66
67
68
69
70
71

# DataService

方法名/属性 说明 返回值
newChartConfig() 新建组件配置 图表组件配置对象
linkDataset(args) 关联数据集更新图表配置 Promise()
replaceWgtCfgVariable(widgetConfig) 替换组件配置变量 Promise(replacedWgtCfg)
setEnvVariables(variables, clean) 设置环境变量
deleteEnvVariables(envArr) 删除环境变量
getVariables(args) 获取变量列表 变量列表
getDimMembers(args) 获取维度成员 Promise(维度成员数据)
getColumnStat(args) 获取列统计信息 Promise(统计数据)
directQuery(datasourceId, query, opt) 直接查询数据 Promise(查询结果)
getDetailData(args) 获取明细数据 Promise(明细数据)
downloadDetailData(args) 导出明细数据到Excel Promise()
queryDefer(chartConfig) 查询检查配置是否符合图表配置要求 Boolean
queryBasicAggData(args) 查询基本二维聚合数据表格 Promise(二维聚合数据)
getDataSeries(args) 获取多维数据序列 Promise(数据序列)
viewQuery(args) 预览生成的查询脚本 Promise(String[])
getColumns(args) 获取查询字段 Promise(字段列表)
export declare class DataService {
    newWidgetConfig()
    // @ts-ignore
    linkDataset(args)
    replaceWgtCfgVariable(widgetConfig)
    // 环境变量设置
    setEnvVariables(variables: Object, clean: boolean)
    getVariables(chartConfig)
    // 获取维度成员信息
    getDimMembers(args)
    getColumnStat(args)
    // @ts-ignore
    directQuery(datasourceId, query, opt)
    queryForList(args)
    getDetailData(args)
    downloadDetailData(args)

    queryDefer(chartConfig)
    queryAggData(args)
    queryBasicAggData(args)
  
    getDataSeries(widgetConfig)
    viewQuery(args)
  
    getColumns(args)
    getColumnsByWidgetId(widgetId)
  
    castRawData2Series(aggData, chartConfig, sortCfg)
  
    getAllDimensions(datasetId, datasourceId, query)
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

# replaceWgtCfgVariable

替换widgetConfig中的keys、groups、values中的环境变量模板

dataService.replaceWgtCfgVariable({
  // 省略其他属性
  keys: [{
    column: 'month',
    type: '=',
    values: ['${cdt.now(), "yyyy-MM-dd"}']
  }]
}).then(res => {
  
});
1
2
3
4
5
6
7
8
9
10
res = { column: 'month', type: '=', values: ['2025-04-02'] }
1

# setEnvVariables

// 设置环境变量
dataService.setEnvVariables({foo: 'bar', key: 1, dateRange: ['2025-01-01', '2025-04-05']});
1
2

# getVariables

/** 获取环境变量
 * @param vars 赋值优先级最高变量
 * @param objectResult 是否以对象形式返回,默认返回字符串
 * @returns {{}|string}
 */
function getVariables(vars, objectResult = false) {  }
1
2
3
4
5
6
// 设置环境变量
dataService.setEnvVariables({foo: 'bar', key: 1, dateRange: ['2025-01-01', '2025-04-05']});
// 返回对象 {foo: 'bar', key: 3, dateRange: ['2025-01-01', '2025-04-05']}
dataService.getVariables({key: 3}, true);
// 返回对象字符串 "{foo: 'bar', key: 2, dateRange: ['2025-01-01', '2025-04-05']}"
dataService.getVariables({key: 2});
1
2
3
4
5
6

# getDataSeries

dataService.getDataSeries({
  widgetConfig: {
    datasetId: 1,
    // chartConfig
    config: {
      chart_type: 'table',
      keys: [{
        column: 'the_year',
      }],
      groups: [{
        column: 'sales_country'
      }],
      filters: [],
      values: [{
        cols: [{
          aggregate_type: 'sum',
          col: 'store_sales',
        }]
      }],
      option: {},
    }
  }
}).then(seriresData => {
  this.jsonData = seriresData;
}).catch(e => {
  this.jsonData = e;
})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

Series 返回数据结构描述

{
  "keys": [...],
  "groups": [...],
  "metrics": [...],
  "series": [...],
  "data": [...],
  "seriesConfig": {...},
  "chartConfig": {...},
  "pivotModel": {...},
  "keyInfos": [...],
  "groupInfos": [...],
  "aggData": {...},
  "drill": {...}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
字段名 类型 描述 示例值/结构
keys 二维数组 年份维度数据,每个子数组为行维对应的一行数据 [[2021],[2022],[2024],[2023],[2020],[2025]]
groups 二维数组 国家/地区分组,每个子数组列维对应的一列数据 [["USA"],["Mexico"],["Canada"]...]
metrics string[] 指标名称 ["store_sales","store_sales",...]
series 二维数组 系列名称 groups + series [["USA","store_sales"], ["Mexico","store_sales"], ...]
data 二维数组 列结构的数据, 每个子数组为一列数据可与series对应 [[123,132,...], [771,827,...], ...]
keyInfos 二维数组 keys的对象数组 [[{"col":"the_year","value":2021}], ...]
groupInfos 二维数组 groups的对象数组 [[{"col":"sales_country","value":"USA"}], ...]
aggData object 聚合后的原始数据 见下方详细结构
seriesConfig object 系列配置对象,key为系列名 见下方详细结构
chartConfig object 返回最终图表基础配置, 必要时SDK会对用户传入ChartConfig调整与加工
pivotModel object 数据透视表模型(包含与根对象重复的 keys/data/seriesConfig 等字段) 结构同根对象对应字段

# aggData 原始聚合数据

字段名 类型 描述 示例值/结构
columnList Object[] 字段描述数组对象
data 二维数组 行结构二维数组 [[ "Canada", "F", 2021, 60237.11 ],...]
subData 子集 行列汇总、小计下推数据源时产生

# seriesConfig 系列对象

{
   [系列名]: {
      seriesName: '',
      seriesIdx: 0,
      data: [], // 系列数据
      valueConfig: {}, // 指标配置
      groupInfos: [], // 列维信息数组
   },
   ...
}
1
2
3
4
5
6
7
8
9
10

# viewQuery

dataService.viewQuery({
  widgetConfig
}).then(res => {
  // res为查询脚本数组
  // ['sql1', 'sql2']
})
1
2
3
4
5
6

# getDetailData

dataService.getDetailData({
    widgetConfig,
    resultLimit, // 查询结果集大小限制,默认: 2000
}).then(res => {
    
}).catch(e => {
  // 异常处理
})
1
2
3
4
5
6
7
8

res 返回数据结构

{
  data: {
    columnList: [{}, ...], // 字段对象
    data: [["United States of America", "F", 2021, "#NULL"], ...], // 二维数据
    count: 55264, // 总记录数
    detail: true,
  },
  chartConfig: {...},
}
1
2
3
4
5
6
7
8
9

# getDimMembers

维度成员查询

dataService.getDimMembers({
  datasetId: 1,
  dimCfg: { column: 'sales_country' }, // dimCfg可以是对象或者字段字符串
  // dimCfg:'sales_country', 
  keywords: 'a' // 关键词限定,模糊查询值中包含字母a的成员
}).then(res => {
  // 返回 [{value: 'Canada'}, {value: 'Mexico'}]
})
1
2
3
4
5
6
7
8

# 其他字段限定/级联限定

查询 'sales_country' 下面 'sales_region' 成员

dataService.getDimMembers({
  datasetId: 1,
  dimCfg: { column: 'sales_region' }, // dimCfg可以是对象或者字段字符串
  chartConfig: {
    keys: [{
      id: '8clz4jnwc',
      column: 'sales_country',
      type: '=',
      values: ['Canada']
    }],
  }
}).then(res => {
  // 当前返回值为Ajax原始的Response对象,后续版本迭代可能会做解构操作
});
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# getColumnStat

获取指标字段的最小值、最大值、平均值、记录数信息

dataService.getColumnStat({
  datasetId: 1,
  dimCfg: { column: 'store_sales' }, // dimCfg可以是对象或者字段字符串
}).then(res => {
  this.jsonData = res.data;
})
1
2
3
4
5
6

返回

{
  "min": 0.5,
  "max": 49.99,
  "avg": 8.31538858,
  "count": 55265
}
1
2
3
4
5
6

# directQuery

位置参数 参数类型 说明 样例
datasourceId Long 数据源ID 1
query String 查询脚本 查询对象需要与数据源匹配
opt Object 其他参数 { resultLimit = 2000, variables }
dataService.directQuery(1,
  'select * from department',
  {
    resultLimit: 5, 
    variables: {foo: 'bar'}, // 环境变量
  }
).then(res => {
  res.data;
});
1
2
3
4
5
6
7
8
9
{
  "data": [
    [ 1, "HQ General Management" ],
    [ 2, "HQ Information Systems" ],
    ...
  ],
  "columns": [
    {
      "columnName": "DEPARTMENT_ID",
      "remarks": null,
      "dataType": null,
      "typeCategory": null,
      "innerTypeName": null,
      "type": "INT",
      "ordinalPosition": null
    },
    {
      "columnName": "DEPARTMENT_DESCRIPTION",
      "remarks": null,
      "dataType": null,
      "typeCategory": null,
      "innerTypeName": null,
      "type": "STRING",
      "ordinalPosition": null
    }
  ],
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

# AdminService

方法名/属性 说明 参数 返回值
changePwd(user) 修改用户密码 user: object Promise(ServiceStatus)
getUserDetails() 获取用户详情 Promise(用户详情对象)
getUserList() 获取用户列表 Promise(用户列表)
getUserRoleList() 获取用户角色列表 Promise(角色列表)
getRoleList() 获取角色列表 Promise(角色列表)
getRoleResList() 获取角色资源列表 Promise(资源列表)
grantUserRoles(userIds, roleIds) 授予用户角色 userIds: string[], roleIds: string[] Promise(ServiceStatus)
revokeRoleOfUser(userIds, roleIds) 撤销用户角色 userIds: string[], roleIds: string[] Promise(ServiceStatus)
shareResources(roleIds, resIds) 共享资源 roleIds: string[], resIds: string[] Promise(ServiceStatus)
updateRoleRes(roleIds, resIds) 更新角色资源 roleIds: string[], resIds: string[] Promise(ServiceStatus)
isAdmin() 当前用户是否为Admin Promise(boolean)
newUser(user) 新建用户 user Promise(ServiceStatus)
updateUser(user) 更新用户 user Promise(ServiceStatus)
deleteUser(userId) 删除用户 userId Promise(ServiceStatus)
handoverAcl(srcUserId, toUserId) 权限交接 srcUserId, toUserId Promise(JSONObject)

export declare class AdminService {
    changePwd(user)
    getUserDetails()
    getUserList()
    getUserRoleList()
    getRoleList()
    getRoleResList()
    grantUserRoles(userIds, roleIds)
    revokeRoleOfUser(userIds, roleIds)
    shareResources(roleIds, resIds)
    updateRoleRes(roleIds, resIds)
    grantRoleRes(roleIds, resources)
    revokeRoleRes(roleIds, resources)
    updateUserRes(userIds, resIds)
    grantUserRes(userIds, resIds)
    revokeUserRes(userIds, resIds)
    getAllUserResList()
    newUser(user)
    updateUser(user)
    deleteUser(userId)
    newRole(role)
    updateRole(role)
    deleteRole(roleId)
    isAdmin()
    getJobList()
    handoverAcl(srcUserId, toUserId)
    getResUserList(resType, resId)
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

# DatasourceService

数据源相关API

specFolderId 选填参数,获取指定目录下面的资源

方法名/属性 说明 返回值
getById(id) 获取数据源 Promise(数据源对象)
getDatasourceList(lite, specFolderId?) 获取数据源列表 Promise(数据源列表)
getDatasourceTreeData(specFolderId?) 获取数据源树形数据 Promise(树形数据)
new(datasource) 新建数据源 Promise(ServiceStatus)
update(datasource) 更新数据源 Promise(ServiceStatus)
delete(id) 删除数据源 Promise(ServiceStatus)
getDatasourceParams(dpType) 获取数据源连接参数 Promise(Object)
getQueryParams(sourceType, pageType) 获取数据源查询参数 Promise(Object)
listDatabases(datasourceId) 获取数据库列表 Promise(数据库列表)
listSchemas(datasourceId, databaseName) 获取数据库模式列表 Promise(模式列表)
listTables(datasourceId, databaseName,
schemaName)
获取数据表列表 Promise(数据表列表)
listColumns(datasourceId, databaseName,
schemaName,
tableName)
获取数据表字段列表 Promise(字段列表)

export declare class DatasourceService {
    getById(id)
    getDatasourceList(lite = true, specFolderId?)
    getDatasourceTreeData(specFolderId?)
    new(datasource)
    update(datasource)
    delete(id)
    getDatasourceParams(dpType)
    getQueryParams(sourceType, pageType)
    testQuery(datasource, queryObj)
    listDatabases(datasourceId)
    listSchemas(datasourceId, databaseName)
    listTables(datasourceId, databaseName, schemaName)
    listColumns(datasourceId, databaseName, schemaName, tableName)
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# DatasetService

数据集相关API

specFolderId 选填参数,获取指定目录下面的资源

方法名/属性 说明 参数 返回值
getById(datasetId) 获取数据集 datasetId: string Promise(数据集对象)
getByIds(ids) 批量获取数据集 ids: string[] Promise(数据集列表)
getDatasetList(specFolderId?) 获取数据集列表 specFolderId?: string Promise(数据集列表)
new(dataset) 新建数据集 dataset: object Promise(ServiceStatus)
update(dataset) 更新数据集 dataset: object Promise(ServiceStatus)
delete(datasetId) 删除数据集 datasetId: string Promise(ServiceStatus)

export declare class DatasetService {
    getById(datasetId)
    getByIds(ids)
    getDatasetList(specFolderId?)
    getDatasetTreeData(specFolderId?)
    getDatasetListByDsr(datasourceId)
    new(dataset)
    update(dataset)
    delete(datasetId)
    getDimByIdFromDataset(nodeId, dataset)
    testTemplateRuleMatch(input, regex)
}
1
2
3
4
5
6
7
8
9
10
11
12

# WidgetService

图表资源相关API

specFolderId 选填参数,获取指定目录下面的资源

方法名/属性 说明 参数 返回值
getById(widgetId) 获取组件 widgetId: string Promise(组件对象)
getWidgetList(specFolderId?) 获取组件列表 specFolderId?: string Promise(组件列表)
getWidgetListByDsr(datasourceId) 按数据源ID获取图表组件 datasourceId: string Promise(组件列表)
new(widget) 新建组件 widget: object Promise(ServiceStatus)
update(widget) 更新组件 widget: object Promise(ServiceStatus)
delete(widgetId) 删除组件 widgetId: string Promise(ServiceStatus)

export declare class WidgetService {
    getById(widgetId)
    getWidgetList(specFolderId?)
    getWidgetListByDsr(datasourceId)
    getWidgetListByDst(datasetId)
    getWidgetTreeData(datasetList, datasourceList, specFolderId?)
    new(widget)
    update(widget)
    delete(widgetId)
    checkWidget(widgetId)
    compileChartConfig(chartConfig)
}

1
2
3
4
5
6
7
8
9
10
11
12
13

# BoardService

方法名/属性 说明 参数 返回值
getBoardData(boardId) 获取看板数据 boardId: string Promise(看板数据对象)
getBoardList(specFolderId) 获取看板列表 specFolderId: string Promise(看板列表)
getBoardTreeData(layoutType, specFolderId) 获取看板树形结构数据 layoutType: string, specFolderId: string Promise(树形结构数据)
new(board) 新建看板 board: object Promise(ServiceStatus)
update(board) 更新看板 board: object Promise(ServiceStatus)
delete(boardId) 删除看板 boardId: string Promise(ServiceStatus)
cacheParams(boardId, filters) 缓存看板参数 boardId: string, filters: object
getCachedParams(key) 获取缓存参数 key: string 参数对象

export declare class BoardService {
    getBoardData(boardId)
    getBoardList(specFolderId)
    getBoardTreeData(layoutType, specFolderId)
    getBoardNestLoopTreeData2(layoutType, specFolderId)
    new(board)
    update(board)
    delete(boardId)
    cacheParams(boardId, filters)
    getCachedParams(key)
}
1
2
3
4
5
6
7
8
9
10
11

# 图表服务/chart-services

图表服务库,渲染dom为图表

# drawChart

import { chartService } from 'chart-services'

this.drawChart(containerDom, widgetConfig, options = {}) { ... }
1
2
3
this.chartDom = this.$el.querySelector('.view-div');
try {
  chartService.drawChart($(this.chartDom), {
    widgetName: '去年的总销售额',
    datasetId: 240820113813950,
    config: {
      chart_type: 'line',
      keys: [
        {
          column: '订单日期',
          dateFormat: 'yyyy',
        }
      ],
      groups: [],
      filters: [],
      values: [{
        cols: [
          {
            sid: 'v1',
            // id: 'qjjm6fjtuq',
            col: '销售额',
            aggregate_type: 'sum'
          }
        ]
      }],
      option: {
        title: {
          show: true,
        },
        drillConfig: {
          allow: true,
          freeMode: true,
        },
        devTool: {
          beforeRender(option) {
            console.log(JSON.stringify(option));
            _.merge(option, {
              title: {
                text: '名称改变',
              },
            })
          },
        }
      }
    }
  }).then(response => {
    let {
      //updater,
      render
    } = response;
    this.render = render;
  })
} catch (e) {
  console.log(e)
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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
Last update: April 24, 2025 11:44