@guandata/guanvis 0.1.28 → 0.1.30
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 +15 -0
- package/LICENSE +133 -0
- package/LICENSE.zh-CN +82 -0
- package/README.md +15 -0
- package/binaries/guanvis-darwin-arm64 +0 -0
- package/binaries/guanvis-darwin-x64 +0 -0
- package/binaries/guanvis-linux-arm64 +0 -0
- package/binaries/guanvis-linux-x64 +0 -0
- package/binaries/guanvis-win32-x64.exe +0 -0
- package/package.json +4 -2
- package/skills/guanvis/SKILL.md +32 -11
- package/skills/guanvis/evals/dynamic_fields/card_01_dynamic_dataset.js +20 -0
- package/skills/guanvis/evals/dynamic_fields/card_02_dynamic_metric_chart.js +16 -0
- package/skills/guanvis/evals/dynamic_fields/metrics.js +19 -0
- package/skills/guanvis/evals/dynamic_fields/page.js +9 -0
- package/skills/guanvis/evals/dynamic_fields/schema.js +7 -0
- package/skills/guanvis/evals/dynamic_fields/verify_default_roundtrip.sh +137 -0
- package/skills/guanvis/evals/split_charts/card_01_column_split.js +10 -0
- package/skills/guanvis/evals/split_charts/card_02_line_split.js +10 -0
- package/skills/guanvis/evals/split_charts/card_03_combo_split.js +11 -0
- package/skills/guanvis/evals/split_charts/page.js +10 -0
- package/skills/guanvis/evals/split_charts/schema.js +14 -0
- package/skills/guanvis/evals/tab_layout/card_03_story.js +2 -2
- package/skills/guanvis/evals/tab_layout/page.js +1 -1
- package/skills/guanvis/references/api-reference.md +22 -1
- package/skills/guanvis/references/builder-reference.md +164 -19
- package/skills/guanvis/references/metric-chart-reference.md +40 -0
- package/skills/guanvis/references/publish-and-constraints.md +6 -5
|
@@ -160,6 +160,10 @@ registerMetricChart(card.build());
|
|
|
160
160
|
| `.addMetricAdditional(metric(...))` | 添加副轴指标 |
|
|
161
161
|
| `.addRow(metricDim(...))` | 添加行/类目维度 |
|
|
162
162
|
| `.addColumn(metricDim(...))` | 添加列/对比维度 |
|
|
163
|
+
| `.addDynamicRow(name, fields, options?)` | 添加动态维度组,候选字段写入 row |
|
|
164
|
+
| `.addDynamicColumn(name, fields, options?)` | 添加动态维度组,候选字段写入 column |
|
|
165
|
+
| `.addDynamicMetric(name, fields, options?)` | 添加动态指标组,候选指标写入 metric |
|
|
166
|
+
| `.addDynamicMetricAdditional(name, fields, options?)` | 添加动态指标组,候选指标写入副轴 |
|
|
163
167
|
| `.addFilter(field, type, values)` | 添加筛选 |
|
|
164
168
|
| `.addSort(field)` | 添加排序 |
|
|
165
169
|
| `.addColorBy(metric(...))` | 添加颜色指标 |
|
|
@@ -174,6 +178,42 @@ registerMetricChart(card.build());
|
|
|
174
178
|
| `.setFreeDrill(enabled, position)` | 设置 `config.freeDrillConfig` |
|
|
175
179
|
| `.setRowThreshold(thresholds)` | 设置 `config.rowThreshold` |
|
|
176
180
|
|
|
181
|
+
## 动态维度 / 动态指标
|
|
182
|
+
|
|
183
|
+
动态字段是显式能力。只有调用 `.addDynamicRow()` / `.addDynamicColumn()` / `.addDynamicMetric()` / `.addDynamicMetricAdditional()` 时,guanvis 才会生成候选字段的 `dzId` 和 `meta.chartMain.dynamicZoneInfo`;普通 `.addRow()` / `.addMetric()` 仍生成静态字段。
|
|
184
|
+
|
|
185
|
+
```javascript
|
|
186
|
+
var region = metricDim("销售额", "区域");
|
|
187
|
+
var city = metricDim("销售额", "城市");
|
|
188
|
+
var sales = metric("销售额");
|
|
189
|
+
var profit = metric("利润");
|
|
190
|
+
|
|
191
|
+
var card = createMetricChart(ChartType.PIVOT_TABLE, "指标动态分析")
|
|
192
|
+
.setId("metriccard12345678901234")
|
|
193
|
+
.addDynamicRow("分析维度", [region, city], {
|
|
194
|
+
defaultValue: [region],
|
|
195
|
+
multiSelect: false
|
|
196
|
+
})
|
|
197
|
+
.addDynamicMetric("分析指标", [sales, profit], {
|
|
198
|
+
defaultValue: [sales],
|
|
199
|
+
multiSelect: true,
|
|
200
|
+
orderType: DynamicFieldOrder.CLICK
|
|
201
|
+
});
|
|
202
|
+
|
|
203
|
+
registerMetricChart(card.build());
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
`options`:
|
|
207
|
+
|
|
208
|
+
| 字段 | 默认值 | 说明 |
|
|
209
|
+
|---|---|---|
|
|
210
|
+
| `defaultValue` | 第一个候选字段 | 推荐传候选数组里的字段对象;字符串只在唯一命中 `name` / `alias` / `fdId` / `id` 时可用 |
|
|
211
|
+
| `multiSelect` | 根据 zone `maxCount` 推断 | `maxCount=1` 时强制单选;指标卡 row 默认单选 |
|
|
212
|
+
| `orderType` | `DynamicFieldOrder.PRESET` | `PRESET` 按候选顺序,`CLICK` 按用户点击顺序 |
|
|
213
|
+
| `id` | 自动生成 | 可选,显式指定 `dzId`,用于稳定 diff |
|
|
214
|
+
|
|
215
|
+
`hidden` 和 `selectType` 不开放配置;资源包固定写 `hidden: false`、`selectType: "SEARCHBOX"`。动态字段不写 `stateValue.dzFieldValues`,前端加载卡片时会根据 `dynamicZoneInfo.dzMappings.defaultValue` 初始化默认选中值。
|
|
216
|
+
|
|
177
217
|
复杂配置可直接放到 `metric()` / `metricDim()` 的 overrides 中:
|
|
178
218
|
|
|
179
219
|
```javascript
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
- **接口**:`POST /api/manual/template/transfer`(标准 multipart/form-data,表单字段名 `new-file`)
|
|
6
6
|
- **认证**:随底层 `guancli fetch` 使用 `Cookie: uIdToken=...`
|
|
7
7
|
- **关键 header**:`raw-backend-response: TRUE`(绕过前端代理层,直达后端)
|
|
8
|
-
- **ID 策略**:`needIdMapping=false`,保持资源 ID 不变。同 ID 资源会被覆盖更新。为避免部分 BI 版本在导入前探测 Card 时缓存"找不到相关卡片",`guanvis publish/upload` 的在线覆盖检查只探测目标环境已有 Page ID;检测到同 ID Page 时默认拒绝上传,只有明确加 `--allow-overwrite` 才允许覆盖。加 `--allow-overwrite` 后,CLI 会先调用资源包导出为冲突 Page 生成备份记录,并等待导出成功;备份失败或超时则中止上传。Card/Selector ID 不做在线探测;如果资源包不包含 Page
|
|
8
|
+
- **ID 策略**:`needIdMapping=false`,保持资源 ID 不变。同 ID 资源会被覆盖更新。为避免部分 BI 版本在导入前探测 Card 时缓存"找不到相关卡片",`guanvis publish/upload` 的在线覆盖检查只探测目标环境已有 Page ID;检测到同 ID Page 时默认拒绝上传,只有明确加 `--allow-overwrite` 才允许覆盖。加 `--allow-overwrite` 后,CLI 会先调用资源包导出为冲突 Page 生成备份记录,并等待导出成功;备份失败或超时则中止上传。Card/Selector ID 不做在线探测;如果资源包不包含 Page,则不会执行在线覆盖检查。checkout 工程表示修改指定 Page,不在 CLI 内复制新版本或手写 ID 映射。
|
|
9
9
|
- **通用性**:不需要目标系统开启"一键迁移"开关,所有客户环境可用
|
|
10
10
|
- **异步执行**:上传成功后返回 `taskId`,后端异步完成导入
|
|
11
11
|
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
|
|
14
14
|
若用户要求批量重绑资源、迁移已有页面或复用线上页面结构,先说明风险并确认方案;不要直接修改 ZIP 内部文件后上传。
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
checkout 工程表示“基于线上快照修改指定 Page”,不会新建 Page,也不要通过复制 checkout JSON、改 ID 或自建 ID map 来生成新版本。若用户要求保留原页面并另存新版本,应先调用 BI 自身 Page Save/复制能力,由 BI 处理资源 ID 映射,再对新 Page 执行 checkout/edit。用户可能已经在 BI 上手工改过页面布局、卡片配置、筛选器或说明文本;如果按旧 checkout 工程同 ID `publish`,线上改动会被覆盖。发布前应使用 `--dry-run` 检查覆盖对象,只有用户明确要求覆盖原资源时,才允许加 `--allow-overwrite` 同 ID 发布。
|
|
17
17
|
|
|
18
18
|
## 认证与 CLI 集成
|
|
19
19
|
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
|
|
24
24
|
## 硬约束
|
|
25
25
|
|
|
26
|
-
- `schema.js` 由 `init`
|
|
26
|
+
- `schema.js` 由 `init` 命令生成;`checkout` 会尽量生成 schema,但数据集无权限、已删除或跨环境残留时只提示 warning 并继续生成可编辑工程。不允许 AI 或人工修改 `schema.js`,缺失时后续用 `guanvis init <dsId> -d <dir> --force` 补齐。
|
|
27
27
|
- card 脚本必须调用 `registerCard(card.build())`(目录模式)或返回 `card.build()`(单文件模式)。
|
|
28
28
|
- metric chart 脚本必须调用 `registerMetricChart(card.build())`。
|
|
29
29
|
- text card 脚本必须调用 `registerTextCard(textCard.build())`。
|
|
@@ -48,6 +48,7 @@
|
|
|
48
48
|
|
|
49
49
|
- `.setId(id)` 的 ID **必须**为严格 24 位字母数字字符串(正则:`^[a-zA-Z0-9]{24}$`),与后端 `RandUtil.uuid` 格式一致。若生成或手填的 ID 以数字开头,建议重新生成一组,避免 BI 前端某些路径把 ID 拼成 CSS selector(如 `#5bef...`)时触发 `querySelector` 语法错误。
|
|
50
50
|
- **生成 ID**:先运行 `guanvis genid <数量>` 生成足够的 ID,在编写脚本时直接填入每个 card/selector/page 的 `.setId()` 调用中。
|
|
51
|
-
-
|
|
51
|
+
- **布局组件 ID 例外**:Tab、Panel、AreaTitle、CardGroup、SelGroup 使用 `guanvis gen-layout-id <prefix>` 生成,形如 `tab_AbCdEf`、`panel_AbCdEf`、`areaTitle_AbCdEf`、`cardGroup_AbCdEf`、`selGroup_AbCdEf`,不适用 24 位 `genid` 规则。
|
|
52
|
+
- **线上更新默认策略**:新建工程发布新 Page;checkout 工程只修改 checkout 指定的 Page,不负责复制新版本。
|
|
52
53
|
- **覆盖前检查**:发布前可先运行 `guanvis publish <dir> --dry-run` 或 `guanvis upload <zip> --dry-run`,只构建/解析资源并列出将被覆盖的线上 Page,不提交 transfer 任务。
|
|
53
|
-
-
|
|
54
|
+
- **显式覆盖场景**:checkout 工程发布时保持 `.setId()` 不变,并在用户确认覆盖后加 `--allow-overwrite` 允许同 ID Page 覆盖;多次同 ID 发布会覆盖资源(因为 transfer API 的 `needIdMapping=false`),其中 Card/Selector ID 不做在线覆盖检查。覆盖前备份只创建资源迁移导出记录并打印 packageId,不自动下载资源包;需要回滚时,用户应到 BI 资源迁移导出记录中下载该资源包,再手动导入覆盖回去。
|