@guandata/guanvis 0.1.36 → 0.1.38

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # Changelog
2
2
 
3
+ ## @guandata/guanvis 0.1.38 - 2026-08-13
4
+
5
+ - 新增 `live` 系列命令和完整实时项目工作流,可对线上仪表板执行受控、可回溯的创建与维护操作。
6
+ - 大幅扩展指标图、进度图、迷你图、地图、气泡图、雷达图、箱线图、热力图等专项图表属性,复杂看板的表达能力更完整。
7
+ - 新增系统图标查询与引用能力,指标图等场景可直接使用 BI 环境中的图标资源。
8
+ - 增强实时项目输入校验、已有仪表板附着、初始化、覆盖保护和任务诊断,减少误操作并提升问题定位效率。
9
+
10
+ ## @guandata/guanvis 0.1.37 - 2026-08-07
11
+
12
+ - 发布前新增字段 `fdId` 线上活性校验,提前发现无效字段绑定,降低发布失败风险。
13
+ - 完善筛选器配置,支持更完整的筛选设置与组合使用场景。
14
+ - 优化页面布局及组合图配置,提升图表构建与导出结果的稳定性。
15
+ - 补充构建器、图表属性、指标图表和编辑流程文档,改善使用体验。
3
16
  ## @guandata/guanvis 0.1.36 - 2026-08-04
4
17
 
5
18
  - 扩展仪表板标题、页面背景、筛选栏、卡片组、Tab 和分区的视觉配置,支持字体、颜色、图标、背景图、间距与分割线。
package/README.md CHANGED
@@ -54,6 +54,18 @@ guanvis publish ./my_dashboard/ --allow-overwrite
54
54
 
55
55
  ## 版本更新
56
56
 
57
+ ### @guandata/guanvis 0.1.38
58
+
59
+ - 新增 `live` 系列命令和完整实时项目工作流,可受控地创建与维护线上仪表板。
60
+ - 扩展指标图、进度图、迷你图、地图、气泡图、雷达图、箱线图、热力图等专项图表属性。
61
+ - 支持查询和引用 BI 环境中的系统图标,并增强输入校验、覆盖保护和任务诊断。
62
+
63
+ ### @guandata/guanvis 0.1.37
64
+
65
+ - 完善筛选器、页面布局和组合图配置,仪表板搭建更灵活。
66
+ - 增强字段绑定校验,减少图表配置错误。
67
+ - 优化图表属性和页面导出配置,提升生成结果的稳定性。
68
+
57
69
  ### @guandata/guanvis 0.1.36
58
70
 
59
71
  - 扩展仪表板标题、页面背景、筛选栏、卡片组、Tab 和分区的视觉配置,支持字体、颜色、图标、背景图、间距与分割线。
Binary file
Binary file
Binary file
Binary file
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@guandata/guanvis",
3
- "version": "0.1.36",
3
+ "version": "0.1.38",
4
4
  "description": "观远 BI Card/Page 生成工具 - 通过 JS DSL 创建图表和仪表板",
5
5
  "bin": {
6
6
  "guanvis": "bin/run.js"
@@ -23,7 +23,7 @@ compatibility: "Requires Node.js 14+. Install via npm link (local) or npm instal
23
23
  - 已有线上仪表板用 `guanvis checkout <pgId> -d <dir>` 拉成可编辑工程(attachCard 基线、自定义图表 `charts/` 反编译、Pro 模板 `templates/`、Page 布局脚本)。checkout 工程只用于修改指定 Page,不用于复制新 Page;只支持普通仪表板(pgType=PAGE),DSL 不能安全表达的结构会直接失败而不是清结构。**checkout 工程动手前先读 `references/checkout-editing.md`**。
24
24
  - **Checkout 账号红线**:checkout 读到的是"当前账号视角",publish 整体回写。必须用对涉及数据集有**完整列权限、无脱敏限制**的账号(推荐 owner 或管理员)执行 checkout/publish,否则被裁剪的字段会在回写后从线上卡片永久丢失;多语言租户操作账号语言须与卡片原始语言一致。
25
25
  - **Checkout JSON 红线**:`.guanvis/raw/**`、`.guanvis/base/**`、`.guanvis/manifest.json` 是只读快照。Agent 不得修改这些 JSON,也不得复制 checkout JSON 改副本创建新资源;现有卡片修改必须通过 `attachCard(...)` 的 DSL 操作表达(优先 `update*/patch*/add*/remove*/move*`,整 zone 重建的 `set*/clear*` 会触发 warning),新增卡片必须用 `createCard()` / `createSelector()` 工厂函数;操作清单见 `references/checkout-editing.md` §3。
26
- - Card/Page 描述也是 JS 源文件的一部分:新建看板或改版时,在 `card_*.js` / `page.js` 中写 `.setDescription(...)`,再通过 `preview`/`pack`/`publish` 从 JS 源文件生成并发布资源。
26
+ - Card/Page 描述也是 JS 源文件的一部分:新建资源未设置非空业务描述时,payload 描述使用 `[guanvis:created]` 标记创建来源,Page 不会因此打开描述展示;调用 `.setDescription(...)` 设置非空业务描述后只保留业务描述,不追加标记。attach/checkout 已有资源不补标记。新建看板或改版时,在 `card_*.js` / `page.js` 中写 `.setDescription(...)`,再通过 `preview`/`pack`/`publish` 从 JS 源文件生成并发布资源。
27
27
  - 写脚本前先形成 dashboard contract:目标用户、业务问题、使用的数据集、核心指标、维度拆解、筛选器、页面结构和验证方式。
28
28
  - 每次生成都针对明确目录或明确子目录;不要把 unrelated 示例、旧包或临时 ZIP 混入同一个发布目标。
29
29
  - Card/Page/Selector 的 `.setId(...)` 必须用 `guanvis genid` 生成(保证字母开头);数字开头 ID 会触发 BI 前端 CSS selector 语法错误,新建资源校验直接报 error 拦截(checkout/attach 的已有资源保留原 ID 不受限)。
@@ -32,9 +32,31 @@ compatibility: "Requires Node.js 14+. Install via npm link (local) or npm instal
32
32
  - **资源包安全红线**:Agent 只编辑 DSL 源文件;资源包 ZIP 是 `guanvis pack/publish` 的派生产物,不手工生成、解包修改或重打包。`guanvis upload` 只允许上传 `guanvis pack` 原样生成的 ZIP。若用户要求批量重绑资源、迁移已有页面或复用线上页面结构,先停下来说明风险并确认方案,不要直接改 ZIP。
33
33
  - 发布后优先用 `guancli page get/card get` 回读结构与配置;`guanvis screenshot` 仅在明确需要视觉质量判断且模型支持图像理解时使用(额外消耗 token),不作默认闭环步骤。
34
34
 
35
+ ### 桌面端对话式实时构建
36
+
37
+ 桌面安全 Runtime 同时提供 `connected.guancli`、`connected.guanvis` 与右侧可见的 `browser` 时,使用 `guanvis live` 做无需持久化本地工程的对话式构建:
38
+
39
+ 1. 用 `connected.guancli` 查询数据集、页面与卡片,真实取数走 `card preview`;不要向用户索取 Token。
40
+ 2. 正式交付或需要任一完整能力时,把与普通工程完全相同的 `schema.js`、`card_*.js`、`selector_*.js`、`page.js`、主题/设计规则及二进制资产组成 version=1 JSON 内存工程,先调 `live project validate`,再把同一份 stdin 交给 `live project publish`。文本文件用 `content`;直接调用 CLI 时二进制用 `base64`,桌面安全 Runtime 中上传的图片或 xlsx 必须通过 `reference.list` 取得 ID,再用 `asset_refs:[{"reference_id":<id>,"path":"<工程内路径>"}]` 交给 Host 注入,模型不要读取或生成大段 base64。路径必须在工程内且大小写不能冲突。
41
+ 3. 只有需求严格落在 KPI、基础/分组/堆叠柱、基础折线、明细表且强调最低延迟时,才用 `live page/card` 批量建卡并一次 apply;不得用 P0 命令降级模拟筛选器、文本、图片、地图、自定义图表或复杂报表。
42
+ 4. publish/page create 返回页面 URL 后用 `browser.open` 在右侧打开;每次 publish/apply/patch/remove/delete 后 `browser.navigate(reload)`,再用 snapshot/screenshot 回读,并以 `guancli page get/card preview` 验证结构和真实数据。
43
+ 5. `live project` 复用普通 GuanVis 的完整 DSL、主题、设计规则、校验和 transfer 发布引擎;不允许宿主文件参数、绝对路径、`..` 或文件 URI。新建资源必须显式 setId,覆盖同 ID Page 仍需用户明确确认后使用 `--allow-overwrite`。
44
+ 6. `live card delete` 与 `live page remove-card` 仅在用户明确要求删除/移除时调用;前者删除实体,后者只移出布局。
45
+
46
+ 完整内存工程最小契约:
47
+
48
+ ```json
49
+ {"version":1,"files":[
50
+ {"path":"schema.js","content":"defineDataset(...)"},
51
+ {"path":"card_01.js","content":"var card = createCard(...); registerCard(card.build());"},
52
+ {"path":"page.js","content":"var page = createPage(...); registerPage(page.build());"},
53
+ {"path":"assets/logo.png","base64":"..."}
54
+ ]}
55
+ ```
56
+
35
57
  ## AI Quick Reference(速查,详细说明见按需参考资料)
36
58
 
37
- **Checkout/attachCard 速记**:`attachCard(cardId, jsonPath)` 是"base JSON + 链式 DSL 操作 = 目标 JSON",不修改 base JSON,重复执行产出相同 payload。zone 修改优先 `update*/patch*/add*/remove*/move*`(整 zone 重建的 `set*/clear*` 会触发 warning);已有 selector 用 `.addLink()/.removeLink()/.clearLinks()` 改联动;自定义图表内容编辑仅限 SDK/ECHARTS_LITE(编辑 `charts/` 下反编译源文件),COMPLEX_REPORT/PLUGIN/PLUGIN_LITE/REPORT_FORM 调内容编辑 API 直接报错。发布前用 `guanvis diff <dir>` 或 preview 的 `changeSummary` 查看影响面;没有 DSL 操作覆盖的需求先扩展 DSL,不改 `.guanvis` JSON。完整操作语义(zone/筛选区/筛选栏画布互移等)见 `references/checkout-editing.md` §3。
59
+ **Checkout/attachCard 速记**:`attachCard(cardId, jsonPath)` 是"base JSON + 链式 DSL 操作 = 目标 JSON",不修改 base JSON,重复执行产出相同 payload。zone 修改优先 `update*/patch*/add*/remove*/move*`(整 zone 重建的 `set*/clear*` 会触发 warning);已有 selector 用 `.setSelectorSetting()` 修改筛选器配置,用 `.addLink()/.removeLink()/.clearLinks()` 修改联动,禁止借配置入口改变 selector 类型或重新绑定字段;自定义图表内容编辑仅限 SDK/ECHARTS_LITE(编辑 `charts/` 下反编译源文件),COMPLEX_REPORT/PLUGIN/PLUGIN_LITE/REPORT_FORM 调内容编辑 API 直接报错。发布前用 `guanvis diff <dir>` 或 preview 的 `changeSummary` 查看影响面;没有 DSL 操作覆盖的需求先扩展 DSL,不改 `.guanvis` JSON。完整操作语义(zone/筛选区/筛选栏画布互移等)见 `references/checkout-editing.md` §3。
38
60
 
39
61
  **字段显示名与 Card 标题**:`createCard()` 第二参数是 Card 标题,与字段显示名独立。图例/轴标题/表头/Tooltip/指标标签都用字段显示名,需要与物理字段名或 calcField 内部名分开时设置 `alias`(如 `f("营收", { alias: "本月营收" })`);`SINGLE_VALUE`/`KPI_CARD`/`KPI_TREND` 和仪表盘/进度类尤其明显。
40
62
 
@@ -49,8 +71,8 @@ compatibility: "Requires Node.js 14+. Install via npm link (local) or npm instal
49
71
  7. **calcField 命名**:不能与数据集物理字段同名,否则 BI 默认取数据集字段
50
72
  8. **calcField 类型**:`aggregation`(默认)公式必须含聚合函数;纯算术用 `{ calculationType: "normal" }`;窗口函数用 `{ calculationType: "window" }`
51
73
  9. **明细/滚动表 calcField**:`DETAIL_TABLE`/`SCROLL_TABLE` 只逐行展示,行级计算必须 `{ calculationType: "normal" }` 且禁用聚合/窗口函数;汇总需求改用非明细图表或 ETL 预计算
52
- 10. **联动/下钻**:新建筛选器联动图表必须 `.linkToAll()` 或 `.linkTo(cardIndex)`;已有筛选器用 `attachCard(...).addLink()/.removeLink()/.clearLinks()`;筛选器级联用 `.linkToSelector(selectorId, targetFieldName?)`;卡片联动卡片用 `card.linkTo(layoutCardIndex, { fields: [{ source, target }] })`;固定路径下钻用 `registerDrillPath(parentCardIndex, [child.build()], { position: DrillPathPosition.BOTTOM })`;详细规则见 `references/builder-reference.md`
53
- 11. **selector 类型**:离散值 → `DS_ELEMENTS`(默认);连续数值 → `SelectorType.DS_INTERVAL`;日期 → `CALENDAR`;快捷日期区间(本月/近7天等)→ `.setTimeMacroOptions(options)`
74
+ 10. **筛选器/联动/下钻**:新建和已有筛选器配置优先用 `.setSelectorSetting()`;新建筛选器联动图表必须 `.linkToAll()` 或 `.linkTo(cardIndex)`,已有筛选器用 `attachCard(...).addLink()/.removeLink()/.clearLinks()`;筛选器级联用 `.linkToSelector(selectorId, targetFieldName?)`;卡片联动卡片用 `card.linkTo(layoutCardIndex, { fields: [{ source, target }] })`;固定路径下钻用 `registerDrillPath(parentCardIndex, [child.build()], { position: DrillPathPosition.BOTTOM })`;详细规则见 `references/builder-reference.md`
75
+ 11. **selector 类型**:离散值 → `DS_ELEMENTS`(默认);连续数值 → `SelectorType.DS_INTERVAL`;日期 → `CALENDAR`;快捷日期区间(本月/近7天等)→ `.setSelectorSetting({ type: SelectorType.TIME_MACRO, timeMacro: { options, defaultName } })`(旧 `.setTimeMacroOptions()` 仅保留兼容)
54
76
  12. **同环比默认**:未指定输出值时默认增长率;未指定模式时默认 `ComparativeMode.FILTER_BASED`(普通模式需显式 `NORMAL`)。日期字段已是预聚合周期字段(如 `月开始日期`)时必须声明 `{ granularity: Granularity.NONE }`,避免按 DAY 筛选窗口计算为空
55
77
  13. **placeCard 入参**:优先用 card/selector ID 字符串(checkout 工程与子目录工程必须用),如 `placeCard("cardId", x, y, w, h)`。数字 index 仅限新建工程,按可布局资源(registerCard/MetricChart/TextCard/ImageCard/CustomChart/DuPontChart)的注册顺序累加,文件按文件名排序加载;**registerSelector 不参与 card index 计数**——selector 进画布/布局组件一律用其 ID 字符串。
56
78
  14. **publish 认证**:由底层 CLI 负责——guancli 先 `guancli auth use <profile>`,guancli-lite 用环境变量
@@ -203,9 +225,13 @@ guanvis check-dataset-switch . --from <oldDs> --to <newDs> --mode full # 详
203
225
  # 仪表板主题(详见 references/theme.md)
204
226
  guanvis theme preference --keywords "..." --sync # 另有 --theme-id / --clear;theme list/show/sync
205
227
 
206
- # 单张图表主题色
228
+ # 获取当前环境中可用的图表主题色
207
229
  guanvis theme-color list
208
230
  guanvis theme-color sync -d ./my_dashboard
231
+
232
+ # 获取当前 BI 环境可用的图标
233
+ guanvis icon list
234
+ guanvis icon list --group default_line -f json
209
235
  ```
210
236
 
211
237
  **多子目录工程**:每个子目录是独立工程,preview/pack/publish/`theme *` 必须 `cd` 进各子目录分别执行、各出各的资源包;根目录直接运行时若任一子目录有 `themes/` 会拒绝执行并打印 cd 提示。
@@ -4,7 +4,7 @@
4
4
 
5
5
  | 函数 | 说明 |
6
6
  |------|------|
7
- | `defineDataset(dsId, columns, options?)` | 定义数据集 schema(由 init 命令生成)。第一个数据集自动暴露为 `global.DS`(dsId 字符串)。`options.displayType` 指定数据集类型(如 `"EXCEL"`, `"DATAFLOW"`),确保看板页面正确显示数据集图标 |
7
+ | `defineDataset(dsId, columns, options?)` | 定义数据集 schema(由 init 命令生成)。第一个数据集自动暴露为 `global.DS`(dsId 字符串)。`options.displayType` 指定数据集类型(如 `"EXCEL"`, `"DATAFLOW"`);`options.sourceType` 保存数据源运行方式,用于直连能力限制等校验 |
8
8
  | `field(dsId, fieldName, overrides?)` | 从 schema 构造字段引用,`dsId` 是字符串。可叠加 aggrType/alias/numberFormat/sortType/granularity 等 |
9
9
  | `f(fieldName, overrides?)` | `field(DS, fieldName, overrides)` 的简写,仅适用于**单数据集**场景 |
10
10
  | `chartField(zone, index)` | 按最终数据区和位置引用图表字段,用于 `setAuxiliaryLine()` 的计算辅助线 |
@@ -1,5 +1,7 @@
1
1
  ## Builder API 参考
2
2
 
3
+ 新建 Card/Page 未设置非空业务描述时,payload 描述使用 `[guanvis:created]` 标记创建来源;设置非空业务描述后只保存业务描述,不追加标记。attach/checkout 已有资源不补标记,Page 只有创建标记时不会打开描述展示。
4
+
3
5
  ### CardBuilder
4
6
 
5
7
  | 方法 | 说明 |
@@ -23,16 +25,30 @@
23
25
  | `.addLocation(field)` / `.addTarget(field)` / `.addCompare(field)` | 位置/目标/对比 |
24
26
  | `.setSplitSetting(config)` | 拆分图配置 |
25
27
  | `.setColorByColors(preset_or_config)` | 渐变色配置 |
26
- | `.setBarSetting(config)` | 柱形图/条形图的柱体宽度、间距和圆角配置 |
28
+ | `.setBarSetting(config)` | 柱形图/条形图的柱体宽度、间距和圆角配置;帕累托图还支持数据点显隐 |
29
+ | `.setStackSplitSetting(config)` | 分组堆积柱形图/条形图的堆积分组模式 |
30
+ | `.setWaterfallSetting(config)` | 瀑布图的正负值颜色和累计值配置 |
31
+ | `.setParetoSetting(config)` | 帕累托图的累计曲线名称和百分比精度配置 |
32
+ | `.setMapSetting(config)` | 地图专属属性配置 |
33
+ | `.setBubbleSetting(config)` | 气泡半径配置 |
34
+ | `.setRadarSetting(config)` | 雷达图显示配置 |
35
+ | `.setBoxPlotSetting(config)` | 箱线图配置 |
36
+ | `.setHeatMapSetting(config)` | 热力图配置 |
37
+ | `.setSingleValueSetting(config)` / `.setKPISetting(config)` | 指标卡、对比指标卡配置 |
38
+ | `.setProgressBarSetting(config)` / `.setProgressPieSetting(config)` | 进度条、进度环配置 |
39
+ | `.setActivityGaugeSetting(config)` / `.setLiquidGaugeSetting(config)` / `.setSolidGaugeSetting(config)` | 活动仪表盘、水波图、实心仪表盘配置 |
27
40
  | `.setShapeColorType(type)` | 图形填充配置 |
28
41
  | `.setLineSetting(config)` | 折线显示配置 |
42
+ | `.setComboSetting(config)` | 组合图的显示方式、折线或符号样式配置 |
29
43
  | `.setCardSetting(config)` | 卡片背景、主题跟随、内边距和内容间距 |
30
44
  | `.setShowTitle(show)` / `.setCardTitleStyle(config)` | 卡片标题显隐和样式配置 |
31
45
  | `.setShowLegend(show, position?)` / `.setChartLegend(config)` | 图例配置 |
32
46
  | `.setDataLabel(config)` / `.setMetricAdditionalDataLabel(config)` | 数据标签配置 |
47
+ | `.setTreemapDataLabel(config)` / `.setFunnelDataLabel(config)` | 矩形树图分层数据标签、漏斗图各类数据标签配置 |
33
48
  | `.setAxis(config)` | 坐标轴配置 |
34
49
  | `.setTooltip(config)` | 工具提示配置 |
35
50
  | `.setTableSetting(config)` / `.setTableCellMerge(config)` | 表格行为、视觉样式与单元格配置 |
51
+ | `.setMiniChart(selector, config)` / `.setMiniChartSetting(selector, config)` | 设置透视表数值字段的迷你图类型、维度及字段 key 对应样式 |
36
52
  | `.setPieSetting(config)` / `.setPieCenterText(config)` | 饼图配置 |
37
53
  | `.setGrandTotal(config)` | 表格总计与小计配置 |
38
54
  | `.setSummary(field, options?)` / `.setSummaryStyle(config)` | 汇总指标及样式配置 |
@@ -163,11 +179,25 @@ attachCard(CARD_ID, BASE_PATH)
163
179
  | `.setShowTitle()` / `.setCardTitleStyle()` | 卡片标题显隐和样式配置 |
164
180
  | `.setShowLegend()` / `.setChartLegend()` | 图例配置 |
165
181
  | `.setDataLabel()` / `.setMetricAdditionalDataLabel()` | 数据标签配置 |
182
+ | `.setTreemapDataLabel()` / `.setFunnelDataLabel()` | 矩形树图分层数据标签、漏斗图各类数据标签配置 |
166
183
  | `.setAxis()` / `.setAuxiliaryLine()` / `.setTooltip()` | 坐标轴、辅助线和工具提示配置 |
167
184
  | `.setLineSetting()` | 折线显示配置 |
168
- | `.setBarSetting()` | 柱形图/条形图的柱体宽度、间距和圆角配置 |
185
+ | `.setComboSetting()` | 组合图的显示方式、折线或符号样式配置 |
186
+ | `.setBarSetting()` | 柱形图/条形图的柱体宽度、间距和圆角配置;帕累托图还支持数据点显隐 |
187
+ | `.setStackSplitSetting()` | 分组堆积柱形图/条形图的堆积分组模式 |
188
+ | `.setWaterfallSetting()` | 瀑布图的正负值颜色和累计值配置 |
189
+ | `.setParetoSetting()` | 帕累托图的累计曲线名称和百分比精度配置 |
190
+ | `.setMapSetting()` | 地图专属属性配置 |
191
+ | `.setBubbleSetting()` | 气泡半径配置 |
192
+ | `.setRadarSetting()` | 雷达图显示配置 |
193
+ | `.setBoxPlotSetting()` | 箱线图配置 |
194
+ | `.setHeatMapSetting()` | 热力图配置 |
195
+ | `.setSingleValueSetting()` / `.setKPISetting()` | 指标卡、对比指标卡配置 |
196
+ | `.setProgressBarSetting()` / `.setProgressPieSetting()` | 进度条、进度环配置 |
197
+ | `.setActivityGaugeSetting()` / `.setLiquidGaugeSetting()` / `.setSolidGaugeSetting()` | 活动仪表盘、水波图、实心仪表盘配置 |
169
198
  | `.setPieSetting()` / `.setPieCenterText()` | 饼图配置 |
170
199
  | `.setTableSetting()` / `.setTableCellMerge()` / `.setGrandTotal()` | 表格行为、视觉样式与汇总配置 |
200
+ | `.setMiniChart()` / `.setMiniChartSetting()` | 设置透视表数值字段的迷你图和样式;支持已有 MetricChart 增量编辑 |
171
201
  | `.setSplitSetting()` / `.setShapeColorType()` | 拆分图和图形填充配置 |
172
202
  | `.setRawSettings()` | 原始设置 |
173
203
  | `.setProps(obj)` | 设置指标卡片 `meta.chartMain.props` |
@@ -407,7 +437,7 @@ overview.linkTo("bbbbbbbbbbbbbbbbbbbbbbbb", {
407
437
  | `.setDashboardTitle(enabled, options?)` | 开启/关闭仪表板标题,并设置标题文字、字体、背景、图标、高度和下边距;未传 `title` 时默认使用 Page 名称 |
408
438
  | `.setExportView(enabled, config?)` | 开启/关闭导出视图;`config.mode` 决定使用分页方向还是单页宽度 |
409
439
  | `.setWidthAdaptive(enabled, width?)` | 开启/关闭宽度自适应;默认宽度 1280 |
410
- | `.setLayoutSetting(config)` | 设置 `page.meta.layoutSetting`。多次调用深度合并 |
440
+ | `.setLayoutSetting(config)` | 设置 `page.meta.layoutSetting`;布局类型使用 `PageLayoutType` |
411
441
  | `.build()` | 构建 |
412
442
 
413
443
  `setDashboardTitle()` 的 `options`:
@@ -445,7 +475,14 @@ overview.linkTo("bbbbbbbbbbbbbbbbbbbbbbbb", {
445
475
  | `sourceType` | `ImageSourceType.OUTSIDE_LINK` / `LOCAL_IMAGE` |
446
476
  | `renderType` | `ImageRenderType.RATIO` / `STRETCH` / `FIT_TO_CONTENT` |
447
477
 
448
- #### 导出视图与宽度自适应
478
+ #### 页面布局类型、导出视图与宽度自适应
479
+
480
+ ```javascript
481
+ page.setLayoutSetting({ layoutType: PageLayoutType.WATERFALL });
482
+ page.setLayoutSetting({ layoutType: PageLayoutType.RESPONSIVE });
483
+ ```
484
+
485
+ `PageLayoutType` 支持 `WATERFALL`(瀑布流)和 `RESPONSIVE`(自适应);也可以传 `null` 恢复默认布局。
449
486
 
450
487
  ```javascript
451
488
  // 多页导出:orientation 默认 ExportOrientation.VERTICAL
@@ -467,7 +504,7 @@ page.setWidthAdaptive(true, 1600);
467
504
 
468
505
  `setExportView()` 以 `mode` 为唯一判断依据。未传 `mode` 时默认 `ExportViewMode.MULTI_PAGE`;多页模式只读取 `orientation`,缺失或非法时使用 `ExportOrientation.VERTICAL`;单页模式只读取 `width`,缺失或非法时使用 827。传入与当前模式不匹配的 `width` / `orientation` 会被忽略并产生 warning。
469
506
 
470
- `setWidthAdaptive(true, width)` 的 `width` 会先静默四舍五入,再校验是否位于 `800 ~ 4096`;缺失或非法时使用 1280。宽度自适应不能与 `layoutType: "responsive"` 同时开启,但可以与导出视图同时开启。
507
+ `setWidthAdaptive(true, width)` 的 `width` 会先静默四舍五入,再校验是否位于 `800 ~ 4096`;缺失或非法时使用 1280。宽度自适应不能与 `PageLayoutType.RESPONSIVE` 同时开启,但可以与导出视图同时开启。
471
508
 
472
509
  #### 页面布局与卡片视觉
473
510
 
@@ -850,6 +887,7 @@ registerPage(page.build());
850
887
  |------|------|
851
888
  | `createSelector(name)` | 创建筛选器 |
852
889
  | `.setId(cardId)` | 设置固定资源 ID(同 CardBuilder) |
890
+ | `.setSelectorSetting(config)` | 修改筛选器配置,支持新建和 `attachCard()`;完整结构见下方示例 |
853
891
  | `.setSelectorType(type)` | 筛选器类型:`SelectorType.DS_ELEMENTS`(列表选择,默认)、`DS_INTERVAL`(数值范围)、`CALENDAR`(日期)、`TIME_MACRO`(快捷日期区间)、`PARAMETER`(全局参数,由 `bindParameter` 自动设置) |
854
892
  | `.setFilterType(type)` | 筛选条件:`DS_INTERVAL` 默认 `"BT"`(区间),`DS_ELEMENTS` 默认 `"IN"`。可用值参见 `FilterType` 枚举 |
855
893
  | `.bindDataset(dsId)` | 绑定数据集(可选,单数据集场景自动绑定) |
@@ -872,6 +910,42 @@ registerPage(page.build());
872
910
  | `.linkToAll()` | 自动联动所有普通图表卡片、MetricChart 和杜邦子卡片(按同名字段匹配) |
873
911
  | `.build()` | 构建(触发验证) |
874
912
 
913
+ 推荐优先使用统一配置入口,旧的 `.setSelectorType()`、`.setMultiSelect()`、`.setDefaultValue()` 等方法继续兼容。资源身份、数据绑定和联动具有独立生命周期,仍分别使用 `.setId()`、`.bindField()` / `.bindParameter()` 和 `.linkTo*()`;已有筛选器联动使用 `attachCard().addLink()/removeLink()/clearLinks()`。
914
+
915
+ `setSelectorSetting(config)` 的结构如下。所有字段都可选;`false`、`0` 和允许的空数组都会按显式值处理,未传字段在 `attachCard()` 模式下保持线上原值:
916
+
917
+ ```javascript
918
+ {
919
+ type: SelectorType.DS_ELEMENTS,
920
+ filterType: FilterType.IN,
921
+ selection: {
922
+ multiple: true,
923
+ showSelectAll: true,
924
+ canClear: false,
925
+ firstPickLink: false
926
+ },
927
+ display: {
928
+ type: SelectorDisplay.SEARCH_BOX,
929
+ showColumnName: true
930
+ },
931
+ defaultValue: {
932
+ type: SelectorDefaultType.FIXED_VALUE,
933
+ values: ["华东"],
934
+ displayValues: ["华东地区"]
935
+ },
936
+ calendar: {
937
+ granularities: [Granularity.MONTH, Granularity.QUARTER],
938
+ defaultGranularity: Granularity.MONTH
939
+ },
940
+ timeMacro: {
941
+ options: [{ name: "最近7天", expr: ["LAST_7_DAY"] }],
942
+ defaultName: "最近7天"
943
+ }
944
+ }
945
+ ```
946
+
947
+ 适用规则:`selection.multiple/showSelectAll` 和 `display.type` 仅用于 `DS_ELEMENTS`;`calendar` 仅用于 `CALENDAR`;`timeMacro` 仅用于 `TIME_MACRO`。`defaultValue.values` 会切换为 `FIXED_VALUE`。已有筛选器传入的 `type` 是类型断言,不能借此把筛选器改成另一种类型,也不会重新绑定字段或参数。
948
+
875
949
  **使用示例**:
876
950
 
877
951
  ```javascript
@@ -879,7 +953,10 @@ registerPage(page.build());
879
953
  var sel = createSelector("区域筛选")
880
954
  .setId("s184352b7a76776db5f534df")
881
955
  .bindField(f("区域"))
882
- .setMultiSelect(true)
956
+ .setSelectorSetting({
957
+ selection: { multiple: true, showSelectAll: true, canClear: false },
958
+ display: { type: SelectorDisplay.SEARCH_BOX }
959
+ })
883
960
  .linkToAll()
884
961
  .build();
885
962
  registerSelector(sel);
@@ -917,15 +994,21 @@ registerSelector(sel);
917
994
  // selector_03_timemacro.js — 快捷日期(TIME_MACRO)
918
995
  var sel = createSelector("快捷日期")
919
996
  .setId("gf7a7ed51ec7c9477fcd1d81")
920
- .setTimeMacroOptions([
921
- { name: "今天", expr: ["TODAY"] },
922
- { name: "昨天", expr: ["YESTERDAY"] },
923
- { name: "最近7天", expr: ["LAST_7_DAY"] },
924
- { name: "最近30天", expr: ["LAST_30_DAY"] },
925
- { name: "本月", expr: ["MONTH_TO_DAY"] },
926
- { name: "上月", expr: ["LAST_MONTH"] },
927
- { name: "本年", expr: ["YEAR_TO_DAY"] }
928
- ], "最近7天")
997
+ .setSelectorSetting({
998
+ type: SelectorType.TIME_MACRO,
999
+ timeMacro: {
1000
+ options: [
1001
+ { name: "今天", expr: ["TODAY"] },
1002
+ { name: "昨天", expr: ["YESTERDAY"] },
1003
+ { name: "最近7天", expr: ["LAST_7_DAY"] },
1004
+ { name: "最近30天", expr: ["LAST_30_DAY"] },
1005
+ { name: "本月", expr: ["MONTH_TO_DAY"] },
1006
+ { name: "上月", expr: ["LAST_MONTH"] },
1007
+ { name: "本年", expr: ["YEAR_TO_DAY"] }
1008
+ ],
1009
+ defaultName: "最近7天"
1010
+ }
1011
+ })
929
1012
  .linkToAll()
930
1013
  .build();
931
1014
  registerSelector(sel);
@@ -963,7 +1046,7 @@ registerSelector(province);
963
1046
  - **离散值**(区域、类别、客户名等文本字段)→ `DS_ELEMENTS`(默认),配合 `setDisplayType` 选择展示样式
964
1047
  - **连续数值范围**(利润率、金额区间等)→ `SelectorType.DS_INTERVAL`,默认区间输入(起始值-结束值)
965
1048
  - **日期选择**(精确日期范围)→ `SelectorType.CALENDAR`,需要 `bindField` 绑定日期字段。默认会从联动目标卡片推断日期粒度;如需固定月/季度等粒度,可用 `.setGranularity(Granularity.MONTH)` 或 `.setGranularityOptions([...], default)`
966
- - **快捷日期区间**(本月/上月/近7天等预设区间)→ `.setTimeMacroOptions(options, default)`,不需要 `bindField`,自动匹配目标卡片日期字段联动。`default` 传 `null` 表示无默认值
1049
+ - **快捷日期区间**(本月/上月/近7天等预设区间)→ `.setSelectorSetting({ type: SelectorType.TIME_MACRO, timeMacro: { options, defaultName } })`,不需要 `bindField`,自动匹配目标卡片日期字段联动。`defaultName` 传 `null` 表示无默认值;旧 `.setTimeMacroOptions()` 仅保留兼容
967
1050
 
968
1051
  **联动机制**:筛选器通过 `settings.asFilter` 配置联动关系。`linkTo(cardIndex)` 会自动构建 `columnMappings`,将筛选器字段映射到目标卡片的同名字段;cardIndex 只统计普通图表、MetricChart 和杜邦子卡片,文本/图片等不可联动资源不占序号。`linkToSelector(selectorId, targetFieldName?)` 用于筛选器联动筛选器,目标必须是已注册的 DS_ELEMENTS/TREE 筛选器,构建时会检查 selector 级联成环;目标为 ALL/空默认值时会自动改为 `FIRST_PICK + firstPickLink`,目标已有固定默认值时保留用户设置。`linkToAll()` 会自动匹配所有普通图表卡片、MetricChart 和杜邦子卡片中的同名字段,不自动包含筛选器。若同一个筛选器同时写了 `linkTo(index, "自定义字段")` 和 `linkToAll()`,显式 `linkTo` 的目标字段映射优先。
969
1052
 
@@ -1714,6 +1797,10 @@ project/
1714
1797
  | `AggrType` | `SUM`, `AVG`, `COUNT`(=CNT), `COUNT_DISTINCT`(=CNT_DISTINCT), `MIN`, `MAX` | 聚合类型 |
1715
1798
  | `FieldType` | `STRING`, `INT`, `LONG`, `DOUBLE`, `FLOAT`, `DATE`, `BOOL`, `DECIMAL` | 字段数据类型 |
1716
1799
  | `SortOrder` | `ASC`, `DESC` | 排序方向 |
1800
+ | `MiniChartType` | `LINE`, `COLUMN`, `PIE`, `PROGRESS` | 透视表字段迷你图类型 |
1801
+ | `MiniChartSort` | `ASC`, `DESC` | 迷你图维度排序方向 |
1802
+ | `MapRegion` | `COUNTRY`, `PROVINCE`, `CITY`, `AUTO` | 中国行政类地图的显示范围 |
1803
+ | `MapSymbol` | `CIRCLE`, `DIAMOND`, `SQUARE`, `TRIANGLE`, `TRIANGLE_DOWN` | 符号行政地图的内置符号 |
1717
1804
  | `Granularity` | `NONE`, `YEAR`, `QUARTER`, `MONTH`, `WEEK`, `DAYOFWEEK`, `DAY`, `HOUR`, `MINUTE`, `SECOND` | 日期粒度 |
1718
1805
  | `GrandTotalPosition` | `LEFT`, `RIGHT`, `TOP`, `BOTTOM` | 表格总计位置;行总计用左右,列总计用上下 |
1719
1806
  | `ContentSpaceSize` | `SMALL`, `MIDDLE`, `LARGE` | 卡片内容间距 |