@amaster.ai/pi-lark 0.1.2-beta.72 → 0.1.2-beta.74

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.
Files changed (47) hide show
  1. package/package.json +4 -4
  2. package/skills/lark-apps/SKILL.md +1 -0
  3. package/skills/lark-apps/references/lark-apps-export.md +62 -0
  4. package/skills/lark-base/SKILL.md +3 -3
  5. package/skills/lark-base/references/lark-base-dashboard-block-config.md +20 -2
  6. package/skills/lark-base/references/lark-base-view.md +109 -0
  7. package/skills/lark-base/references/lark-base-workflow-schema.md +22 -12
  8. package/skills/lark-sheets/SKILL.md +58 -173
  9. package/skills/lark-sheets/references/lark-sheets-batch-update.md +10 -10
  10. package/skills/lark-sheets/references/lark-sheets-chart.md +5 -5
  11. package/skills/lark-sheets/references/lark-sheets-conditional-format.md +4 -4
  12. package/skills/lark-sheets/references/lark-sheets-filter-view.md +1 -1
  13. package/skills/lark-sheets/references/lark-sheets-filter.md +2 -2
  14. package/skills/lark-sheets/references/lark-sheets-float-image.md +2 -2
  15. package/skills/lark-sheets/references/lark-sheets-formula-translation.md +90 -4
  16. package/skills/lark-sheets/references/lark-sheets-formula-verify.md +49 -13
  17. package/skills/lark-sheets/references/lark-sheets-pivot-table.md +13 -13
  18. package/skills/lark-sheets/references/lark-sheets-range-operations.md +12 -9
  19. package/skills/lark-sheets/references/lark-sheets-read-data.md +14 -12
  20. package/skills/lark-sheets/references/lark-sheets-search-replace.md +3 -3
  21. package/skills/lark-sheets/references/lark-sheets-sheet-structure.md +8 -4
  22. package/skills/lark-sheets/references/lark-sheets-sparkline.md +2 -2
  23. package/skills/lark-sheets/references/lark-sheets-styles-put.md +2 -2
  24. package/skills/lark-sheets/references/lark-sheets-visual-standards.md +16 -16
  25. package/skills/lark-sheets/references/lark-sheets-workbook.md +22 -7
  26. package/skills/lark-sheets/references/lark-sheets-write-cells.md +66 -57
  27. package/skills/lark-sheets/scripts/lark_chart_quality_check.py +42 -26
  28. package/skills/lark-sheets/scripts/lark_chart_size_advisor.py +2 -1
  29. package/skills/lark-sheets/scripts/lark_inspect_workbook.py +37 -9
  30. package/skills/lark-sheets/scripts/lark_sheet_read_cli.py +53 -0
  31. package/skills/lark-sheets/scripts/{sheets_df.py → lark_sheets_df.py} +1 -1
  32. package/skills/lark-slides/SKILL.md +11 -18
  33. package/skills/lark-slides/references/cli/lark-slides-create.md +3 -3
  34. package/skills/lark-slides/references/cli/lark-slides-delete-slide.md +1 -1
  35. package/skills/lark-slides/references/cli/lark-slides-history.md +1 -8
  36. package/skills/lark-slides/references/cli/lark-slides-media-upload.md +5 -10
  37. package/skills/lark-slides/references/cli/lark-slides-replace-slide.md +14 -15
  38. package/skills/lark-slides/references/cli/lark-slides-update-slide.md +2 -2
  39. package/skills/lark-slides/references/cli/lark-slides-xml-presentation-slide-get.md +3 -108
  40. package/skills/lark-slides/references/cli/lark-slides-xml-presentation-slide-replace.md +6 -183
  41. package/skills/lark-slides/references/cli/lark-slides-xml-presentations-get.md +26 -143
  42. package/skills/lark-slides/references/lark-slides-xml-presentation-slide-get.md +3 -3
  43. package/skills/lark-slides/references/lark-slides-xml-presentation-slide-replace.md +2 -2
  44. package/skills/lark-slides/references/lark-slides-xml-presentations-get.md +2 -2
  45. package/skills/lark-slides/references/workflow/error-handling.md +3 -3
  46. package/skills/lark-slides/references/workflow/slides-editing.md +10 -11
  47. package/skills/lark-sheets/references/lark-sheets-legacy-command-migration.md +0 -152
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@amaster.ai/pi-lark",
3
- "version": "0.1.2-beta.72",
3
+ "version": "0.1.2-beta.74",
4
4
  "description": "Pi extension for Lark/Feishu workspace — calendar, docs, drive, sheets, tasks, mail and more via lark-cli.",
5
5
  "keywords": [
6
6
  "pi-package",
@@ -56,12 +56,12 @@
56
56
  }
57
57
  },
58
58
  "devDependencies": {
59
- "@earendil-works/pi-coding-agent": "0.80.10",
60
- "typebox": "*",
59
+ "@earendil-works/pi-coding-agent": "0.85.1",
60
+ "typebox": "1.3.7",
61
61
  "vitest": "^4.0.0"
62
62
  },
63
63
  "dependencies": {
64
- "@amaster.ai/pi-shared": "0.1.2-beta.72"
64
+ "@amaster.ai/pi-shared": "0.1.2-beta.74"
65
65
  },
66
66
  "scripts": {
67
67
  "fetch-skills": "node scripts/fetch-skills.mjs",
@@ -35,6 +35,7 @@ lark-cli auth login --domain apps
35
35
  | HTML 应用 / 创意模式 — 写 HTML 页面/网站、静态页、PPT/deck、落地页、仪表盘、UI mockup、原型、线框图、视觉探索 | 加载 [`creative-design/creative-design.md`](creative-design/creative-design.md)(含完整开发与发布流程) | [`creative-design/creative-design.md`](creative-design/creative-design.md) |
36
36
  | 旧版存量 HTML 应用(无 Git 管理)继续上传已有静态产物 | `+html-publish`(仅兼容旧链路;新建 html / 创意模式 / creative-design 产物不得使用) | [`lark-apps-html-publish.md`](references/lark-apps-html-publish.md) |
37
37
  | 开发已有应用 / 初始化本地仓库(开发方式已定为本地后;先解析 app_id,勿 `+create` 新建) | `+init`(或手动 `+git-credential-init` + 原生 git)。**执行前必读** [`lark-apps-local-dev.md`](references/lark-apps-local-dev.md),含端到端流程和领域规则 | [`lark-apps-init.md`](references/lark-apps-init.md), [`lark-apps-git-credential.md`](references/lark-apps-git-credential.md) |
38
+ | 只要一份源码快照、不做本地开发;或要取**别人分享给你的**应用源码(你对其仓库无权限) | `+export`(下载 zip;不配 git 凭证、不建工作区)。要继续开发用 `+init` 而非本命令 | [`lark-apps-export.md`](references/lark-apps-export.md) |
38
39
  | 本地开发时 `.env.local` 损坏/丢失,重新拉取启动期环境变量 | `+env-pull` | [`lark-apps-env-pull.md`](references/lark-apps-env-pull.md) |
39
40
  | 管理应用环境变量(查看/设置/删除) | `+env-list`, `+env-set`, `+env-delete` | [`lark-apps-env.md`](references/lark-apps-env.md) |
40
41
  | 查线上日志、Trace、请求数、错误率、延迟、CPU、memory、PV/UV/访问量 | `+log-list`, `+log-get`, `+trace-list`, `+trace-get`, `+metric-list`, `+analytics-list` | [`lark-apps-observability.md`](references/lark-apps-observability.md) |
@@ -0,0 +1,62 @@
1
+ # apps +export
2
+
3
+ `+export` 把妙搭应用的源码打成 zip 下载到本地。运行时命令事实以 `lark-cli apps +export --help` 为准。
4
+
5
+ ## 何时用
6
+
7
+ 只要一份源码快照的场景:读代码、审计、归档、做静态分析、把源码喂给别的工具。
8
+
9
+ **跨应用是它相对 `+init` 的核心价值**:创意应用的分享链接(`/page/<token>`)指向别人的应用,你对那个仓库没有权限,`git clone` 走不通;`+export` 只要求你对该应用有下载权限。
10
+
11
+ ## 不要用它的时候
12
+
13
+ 要继续开发就用 `+init`,不要用 `+export` 再手动 `git init`。两者产出不同:
14
+
15
+ | | `+export` | `+init` |
16
+ |---|---|---|
17
+ | 产出 | 一个 zip | 完整 git 工作区 |
18
+ | Git 凭证 | 不配 | 配好,可 push |
19
+ | 本地环境变量 | 不拉 | 拉 `.env.local` |
20
+ | 前提 | 对应用有下载权限 | 对**仓库**有权限 |
21
+
22
+ 用 `+export` 拿到的目录没有 git 历史、没有远端、没有凭证,改完发不回去。
23
+
24
+ ## 导出的是「最后一次提交」,不是沙箱当前状态
25
+
26
+ 服务端对远端仓库跑 `git archive`,从不读沙箱文件系统。用户在沙箱里改了文件但没提交或发布,**那些改动不在归档里**。
27
+
28
+ 这是设计如此,不是缺陷。若导出结果看起来"少了刚写的代码",先确认改动是否已提交,而不是重试导出。
29
+
30
+ ## 命令骨架
31
+
32
+ - `--app-id` 与 `--meta-token` **恰传其一**:前者是自己的应用,后者是分享链接里的 token。
33
+ 两者作为独立字段走 `POST /apps/export` 的请求体(`app_id` / `meta_token`),服务端按传入的
34
+ 字段区分,不再共用 path 段——调用方只有 token、没有 app_id 时也不用在路径里凑一个占位值。
35
+ - 两者都只收**裸标识符**。拿到的是整条链接(`.../app/<app_id>` 或 `.../page/<token>`)时,
36
+ 只传最后一段——整条 URL 传进来会被本地拦下并提示,不会变成一个看起来像"应用不存在"的 404。
37
+ - `--output` 可选,相对当前目录;省略时用服务端给的文件名(通常是 `<app_id>.zip`)。
38
+
39
+ ## 示例
40
+
41
+ ```bash
42
+ lark-cli apps +export --app-id app_xxx --output ./src.zip
43
+ lark-cli apps +export --app-id app_xxx # 存成 ./app_xxx.zip
44
+ lark-cli apps +export --meta-token <share-token> # 别人分享给你的应用
45
+ lark-cli apps +export --app-id app_xxx --dry-run
46
+ ```
47
+
48
+ ## 输出契约
49
+
50
+ - 成功时 stdout 是 JSON envelope,含 `output`(落盘的绝对路径)与 `size_bytes`;传了 `--app-id` 时还会回显 `app_id`。
51
+ - 归档以流式写盘,不会整包驻留内存,大仓库也安全。
52
+ - 失败时不会留下半个文件。
53
+
54
+ ## 错误处理
55
+
56
+ | 情况 | 怎么办 |
57
+ |---|---|
58
+ | 应用尚未发布(`code 40901 app not published`) | 该应用是产物托管形态(如静态 HTML 应用),导出的是「最新已发布产物」,而它还没有成功发布过版本,此刻没有可导的东西。**先发布应用再重试**——不是 app_id 写错,重试也没用 |
59
+ | 权限不足(403) | 你需要该应用的下载权限。**持有分享 token 不等于有权限** |
60
+ | 应用不存在(404) | 用 `+list --keyword <name>` 核对 app_id |
61
+ | 归档过大(413) | 超出导出体积上限,改用 `+git-credential-init` + 原生 git clone |
62
+ | 参数报错 | `--app-id` 与 `--meta-token` 只能给一个,且必须给一个;两者都要裸标识符(不是整条链接) |
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: lark-base
3
- version: 1.2.22
3
+ version: 1.2.23
4
4
  description: "飞书多维表格(Base)操作:建表、字段、记录、视图、统计、公式/lookup、表单、仪表盘、应用模式(BaseApp/AppMode 页面与组件)、Workspace 目录、workflow、角色权限、模板中心(多维表格模板分类/列表/搜索);遇到 Base/多维表格/bitable、BaseApp/AppMode、/base/ 或 /app/ 链接时使用。BaseApp 不走 lark-apps;文件导入/导出转 lark-drive,认证/授权转 lark-shared。"
5
5
  metadata:
6
6
  requires:
@@ -199,9 +199,9 @@ lark-cli base +record-batch-update \
199
199
 
200
200
  ### View
201
201
 
202
- View 是同一 Table records 上的持久化筛选、排序、分组和展示配置,共享底层 records,不产生数据副本。一次性查询直接使用 Record 读取;需要在 Base UI 中长期保存、共享或复用访问方式时使用 View。
202
+ View 共享 Table 的底层记录;没有特殊展示需求时优先使用 `grid`。读取已有视图用 `+view-list` / `+view-get`。
203
203
 
204
- **读取 View:** 使用 `+view-list` / `+view-get`,并通过 `+view-get-filter` / `+view-get-sort` / `+view-get-group` / `+view-get-visible-fields` / `+view-get-timebar` / `+view-get-card` 读取持久化配置。**写入 View:** 使用 `+view-create` / `+view-rename` / `+view-delete` 管理 View,并通过对应的 `+view-set-*` 更新筛选、排序、分组、可见字段、时间轴和卡片配置;筛选结构读 [View filter](references/lark-base-view-set-filter.md),由该文档继续路由公共 condition 协议。
204
+ **所有 View 编辑前必读 [View 类型与生命周期](references/lark-base-view.md)**,包括创建、改名、配置修改(筛选、排序、分组、字段显隐、时间条、卡片)和删除。视图选型、适用配置及完整操作示例统一在该 reference 中。
205
205
 
206
206
  ### Form
207
207
 
@@ -19,11 +19,12 @@ Block 的 `data_config` 字段因 `type` 不同而变化。本文档是 Dashboar
19
19
  | `radar` | 雷达图 |
20
20
  | `ranking` | 排行榜 |
21
21
  | `statistics` | 指标卡 |
22
+ | `nps` | NPS 图 |
22
23
  | `text` | 文本(支持 Markdown) |
23
24
 
24
25
  ## 字段类型与操作符速查(AI 决策用)
25
26
 
26
- > 先用 `+field-list` / `+field-get` 确认字段 `type`;本节使用当前字段接口里的 canonical 类型名:`number`、`text`、`select`、`datetime`、`checkbox`、`user`。
27
+ > 先用 `+field-list` / `+field-get` 确认字段 `type`;本节使用当前字段接口里的 canonical 类型名:`number`、`text`、`select`、`datetime`、`checkbox`、`user`。NPS 使用的 `Rating` 是 Dashboard 服务端识别的评分字段语义,不属于当前字段操作符速查里的通用筛选类型。
27
28
 
28
29
  ```
29
30
  text: is, isNot, contains, doesNotContain, isEmpty, isNotEmpty
@@ -44,10 +45,11 @@ user / created_by / updated_by: is, isNot, isEmpty, isNotEmpty
44
45
  | `table_name` | string | 关联数据表名称 |
45
46
  | `series` | `[{ "field_name": "xxx", "rollup": "SUM" }]` | 指标/Y 轴(与 `count_all` 二选一)。rollup 支持 `SUM` / `MAX` / `MIN` / `AVERAGE` |
46
47
  | `count_all` | boolean | COUNTA 聚合,统计所有记录数(与 `series` 二选一) |
47
- | `group_by` | `[{ "field_name": "xxx", "mode": "integrated", "sort": {...} }]` | X 轴分组维度。`mode` 必填,`sort` 可选,见下方说明 |
48
+ | `group_by` | `[{ "field_name": "xxx", "mode": "integrated", "sort": {...} }]` | X 轴分组维度。`mode` 和 `sort` 的要求因组件类型而异,见下方说明 |
48
49
  | `filter` | object | 筛选条件 |
49
50
  | `filter.conjunction` | `"and"` / `"or"` | 筛选逻辑 |
50
51
  | `filter.conditions` | `[{ "field_name", "operator", "value" }]` | 筛选条件数组,value 类型因字段类型而异(见下方 filter 格式规则) |
52
+ | `category_range` | `[min, detractorMax, passiveMax, max]` | NPS 三段边界,仅 `nps` 类型支持;首尾必须等于 Rating 字段量程,首尾匹配由服务端按字段元数据校验 |
51
53
 
52
54
  ### text 类型特殊结构
53
55
 
@@ -214,6 +216,7 @@ user / created_by / updated_by: is, isNot, isEmpty, isNotEmpty
214
216
  - 图表类型必填:`table_name`
215
217
  - text 类型必填:`text`
216
218
  - 互斥:`series` 与 `count_all` 二选一,且至少提供其一(仅图表类型)
219
+ - nps 类型必填:`table_name`、长度为 1 的 `group_by`;`group_by[0].mode` 可省略,省略时按 `integrated` 处理,显式传入时也只能为 `integrated`;不支持 `group_by[0].sort` 和 `series`;`count_all` 可省略,出现时只能为 `true`
217
220
  - text 类型**不支持**:`series`、`count_all`、`group_by`、`filter`
218
221
  - 长度/结构
219
222
  - `group_by` 最多 2 个;每项 `field_name` 必填
@@ -238,6 +241,7 @@ user / created_by / updated_by: is, isNot, isEmpty, isNotEmpty
238
241
  - 看流程转化 → 漏斗图
239
242
  - 看多维度评分 → 雷达图
240
243
  - 显示单个指标 → 指标卡(统计数字或记录数)
244
+ - 统计满意度评分分布 → NPS 图(一个 Rating 字段 + 可选分段)
241
245
  - 查看单维度 Top N → 排行榜
242
246
 
243
247
  最小柱状图:
@@ -394,6 +398,20 @@ user / created_by / updated_by: is, isNot, isEmpty, isNotEmpty
394
398
  }
395
399
  ```
396
400
 
401
+ NPS 图(按 Rating 评分字段统计记录数):
402
+
403
+ ```json
404
+ {
405
+ "table_name": "问卷结果",
406
+ "group_by": [{ "field_name": "满意度评分", "mode": "integrated" }],
407
+ "category_range": [0, 6, 8, 10]
408
+ }
409
+ ```
410
+
411
+ NPS 的 `group_by[0].field_name` 必须指向 Base 的评分字段(Dashboard 内部识别为 `Rating` 语义)。调用方可通过 Base 字段详情或界面字段配置确认评分字段的最小值与最大值;CLI 只能做轻量 JSON 校验,字段类型、字段量程、`category_range` 首尾是否等于评分字段最小值和最大值由服务端按字段元数据校验。
412
+
413
+ `category_range` 可省略,服务端会按 Rating 字段自身量程生成默认分段。显式传入时数组长度必须为 4,且首尾必须等于 Rating 字段最小值和最大值。
414
+
397
415
  指标卡(统计记录数):
398
416
 
399
417
  ```json
@@ -0,0 +1,109 @@
1
+ # View:类型选择与生命周期
2
+
3
+ 所有 View 编辑前必读本参考,包括创建、改名、配置修改和删除。
4
+
5
+ View 是同一 Table 的展示与组织方式,共享底层记录;创建视图不会复制记录。只创建满足当前需求的视图,不默认把五种类型全部建一遍。一次性查询用 Record 命令;需要用户长期浏览、处理或共享时创建 View。
6
+
7
+ ## 选择视图
8
+
9
+ **Grid 是最常用的默认视图,方便查看、录入和修改数据。没有明确的特殊展示需求时使用 Grid,不因数据包含状态、日期或附件字段就自动创建其他类型。只有用户明确需要分栏处理、时间跨度比较、日历定位或卡片浏览时,才分别选择 Kanban、Gantt、Calendar 或 Gallery。**
10
+
11
+ | 类型 | 展示方式与优势 | 何时选用 | 优先配置 |
12
+ |---|---|---|---|
13
+ | `grid` 表格 | 每行一条记录、每列一个字段,采用熟悉的表格形式,方便查看、录入和修改数据;可通过筛选、分组、排序调整展示。 | 最常用的默认视图;日常读写数据,没有特殊展示需求时优先使用。 | 可见字段及顺序;按需筛选、分组、排序。 |
14
+ | `kanban` 看板 | 按分组字段横向排列列,每列展示该组的记录卡片;排序控制组内记录顺序。 | 需要按状态、阶段或类别分栏处理事项;优先选用有清晰选项的单选/多选字段作为分组依据。 | 分组字段、卡片可见字段、组内排序;有附件时可选封面。多选分组不可直接当作互斥分区统计。 |
15
+ | `gantt` 甘特图 | 左侧为表格明细,右侧为同一批记录的时间条;可直观看到起止时间、持续时间及排期重叠。左侧支持可见字段、筛选、分组和排序。 | 每条记录代表具有时间跨度的任务、项目或其他实体,重点是比较排期。 | `timebar` 绑定开始、结束和标题字段;左侧通常只留 1–3 个关键字段,为时间轴留空间。 |
16
+ | `calendar` 日历 | 将记录按时间字段定位到日历日期格,以事项形式展示;方便回答“某天有哪些事”。 | 发布计划、活动、预约、任务日期等,重点是按日/周/月浏览。 | `timebar` 绑定开始、结束和标题字段;配置展示字段和筛选。不要套用表格的通用分组、排序。 |
17
+ | `gallery` 画册 | 记录直接以卡片排列,不按状态分栏;重点内容可配附件封面。 | 产品、素材、案例、人员等需要逐卡浏览的集合;不要求每条记录有图片。 | 卡片展示字段、可选封面、筛选与排序。 |
18
+
19
+ 选择捷径:**日常读写数据、无特殊展示需求 → grid;按状态/类别处理 → kanban;比较时间跨度 → gantt;按日期找事项 → calendar;浏览卡片内容 → gallery。** Gantt 和 Calendar 都能展示时间相关实体,区别是前者强调跨度与重叠,后者强调日期位置。
20
+
21
+ ## Few-shot:按目的创建与配置
22
+
23
+ 以下是相互独立的选型示例,不是一套必须全执行的步骤。`BASE_TOKEN`、`TABLE_ID` 使用已解析的真实资源坐标;字段名示例假定目标表已有相应字段,配置前用 `+field-list` 核实类型与名称。`--view-id` 接受真实 ID 或名称;示例使用新建视图的唯一名称,名称不唯一时使用实际返回 ID。
24
+
25
+ ### 表格查看与维护:grid
26
+
27
+ 需求:“按项目分组查看任务,优先显示最早截止的任务。”
28
+
29
+ ```bash
30
+ # 默认视图;支持筛选、字段显隐、分组、排序;不支持时间条和卡片封面。
31
+ # 创建 JSON 支持对象/数组,type 默认 grid;不要塞入 group_by/property,form 走 Form 命令。
32
+ lark-cli base +view-create --base-token "$BASE_TOKEN" --table-id "$TABLE_ID" --json '{"name":"任务明细","type":"grid"}' --as user
33
+ # visible_fields 是完整有序列表;遗漏即隐藏,不删除数据,主字段可能固定在首位。
34
+ lark-cli base +view-set-visible-fields --base-token "$BASE_TOKEN" --table-id "$TABLE_ID" --view-id "任务明细" --json '{"visible_fields":["任务名称","项目","状态","截止时间"]}' --as user
35
+ # group_config 最多 3 项,字段须适用于目标视图;空数组清除分组。
36
+ lark-cli base +view-set-group --base-token "$BASE_TOKEN" --table-id "$TABLE_ID" --view-id "任务明细" --json '{"group_config":[{"field":"项目","desc":false}]}' --as user
37
+ # sort_config 最多 10 项;空数组清除排序。配置 JSON 用对象包装,不传裸数组。
38
+ lark-cli base +view-set-sort --base-token "$BASE_TOKEN" --table-id "$TABLE_ID" --view-id "任务明细" --json '{"sort_config":[{"field":"截止时间","desc":false}]}' --as user
39
+ ```
40
+
41
+ ### 按状态处理任务:kanban
42
+
43
+ 需求:“待办、进行中、已完成各一列,每列按截止时间排列。”前置:状态字段是包含相应选项的单选字段。
44
+
45
+ ```bash
46
+ # 支持筛选、字段显隐、分组、排序、卡片封面;不支持时间条。
47
+ # 优先按一个单选/多选字段分栏;group 的 desc 排列分组,sort 排列组内记录。
48
+ lark-cli base +view-create --base-token "$BASE_TOKEN" --table-id "$TABLE_ID" --json '{"name":"任务看板","type":"kanban"}' --as user
49
+ lark-cli base +view-set-group --base-token "$BASE_TOKEN" --table-id "$TABLE_ID" --view-id "任务看板" --json '{"group_config":[{"field":"状态","desc":false}]}' --as user
50
+ lark-cli base +view-set-visible-fields --base-token "$BASE_TOKEN" --table-id "$TABLE_ID" --view-id "任务看板" --json '{"visible_fields":["任务名称","负责人","截止时间"]}' --as user
51
+ lark-cli base +view-set-sort --base-token "$BASE_TOKEN" --table-id "$TABLE_ID" --view-id "任务看板" --json '{"sort_config":[{"field":"截止时间","desc":false}]}' --as user
52
+ ```
53
+
54
+ ### 比较任务排期:gantt
55
+
56
+ 需求:“查看任务开始到结束的排期,左侧只保留任务和负责人。”
57
+
58
+ ```bash
59
+ # 支持筛选、字段显隐、分组、排序、时间条;不支持卡片封面。
60
+ # timebar 必填开始、结束、标题;起止字段须为日期/时间且记录有值,按业务排期选择。
61
+ lark-cli base +view-create --base-token "$BASE_TOKEN" --table-id "$TABLE_ID" --json '{"name":"任务排期","type":"gantt"}' --as user
62
+ lark-cli base +view-set-timebar --base-token "$BASE_TOKEN" --table-id "$TABLE_ID" --view-id "任务排期" --json '{"start_time":"开始时间","end_time":"结束时间","title":"任务名称"}' --as user
63
+ # 左侧通常保留 1–3 个关键字段,为时间轴留空间。
64
+ lark-cli base +view-set-visible-fields --base-token "$BASE_TOKEN" --table-id "$TABLE_ID" --view-id "任务排期" --json '{"visible_fields":["任务名称","负责人"]}' --as user
65
+ ```
66
+
67
+ ### 按日期浏览活动:calendar
68
+
69
+ 需求:“在日历上查看每项活动的安排。”
70
+
71
+ ```bash
72
+ # 支持筛选、字段显隐、时间条;不支持通用分组、排序和卡片封面。
73
+ # timebar 必填开始、结束、标题;起止字段须为日期/时间且记录有值。
74
+ lark-cli base +view-create --base-token "$BASE_TOKEN" --table-id "$TABLE_ID" --json '{"name":"活动日历","type":"calendar"}' --as user
75
+ lark-cli base +view-set-timebar --base-token "$BASE_TOKEN" --table-id "$TABLE_ID" --view-id "活动日历" --json '{"start_time":"活动开始","end_time":"活动结束","title":"活动名称"}' --as user
76
+ ```
77
+
78
+ ### 浏览产品卡片:gallery
79
+
80
+ 需求:“以图片卡片浏览产品,展示名称、分类和价格。”前置:产品图片是附件字段。
81
+
82
+ ```bash
83
+ # 支持筛选、字段显隐、排序、卡片封面;不支持分组和时间条。
84
+ # cover_field 使用附件字段;传 null 清除封面。
85
+ lark-cli base +view-create --base-token "$BASE_TOKEN" --table-id "$TABLE_ID" --json '{"name":"产品画册","type":"gallery"}' --as user
86
+ lark-cli base +view-set-card --base-token "$BASE_TOKEN" --table-id "$TABLE_ID" --view-id "产品画册" --json '{"cover_field":"产品图片"}' --as user
87
+ lark-cli base +view-set-visible-fields --base-token "$BASE_TOKEN" --table-id "$TABLE_ID" --view-id "产品画册" --json '{"visible_fields":["产品名称","分类","价格"]}' --as user
88
+ ```
89
+
90
+ ### 通用生命周期:发现、筛选、改名、清理
91
+
92
+ ```bash
93
+ # 五种视图均支持查询、改名、删除;已有目标视图时直接配置它。
94
+ # 修改已有配置先读对应 get(如 +view-get-group);需要验收时再读回。
95
+ # 批量创建逐项执行,可能部分成功;异常或同名冲突后先 list 确认,避免盲重试。
96
+ lark-cli base +view-list --base-token "$BASE_TOKEN" --table-id "$TABLE_ID" --as user
97
+ lark-cli base +view-get --base-token "$BASE_TOKEN" --table-id "$TABLE_ID" --view-id "$VIEW_ID" --as user
98
+
99
+ # 只展示进行中的记录;复杂条件见下方筛选参考
100
+ lark-cli base +view-set-filter --base-token "$BASE_TOKEN" --table-id "$TABLE_ID" --view-id "$VIEW_ID" --json '{"logic":"and","conditions":[["状态","intersects",["进行中"]]]}' --as user
101
+
102
+ # 改名用 --name;创建用 --json 中的 name
103
+ lark-cli base +view-rename --base-token "$BASE_TOKEN" --table-id "$TABLE_ID" --view-id "$VIEW_ID" --name "进行中任务" --as user
104
+
105
+ # 用户明确要求且目标已确认时删除视图;不删除底层记录。
106
+ lark-cli base +view-delete --base-token "$BASE_TOKEN" --table-id "$TABLE_ID" --view-id "$VIEW_ID" --as user --yes
107
+ ```
108
+
109
+ 筛选详细写法见 [View filter](lark-base-view-set-filter.md);该文档继续路由公共条件协议。
@@ -108,9 +108,8 @@
108
108
  | 需求描述 | 触发器 |
109
109
  |---------|--------|
110
110
  | 新增记录时 | `AddRecordTrigger` |
111
- | 字段变为特定值时(**仅修改**) | `SetRecordTrigger` |
112
- | **新增或修改**都触发 | `ChangeRecordTrigger` |
113
- | 拿不准用哪个 | `ChangeRecordTrigger` |
111
+ | 指定字段发生修改时(仅修改,可限定修改后的值) | `SetRecordTrigger` |
112
+ | 新增或修改记录,且满足配置的筛选条件时 | `ChangeRecordTrigger` |
114
113
 
115
114
  > ⚠️ `SetRecordTrigger` 仅监听修改,`ChangeRecordTrigger` 同时监听新增 + 修改。
116
115
 
@@ -155,7 +154,7 @@
155
154
  "table_name": "订单表",
156
155
  "watched_field_name": "状态",
157
156
  "trigger_control_list": ["pasteUpdate", "automationBatchUpdate"],
158
- "condition_list": [] /* AndCondition 数组 */
157
+ "condition_list": [] /* AndCondition 数组 */
159
158
  }
160
159
  ```
161
160
 
@@ -164,7 +163,7 @@
164
163
  | `table_name` | 是 | 监控的数据表名 |
165
164
  | `watched_field_name` | 是 | 监控的字段名 |
166
165
  | `trigger_control_list` | 否 | 触发控制,可选值:`pasteUpdate` / `automationBatchUpdate` / `syncUpdate` / `appendImport` / `openAPIBatchUpdate` |
167
- | `condition_list` | 否 | 过滤条件数组,数组中每个元素为 AndCondition 结构,多个 AndCondition 之间为 OR 关系 |
166
+ | `condition_list` | 否 | 数组中的每个元素表示一个条件组,条件组之间为 OR,组内 conditions 之间必须为 AND |
168
167
 
169
168
  ### ChangeRecordTrigger
170
169
 
@@ -172,15 +171,26 @@
172
171
  {
173
172
  "table_name": "任务表",
174
173
  "trigger_control_list": [],
175
- "condition": null
174
+ "condition_list": [
175
+ {
176
+ "conjunction": "and",
177
+ "conditions": [
178
+ {
179
+ "field_name": "预计工时",
180
+ "operator": "isGreater",
181
+ "value": [{ "value_type": "number", "value": 0 }]
182
+ }
183
+ ]
184
+ }
185
+ ]
176
186
  }
177
187
  ```
178
188
 
179
- | 字段 | 必填 | 说明 |
180
- |------|------|------|
181
- | `table_name` | 是 | 监控的数据表名 |
189
+ | 字段 | 必填 | 说明 |
190
+ |------|------|---------------------------------------------------------------------------------|
191
+ | `table_name` | 是 | 监控的数据表名 |
182
192
  | `trigger_control_list` | 否 | 触发控制,可选值:`pasteUpdate` / `automationBatchUpdate` / `syncUpdate` / `appendImport` |
183
- | `condition_list` | 否 | 过滤条件数组,数组中每个元素为 AndCondition 结构,多个 AndCondition 之间为 OR 关系 |
193
+ | `condition_list` | 是 | 不能为空;数组中的每个元素表示一个条件组,条件组之间为 OR,组内 conditions 之间必须为 AND |
184
194
 
185
195
  ### SetRecordTrigger
186
196
 
@@ -204,7 +214,7 @@
204
214
  | `record_watch_info` | 否 | 记录级过滤条件(修改前值匹配),为空则监听全部 |
205
215
  | `field_watch_info` | 是 | 字段级监控条件列表,至少一个 |
206
216
  | `trigger_control_list` | 否 | 触发控制,可选值:`pasteUpdate` / `automationBatchUpdate` / `syncUpdate` / `appendImport` |
207
- | `condition_list` | 否 | 过滤条件数组,数组中每个元素为 AndCondition 结构,多个 AndCondition 之间为 OR 关系 |
217
+ | `condition_list` | 否 | 数组中的每个元素表示一个条件组,条件组之间为 OR,组内 conditions 之间必须为 AND |
208
218
 
209
219
  `FieldWatchItem`:
210
220
 
@@ -257,7 +267,7 @@
257
267
  | `offset` | 是 | 提前/延后的偏移量(触发时间 = 日期字段时间 + `offset` × `unit`,因此负数=提前、正数=延后;范围由 `unit` 决定):`MINUTE` ∈ {0, 5, 15, 30, -5, -15, -30};`HOUR` ∈ [-6, -1] ∪ [1, 6];`DAY` ∈ [-7, 7];`WEEK` ∈ [-7, -1] ∪ [1, 7];`MONTH` ∈ [-7, -1] ∪ [1, 7] |
258
268
  | `hour` | 是 | 触发小时 (0-23),默认 9 |
259
269
  | `minute` | 是 | 触发分钟 (0-59),默认 0 |
260
- | `condition_list` | 否 | 过滤条件数组,数组中每个元素为 AndCondition 结构,多个 AndCondition 之间为 OR 关系 |
270
+ | `condition_list` | 否 | 数组中的每个元素表示一个条件组,条件组之间为 OR,组内 conditions 之间必须为 AND |
261
271
 
262
272
 
263
273
  ### ButtonTrigger