cloudcc-cli 2.3.0 → 2.3.2

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 (273) hide show
  1. package/.claude/settings.json +15 -0
  2. package/.cloudcc-cache.json +17 -48
  3. package/.cursor/skills/cloudcc-cli-dev.zip +0 -0
  4. package/.cursor/skills/cloudcc-cli-usage/SKILL.md +67 -0
  5. package/README.md +22 -0
  6. package/bin/cc.js +13 -8
  7. package/bin/index.js +12 -2
  8. package/bin/mcp.js +1 -1
  9. package/build/{component-cc-test-001.common.js → component-CCPlugin1774500425584.common.js} +25 -25
  10. package/build/component-CCPlugin1774500425584.common.js.map +1 -0
  11. package/build/component-CCPlugin1774500425584.css +1 -0
  12. package/build/{component-cc-test-001.umd.js → component-CCPlugin1774500425584.umd.js} +27 -27
  13. package/build/component-CCPlugin1774500425584.umd.js.map +1 -0
  14. package/build/{component-cc-test-001.umd.min.js → component-CCPlugin1774500425584.umd.min.js} +3 -3
  15. package/build/component-CCPlugin1774500425584.umd.min.js.map +1 -0
  16. package/build/demo.html +1 -1
  17. package/{src/mcp → mcp}/tools/Class Editor Guide/handler.js +12 -4
  18. package/{src/mcp → mcp}/tools/Component Editor Guide/handler.js +15 -14
  19. package/{src/mcp → mcp}/tools/Trigger Editor Guide/handler.js +8 -2
  20. package/package.json +2 -2
  21. package/src/application/delete.js +59 -0
  22. package/src/application/doc.js +46 -0
  23. package/src/application/docs/devguide.md +173 -0
  24. package/src/application/docs/introduction.md +81 -0
  25. package/src/application/get.js +31 -5
  26. package/src/application/index.js +2 -0
  27. package/src/brief/get.js +1 -1
  28. package/src/classes/create.js +6 -1
  29. package/src/classes/delete.js +49 -0
  30. package/src/classes/detail.js +21 -7
  31. package/src/classes/doc.js +49 -472
  32. package/src/classes/docs/devguide.md +451 -0
  33. package/src/classes/get.js +9 -2
  34. package/src/classes/index.js +3 -1
  35. package/src/classes/publish.js +6 -1
  36. package/src/classes/pull.js +6 -1
  37. package/src/classes/pullList.js +6 -3
  38. package/src/config/doc.js +31 -0
  39. package/src/config/docs/devguide.md +100 -0
  40. package/src/config/index.js +5 -0
  41. package/src/customPage/create.js +109 -14
  42. package/src/customPage/delete.js +2 -2
  43. package/src/customPage/doc.js +46 -0
  44. package/src/customPage/docs/devguide.md +200 -0
  45. package/src/customPage/docs/introduction.md +224 -0
  46. package/src/customPage/get.js +1 -1
  47. package/src/customPage/index.js +1 -0
  48. package/src/customSetting/create.js +36 -0
  49. package/src/customSetting/delete.js +35 -0
  50. package/src/customSetting/deleteCustomSettingField.js +43 -0
  51. package/src/customSetting/detail.js +33 -0
  52. package/src/customSetting/doc.js +22 -179
  53. package/src/customSetting/docs/devguide.md +181 -0
  54. package/src/customSetting/docs/introduction.md +3 -0
  55. package/src/customSetting/editCustomSettingField.js +34 -0
  56. package/src/customSetting/get.js +34 -0
  57. package/src/customSetting/index.js +10 -1
  58. package/src/customSetting/modify.js +30 -0
  59. package/src/customSetting/saveCustomSettingField.js +46 -0
  60. package/src/fields/delete.js +52 -0
  61. package/src/fields/doc.js +45 -0
  62. package/src/fields/docs/devguide.md +224 -0
  63. package/src/fields/docs/introduction.md +217 -0
  64. package/src/fields/index.js +2 -0
  65. package/src/globalSelectList/create.js +51 -0
  66. package/src/globalSelectList/delete.js +56 -0
  67. package/src/globalSelectList/detail.js +45 -0
  68. package/src/globalSelectList/doc.js +52 -0
  69. package/src/globalSelectList/docs/devguide.md +212 -0
  70. package/src/globalSelectList/docs/introduction.md +82 -0
  71. package/src/globalSelectList/get.js +31 -0
  72. package/src/globalSelectList/index.js +16 -0
  73. package/src/menu/create-page.js +54 -26
  74. package/src/menu/create-script.js +67 -19
  75. package/src/menu/create.js +9 -3
  76. package/src/menu/delete.js +59 -0
  77. package/src/menu/doc.js +57 -0
  78. package/src/menu/docs/devguide.md +203 -0
  79. package/src/menu/docs/introduction.md +99 -0
  80. package/src/menu/get.js +56 -0
  81. package/src/menu/index.js +3 -0
  82. package/src/menu/validator.js +80 -0
  83. package/src/object/delete.js +51 -0
  84. package/src/object/doc.js +45 -0
  85. package/src/object/docs/devguide.md +112 -0
  86. package/src/object/docs/introduction.md +187 -0
  87. package/src/object/get.js +1 -23
  88. package/src/object/index.js +2 -0
  89. package/src/pagelayout/create.js +123 -0
  90. package/src/pagelayout/doc.js +46 -0
  91. package/src/pagelayout/docs/devguide.md +295 -0
  92. package/src/pagelayout/docs/introduction.md +44 -0
  93. package/src/pagelayout/get.js +46 -0
  94. package/src/pagelayout/index.js +9 -0
  95. package/src/plugin/detail.js +14 -6
  96. package/src/plugin/doc.js +43 -863
  97. package/src/plugin/docs/devguide.md +923 -0
  98. package/src/plugin/publish1.js +3 -3
  99. package/src/profile/create.js +108 -0
  100. package/src/profile/delete.js +59 -0
  101. package/src/profile/doc.js +46 -0
  102. package/src/profile/docs/devguide.md +332 -0
  103. package/src/profile/docs/introduction.md +123 -0
  104. package/src/profile/get.js +55 -0
  105. package/src/profile/index.js +14 -0
  106. package/src/project/doc.js +39 -372
  107. package/src/project/docs/devguide.md +359 -0
  108. package/src/project/docs/introduction.md +3 -0
  109. package/src/recordType/create.js +77 -0
  110. package/src/recordType/delete.js +52 -0
  111. package/src/recordType/doc.js +36 -0
  112. package/src/recordType/docs/devguide.md +160 -0
  113. package/src/recordType/docs/introduction.md +53 -0
  114. package/src/recordType/editInfo.js +39 -0
  115. package/src/recordType/editSave.js +47 -0
  116. package/src/recordType/get.js +1 -1
  117. package/src/recordType/getList.js +31 -0
  118. package/src/recordType/index.js +16 -3
  119. package/src/recordType/newInfo.js +39 -0
  120. package/src/recordType/validDelete.js +91 -0
  121. package/src/res.md +66 -0
  122. package/src/role/create.js +153 -0
  123. package/src/role/delete.js +59 -0
  124. package/src/role/doc.js +46 -0
  125. package/src/role/docs/devguide.md +387 -0
  126. package/src/role/docs/introduction.md +124 -0
  127. package/src/role/get.js +57 -0
  128. package/src/role/index.js +10 -0
  129. package/src/scheduleJob/delete.js +26 -0
  130. package/src/scheduleJob/detail.js +23 -0
  131. package/src/scheduleJob/doc.js +49 -0
  132. package/src/scheduleJob/docs/devguide.md +79 -0
  133. package/src/scheduleJob/docs/introduction.md +101 -0
  134. package/src/scheduleJob/get.js +26 -0
  135. package/src/scheduleJob/index.js +15 -0
  136. package/src/script/delete.js +112 -0
  137. package/src/script/doc.js +31 -245
  138. package/src/script/docs/devguide.md +290 -0
  139. package/src/script/docs/introduction.md +48 -0
  140. package/src/script/index.js +1 -0
  141. package/src/staticResource/count.js +46 -0
  142. package/src/staticResource/create.js +97 -0
  143. package/src/staticResource/delete.js +48 -0
  144. package/src/staticResource/detail.js +46 -0
  145. package/src/staticResource/doc.js +39 -0
  146. package/src/staticResource/docs/devguide.md +157 -0
  147. package/src/staticResource/docs/introduction.md +3 -0
  148. package/src/staticResource/get.js +48 -0
  149. package/src/staticResource/index.js +13 -0
  150. package/src/timer/create.js +6 -1
  151. package/src/timer/delete.js +49 -0
  152. package/src/timer/detail.js +5 -5
  153. package/src/timer/doc.js +57 -0
  154. package/src/timer/get.js +7 -1
  155. package/src/timer/index.js +4 -1
  156. package/src/timer/publish.js +6 -1
  157. package/src/timer/pull.js +6 -1
  158. package/src/timer/pullList.js +5 -3
  159. package/src/triggers/delete.js +46 -0
  160. package/src/triggers/detail.js +5 -5
  161. package/src/triggers/doc.js +49 -364
  162. package/src/triggers/docs/devguide.md +334 -0
  163. package/src/triggers/get.js +7 -3
  164. package/src/triggers/index.js +2 -4
  165. package/src/triggers/pullList.js +7 -7
  166. package/src/user/create.js +50 -0
  167. package/src/user/delete.js +59 -0
  168. package/src/user/doc.js +46 -0
  169. package/src/user/docs/devguide.md +634 -0
  170. package/src/user/docs/introduction.md +124 -0
  171. package/src/user/get.js +112 -0
  172. package/src/user/index.js +12 -0
  173. package/src/user/update.js +96 -0
  174. package/src/user/view.js +60 -0
  175. package/test/application.cli.test.js +49 -8
  176. package/test/classes.cli.test.js +14 -5
  177. package/test/customPage.cli.test.js +96 -0
  178. package/test/customSetting.cli.test.js +84 -0
  179. package/test/fields.cli.test.js +18 -3
  180. package/test/globalSelectList.cli.test.js +94 -0
  181. package/test/menu-script.cli.test.js +147 -0
  182. package/test/menu.cli.test.js +42 -5
  183. package/test/object.cli.test.js +17 -1
  184. package/test/plugin.cli.test.js +5 -3
  185. package/test/scheduleJob.cli.test.js +52 -0
  186. package/test/staticResource.cli.test.js +78 -0
  187. package/test/timer.cli.test.js +20 -7
  188. package/test/trigger.cli.test.js +13 -5
  189. package/tmp_customsetting_detail.json +1 -0
  190. package/.cursor/skills/cloudcc-cli-dev/BACKEND_CLASS.md +0 -97
  191. package/.cursor/skills/cloudcc-cli-dev/BACKEND_SCHEDULE.md +0 -78
  192. package/.cursor/skills/cloudcc-cli-dev/BACKEND_TRIGGER.md +0 -137
  193. package/.cursor/skills/cloudcc-cli-dev/CLI_CHEATSHEET.md +0 -215
  194. package/.cursor/skills/cloudcc-cli-dev/CUSTOM-SETTING-API.md +0 -241
  195. package/.cursor/skills/cloudcc-cli-dev/INSTALL_AND_BOOTSTRAP.md +0 -59
  196. package/.cursor/skills/cloudcc-cli-dev/OBJECTS_AND_FIELDS.md +0 -120
  197. package/.cursor/skills/cloudcc-cli-dev/REQUIREMENTS_BREAKDOWN.md +0 -98
  198. package/.cursor/skills/cloudcc-cli-dev/SKILL.md +0 -44
  199. package/.cursor/skills/cloudcc-cli-dev/VUE_CUSTOM_COMPONENT.md +0 -151
  200. package/build/component-cc-test-001.common.js.map +0 -1
  201. package/build/component-cc-test-001.css +0 -1
  202. package/build/component-cc-test-001.umd.js.map +0 -1
  203. package/build/component-cc-test-001.umd.min.js.map +0 -1
  204. package/classes/CCdd/CCdd.java +0 -22
  205. package/classes/CCdd/CCddTest.java +0 -11
  206. package/classes/CCdd/config.json +0 -1
  207. package/core.zip +0 -0
  208. package/plugins/cc-test-001/cc-test-001.vue +0 -32
  209. package/plugins/cc-test-001/components/HelloWorld.vue +0 -11
  210. package/plugins/cc-test-001/config.json +0 -6
  211. package/schedule/CCdd/CCdd.java +0 -11
  212. package/schedule/CCdd/config.json +0 -1
  213. package/src/approval/approve.js +0 -105
  214. package/src/approval/get.js +0 -245
  215. package/src/approval/index.js +0 -11
  216. package/src/approval/reject.js +0 -105
  217. package/src/plugin/readme.md +0 -7
  218. package/target/ccopenapi-0.0.4-classes.jar +0 -0
  219. package/target/ccopenapi-0.0.4.jar +0 -0
  220. package/target/classes/CCdd/CCdd.class +0 -0
  221. package/target/classes/CCdd/CCddTest.class +0 -0
  222. package/target/classes/CCdd/config.json +0 -1
  223. package/target/maven-archiver/pom.properties +0 -3
  224. package/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst +0 -20
  225. package/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst +0 -19
  226. /package/{src/mcp → mcp}/cliRunner.js +0 -0
  227. /package/{src/mcp → mcp}/index.js +0 -0
  228. /package/{src/mcp → mcp}/readme.md +0 -0
  229. /package/{src/mcp → mcp}/tools/Application Creator/handler.js +0 -0
  230. /package/{src/mcp → mcp}/tools/Approval/handler.js +0 -0
  231. /package/{src/mcp → mcp}/tools/Class Creator/handler.js +0 -0
  232. /package/{src/mcp → mcp}/tools/Class Detail Retriever/handler.js +0 -0
  233. /package/{src/mcp → mcp}/tools/Class List Retriever/handler.js +0 -0
  234. /package/{src/mcp → mcp}/tools/Class Publisher/handler.js +0 -0
  235. /package/{src/mcp → mcp}/tools/Class Puller/handler.js +0 -0
  236. /package/{src/mcp → mcp}/tools/Client Script Detail Retriever/handler.js +0 -0
  237. /package/{src/mcp → mcp}/tools/Client Script Editor Guide/handler.js +0 -0
  238. /package/{src/mcp → mcp}/tools/Client Script List Retriever/handler.js +0 -0
  239. /package/{src/mcp → mcp}/tools/Client Script Publisher/handler.js +0 -0
  240. /package/{src/mcp → mcp}/tools/Client Script Puller/handler.js +0 -0
  241. /package/{src/mcp → mcp}/tools/CloudCC Development Overview/handler.js +0 -0
  242. /package/{src/mcp → mcp}/tools/Component Creator/handler.js +0 -0
  243. /package/{src/mcp → mcp}/tools/Component Detail Retriever/handler.js +0 -0
  244. /package/{src/mcp → mcp}/tools/Component List Retriever/handler.js +0 -0
  245. /package/{src/mcp → mcp}/tools/Component Publisher/handler.js +0 -0
  246. /package/{src/mcp → mcp}/tools/Component Puller/handler.js +0 -0
  247. /package/{src/mcp → mcp}/tools/Dev Environment Creator/fetcher.js +0 -0
  248. /package/{src/mcp → mcp}/tools/Dev Environment Creator/handler.js +0 -0
  249. /package/{src/mcp → mcp}/tools/Dev Environment Validator/handler.js +0 -0
  250. /package/{src/mcp → mcp}/tools/Developer Key Setup Guide/fetcher.js +0 -0
  251. /package/{src/mcp → mcp}/tools/Developer Key Setup Guide/handler.js +0 -0
  252. /package/{src/mcp → mcp}/tools/JSP Migrator/handler.js +0 -0
  253. /package/{src/mcp → mcp}/tools/Menu Creator/handler.js +0 -0
  254. /package/{src/mcp → mcp}/tools/Object Creator/handler.js +0 -0
  255. /package/{src/mcp → mcp}/tools/Object Fields Creator/handler.js +0 -0
  256. /package/{src/mcp → mcp}/tools/Object Fields Retriever/handler.js +0 -0
  257. /package/{src/mcp → mcp}/tools/Object List Retriever/handler.js +0 -0
  258. /package/{src/mcp → mcp}/tools/Scheduled Class Creator/handler.js +0 -0
  259. /package/{src/mcp → mcp}/tools/Scheduled Class Detail Retriever/handler.js +0 -0
  260. /package/{src/mcp → mcp}/tools/Scheduled Class List Retriever/handler.js +0 -0
  261. /package/{src/mcp → mcp}/tools/Scheduled Class Publisher/handler.js +0 -0
  262. /package/{src/mcp → mcp}/tools/Scheduled Class Puller/handler.js +0 -0
  263. /package/{src/mcp → mcp}/tools/Trigger Creator/handler.js +0 -0
  264. /package/{src/mcp → mcp}/tools/Trigger Detail Retriever/handler.js +0 -0
  265. /package/{src/mcp → mcp}/tools/Trigger List Retriever/handler.js +0 -0
  266. /package/{src/mcp → mcp}/tools/Trigger Publisher/handler.js +0 -0
  267. /package/{src/mcp → mcp}/tools/Trigger Puller/handler.js +0 -0
  268. /package/{src/mcp → mcp}/tools/index.js +0 -0
  269. /package/{docs//350/207/252/345/256/232/344/271/211/347/261/273.md" → src/classes/docs/introduction.md} +0 -0
  270. /package/{docs/CloudCC/350/207/252/345/256/232/344/271/211/347/273/204/344/273/266/344/275/277/347/224/250/350/257/264/346/230/216.md" → src/plugin/docs/introduction.md} +0 -0
  271. /package/{docs/cloudcc/345/256/232/346/227/266/344/275/234/344/270/232.md" → src/timer/docs/devguide.md} +0 -0
  272. /package/{docs/cloudcc/345/256/232/346/227/266/347/261/273.md" → src/timer/docs/introduction.md} +0 -0
  273. /package/{docs//350/247/246/345/217/221/345/231/250/347/261/273.md" → src/triggers/docs/introduction.md} +0 -0
@@ -0,0 +1,295 @@
1
+ # CloudCC 页面布局使用总结
2
+
3
+ 页面布局(Page Layout)用于定义对象在详情页的字段展示方式,包括字段排列、分区、按钮位置等。
4
+
5
+ **前置条件**:页面布局操作需要先选中自定义对象或标准对象。
6
+
7
+ ---
8
+
9
+ ## 快速开始(CLI 命令)
10
+
11
+ ### 支持的页面布局操作
12
+
13
+ | 操作 | 说明 |
14
+ |------|------|
15
+ | `get` | 查询页面布局列表 |
16
+ | `create` | 创建/复制页面布局 |
17
+
18
+ ---
19
+
20
+ ## CLI 命令详解
21
+
22
+ ### 查询页面布局列表
23
+
24
+ 获取指定对象的页面布局列表。
25
+
26
+ ```bash
27
+ cc get pagelayout <projectPath> <objApiName>
28
+ ```
29
+
30
+ **参数说明:**
31
+
32
+ | 参数 | 必填 | 说明 |
33
+ |------|------|------|
34
+ | `projectPath` | 否 | 项目路径,`.` 表示当前目录 |
35
+ | `objApiName` | 是 | 对象 API 名称(前缀) |
36
+
37
+ **示例:**
38
+
39
+ ```bash
40
+ # 查询对象 b25 的页面布局列表
41
+ cc get pagelayout . b25
42
+
43
+ # 使用完整 API 名称
44
+ cc get pagelayout . Account
45
+ ```
46
+
47
+ ---
48
+
49
+ ### 创建页面布局
50
+
51
+ 基于现有布局创建新的页面布局。
52
+
53
+ ```bash
54
+ cc create pagelayout <projectPath> <objId> <layoutName> [sourceLayoutId] [isCloneDynamic]
55
+ ```
56
+
57
+ **参数说明:**
58
+
59
+ | 参数 | 必填 | 说明 |
60
+ |------|------|------|
61
+ | `projectPath` | 否 | 项目路径,`.` 表示当前目录 |
62
+ | `objId` | 是 | 对象 ID |
63
+ | `layoutName` | 是 | 新页面布局名称 |
64
+ | `sourceLayoutId` | 否 | 要复制的源布局 ID,不传则使用默认第一个 |
65
+ | `isCloneDynamic` | 否 | 是否复制动态布局规则,默认 `true` |
66
+
67
+ **示例:**
68
+
69
+ ```bash
70
+ # 创建页面布局(自动使用默认布局作为模板)
71
+ cc create pagelayout . 20267D1465464C5OB6m5 "课程表2"
72
+
73
+ # 指定源布局 ID 进行复制
74
+ cc create pagelayout . 20267D1465464C5OB6m5 "课程表2" add20261DA7347CZPAUz
75
+
76
+ # 不复制动态布局规则
77
+ cc create pagelayout . 20267D1465464C5OB6m5 "课程表2" add20261DA7347CZPAUz false
78
+ ```
79
+
80
+ ---
81
+
82
+ ## 完整工作流示例
83
+
84
+ ### 场景:为自定义对象创建新的页面布局
85
+
86
+ ```bash
87
+ # 1. 确认项目已初始化(有 cloudcc-cli.config.js)
88
+ cat cloudcc-cli.config.js
89
+
90
+ # 2. 查询对象的页面布局列表
91
+ cc get pagelayout . b25
92
+
93
+ # 3. 根据对象 ID 创建新布局
94
+ cc create pagelayout . 20267D1465464C5OB6m5 "新的布局名称"
95
+
96
+ # 4. 验证创建成功,再次查询列表
97
+ cc get pagelayout . b25
98
+ ```
99
+
100
+ ---
101
+
102
+ ## API 接口详情
103
+
104
+ ### 什么是页面布局?
105
+
106
+ **页面布局(Page Layout)** 定义了对象在详情页的展示方式,包括:
107
+ - 字段的排列和分组
108
+ - 相关列表的显示
109
+ - 操作按钮的位置
110
+ - 动态布局规则
111
+
112
+ ### 核心属性
113
+
114
+ | 属性 | 说明 | 示例 |
115
+ |------|------|------|
116
+ | **ID(id)** | 页面布局唯一标识 | `add20261DA7347CZPAUz` |
117
+ | **名称(layoutName)** | 页面布局显示名称 | `课程表布局` |
118
+ | **对象 ID(objid)** | 关联的对象 ID | `20267D1465464C5OB6m5` |
119
+
120
+ ---
121
+
122
+ ## 一、查询页面布局列表
123
+
124
+ ### 1.1 接口说明
125
+
126
+ **接口**: `POST /api/layout/queryPageLayout`
127
+
128
+ **请求参数**:
129
+
130
+ | 参数名 | 类型 | 必填 | 说明 |
131
+ |--------|------|------|------|
132
+ | `prefix` | string | 是 | 对象 API 名称前缀 |
133
+
134
+ **返回数据**:
135
+
136
+ ```javascript
137
+ {
138
+ "result": true,
139
+ "returnInfo": "操作成功",
140
+ "layouts": [
141
+ {
142
+ "id": "add20261DA7347CZPAUz",
143
+ "layoutName": "默认布局",
144
+ "objid": "20267D1465464C5OB6m5",
145
+ // ... 其他字段
146
+ }
147
+ ]
148
+ }
149
+ ```
150
+
151
+ **返回字段说明**:
152
+
153
+ | 字段 | 类型 | 说明 |
154
+ |------|------|------|
155
+ | `layouts` | array | 页面布局数组 |
156
+ | `layouts[].id` | string | 布局 ID |
157
+ | `layouts[].layoutName` | string | 布局名称 |
158
+ | `layouts[].objid` | string | 关联对象 ID |
159
+
160
+ ---
161
+
162
+ ## 二、创建页面布局
163
+
164
+ 创建页面布局是一个两步流程:
165
+
166
+ 1. **获取现有布局列表**:调用 `layout/newpage` 接口获取可用于复制的布局
167
+ 2. **复制创建新布局**:调用 `layout/cloneLayout` 接口基于选定布局创建新布局
168
+
169
+ ### 2.1 获取现有布局列表
170
+
171
+ **接口**: `POST /api/layout/newpage`
172
+
173
+ **请求参数**:
174
+
175
+ | 参数名 | 类型 | 必填 | 说明 |
176
+ |--------|------|------|------|
177
+ | `objid` | string | 是 | 对象 ID |
178
+
179
+ **返回数据**:
180
+
181
+ ```javascript
182
+ {
183
+ "result": true,
184
+ "returnInfo": "操作成功",
185
+ "layouts": [
186
+ {
187
+ "id": "add20261DA7347CZPAUz",
188
+ "layoutName": "默认布局",
189
+ "objid": "20267D1465464C5OB6m5"
190
+ }
191
+ ]
192
+ }
193
+ ```
194
+
195
+ **默认布局选择逻辑**:
196
+
197
+ - 返回列表中的第一个布局作为默认复制源
198
+
199
+ ### 2.2 复制创建新布局
200
+
201
+ **接口**: `POST /api/layout/cloneLayout`
202
+
203
+ **请求参数**:
204
+
205
+ | 参数名 | 类型 | 必填 | 说明 |
206
+ |--------|------|------|------|
207
+ | `layoutId` | string | 是 | 要复制的源布局 ID |
208
+ | `layoutName` | string | 是 | 新布局名称 |
209
+ | `objid` | string | 是 | 对象 ID |
210
+ | `isCloneDynamic` | string | 否 | 是否复制动态布局规则,默认 `"true"` |
211
+
212
+ **请求示例**:
213
+
214
+ ```javascript
215
+ {
216
+ "layoutId": "add20261DA7347CZPAUz",
217
+ "layoutName": "课程表2",
218
+ "objid": "20267D1465464C5OB6m5",
219
+ "isCloneDynamic": "true"
220
+ }
221
+ ```
222
+
223
+ **返回数据**:
224
+
225
+ ```javascript
226
+ {
227
+ "result": true,
228
+ "returnInfo": "操作成功",
229
+ "data": {
230
+ "id": "add2026XXXXXXXXXXXXX",
231
+ "layoutName": "课程表2"
232
+ }
233
+ }
234
+ ```
235
+
236
+ ---
237
+
238
+ ## 三、页面布局数据结构
239
+
240
+ ### 3.1 列表数据格式
241
+
242
+ ```javascript
243
+ {
244
+ id: "add20261DA7347CZPAUz",
245
+ layoutName: "默认布局",
246
+ objid: "20267D1465464C5OB6m5"
247
+ }
248
+ ```
249
+
250
+ ---
251
+
252
+ ## 四、最佳实践
253
+
254
+ ### 命名规范
255
+
256
+ | 项目 | 规范 | 示例 |
257
+ |------|------|------|
258
+ | 布局名称 | 使用描述性名称 | `标准详情页布局`、`移动端布局` |
259
+ | 复制源选择 | 选择结构最相近的布局作为复制源 | - |
260
+
261
+ ### 布局设计建议
262
+
263
+ - **按需复制动态布局规则**:如果源布局有复杂的动态规则,确认是否需要复制到新布局
264
+ - **避免重复创建**:创建前先查询现有布局,避免重复
265
+
266
+ ### 推荐操作流程
267
+
268
+ 1. 查看对象现有布局:`cc get pagelayout . <apiName>`
269
+ 2. 确定复制源布局 ID
270
+ 3. 创建新布局:`cc create pagelayout . <objId> <layoutName> [sourceLayoutId]`
271
+ 4. 验证创建结果
272
+
273
+ ---
274
+
275
+ ## 五、常见问题
276
+
277
+ **Q: 为什么查询页面布局需要先选中对象?**
278
+
279
+ A: 页面布局是绑定到具体对象的,不同对象有不同的字段和关联关系,因此必须先确定对象才能操作其页面布局。
280
+
281
+ **Q: 如何获取对象 ID?**
282
+
283
+ A: 可以通过对象 API 名称查询对象信息获取 ID,或从管理后台的对象管理页面获取。
284
+
285
+ **Q: isCloneDynamic 参数的作用是什么?**
286
+
287
+ A: 该参数控制是否复制源布局的动态布局规则。设置为 `"true"` 时会复制动态规则,设置为 `"false"` 则只复制静态布局。
288
+
289
+ **Q: 创建页面布局时报错 "对象不存在"?**
290
+
291
+ A: 请确认传入的 `objId` 是正确的对象 ID,且该对象在当前环境中存在。
292
+
293
+ ---
294
+
295
+ *文档版本:1.0 | 最后更新:2026-03-26*
@@ -0,0 +1,44 @@
1
+ # 页面布局(Page Layout)介绍
2
+
3
+ 页面布局是 CloudCC 中用于定义对象详情页展示方式的重要配置。
4
+
5
+ ## 什么是页面布局?
6
+
7
+ 页面布局决定了:
8
+ - 字段在详情页如何排列和分组
9
+ - 哪些字段显示、哪些隐藏
10
+ - 操作按钮的位置和顺序
11
+ - 相关列表的展示方式
12
+ - 动态布局规则(根据条件显示/隐藏字段)
13
+
14
+ ## 适用对象
15
+
16
+ 页面布局可以应用于:
17
+ - **标准对象**:如 Account(客户)、Contact(联系人)等系统内置对象
18
+ - **自定义对象**:用户根据业务需求创建的对象
19
+
20
+ ## 前置条件
21
+
22
+ 操作页面布局前,必须先**选中对象**(自定义对象或标准对象)。
23
+
24
+ ## 核心能力
25
+
26
+ | 能力 | 说明 |
27
+ |------|------|
28
+ | 查询布局列表 | 查看对象下的所有页面布局 |
29
+ | 创建布局 | 基于现有布局复制创建新布局 |
30
+ | 复制动态规则 | 可选择是否复制源布局的动态布局规则 |
31
+
32
+ ## 使用场景
33
+
34
+ 1. **多终端适配**:为 PC 端和移动端创建不同的布局
35
+ 2. **多角色视图**:为不同角色创建差异化的详情页展示
36
+ 3. **业务场景适配**:针对特定业务流程定制字段展示
37
+
38
+ ## 下一步
39
+
40
+ 查看开发指南了解具体 CLI 命令:
41
+
42
+ ```bash
43
+ cc doc pagelayout devguide
44
+ ```
@@ -0,0 +1,46 @@
1
+ const { postClass } = require("../../utils/http");
2
+ const { getPackageJson } = require("../../utils/config");
3
+ const chalk = require("chalk");
4
+
5
+ /**
6
+ * 查询页面布局列表
7
+ * 用法:cc get pagelayout <projectPath> <objApiName>
8
+ */
9
+ async function get(argvs, isMcp = false) {
10
+ const projectPath = argvs[2] || process.cwd();
11
+ const objApiName = argvs[3];
12
+
13
+ if (!objApiName) {
14
+ console.error();
15
+ console.error(chalk.red("Error: 缺少对象 API 名称"));
16
+ console.error("用法: cc get pagelayout <projectPath> <objApiName>");
17
+ console.error("示例:");
18
+ console.error(" cc get pagelayout . b25");
19
+ console.error(" cc get pagelayout . Account");
20
+ console.error();
21
+ throw new Error("缺少必需参数: objApiName");
22
+ }
23
+
24
+ const config = await getPackageJson(projectPath);
25
+
26
+ const res = await postClass(
27
+ config.setupSvc + "/api/layout/queryPageLayout",
28
+ {
29
+ prefix: objApiName
30
+ },
31
+ config.accessToken
32
+ );
33
+
34
+ if (res && res.result) {
35
+ const layouts = res.layouts || [];
36
+ if (!isMcp) {
37
+ console.log(JSON.stringify(layouts));
38
+ }
39
+ return layouts;
40
+ }
41
+
42
+ const msg = res && (res.returnInfo || res.message) ? (res.returnInfo || res.message) : "Unknown error";
43
+ throw new Error("Get PageLayout Failed: " + msg);
44
+ }
45
+
46
+ module.exports = get;
@@ -0,0 +1,9 @@
1
+ const cc = {}
2
+ cc.create = require("./create")
3
+ cc.get = require("./get")
4
+ cc.doc = require("./doc")
5
+ async function main(action, argvs) {
6
+ await cc[action](argvs)
7
+ }
8
+
9
+ module.exports = main;
@@ -10,7 +10,14 @@ const BaseUrl = "https://developer.apis.cloudcc.cn";
10
10
  * - 如果提供了 pluginId,从线上查询
11
11
  * - 如果都没有,返回错误
12
12
  */
13
- async function detail(argvs) {
13
+ function outputResult(result, isMcp) {
14
+ if (!isMcp) {
15
+ console.log(JSON.stringify(result));
16
+ }
17
+ return result;
18
+ }
19
+
20
+ async function detail(argvs, isMcp = false) {
14
21
  const pluginName = argvs[2];
15
22
  const pluginId = argvs[3];
16
23
  const projectPath = argvs[4] || process.cwd();
@@ -30,7 +37,7 @@ async function detail(argvs) {
30
37
  const configContent = JSON.parse(fs.readFileSync(configPath, 'utf8'));
31
38
  const vueContent = fs.readFileSync(vueFilePath, 'utf8');
32
39
 
33
- return {
40
+ return outputResult({
34
41
  name: pluginName,
35
42
  component: configContent.component || `component-${pluginName}`,
36
43
  compName: configContent.compName || pluginName,
@@ -40,7 +47,7 @@ async function detail(argvs) {
40
47
  config: configContent,
41
48
  published: !!configContent.id,
42
49
  fromLocal: true
43
- };
50
+ }, isMcp);
44
51
  } catch (e) {
45
52
  throw new Error(`Failed to read plugin files: ${e.message}`);
46
53
  }
@@ -72,10 +79,11 @@ async function detail(argvs) {
72
79
  header
73
80
  );
74
81
  if (res && res.returnCode == 200 && res.data) {
75
- return {
76
- ...res.data,
82
+ const { compContentJs, compContentVue, ...safeData } = res.data;
83
+ return outputResult({
84
+ ...safeData,
77
85
  fromLocal: false
78
- };
86
+ }, isMcp);
79
87
  } else {
80
88
  throw new Error('Get Plugin Details Failed: ' + (res?.returnInfo || 'Unknown error'));
81
89
  }