cc-lark 0.1.1

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 (298) hide show
  1. package/.github/workflows/ci.yml +47 -0
  2. package/.github/workflows/release.yml +47 -0
  3. package/.github/workflows/sync-upstream.yml +127 -0
  4. package/.prettierrc.json +7 -0
  5. package/README.md +214 -0
  6. package/dist/core/api-error.d.ts +193 -0
  7. package/dist/core/api-error.d.ts.map +1 -0
  8. package/dist/core/api-error.js +263 -0
  9. package/dist/core/api-error.js.map +1 -0
  10. package/dist/core/auth-errors.d.ts +13 -0
  11. package/dist/core/auth-errors.d.ts.map +1 -0
  12. package/dist/core/auth-errors.js +14 -0
  13. package/dist/core/auth-errors.js.map +1 -0
  14. package/dist/core/config.d.ts +60 -0
  15. package/dist/core/config.d.ts.map +1 -0
  16. package/dist/core/config.js +115 -0
  17. package/dist/core/config.js.map +1 -0
  18. package/dist/core/device-flow.d.ts +80 -0
  19. package/dist/core/device-flow.d.ts.map +1 -0
  20. package/dist/core/device-flow.js +231 -0
  21. package/dist/core/device-flow.js.map +1 -0
  22. package/dist/core/index.d.ts +16 -0
  23. package/dist/core/index.d.ts.map +1 -0
  24. package/dist/core/index.js +16 -0
  25. package/dist/core/index.js.map +1 -0
  26. package/dist/core/lark-client.d.ts +136 -0
  27. package/dist/core/lark-client.d.ts.map +1 -0
  28. package/dist/core/lark-client.js +315 -0
  29. package/dist/core/lark-client.js.map +1 -0
  30. package/dist/core/token-store.d.ts +67 -0
  31. package/dist/core/token-store.d.ts.map +1 -0
  32. package/dist/core/token-store.js +215 -0
  33. package/dist/core/token-store.js.map +1 -0
  34. package/dist/core/types.d.ts +286 -0
  35. package/dist/core/types.d.ts.map +1 -0
  36. package/dist/core/types.js +11 -0
  37. package/dist/core/types.js.map +1 -0
  38. package/dist/core/uat-client.d.ts +64 -0
  39. package/dist/core/uat-client.d.ts.map +1 -0
  40. package/dist/core/uat-client.js +227 -0
  41. package/dist/core/uat-client.js.map +1 -0
  42. package/dist/core/version.d.ts +26 -0
  43. package/dist/core/version.d.ts.map +1 -0
  44. package/dist/core/version.js +50 -0
  45. package/dist/core/version.js.map +1 -0
  46. package/dist/index.d.ts +12 -0
  47. package/dist/index.d.ts.map +1 -0
  48. package/dist/index.js +116 -0
  49. package/dist/index.js.map +1 -0
  50. package/dist/tools/bitable/app.d.ts +20 -0
  51. package/dist/tools/bitable/app.d.ts.map +1 -0
  52. package/dist/tools/bitable/app.js +301 -0
  53. package/dist/tools/bitable/app.js.map +1 -0
  54. package/dist/tools/bitable/field.d.ts +19 -0
  55. package/dist/tools/bitable/field.d.ts.map +1 -0
  56. package/dist/tools/bitable/field.js +315 -0
  57. package/dist/tools/bitable/field.js.map +1 -0
  58. package/dist/tools/bitable/index.d.ts +21 -0
  59. package/dist/tools/bitable/index.d.ts.map +1 -0
  60. package/dist/tools/bitable/index.js +39 -0
  61. package/dist/tools/bitable/index.js.map +1 -0
  62. package/dist/tools/bitable/record.d.ts +22 -0
  63. package/dist/tools/bitable/record.d.ts.map +1 -0
  64. package/dist/tools/bitable/record.js +434 -0
  65. package/dist/tools/bitable/record.js.map +1 -0
  66. package/dist/tools/bitable/table.d.ts +21 -0
  67. package/dist/tools/bitable/table.d.ts.map +1 -0
  68. package/dist/tools/bitable/table.js +361 -0
  69. package/dist/tools/bitable/table.js.map +1 -0
  70. package/dist/tools/calendar/calendar.d.ts +18 -0
  71. package/dist/tools/calendar/calendar.d.ts.map +1 -0
  72. package/dist/tools/calendar/calendar.js +192 -0
  73. package/dist/tools/calendar/calendar.js.map +1 -0
  74. package/dist/tools/calendar/event.d.ts +20 -0
  75. package/dist/tools/calendar/event.d.ts.map +1 -0
  76. package/dist/tools/calendar/event.js +465 -0
  77. package/dist/tools/calendar/event.js.map +1 -0
  78. package/dist/tools/calendar/index.d.ts +19 -0
  79. package/dist/tools/calendar/index.d.ts.map +1 -0
  80. package/dist/tools/calendar/index.js +37 -0
  81. package/dist/tools/calendar/index.js.map +1 -0
  82. package/dist/tools/chat/chat.d.ts +11 -0
  83. package/dist/tools/chat/chat.d.ts.map +1 -0
  84. package/dist/tools/chat/chat.js +106 -0
  85. package/dist/tools/chat/chat.js.map +1 -0
  86. package/dist/tools/chat/index.d.ts +11 -0
  87. package/dist/tools/chat/index.d.ts.map +1 -0
  88. package/dist/tools/chat/index.js +20 -0
  89. package/dist/tools/chat/index.js.map +1 -0
  90. package/dist/tools/chat/members.d.ts +9 -0
  91. package/dist/tools/chat/members.d.ts.map +1 -0
  92. package/dist/tools/chat/members.js +80 -0
  93. package/dist/tools/chat/members.js.map +1 -0
  94. package/dist/tools/common/get-user.d.ts +11 -0
  95. package/dist/tools/common/get-user.d.ts.map +1 -0
  96. package/dist/tools/common/get-user.js +112 -0
  97. package/dist/tools/common/get-user.js.map +1 -0
  98. package/dist/tools/common/index.d.ts +11 -0
  99. package/dist/tools/common/index.d.ts.map +1 -0
  100. package/dist/tools/common/index.js +20 -0
  101. package/dist/tools/common/index.js.map +1 -0
  102. package/dist/tools/common/search-user.d.ts +9 -0
  103. package/dist/tools/common/search-user.d.ts.map +1 -0
  104. package/dist/tools/common/search-user.js +88 -0
  105. package/dist/tools/common/search-user.js.map +1 -0
  106. package/dist/tools/doc/create.d.ts +17 -0
  107. package/dist/tools/doc/create.d.ts.map +1 -0
  108. package/dist/tools/doc/create.js +159 -0
  109. package/dist/tools/doc/create.js.map +1 -0
  110. package/dist/tools/doc/fetch.d.ts +17 -0
  111. package/dist/tools/doc/fetch.d.ts.map +1 -0
  112. package/dist/tools/doc/fetch.js +123 -0
  113. package/dist/tools/doc/fetch.js.map +1 -0
  114. package/dist/tools/doc/index.d.ts +21 -0
  115. package/dist/tools/doc/index.d.ts.map +1 -0
  116. package/dist/tools/doc/index.js +33 -0
  117. package/dist/tools/doc/index.js.map +1 -0
  118. package/dist/tools/doc/shared.d.ts +69 -0
  119. package/dist/tools/doc/shared.d.ts.map +1 -0
  120. package/dist/tools/doc/shared.js +172 -0
  121. package/dist/tools/doc/shared.js.map +1 -0
  122. package/dist/tools/doc/update.d.ts +25 -0
  123. package/dist/tools/doc/update.d.ts.map +1 -0
  124. package/dist/tools/doc/update.js +208 -0
  125. package/dist/tools/doc/update.js.map +1 -0
  126. package/dist/tools/drive/file.d.ts +13 -0
  127. package/dist/tools/drive/file.d.ts.map +1 -0
  128. package/dist/tools/drive/file.js +212 -0
  129. package/dist/tools/drive/file.js.map +1 -0
  130. package/dist/tools/drive/index.d.ts +12 -0
  131. package/dist/tools/drive/index.d.ts.map +1 -0
  132. package/dist/tools/drive/index.js +25 -0
  133. package/dist/tools/drive/index.js.map +1 -0
  134. package/dist/tools/im/format-messages.d.ts +99 -0
  135. package/dist/tools/im/format-messages.d.ts.map +1 -0
  136. package/dist/tools/im/format-messages.js +277 -0
  137. package/dist/tools/im/format-messages.js.map +1 -0
  138. package/dist/tools/im/helpers.d.ts +53 -0
  139. package/dist/tools/im/helpers.d.ts.map +1 -0
  140. package/dist/tools/im/helpers.js +85 -0
  141. package/dist/tools/im/helpers.js.map +1 -0
  142. package/dist/tools/im/index.d.ts +25 -0
  143. package/dist/tools/im/index.d.ts.map +1 -0
  144. package/dist/tools/im/index.js +44 -0
  145. package/dist/tools/im/index.js.map +1 -0
  146. package/dist/tools/im/message-read.d.ts +19 -0
  147. package/dist/tools/im/message-read.d.ts.map +1 -0
  148. package/dist/tools/im/message-read.js +526 -0
  149. package/dist/tools/im/message-read.js.map +1 -0
  150. package/dist/tools/im/message.d.ts +22 -0
  151. package/dist/tools/im/message.d.ts.map +1 -0
  152. package/dist/tools/im/message.js +233 -0
  153. package/dist/tools/im/message.js.map +1 -0
  154. package/dist/tools/im/resource.d.ts +19 -0
  155. package/dist/tools/im/resource.d.ts.map +1 -0
  156. package/dist/tools/im/resource.js +185 -0
  157. package/dist/tools/im/resource.js.map +1 -0
  158. package/dist/tools/im/time-utils.d.ts +70 -0
  159. package/dist/tools/im/time-utils.d.ts.map +1 -0
  160. package/dist/tools/im/time-utils.js +277 -0
  161. package/dist/tools/im/time-utils.js.map +1 -0
  162. package/dist/tools/index.d.ts +85 -0
  163. package/dist/tools/index.d.ts.map +1 -0
  164. package/dist/tools/index.js +135 -0
  165. package/dist/tools/index.js.map +1 -0
  166. package/dist/tools/oauth.d.ts +15 -0
  167. package/dist/tools/oauth.d.ts.map +1 -0
  168. package/dist/tools/oauth.js +379 -0
  169. package/dist/tools/oauth.js.map +1 -0
  170. package/dist/tools/search/doc-search.d.ts +9 -0
  171. package/dist/tools/search/doc-search.d.ts.map +1 -0
  172. package/dist/tools/search/doc-search.js +219 -0
  173. package/dist/tools/search/doc-search.js.map +1 -0
  174. package/dist/tools/search/index.d.ts +11 -0
  175. package/dist/tools/search/index.d.ts.map +1 -0
  176. package/dist/tools/search/index.js +18 -0
  177. package/dist/tools/search/index.js.map +1 -0
  178. package/dist/tools/sheets/index.d.ts +11 -0
  179. package/dist/tools/sheets/index.d.ts.map +1 -0
  180. package/dist/tools/sheets/index.js +18 -0
  181. package/dist/tools/sheets/index.js.map +1 -0
  182. package/dist/tools/sheets/sheet.d.ts +11 -0
  183. package/dist/tools/sheets/sheet.d.ts.map +1 -0
  184. package/dist/tools/sheets/sheet.js +332 -0
  185. package/dist/tools/sheets/sheet.js.map +1 -0
  186. package/dist/tools/task/index.d.ts +12 -0
  187. package/dist/tools/task/index.d.ts.map +1 -0
  188. package/dist/tools/task/index.js +30 -0
  189. package/dist/tools/task/index.js.map +1 -0
  190. package/dist/tools/task/task.d.ts +13 -0
  191. package/dist/tools/task/task.d.ts.map +1 -0
  192. package/dist/tools/task/task.js +225 -0
  193. package/dist/tools/task/task.js.map +1 -0
  194. package/dist/tools/task/tasklist.d.ts +13 -0
  195. package/dist/tools/task/tasklist.d.ts.map +1 -0
  196. package/dist/tools/task/tasklist.js +206 -0
  197. package/dist/tools/task/tasklist.js.map +1 -0
  198. package/dist/tools/wiki/index.d.ts +11 -0
  199. package/dist/tools/wiki/index.d.ts.map +1 -0
  200. package/dist/tools/wiki/index.js +20 -0
  201. package/dist/tools/wiki/index.js.map +1 -0
  202. package/dist/tools/wiki/node.d.ts +11 -0
  203. package/dist/tools/wiki/node.d.ts.map +1 -0
  204. package/dist/tools/wiki/node.js +112 -0
  205. package/dist/tools/wiki/node.js.map +1 -0
  206. package/dist/tools/wiki/space.d.ts +11 -0
  207. package/dist/tools/wiki/space.d.ts.map +1 -0
  208. package/dist/tools/wiki/space.js +125 -0
  209. package/dist/tools/wiki/space.js.map +1 -0
  210. package/dist/utils/index.d.ts +8 -0
  211. package/dist/utils/index.d.ts.map +1 -0
  212. package/dist/utils/index.js +8 -0
  213. package/dist/utils/index.js.map +1 -0
  214. package/dist/utils/logger.d.ts +36 -0
  215. package/dist/utils/logger.d.ts.map +1 -0
  216. package/dist/utils/logger.js +101 -0
  217. package/dist/utils/logger.js.map +1 -0
  218. package/eslint.config.js +13 -0
  219. package/package.json +54 -0
  220. package/skills/feishu-bitable/SKILL.md +248 -0
  221. package/skills/feishu-bitable/references/examples.md +813 -0
  222. package/skills/feishu-bitable/references/field-properties.md +763 -0
  223. package/skills/feishu-bitable/references/record-values.md +911 -0
  224. package/skills/feishu-calendar/SKILL.md +244 -0
  225. package/skills/feishu-channel-rules/SKILL.md +18 -0
  226. package/skills/feishu-channel-rules/references/markdown-syntax.md +138 -0
  227. package/skills/feishu-create-doc/SKILL.md +719 -0
  228. package/skills/feishu-fetch-doc/SKILL.md +93 -0
  229. package/skills/feishu-im-read/SKILL.md +163 -0
  230. package/skills/feishu-task/SKILL.md +293 -0
  231. package/skills/feishu-troubleshoot/SKILL.md +70 -0
  232. package/skills/feishu-update-doc/SKILL.md +285 -0
  233. package/src/core/api-error.ts +342 -0
  234. package/src/core/auth-errors.ts +27 -0
  235. package/src/core/config.ts +134 -0
  236. package/src/core/device-flow.ts +314 -0
  237. package/src/core/index.ts +16 -0
  238. package/src/core/lark-client.ts +391 -0
  239. package/src/core/token-store.ts +249 -0
  240. package/src/core/types.ts +302 -0
  241. package/src/core/uat-client.ts +298 -0
  242. package/src/core/version.ts +53 -0
  243. package/src/index.ts +138 -0
  244. package/src/tools/bitable/app.ts +390 -0
  245. package/src/tools/bitable/field.ts +406 -0
  246. package/src/tools/bitable/index.ts +43 -0
  247. package/src/tools/bitable/record.ts +559 -0
  248. package/src/tools/bitable/table.ts +472 -0
  249. package/src/tools/calendar/calendar.ts +254 -0
  250. package/src/tools/calendar/event.ts +606 -0
  251. package/src/tools/calendar/index.ts +41 -0
  252. package/src/tools/chat/chat.ts +127 -0
  253. package/src/tools/chat/index.ts +24 -0
  254. package/src/tools/chat/members.ts +93 -0
  255. package/src/tools/common/get-user.ts +127 -0
  256. package/src/tools/common/index.ts +24 -0
  257. package/src/tools/common/search-user.ts +99 -0
  258. package/src/tools/doc/create.ts +184 -0
  259. package/src/tools/doc/fetch.ts +149 -0
  260. package/src/tools/doc/index.ts +38 -0
  261. package/src/tools/doc/shared.ts +228 -0
  262. package/src/tools/doc/update.ts +240 -0
  263. package/src/tools/drive/file.ts +265 -0
  264. package/src/tools/drive/index.ts +29 -0
  265. package/src/tools/im/format-messages.ts +391 -0
  266. package/src/tools/im/helpers.ts +109 -0
  267. package/src/tools/im/index.ts +49 -0
  268. package/src/tools/im/message-read.ts +676 -0
  269. package/src/tools/im/message.ts +303 -0
  270. package/src/tools/im/resource.ts +225 -0
  271. package/src/tools/im/time-utils.ts +347 -0
  272. package/src/tools/index.ts +205 -0
  273. package/src/tools/oauth.ts +460 -0
  274. package/src/tools/search/doc-search.ts +250 -0
  275. package/src/tools/search/index.ts +22 -0
  276. package/src/tools/sheets/index.ts +22 -0
  277. package/src/tools/sheets/sheet.ts +382 -0
  278. package/src/tools/task/index.ts +34 -0
  279. package/src/tools/task/task.ts +265 -0
  280. package/src/tools/task/tasklist.ts +262 -0
  281. package/src/tools/wiki/index.ts +24 -0
  282. package/src/tools/wiki/node.ts +131 -0
  283. package/src/tools/wiki/space.ts +152 -0
  284. package/src/utils/index.ts +8 -0
  285. package/src/utils/logger.ts +132 -0
  286. package/tests/core/config.test.ts +238 -0
  287. package/tests/core/device-flow.test.ts +490 -0
  288. package/tests/core/lark-client.test.ts +378 -0
  289. package/tests/core/token-store.test.ts +438 -0
  290. package/tests/index.test.ts +360 -0
  291. package/tests/tools/doc/create.test.ts +224 -0
  292. package/tests/tools/doc/fetch.test.ts +182 -0
  293. package/tests/tools/doc/shared.test.ts +183 -0
  294. package/tests/tools/doc/update.test.ts +330 -0
  295. package/tests/tools/im/format-messages.test.ts +184 -0
  296. package/tests/tools/im/time-utils.test.ts +178 -0
  297. package/tests/utils/logger.test.ts +140 -0
  298. package/tsconfig.json +20 -0
@@ -0,0 +1,763 @@
1
+ # 飞书多维表格字段 Property 配置详解
2
+
3
+ 本文档详细说明每种字段类型创建或更新时需要的 `property` 参数结构。
4
+
5
+ > **来源**: 基于飞书开放平台文档 [字段编辑指南](https://go.feishu.cn/s/672BSzVyo03)
6
+
7
+ ## 📋 目录
8
+
9
+ - [基础字段](#基础字段)
10
+ - [1. 文本 (type=1)](#1-文本-type1)
11
+ - [2. 数字 (type=2)](#2-数字-type2)
12
+ - [5. 日期 (type=5)](#5-日期-type5)
13
+ - [7. 复选框 (type=7)](#7-复选框-type7)
14
+ - [13. 电话号码 (type=13)](#13-电话号码-type13)
15
+ - [选择字段](#选择字段)
16
+ - [3. 单选 (type=3)](#3-单选-type3)
17
+ - [4. 多选 (type=4)](#4-多选-type4)
18
+ - [特殊显示字段](#特殊显示字段)
19
+ - [进度 (type=2, ui_type="Progress")](#进度-type2-ui_typeprogress)
20
+ - [货币 (type=2, ui_type="Currency")](#货币-type2-ui_typecurrency)
21
+ - [评分 (type=2, ui_type="Rating")](#评分-type2-ui_typerating)
22
+ - [条码 (type=1, ui_type="Barcode")](#条码-type1-ui_typebarcode)
23
+ - [邮箱 (type=1, ui_type="Email")](#邮箱-type1-ui_typeemail)
24
+ - [关系字段](#关系字段)
25
+ - [11. 人员 (type=11)](#11-人员-type11)
26
+ - [15. 超链接 (type=15)](#15-超链接-type15)
27
+ - [17. 附件 (type=17)](#17-附件-type17)
28
+ - [18. 单向关联 (type=18)](#18-单向关联-type18)
29
+ - [21. 双向关联 (type=21)](#21-双向关联-type21)
30
+ - [22. 地理位置 (type=22)](#22-地理位置-type22)
31
+ - [23. 群组 (type=23)](#23-群组-type23)
32
+ - [高级字段](#高级字段)
33
+ - [20. 公式 (type=20)](#20-公式-type20)
34
+ - [1001. 创建时间 (type=1001)](#1001-创建时间-type1001)
35
+ - [1002. 最后更新时间 (type=1002)](#1002-最后更新时间-type1002)
36
+ - [1005. 自动编号 (type=1005)](#1005-自动编号-type1005)
37
+
38
+ ---
39
+
40
+ ## 基础字段
41
+
42
+ ### 1. 文本 (type=1)
43
+
44
+ **Property 结构**: 空对象或省略
45
+
46
+ ```json
47
+ {
48
+ "type": 1,
49
+ "field_name": "任务描述",
50
+ "property": {}
51
+ }
52
+ ```
53
+
54
+ **注意**:
55
+ - 默认 `ui_type` 为 "Text"
56
+ - 单个单元格最多 10 万字符
57
+ - 支持富文本格式(提及人、超链接等)
58
+
59
+ ---
60
+
61
+ ### 2. 数字 (type=2)
62
+
63
+ **Property 结构**:
64
+
65
+ ```json
66
+ {
67
+ "formatter": "0" // 可选,数字显示格式
68
+ }
69
+ ```
70
+
71
+ **formatter 可选值**:
72
+ - `"0"`: 整数(默认)
73
+ - `"0.0"`: 一位小数
74
+ - `"0.00"`: 两位小数
75
+ - `"0,000"`: 千分位
76
+ - `"0.00%"`: 百分比
77
+
78
+ **示例**:
79
+
80
+ ```json
81
+ {
82
+ "type": 2,
83
+ "field_name": "工时",
84
+ "property": {
85
+ "formatter": "0.00"
86
+ }
87
+ }
88
+ ```
89
+
90
+ ---
91
+
92
+ ### 5. 日期 (type=5)
93
+
94
+ **Property 结构**:
95
+
96
+ ```json
97
+ {
98
+ "date_formatter": "yyyy/MM/dd", // 可选,默认 "yyyy/MM/dd"
99
+ "auto_fill": false // 可选,是否自动填充创建时间
100
+ }
101
+ ```
102
+
103
+ **date_formatter 可选值**:
104
+ - `"yyyy/MM/dd"`: 2021/1/30
105
+ - `"yyyy-MM-dd HH:mm"`: 2021/1/30 14:00
106
+ - `"MM-dd"`: 1月30日
107
+ - `"MM/dd/yyyy"`: 01/30/2021
108
+ - `"dd/MM/yyyy"`: 30/01/2021
109
+
110
+ **示例**:
111
+
112
+ ```json
113
+ {
114
+ "type": 5,
115
+ "field_name": "截止日期",
116
+ "property": {
117
+ "date_formatter": "yyyy-MM-dd HH:mm",
118
+ "auto_fill": false
119
+ }
120
+ }
121
+ ```
122
+
123
+ ---
124
+
125
+ ### 7. 复选框 (type=7)
126
+
127
+ **Property 结构**: 空对象或省略
128
+
129
+ ```json
130
+ {
131
+ "type": 7,
132
+ "field_name": "是否完成",
133
+ "property": {}
134
+ }
135
+ ```
136
+
137
+ ---
138
+
139
+ ### 13. 电话号码 (type=13)
140
+
141
+ **Property 结构**: 空对象或省略
142
+
143
+ ```json
144
+ {
145
+ "type": 13,
146
+ "field_name": "联系电话",
147
+ "property": {}
148
+ }
149
+ ```
150
+
151
+ **注意**:
152
+ - 电话号码格式:符合正则 `(\+)?\d*`
153
+ - 最大长度 64 字符
154
+
155
+ ---
156
+
157
+ ## 选择字段
158
+
159
+ ### 3. 单选 (type=3)
160
+
161
+ **Property 结构**:
162
+
163
+ ```json
164
+ {
165
+ "options": [
166
+ {
167
+ "name": "进行中", // 必填,选项名称
168
+ "color": 0 // 可选,颜色编号 (0-54)
169
+ },
170
+ {
171
+ "name": "已完成",
172
+ "color": 10
173
+ }
174
+ ]
175
+ }
176
+ ```
177
+
178
+ **颜色编号 (color)**:
179
+ - 范围: 0-54
180
+ - 0: 红色
181
+ - 10: 绿色
182
+ - 20: 蓝色
183
+ - ... (详见飞书官方文档)
184
+
185
+ **示例**:
186
+
187
+ ```json
188
+ {
189
+ "type": 3,
190
+ "field_name": "任务状态",
191
+ "property": {
192
+ "options": [
193
+ {"name": "待开始", "color": 0},
194
+ {"name": "进行中", "color": 20},
195
+ {"name": "已完成", "color": 10}
196
+ ]
197
+ }
198
+ }
199
+ ```
200
+
201
+ **注意**:
202
+ - 选项总数不超过 20,000 个
203
+ - 创建时**不能**指定选项 ID(`id` 字段),系统自动生成
204
+ - 更新时需保留已有选项的 `id`
205
+
206
+ ---
207
+
208
+ ### 4. 多选 (type=4)
209
+
210
+ **Property 结构**: 与单选相同
211
+
212
+ ```json
213
+ {
214
+ "options": [
215
+ {"name": "紧急", "color": 0},
216
+ {"name": "重要", "color": 10}
217
+ ]
218
+ }
219
+ ```
220
+
221
+ **注意**:
222
+ - 选项总数不超过 20,000 个
223
+ - 单个单元格选项数不超过 1,000 个
224
+
225
+ ---
226
+
227
+ ## 特殊显示字段
228
+
229
+ ### 进度 (type=2, ui_type="Progress")
230
+
231
+ **Property 结构**:
232
+
233
+ ```json
234
+ {
235
+ "min": 0, // 必填,最小值
236
+ "max": 100, // 必填,最大值
237
+ "range_customize": false // 可选,是否允许自定义进度值
238
+ }
239
+ ```
240
+
241
+ **示例**:
242
+
243
+ ```json
244
+ {
245
+ "type": 2,
246
+ "field_name": "完成进度",
247
+ "ui_type": "Progress",
248
+ "property": {
249
+ "min": 0,
250
+ "max": 100,
251
+ "range_customize": true
252
+ }
253
+ }
254
+ ```
255
+
256
+ **注意**:
257
+ - `min` 取值范围: 0-1
258
+ - `max` 取值范围: 1-100
259
+ - `range_customize` 为 `true` 时用户可输入超出范围的值
260
+
261
+ ---
262
+
263
+ ### 货币 (type=2, ui_type="Currency")
264
+
265
+ **Property 结构**:
266
+
267
+ ```json
268
+ {
269
+ "currency_code": "CNY", // 必填,货币类型
270
+ "formatter": "0.00" // 可选,数字格式
271
+ }
272
+ ```
273
+
274
+ **currency_code 可选值**:
275
+ - `"CNY"`: 人民币 (¥)
276
+ - `"USD"`: 美元 ($)
277
+ - `"EUR"`: 欧元 (€)
278
+ - `"GBP"`: 英镑 (£)
279
+ - `"JPY"`: 日元 (¥)
280
+ - `"HKD"`: 港元 ($)
281
+ - ... (支持 20+ 种货币)
282
+
283
+ **示例**:
284
+
285
+ ```json
286
+ {
287
+ "type": 2,
288
+ "field_name": "预算",
289
+ "ui_type": "Currency",
290
+ "property": {
291
+ "currency_code": "USD",
292
+ "formatter": "0,000.00"
293
+ }
294
+ }
295
+ ```
296
+
297
+ ---
298
+
299
+ ### 评分 (type=2, ui_type="Rating")
300
+
301
+ **Property 结构**:
302
+
303
+ ```json
304
+ {
305
+ "min": 1, // 必填,最小值
306
+ "max": 5, // 必填,最大值
307
+ "rating": { // 可选,评分样式
308
+ "symbol": "star" // 图标类型
309
+ }
310
+ }
311
+ ```
312
+
313
+ **symbol 可选值**:
314
+ - `"star"`: ⭐ 星星(默认)
315
+ - `"heart"`: ❤️ 爱心
316
+ - `"thumbsup"`: 👍 赞
317
+ - `"fire"`: 🔥 火焰
318
+ - `"smile"`: 😊 笑脸
319
+ - `"lightning"`: ⚡ 闪电
320
+ - `"flower"`: 🌸 花朵
321
+ - `"number"`: 数字
322
+
323
+ **示例**:
324
+
325
+ ```json
326
+ {
327
+ "type": 2,
328
+ "field_name": "优先级",
329
+ "ui_type": "Rating",
330
+ "property": {
331
+ "min": 1,
332
+ "max": 5,
333
+ "rating": {
334
+ "symbol": "fire"
335
+ }
336
+ }
337
+ }
338
+ ```
339
+
340
+ ---
341
+
342
+ ### 条码 (type=1, ui_type="Barcode")
343
+
344
+ **Property 结构**:
345
+
346
+ ```json
347
+ {
348
+ "allowed_edit_modes": {
349
+ "manual": true, // 是否允许手动录入
350
+ "scan": true // 是否允许扫描录入
351
+ }
352
+ }
353
+ ```
354
+
355
+ **示例**:
356
+
357
+ ```json
358
+ {
359
+ "type": 1,
360
+ "field_name": "商品条码",
361
+ "ui_type": "Barcode",
362
+ "property": {
363
+ "allowed_edit_modes": {
364
+ "manual": false,
365
+ "scan": true
366
+ }
367
+ }
368
+ }
369
+ ```
370
+
371
+ ---
372
+
373
+ ### 邮箱 (type=1, ui_type="Email")
374
+
375
+ **Property 结构**: 空对象或省略
376
+
377
+ ```json
378
+ {
379
+ "type": 1,
380
+ "field_name": "联系邮箱",
381
+ "ui_type": "Email",
382
+ "property": {}
383
+ }
384
+ ```
385
+
386
+ ---
387
+
388
+ ## 关系字段
389
+
390
+ ### 11. 人员 (type=11)
391
+
392
+ **Property 结构**:
393
+
394
+ ```json
395
+ {
396
+ "multiple": true // 可选,是否允许多个人员,默认 true
397
+ }
398
+ ```
399
+
400
+ **示例**:
401
+
402
+ ```json
403
+ {
404
+ "type": 11,
405
+ "field_name": "负责人",
406
+ "property": {
407
+ "multiple": false // 只允许单个人员
408
+ }
409
+ }
410
+ ```
411
+
412
+ **注意**:
413
+ - 单个单元格人员数不超过 1,000
414
+ - 记录值只支持传入 `id` 字段(open_id/union_id/user_id)
415
+
416
+ ---
417
+
418
+ ### 15. 超链接 (type=15)
419
+
420
+ **Property 结构**: **必须省略 `property` 参数,不要传递任何值(包括空对象)**
421
+
422
+ ```json
423
+ {
424
+ "type": 15,
425
+ "field_name": "参考链接"
426
+ // 不要传 property 参数,包括空对象 {}
427
+ }
428
+ ```
429
+
430
+ **⚠️ 重要**: 超链接字段的特殊要求(经实测验证):
431
+ - ✅ **正确**: 完全省略 `property` 参数
432
+ - ❌ **错误**: `"property": {}`(会报 URLFieldPropertyError)
433
+ - ❌ **错误**: 传递任何 property 值
434
+
435
+ **注意**: 这是飞书 API 的特殊行为,超链接字段即使传空对象也会报错,必须完全省略该参数。
436
+
437
+ ---
438
+
439
+ ### 17. 附件 (type=17)
440
+
441
+ **Property 结构**: 空对象或省略
442
+
443
+ ```json
444
+ {
445
+ "type": 17,
446
+ "field_name": "附件",
447
+ "property": {}
448
+ }
449
+ ```
450
+
451
+ **注意**:
452
+ - 单个单元格附件数不超过 100
453
+ - 写入前需先调用[上传素材接口](https://go.feishu.cn/s/63soQp6O80s)
454
+
455
+ ---
456
+
457
+ ### 18. 单向关联 (type=18)
458
+
459
+ **Property 结构**:
460
+
461
+ ```json
462
+ {
463
+ "table_id": "tblXXXXXXXX", // 必填,关联的数据表 ID
464
+ "multiple": true // 可选,是否允许多条记录,默认 true
465
+ }
466
+ ```
467
+
468
+ **示例**:
469
+
470
+ ```json
471
+ {
472
+ "type": 18,
473
+ "field_name": "关联任务",
474
+ "property": {
475
+ "table_id": "tblsRc9GRRXKqhvW",
476
+ "multiple": true
477
+ }
478
+ }
479
+ ```
480
+
481
+ **注意**:
482
+ - 单个单元格关联数不超过 500
483
+
484
+ ---
485
+
486
+ ### 21. 双向关联 (type=21)
487
+
488
+ **Property 结构**:
489
+
490
+ ```json
491
+ {
492
+ "table_id": "tblXXXXXXXX", // 必填,关联的数据表 ID
493
+ "back_field_name": "反向字段名", // 必填,对方表的双向关联字段名
494
+ "multiple": true // 可选,是否允许多条记录
495
+ }
496
+ ```
497
+
498
+ **示例**:
499
+
500
+ ```json
501
+ {
502
+ "type": 21,
503
+ "field_name": "相关项目",
504
+ "property": {
505
+ "table_id": "tblAnotherTable",
506
+ "back_field_name": "关联的任务",
507
+ "multiple": true
508
+ }
509
+ }
510
+ ```
511
+
512
+ **注意**:
513
+ - 单个单元格关联数不超过 500
514
+ - 对方表会自动创建对应的双向关联字段
515
+
516
+ ---
517
+
518
+ ### 22. 地理位置 (type=22)
519
+
520
+ **Property 结构**:
521
+
522
+ ```json
523
+ {
524
+ "location": {
525
+ "input_type": "not_limit" // 输入限制
526
+ }
527
+ }
528
+ ```
529
+
530
+ **input_type 可选值**:
531
+ - `"only_mobile"`: 仅允许移动端实时定位
532
+ - `"not_limit"`: 无限制(默认)
533
+
534
+ **示例**:
535
+
536
+ ```json
537
+ {
538
+ "type": 22,
539
+ "field_name": "办公地址",
540
+ "property": {
541
+ "location": {
542
+ "input_type": "only_mobile"
543
+ }
544
+ }
545
+ }
546
+ ```
547
+
548
+ ---
549
+
550
+ ### 23. 群组 (type=23)
551
+
552
+ **Property 结构**: 空对象或省略
553
+
554
+ ```json
555
+ {
556
+ "type": 23,
557
+ "field_name": "协作群",
558
+ "property": {}
559
+ }
560
+ ```
561
+
562
+ **注意**:
563
+ - 单个单元格群组数不超过 10 个
564
+
565
+ ---
566
+
567
+ ## 高级字段
568
+
569
+ ### 20. 公式 (type=20)
570
+
571
+ **Property 结构**:
572
+
573
+ ```json
574
+ {
575
+ "formula_expression": "bitable::$table[tblXXX].$field[fldYYY]*2" // 可选
576
+ }
577
+ ```
578
+
579
+ **示例**:
580
+
581
+ ```json
582
+ {
583
+ "type": 20,
584
+ "field_name": "总价",
585
+ "property": {
586
+ "formula_expression": "bitable::$table[tblMain].$field[fldQty] * $field[fldPrice]"
587
+ }
588
+ }
589
+ ```
590
+
591
+ **注意**:
592
+ - 创建字段时**不支持**设置公式表达式
593
+ - 参考[飞书帮助中心 - 公式字段](https://www.feishu.cn/hc/zh-CN/articles/360049067853)
594
+
595
+ **对于某些多维表格,公式字段需要额外设置 `type` 参数**(通过[获取多维表格元数据](https://go.feishu.cn/s/62nuKkQlE03)接口的 `formula_type` 判断):
596
+
597
+ ```json
598
+ {
599
+ "type": 20,
600
+ "field_name": "计算字段",
601
+ "property": {
602
+ "type": {
603
+ "data_type": 2, // 公式结果的数据类型 (1=文本, 2=数字, 5=日期...)
604
+ "ui_property": { // UI 展示属性
605
+ "formatter": "0.00",
606
+ "currency_code": "CNY"
607
+ },
608
+ "ui_type": "Currency" // UI 类型 (Number/Progress/Currency/Rating/DateTime)
609
+ }
610
+ }
611
+ }
612
+ ```
613
+
614
+ ---
615
+
616
+ ### 1001. 创建时间 (type=1001)
617
+
618
+ **Property 结构**:
619
+
620
+ ```json
621
+ {
622
+ "date_formatter": "yyyy/MM/dd" // 可选,日期格式
623
+ }
624
+ ```
625
+
626
+ **示例**:
627
+
628
+ ```json
629
+ {
630
+ "type": 1001,
631
+ "field_name": "创建于",
632
+ "property": {
633
+ "date_formatter": "yyyy-MM-dd HH:mm"
634
+ }
635
+ }
636
+ ```
637
+
638
+ ---
639
+
640
+ ### 1002. 最后更新时间 (type=1002)
641
+
642
+ **Property 结构**: 与创建时间相同
643
+
644
+ ```json
645
+ {
646
+ "date_formatter": "yyyy-MM-dd HH:mm"
647
+ }
648
+ ```
649
+
650
+ ---
651
+
652
+ ### 1005. 自动编号 (type=1005)
653
+
654
+ **Property 结构**:
655
+
656
+ ```json
657
+ {
658
+ "auto_serial": {
659
+ "type": "auto_increment_number", // 或 "custom"
660
+ "options": [ // 自定义编号规则(仅 type="custom" 时需要)
661
+ {
662
+ "type": "fixed_text",
663
+ "value": "TASK-"
664
+ },
665
+ {
666
+ "type": "created_time",
667
+ "value": "yyyyMMdd"
668
+ },
669
+ {
670
+ "type": "system_number",
671
+ "value": "5"
672
+ }
673
+ ]
674
+ }
675
+ }
676
+ ```
677
+
678
+ **auto_serial.type 可选值**:
679
+ - `"auto_increment_number"`: 纯自增数字
680
+ - `"custom"`: 自定义编号规则
681
+
682
+ **options 中的规则类型**:
683
+ - `"system_number"`: 自增数字位数(value: 1-9)
684
+ - `"fixed_text"`: 固定字符(value: 最多 20 字符)
685
+ - `"created_time"`: 创建时间(value: "yyyyMMdd"/"yyyyMM"/"yyyy"/"MMdd"/"MM"/"dd")
686
+
687
+ **示例 1: 纯自增**:
688
+
689
+ ```json
690
+ {
691
+ "type": 1005,
692
+ "field_name": "编号",
693
+ "property": {
694
+ "auto_serial": {
695
+ "type": "auto_increment_number"
696
+ }
697
+ }
698
+ }
699
+ ```
700
+
701
+ **示例 2: 自定义编号**:
702
+
703
+ ```json
704
+ {
705
+ "type": 1005,
706
+ "field_name": "工单号",
707
+ "property": {
708
+ "auto_serial": {
709
+ "type": "custom",
710
+ "options": [
711
+ {"type": "fixed_text", "value": "WO-"},
712
+ {"type": "created_time", "value": "yyyyMMdd"},
713
+ {"type": "system_number", "value": "4"}
714
+ ]
715
+ }
716
+ }
717
+ }
718
+ // 生成示例: WO-20240226-0001
719
+ ```
720
+
721
+ ---
722
+
723
+ ## 🔍 常见错误码
724
+
725
+ | 错误码 | 字段类型 | 说明 |
726
+ |--------|---------|------|
727
+ | 1254080 | 文本 | property 结构错误 |
728
+ | 1254081 | 数字 | property 结构错误,检查 formatter |
729
+ | 1254082 | 单选 | property 结构错误,检查 options 数组 |
730
+ | 1254083 | 多选 | property 结构错误,检查 options 数组 |
731
+ | 1254084 | 日期 | property 结构错误,检查 date_formatter |
732
+ | 1254085 | 复选框 | property 结构错误 |
733
+ | 1254086 | 人员 | property 结构错误,检查 multiple |
734
+ | 1254087 | 超链接 | **必须省略 property 参数(传空对象也会报错)** |
735
+ | 1254088 | 附件 | property 结构错误 |
736
+ | 1254089 | 单向关联 | property 结构错误,检查 table_id |
737
+ | 1254090 | 查找引用 | property 结构错误 |
738
+ | 1254091 | 公式 | property 结构错误 |
739
+ | 1254092 | 双向关联 | property 结构错误,检查 table_id 和 back_field_name |
740
+ | 1254093 | 创建时间 | property 结构错误 |
741
+ | 1254094 | 最后更新时间 | property 结构错误 |
742
+
743
+ ---
744
+
745
+ ## 📌 更新字段时的特殊规则
746
+
747
+ 调用 `update` action 更新字段时:
748
+
749
+ 1. **必须保持字段类型一致**: `type` 和 `ui_type` 不能变更
750
+ 2. **单选/多选更新选项**:
751
+ - 已有选项必须保留 `id`
752
+ - 新增选项只传 `name` 和 `color`,不传 `id`
753
+ 3. **如果只改字段名**:
754
+ - 可以只传 `field_name`,工具会自动查询当前 `type` 和 `property`
755
+ 4. **关联字段的 table_id**: 不能修改为不同的表
756
+
757
+ ---
758
+
759
+ ## 🔗 参考链接
760
+
761
+ - [飞书开放平台 - 字段编辑指南](https://go.feishu.cn/s/672BSzVyo03)
762
+ - [新增字段接口文档](https://go.feishu.cn/s/62nuKkQl403)
763
+ - [更新字段接口文档](https://go.feishu.cn/s/62nuKkQlo03)