weaver-e10-builder 1.5.10 → 1.5.12

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 (352) hide show
  1. package/README.md +212 -189
  2. package/assets/image-style-observation.schema.json +1355 -0
  3. package/assets/layout-spec.schema.json +52 -0
  4. package/dist/commands/app.d.ts.map +1 -1
  5. package/dist/commands/app.js +159 -8
  6. package/dist/commands/app.js.map +1 -1
  7. package/dist/commands/designer-setters.d.ts.map +1 -1
  8. package/dist/commands/designer-setters.js +26 -4
  9. package/dist/commands/designer-setters.js.map +1 -1
  10. package/dist/commands/form-association-manage.d.ts.map +1 -1
  11. package/dist/commands/form-association-manage.js +3 -0
  12. package/dist/commands/form-association-manage.js.map +1 -1
  13. package/dist/commands/form-button-actions-cmd.d.ts +3 -0
  14. package/dist/commands/form-button-actions-cmd.d.ts.map +1 -0
  15. package/dist/commands/form-button-actions-cmd.js +309 -0
  16. package/dist/commands/form-button-actions-cmd.js.map +1 -0
  17. package/dist/commands/form-button-permission-cmd.d.ts +3 -0
  18. package/dist/commands/form-button-permission-cmd.d.ts.map +1 -0
  19. package/dist/commands/form-button-permission-cmd.js +132 -0
  20. package/dist/commands/form-button-permission-cmd.js.map +1 -0
  21. package/dist/commands/form-button-props-cmd.d.ts +3 -0
  22. package/dist/commands/form-button-props-cmd.d.ts.map +1 -0
  23. package/dist/commands/form-button-props-cmd.js +236 -0
  24. package/dist/commands/form-button-props-cmd.js.map +1 -0
  25. package/dist/commands/form-button.d.ts.map +1 -1
  26. package/dist/commands/form-button.js +82 -55
  27. package/dist/commands/form-button.js.map +1 -1
  28. package/dist/commands/form-field-linkage.d.ts +55 -0
  29. package/dist/commands/form-field-linkage.d.ts.map +1 -1
  30. package/dist/commands/form-field-linkage.js +1026 -12
  31. package/dist/commands/form-field-linkage.js.map +1 -1
  32. package/dist/commands/form-formula-linkage.d.ts +36 -0
  33. package/dist/commands/form-formula-linkage.d.ts.map +1 -1
  34. package/dist/commands/form-formula-linkage.js +256 -65
  35. package/dist/commands/form-formula-linkage.js.map +1 -1
  36. package/dist/commands/form-layout-restore.d.ts +3 -0
  37. package/dist/commands/form-layout-restore.d.ts.map +1 -0
  38. package/dist/commands/form-layout-restore.js +217 -0
  39. package/dist/commands/form-layout-restore.js.map +1 -0
  40. package/dist/commands/form-layout.d.ts.map +1 -1
  41. package/dist/commands/form-layout.js +11 -1
  42. package/dist/commands/form-layout.js.map +1 -1
  43. package/dist/commands/form-list-permission.d.ts.map +1 -1
  44. package/dist/commands/form-list-permission.js +29 -3
  45. package/dist/commands/form-list-permission.js.map +1 -1
  46. package/dist/commands/form-list-search-group.d.ts.map +1 -1
  47. package/dist/commands/form-list-search-group.js +66 -3
  48. package/dist/commands/form-list-search-group.js.map +1 -1
  49. package/dist/commands/form-list-utils.d.ts +14 -0
  50. package/dist/commands/form-list-utils.d.ts.map +1 -1
  51. package/dist/commands/form-list-utils.js +65 -4
  52. package/dist/commands/form-list-utils.js.map +1 -1
  53. package/dist/commands/form-message.d.ts.map +1 -1
  54. package/dist/commands/form-message.js +16 -4
  55. package/dist/commands/form-message.js.map +1 -1
  56. package/dist/commands/form-obj-meta.d.ts +12 -0
  57. package/dist/commands/form-obj-meta.d.ts.map +1 -0
  58. package/dist/commands/form-obj-meta.js +116 -0
  59. package/dist/commands/form-obj-meta.js.map +1 -0
  60. package/dist/commands/form-permission.d.ts +20 -0
  61. package/dist/commands/form-permission.d.ts.map +1 -1
  62. package/dist/commands/form-permission.js +69 -11
  63. package/dist/commands/form-permission.js.map +1 -1
  64. package/dist/commands/form-validate.d.ts.map +1 -1
  65. package/dist/commands/form-validate.js +167 -35
  66. package/dist/commands/form-validate.js.map +1 -1
  67. package/dist/commands/form.d.ts.map +1 -1
  68. package/dist/commands/form.js +26 -2
  69. package/dist/commands/form.js.map +1 -1
  70. package/dist/commands/menu-permission.d.ts.map +1 -1
  71. package/dist/commands/menu-permission.js +6 -7
  72. package/dist/commands/menu-permission.js.map +1 -1
  73. package/dist/commands/menu.d.ts.map +1 -1
  74. package/dist/commands/menu.js +68 -43
  75. package/dist/commands/menu.js.map +1 -1
  76. package/dist/commands/wf-form.d.ts.map +1 -1
  77. package/dist/commands/wf-form.js +269 -47
  78. package/dist/commands/wf-form.js.map +1 -1
  79. package/dist/commands/workflow-function-management.d.ts +5 -0
  80. package/dist/commands/workflow-function-management.d.ts.map +1 -0
  81. package/dist/commands/workflow-function-management.js +91 -0
  82. package/dist/commands/workflow-function-management.js.map +1 -0
  83. package/dist/commands/workflow-node-assign-flow.d.ts.map +1 -1
  84. package/dist/commands/workflow-node-assign-flow.js +1 -0
  85. package/dist/commands/workflow-node-assign-flow.js.map +1 -1
  86. package/dist/commands/workflow-node-sign.d.ts +0 -12
  87. package/dist/commands/workflow-node-sign.d.ts.map +1 -1
  88. package/dist/commands/workflow-node-sign.js +31 -102
  89. package/dist/commands/workflow-node-sign.js.map +1 -1
  90. package/dist/commands/workflow-opinion-settings.d.ts +5 -0
  91. package/dist/commands/workflow-opinion-settings.d.ts.map +1 -0
  92. package/dist/commands/workflow-opinion-settings.js +51 -0
  93. package/dist/commands/workflow-opinion-settings.js.map +1 -0
  94. package/dist/commands/workflow-subprocess.d.ts.map +1 -1
  95. package/dist/commands/workflow-subprocess.js +370 -20
  96. package/dist/commands/workflow-subprocess.js.map +1 -1
  97. package/dist/commands/workflow.d.ts.map +1 -1
  98. package/dist/commands/workflow.js +35 -61
  99. package/dist/commands/workflow.js.map +1 -1
  100. package/dist/core/client.d.ts +2 -1
  101. package/dist/core/client.d.ts.map +1 -1
  102. package/dist/core/client.js +4 -2
  103. package/dist/core/client.js.map +1 -1
  104. package/dist/index.js +6 -0
  105. package/dist/index.js.map +1 -1
  106. package/dist/services/actionflow/calendar_mapper.d.ts.map +1 -1
  107. package/dist/services/actionflow/calendar_mapper.js +64 -18
  108. package/dist/services/actionflow/calendar_mapper.js.map +1 -1
  109. package/dist/services/actionflow/component_registry.d.ts.map +1 -1
  110. package/dist/services/actionflow/component_registry.js +6 -0
  111. package/dist/services/actionflow/component_registry.js.map +1 -1
  112. package/dist/services/actionflow/components/document_actions.d.ts.map +1 -1
  113. package/dist/services/actionflow/components/document_actions.js +113 -4
  114. package/dist/services/actionflow/components/document_actions.js.map +1 -1
  115. package/dist/services/actionflow/components/eb_get_data_by_id.d.ts.map +1 -1
  116. package/dist/services/actionflow/components/eb_get_data_by_id.js +18 -1
  117. package/dist/services/actionflow/components/eb_get_data_by_id.js.map +1 -1
  118. package/dist/services/actionflow/components/index.d.ts.map +1 -1
  119. package/dist/services/actionflow/components/index.js +2 -1
  120. package/dist/services/actionflow/components/index.js.map +1 -1
  121. package/dist/services/actionflow/components/meeting_create.d.ts.map +1 -1
  122. package/dist/services/actionflow/components/meeting_create.js +5 -1
  123. package/dist/services/actionflow/components/meeting_create.js.map +1 -1
  124. package/dist/services/actionflow/components/schedule_create.d.ts.map +1 -1
  125. package/dist/services/actionflow/components/schedule_create.js +22 -6
  126. package/dist/services/actionflow/components/schedule_create.js.map +1 -1
  127. package/dist/services/actionflow/components/workflow_actions.d.ts +1 -0
  128. package/dist/services/actionflow/components/workflow_actions.d.ts.map +1 -1
  129. package/dist/services/actionflow/components/workflow_actions.js +44 -7
  130. package/dist/services/actionflow/components/workflow_actions.js.map +1 -1
  131. package/dist/services/actionflow/document_source.d.ts +5 -0
  132. package/dist/services/actionflow/document_source.d.ts.map +1 -1
  133. package/dist/services/actionflow/document_source.js +16 -0
  134. package/dist/services/actionflow/document_source.js.map +1 -1
  135. package/dist/services/actionflow/formula_service.d.ts +7 -0
  136. package/dist/services/actionflow/formula_service.d.ts.map +1 -1
  137. package/dist/services/actionflow/formula_service.js +44 -8
  138. package/dist/services/actionflow/formula_service.js.map +1 -1
  139. package/dist/services/actionflow/preflight_service.d.ts +5 -0
  140. package/dist/services/actionflow/preflight_service.d.ts.map +1 -1
  141. package/dist/services/actionflow/preflight_service.js +127 -2
  142. package/dist/services/actionflow/preflight_service.js.map +1 -1
  143. package/dist/services/actionflow/save_workflow_draft.d.ts +7 -0
  144. package/dist/services/actionflow/save_workflow_draft.d.ts.map +1 -1
  145. package/dist/services/actionflow/save_workflow_draft.js +1 -1
  146. package/dist/services/actionflow/save_workflow_draft.js.map +1 -1
  147. package/dist/services/actionflow/workflow_compiler.d.ts.map +1 -1
  148. package/dist/services/actionflow/workflow_compiler.js +26 -0
  149. package/dist/services/actionflow/workflow_compiler.js.map +1 -1
  150. package/dist/services/app-publish.d.ts +25 -0
  151. package/dist/services/app-publish.d.ts.map +1 -1
  152. package/dist/services/app-publish.js +38 -0
  153. package/dist/services/app-publish.js.map +1 -1
  154. package/dist/services/app-range.d.ts +66 -0
  155. package/dist/services/app-range.d.ts.map +1 -0
  156. package/dist/services/app-range.js +137 -0
  157. package/dist/services/app-range.js.map +1 -0
  158. package/dist/services/form-association.d.ts +13 -0
  159. package/dist/services/form-association.d.ts.map +1 -1
  160. package/dist/services/form-association.js +42 -0
  161. package/dist/services/form-association.js.map +1 -1
  162. package/dist/services/form-button-action.d.ts +82 -0
  163. package/dist/services/form-button-action.d.ts.map +1 -1
  164. package/dist/services/form-button-action.js +194 -2
  165. package/dist/services/form-button-action.js.map +1 -1
  166. package/dist/services/form-button-condition.d.ts +45 -0
  167. package/dist/services/form-button-condition.d.ts.map +1 -0
  168. package/dist/services/form-button-condition.js +106 -0
  169. package/dist/services/form-button-condition.js.map +1 -0
  170. package/dist/services/form-button-context.d.ts +41 -0
  171. package/dist/services/form-button-context.d.ts.map +1 -0
  172. package/dist/services/form-button-context.js +54 -0
  173. package/dist/services/form-button-context.js.map +1 -0
  174. package/dist/services/form-button-logicflow.d.ts +30 -0
  175. package/dist/services/form-button-logicflow.d.ts.map +1 -0
  176. package/dist/services/form-button-logicflow.js +59 -0
  177. package/dist/services/form-button-logicflow.js.map +1 -0
  178. package/dist/services/form-button-org.d.ts +30 -0
  179. package/dist/services/form-button-org.d.ts.map +1 -0
  180. package/dist/services/form-button-org.js +80 -0
  181. package/dist/services/form-button-org.js.map +1 -0
  182. package/dist/services/form-button-permission.d.ts +65 -0
  183. package/dist/services/form-button-permission.d.ts.map +1 -0
  184. package/dist/services/form-button-permission.js +113 -0
  185. package/dist/services/form-button-permission.js.map +1 -0
  186. package/dist/services/form-button-position.d.ts +4 -18
  187. package/dist/services/form-button-position.d.ts.map +1 -1
  188. package/dist/services/form-button-position.js +4 -36
  189. package/dist/services/form-button-position.js.map +1 -1
  190. package/dist/services/form-button-props.d.ts +55 -0
  191. package/dist/services/form-button-props.d.ts.map +1 -0
  192. package/dist/services/form-button-props.js +90 -0
  193. package/dist/services/form-button-props.js.map +1 -0
  194. package/dist/services/form-button-save.d.ts +49 -0
  195. package/dist/services/form-button-save.d.ts.map +1 -0
  196. package/dist/services/form-button-save.js +54 -0
  197. package/dist/services/form-button-save.js.map +1 -0
  198. package/dist/services/form-formula-linkage.d.ts +120 -20
  199. package/dist/services/form-formula-linkage.d.ts.map +1 -1
  200. package/dist/services/form-formula-linkage.js +253 -39
  201. package/dist/services/form-formula-linkage.js.map +1 -1
  202. package/dist/services/form-layout-io.d.ts +18 -0
  203. package/dist/services/form-layout-io.d.ts.map +1 -0
  204. package/dist/services/form-layout-io.js +89 -0
  205. package/dist/services/form-layout-io.js.map +1 -0
  206. package/dist/services/form-layout-source/artifact.d.ts +8 -0
  207. package/dist/services/form-layout-source/artifact.d.ts.map +1 -0
  208. package/dist/services/form-layout-source/artifact.js +52 -0
  209. package/dist/services/form-layout-source/artifact.js.map +1 -0
  210. package/dist/services/form-layout-source/binding.d.ts +10 -0
  211. package/dist/services/form-layout-source/binding.d.ts.map +1 -0
  212. package/dist/services/form-layout-source/binding.js +43 -0
  213. package/dist/services/form-layout-source/binding.js.map +1 -0
  214. package/dist/services/form-layout-source/compile.d.ts +7 -0
  215. package/dist/services/form-layout-source/compile.d.ts.map +1 -0
  216. package/dist/services/form-layout-source/compile.js +262 -0
  217. package/dist/services/form-layout-source/compile.js.map +1 -0
  218. package/dist/services/form-layout-source/creation.d.ts +18 -0
  219. package/dist/services/form-layout-source/creation.d.ts.map +1 -0
  220. package/dist/services/form-layout-source/creation.js +42 -0
  221. package/dist/services/form-layout-source/creation.js.map +1 -0
  222. package/dist/services/form-layout-source/excel-extractor.d.ts +7 -0
  223. package/dist/services/form-layout-source/excel-extractor.d.ts.map +1 -0
  224. package/dist/services/form-layout-source/excel-extractor.js +342 -0
  225. package/dist/services/form-layout-source/excel-extractor.js.map +1 -0
  226. package/dist/services/form-layout-source/image-border.d.ts +9 -0
  227. package/dist/services/form-layout-source/image-border.d.ts.map +1 -0
  228. package/dist/services/form-layout-source/image-border.js +128 -0
  229. package/dist/services/form-layout-source/image-border.js.map +1 -0
  230. package/dist/services/form-layout-source/image-observation.d.ts +14 -0
  231. package/dist/services/form-layout-source/image-observation.d.ts.map +1 -0
  232. package/dist/services/form-layout-source/image-observation.js +90 -0
  233. package/dist/services/form-layout-source/image-observation.js.map +1 -0
  234. package/dist/services/form-layout-source/image-review.d.ts +32 -0
  235. package/dist/services/form-layout-source/image-review.d.ts.map +1 -0
  236. package/dist/services/form-layout-source/image-review.js +266 -0
  237. package/dist/services/form-layout-source/image-review.js.map +1 -0
  238. package/dist/services/form-layout-source/image-style.d.ts +16 -0
  239. package/dist/services/form-layout-source/image-style.d.ts.map +1 -0
  240. package/dist/services/form-layout-source/image-style.js +539 -0
  241. package/dist/services/form-layout-source/image-style.js.map +1 -0
  242. package/dist/services/form-layout-source/json.d.ts +3 -0
  243. package/dist/services/form-layout-source/json.d.ts.map +1 -0
  244. package/dist/services/form-layout-source/json.js +33 -0
  245. package/dist/services/form-layout-source/json.js.map +1 -0
  246. package/dist/services/form-layout-source/presentation.d.ts +23 -0
  247. package/dist/services/form-layout-source/presentation.d.ts.map +1 -0
  248. package/dist/services/form-layout-source/presentation.js +174 -0
  249. package/dist/services/form-layout-source/presentation.js.map +1 -0
  250. package/dist/services/form-layout-source/preview.d.ts +4 -0
  251. package/dist/services/form-layout-source/preview.d.ts.map +1 -0
  252. package/dist/services/form-layout-source/preview.js +49 -0
  253. package/dist/services/form-layout-source/preview.js.map +1 -0
  254. package/dist/services/form-layout-source/schema.d.ts +20 -0
  255. package/dist/services/form-layout-source/schema.d.ts.map +1 -0
  256. package/dist/services/form-layout-source/schema.js +149 -0
  257. package/dist/services/form-layout-source/schema.js.map +1 -0
  258. package/dist/services/form-layout-source/source-grid.d.ts +8 -0
  259. package/dist/services/form-layout-source/source-grid.d.ts.map +1 -0
  260. package/dist/services/form-layout-source/source-grid.js +61 -0
  261. package/dist/services/form-layout-source/source-grid.js.map +1 -0
  262. package/dist/services/form-layout-source/types.d.ts +242 -0
  263. package/dist/services/form-layout-source/types.d.ts.map +1 -0
  264. package/dist/services/form-layout-source/types.js +2 -0
  265. package/dist/services/form-layout-source/types.js.map +1 -0
  266. package/dist/services/form-layout-source/verify.d.ts +14 -0
  267. package/dist/services/form-layout-source/verify.d.ts.map +1 -0
  268. package/dist/services/form-layout-source/verify.js +226 -0
  269. package/dist/services/form-layout-source/verify.js.map +1 -0
  270. package/dist/services/form-list-search-group.d.ts +17 -2
  271. package/dist/services/form-list-search-group.d.ts.map +1 -1
  272. package/dist/services/form-list-search-group.js +29 -12
  273. package/dist/services/form-list-search-group.js.map +1 -1
  274. package/dist/services/form-list-search.d.ts.map +1 -1
  275. package/dist/services/form-list-search.js +4 -0
  276. package/dist/services/form-list-search.js.map +1 -1
  277. package/dist/services/form-list-stats.d.ts.map +1 -1
  278. package/dist/services/form-list-stats.js +9 -2
  279. package/dist/services/form-list-stats.js.map +1 -1
  280. package/dist/services/form-message.d.ts +26 -7
  281. package/dist/services/form-message.d.ts.map +1 -1
  282. package/dist/services/form-message.js +52 -5
  283. package/dist/services/form-message.js.map +1 -1
  284. package/dist/services/form-obj-meta.d.ts +72 -0
  285. package/dist/services/form-obj-meta.d.ts.map +1 -0
  286. package/dist/services/form-obj-meta.js +103 -0
  287. package/dist/services/form-obj-meta.js.map +1 -0
  288. package/dist/services/form-permission-archive.d.ts +9 -1
  289. package/dist/services/form-permission-archive.d.ts.map +1 -1
  290. package/dist/services/form-permission-archive.js +38 -22
  291. package/dist/services/form-permission-archive.js.map +1 -1
  292. package/dist/services/form-view-populate.d.ts.map +1 -1
  293. package/dist/services/form-view-populate.js +7 -0
  294. package/dist/services/form-view-populate.js.map +1 -1
  295. package/dist/services/icon-path.d.ts +70 -0
  296. package/dist/services/icon-path.d.ts.map +1 -0
  297. package/dist/services/icon-path.js +80 -0
  298. package/dist/services/icon-path.js.map +1 -0
  299. package/dist/services/matrix-condition.d.ts +161 -0
  300. package/dist/services/matrix-condition.d.ts.map +1 -0
  301. package/dist/services/matrix-condition.js +403 -0
  302. package/dist/services/matrix-condition.js.map +1 -0
  303. package/dist/services/menu-catalog.d.ts +33 -0
  304. package/dist/services/menu-catalog.d.ts.map +1 -1
  305. package/dist/services/menu-catalog.js +56 -0
  306. package/dist/services/menu-catalog.js.map +1 -1
  307. package/dist/services/permission-entity.d.ts +55 -0
  308. package/dist/services/permission-entity.d.ts.map +1 -0
  309. package/dist/services/permission-entity.js +79 -0
  310. package/dist/services/permission-entity.js.map +1 -0
  311. package/dist/services/validate-help.d.ts +25 -0
  312. package/dist/services/validate-help.d.ts.map +1 -0
  313. package/dist/services/validate-help.js +29 -0
  314. package/dist/services/validate-help.js.map +1 -0
  315. package/dist/services/workflow-assign-flow.d.ts.map +1 -1
  316. package/dist/services/workflow-assign-flow.js.map +1 -1
  317. package/dist/services/workflow-function-management.d.ts +123 -0
  318. package/dist/services/workflow-function-management.d.ts.map +1 -0
  319. package/dist/services/workflow-function-management.js +425 -0
  320. package/dist/services/workflow-function-management.js.map +1 -0
  321. package/dist/services/workflow-matrix-rule.d.ts +34 -0
  322. package/dist/services/workflow-matrix-rule.d.ts.map +1 -0
  323. package/dist/services/workflow-matrix-rule.js +94 -0
  324. package/dist/services/workflow-matrix-rule.js.map +1 -0
  325. package/dist/services/workflow-opinion-settings.d.ts +67 -0
  326. package/dist/services/workflow-opinion-settings.d.ts.map +1 -0
  327. package/dist/services/workflow-opinion-settings.js +328 -0
  328. package/dist/services/workflow-opinion-settings.js.map +1 -0
  329. package/package.json +3 -1
  330. package/skill-docs/SKILL.md +15 -6
  331. package/skill-docs/_catalog.md +4 -0
  332. package/skill-docs/actionflows/references/components/calendar/MeetingCreate.md +2 -0
  333. package/skill-docs/actionflows/references/components/document/DocumentSave.md +17 -17
  334. package/skill-docs/actionflows/references/components/workflow/ApproveCompletelyDelete.md +29 -0
  335. package/skill-docs/actionflows/references/components/workflow/ApproveDelete.md +2 -2
  336. package/skill-docs/assets/schemas/image-style-observation.schema.json +1355 -0
  337. package/skill-docs/references/common/guide-plan-template.md +3 -0
  338. package/skill-docs/references/common/ref-cli-commands.md +77 -26
  339. package/skill-docs/references/ebuilder-designer/guide-designer-components.md +9 -0
  340. package/skill-docs/references/form/guide-create-form.md +2 -0
  341. package/skill-docs/references/form/guide-field-linkage.md +140 -55
  342. package/skill-docs/references/form/guide-form-archive-permission.md +55 -2
  343. package/skill-docs/references/form/guide-form-association.md +13 -0
  344. package/skill-docs/references/form/guide-form-button.md +87 -0
  345. package/skill-docs/references/form/guide-form-layout-planning.md +6 -0
  346. package/skill-docs/references/form/guide-form-layout-source.md +366 -0
  347. package/skill-docs/references/form/guide-form-message.md +19 -2
  348. package/skill-docs/references/form/guide-form-view.md +24 -4
  349. package/skill-docs/references/form/guide-formula-linkage.md +86 -12
  350. package/skill-docs/references/workflow/guide-function-management.md +154 -0
  351. package/skill-docs/references/workflow/guide-opinion-settings.md +126 -0
  352. package/skill-docs/references/workflow/guide-workflow.md +22 -6
@@ -0,0 +1,132 @@
1
+ import { AuthSession } from '../core/auth.js';
2
+ import { ApiClient } from '../core/client.js';
3
+ import { readButtonContext } from '../services/form-button-context.js';
4
+ import { saveButtonState, assertUntouched } from '../services/form-button-save.js';
5
+ import { buildPermissionEntry, allPermissionEntry, permissionLabel, permissionSignature, hasPermission, findPermission, } from '../services/form-button-permission.js';
6
+ import { resolvePermissionSubject } from '../services/form-button-org.js';
7
+ export function registerFormButtonPermissionCommands(btnCmd, program) {
8
+ btnCmd.command('permission')
9
+ .description('查看/配置按钮权限(哪些人能看见并点击这个按钮);不带任何选项时列出')
10
+ .argument('<objId>', '表单 objId')
11
+ .argument('<appId>', '应用 ID')
12
+ .argument('<buttonId>', '按钮 ID')
13
+ .option('--add-all', '加「全体」')
14
+ .option('--add-company <分部>', '加「分部」(名称或 ID)')
15
+ .option('--add-department <部门>', '加「部门」(名称或 ID)')
16
+ .option('--add-people <人员>', '加「人员」(姓名或 ID)')
17
+ .option('--contain-extra', '本次加入的部门/分部含下级')
18
+ .option('--remove <序号|id>', '删除一条:列表里的序号(从 1 起)或权限 id,可逗号分隔')
19
+ .option('--clear', '清空全部按钮权限')
20
+ .option('--json', 'JSON 输出')
21
+ .action(async (objId, appId, buttonId, o) => {
22
+ const opts = program.opts();
23
+ const auth = await AuthSession.fromOptions(opts);
24
+ if (!auth) {
25
+ process.exitCode = 1;
26
+ return;
27
+ }
28
+ const client = new ApiClient(auth);
29
+ const baseUrl = auth.getBaseUrl();
30
+ const isJson = Boolean(o.json || opts.json);
31
+ try {
32
+ const context = await readButtonContext(client, baseUrl, appId, objId, buttonId);
33
+ const current = context.details.permissions;
34
+ const adding = Boolean(o.addAll || o.addCompany || o.addDepartment || o.addPeople);
35
+ const editing = adding || o.remove !== undefined || Boolean(o.clear);
36
+ if (!editing) {
37
+ if (isJson) {
38
+ console.log(JSON.stringify(current, null, 2));
39
+ return;
40
+ }
41
+ if (!current.length) {
42
+ console.log('当前没有按钮权限配置');
43
+ return;
44
+ }
45
+ console.log(`按钮权限(${current.length} 条):`);
46
+ current.forEach((p, i) => console.log(` ${i + 1}. ${permissionLabel(p)} [${p.id ?? '-'}] containExtra=${p.containExtra ?? '-'}`));
47
+ return;
48
+ }
49
+ // 系统按钮由平台判定能不能配权限(自定义按钮恒为 true)。
50
+ if (context.details.canSetButtonPermission === false) {
51
+ throw new Error('该按钮不支持配置按钮权限(平台标记 canSetButtonPermission=false)');
52
+ }
53
+ let next = [...current];
54
+ const changes = [];
55
+ const removedSignatures = [];
56
+ if (o.clear) {
57
+ if (adding || o.remove !== undefined)
58
+ throw new Error('--clear 不能与 --add-*/--remove 同用');
59
+ removedSignatures.push(...current.map(permissionSignature));
60
+ next = [];
61
+ changes.push('清空全部权限');
62
+ }
63
+ else {
64
+ if (o.remove !== undefined) {
65
+ for (const sel of o.remove.split(',').map((s) => s.trim()).filter(Boolean)) {
66
+ const { entry, index } = findPermission(next, sel);
67
+ removedSignatures.push(permissionSignature(entry));
68
+ changes.push(`- ${permissionLabel(entry)}`);
69
+ next.splice(index, 1);
70
+ }
71
+ }
72
+ // 固定顺序:全体 → 分部 → 部门 → 人员(commander 不保留不同选项之间的先后)。
73
+ // 授权对象按「名称或 ID」解析成 content+contentSpan —— 拆成两步是为了先解析再写,
74
+ // 解析失败就整条命令不落库。
75
+ const adds = [
76
+ { label: '全体', value: o.addAll ? 'all' : undefined },
77
+ { kind: 'company', label: '分部', value: o.addCompany },
78
+ { kind: 'department', label: '部门', value: o.addDepartment },
79
+ { kind: 'resource', label: '人员', value: o.addPeople },
80
+ ];
81
+ for (const item of adds) {
82
+ if (item.value === undefined)
83
+ continue;
84
+ let built;
85
+ if (item.kind === undefined) {
86
+ built = allPermissionEntry();
87
+ }
88
+ else {
89
+ const subject = await resolvePermissionSubject(client, baseUrl, item.kind, item.value);
90
+ built = buildPermissionEntry({
91
+ permissionType: item.kind, content: subject.id, contentSpan: subject.name,
92
+ containExtra: o.containExtra,
93
+ });
94
+ }
95
+ if (hasPermission(next, built)) {
96
+ changes.push(`= ${permissionLabel(built)}(已存在,跳过)`);
97
+ continue;
98
+ }
99
+ next.push(built);
100
+ changes.push(`+ ${permissionLabel(built)}`);
101
+ }
102
+ }
103
+ const statePatch = { permissionDatas: next };
104
+ const { after } = await saveButtonState(client, baseUrl, appId, objId, context, statePatch);
105
+ assertUntouched(context, after, statePatch); // 只改权限时,动作不能被顺手删掉
106
+ // 回读校验:要加的一条都不能少、要删的一条都不能还在(平台自己补的条目不算错)。
107
+ const gotSignatures = new Set(after.details.permissions.map(permissionSignature));
108
+ const missing = next.filter((p) => !gotSignatures.has(permissionSignature(p)));
109
+ if (missing.length) {
110
+ throw new Error(`已提交,但回读少了 ${missing.length} 条权限:${missing.map(permissionLabel).join('、')}`);
111
+ }
112
+ const stillThere = removedSignatures.filter((sig) => gotSignatures.has(sig));
113
+ if (stillThere.length)
114
+ throw new Error(`已提交,但要删的 ${stillThere.length} 条权限回读仍在`);
115
+ if (isJson) {
116
+ console.log(JSON.stringify({
117
+ success: true, verified: true, buttonId, changes, permissions: after.details.permissions,
118
+ }, null, 2));
119
+ }
120
+ else {
121
+ console.log(`按钮权限已更新并回读校验: [${buttonId}] 共 ${after.details.permissions.length} 条`);
122
+ for (const c of changes)
123
+ console.log(` ${c}`);
124
+ }
125
+ }
126
+ catch (error) {
127
+ console.error(error?.message || error);
128
+ process.exitCode = 1;
129
+ }
130
+ });
131
+ }
132
+ //# sourceMappingURL=form-button-permission-cmd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form-button-permission-cmd.js","sourceRoot":"","sources":["../../src/commands/form-button-permission-cmd.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerFormButtonPropsCommands(btnCmd: Command, program: Command): void;
3
+ //# sourceMappingURL=form-button-props-cmd.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form-button-props-cmd.d.ts","sourceRoot":"","sources":["../../src/commands/form-button-props-cmd.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkGpC,wBAAgB,+BAA+B,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAiJvF"}
@@ -0,0 +1,236 @@
1
+ import { AuthSession } from '../core/auth.js';
2
+ import { ApiClient } from '../core/client.js';
3
+ import { readButtonContext } from '../services/form-button-context.js';
4
+ import { saveButtonState, buildButtonSavePayload, assertUntouched } from '../services/form-button-save.js';
5
+ import { buildIconPath, parseIconPath, iconSignature, buildLogMessage } from '../services/form-button-props.js';
6
+ import { encodeRootdata, parseRootdata, semanticEqualRootdata } from '../services/form-button-condition.js';
7
+ import { fetchFields, buildConditionTree, appendConditions, removeConditions, condLeaves, relationCode, renderCond, parseConditionInput, validateConditionFields, } from './form-list-utils.js';
8
+ /** 算一遍「数据过滤」要写成什么明文树,并回条件条数。语义与 `form list-filter` 完全一致。 */
9
+ async function editFilter(client, baseUrl, appId, objId, currentTree, o) {
10
+ const countOf = (tree) => (tree ? condLeaves(tree).length : 0);
11
+ if (o.clearFilter) {
12
+ if (o.add !== undefined || o.replace !== undefined || o.remove !== undefined || o.relation !== undefined) {
13
+ throw new Error('--clear-filter 不能与 --add/--replace/--remove/--relation 同用');
14
+ }
15
+ return { plain: '', count: 0 };
16
+ }
17
+ if (o.add !== undefined && o.replace !== undefined) {
18
+ throw new Error('--add 与 --replace 只能给一个:--add 是叠加,--replace 是整体覆盖');
19
+ }
20
+ if (o.add !== undefined || o.replace !== undefined) {
21
+ const nodes = parseConditionInput((o.add ?? o.replace));
22
+ const fields = await fetchFields(client, baseUrl, objId);
23
+ await validateConditionFields(client, baseUrl, appId, objId, nodes, fields);
24
+ if (o.replace !== undefined) {
25
+ const plain = buildConditionTree(nodes, fields, objId, true, { relation: o.relation });
26
+ return { plain, count: countOf(JSON.parse(plain)) };
27
+ }
28
+ const merged = appendConditions(currentTree, nodes, fields, objId, { relation: o.relation });
29
+ return { plain: JSON.stringify(merged), count: countOf(merged) };
30
+ }
31
+ if (o.remove !== undefined) {
32
+ const { filter, removed } = removeConditions(currentTree, o.remove.split(','));
33
+ if (!removed)
34
+ throw new Error(`没有匹配的数据过滤条件可摘(--remove ${o.remove})`);
35
+ return { plain: JSON.stringify(filter), count: countOf(filter) };
36
+ }
37
+ // 只调顶层关系
38
+ if (!currentTree?.datas?.length)
39
+ throw new Error('当前没有数据过滤条件,--relation 无从设置');
40
+ currentTree.relationship = relationCode(o.relation, String(currentTree.relationship ?? '1'));
41
+ currentTree.rootStr = renderCond(currentTree);
42
+ return { plain: JSON.stringify(currentTree), count: countOf(currentTree) };
43
+ }
44
+ /**
45
+ * 回读校验。
46
+ *
47
+ * ⚠ 一律**按语义比**,不逐字比 JSON:平台会补 `style.fillType`、`condition.moduleId`、
48
+ * 重排条件树的 key/rootStr(教训同「count 统计项的 fieldId 会被平台改写」)。
49
+ */
50
+ function verifyProps(after, patch, logMessage) {
51
+ const got = after.button;
52
+ const strict = (key, actual, label) => {
53
+ if (String(actual ?? '') !== String(patch[key] ?? '')) {
54
+ throw new Error(`已提交,但回读不一致(${label}):期望 ${JSON.stringify(patch[key])},回读 ${JSON.stringify(actual)}`);
55
+ }
56
+ };
57
+ if ('name' in patch)
58
+ strict('name', got.name, '名称');
59
+ if ('tipsMessage' in patch)
60
+ strict('tipsMessage', got.tipsMessage, '提示内容');
61
+ if ('buttonDescription' in patch)
62
+ strict('buttonDescription', got.buttonDescription, '备注');
63
+ if ('iconPath' in patch && iconSignature(got.iconPath) !== iconSignature(String(patch.iconPath))) {
64
+ throw new Error('已提交,但图标回读不一致');
65
+ }
66
+ if ('onlyIcon' in patch && Number(got.onlyIcon ?? 0) !== Number(patch.onlyIcon)) {
67
+ throw new Error('已提交,但「只显示图标」回读不一致');
68
+ }
69
+ if ('conditionEnable' in patch && Number(got.conditionEnable ?? 0) !== Number(patch.conditionEnable)) {
70
+ throw new Error('已提交,但数据过滤开关回读不一致');
71
+ }
72
+ if ('condition' in patch
73
+ && !semanticEqualRootdata(patch.condition.rootdata, got.condition?.rootdata)) {
74
+ throw new Error('已提交,但数据过滤条件回读不一致');
75
+ }
76
+ if ('disableCondition' in patch
77
+ && !semanticEqualRootdata(patch.disableCondition.rootdata, got.disableCondition?.rootdata)) {
78
+ throw new Error('已提交,但禁用条件回读不一致');
79
+ }
80
+ if (logMessage && Number(after.details.logMessage?.enableLog ?? -1) !== Number(logMessage.enableLog)) {
81
+ throw new Error('已提交,但点击日志开关回读不一致');
82
+ }
83
+ }
84
+ export function registerFormButtonPropsCommands(btnCmd, program) {
85
+ btnCmd.command('set')
86
+ .description('修改按钮基础属性:名称 / 提示内容 / 备注 / 图标 / 点击日志 / 数据过滤 —— 已有的动作与权限原样保留')
87
+ .argument('<objId>', '表单 objId')
88
+ .argument('<appId>', '应用 ID')
89
+ .argument('<buttonId>', '按钮 ID')
90
+ .option('--name <名称>', '按钮名称')
91
+ .option('--tips <文本>', '提示内容(按钮上的说明文字)')
92
+ .option('--desc <文本>', '备注')
93
+ .option('--icon <图标名>', '图标名,如 Icon-N-Offer-management(不带 # 会自动补)')
94
+ .option('--icon-color <色值>', '图标颜色,缺省沿用现有/#999')
95
+ .option('--icon-bg <色值>', '图标背景色,缺省沿用现有(空=无背景)')
96
+ .option('--icon-display <line|fill>', '图标描边(line)或填充(fill)')
97
+ .option('--icon-none', '清空图标')
98
+ .option('--only-icon', '只显示图标(不显示文字)')
99
+ .option('--no-only-icon', '显示「图标 + 文字」')
100
+ .option('--log', '开启点击日志')
101
+ .option('--no-log', '关闭点击日志')
102
+ .option('--log-message <文本>', '日志文案(缺省 点击了“<按钮名>”)')
103
+ .option('--add <json|@file>', '数据过滤:**叠加**条件(同 form list-filter --add)')
104
+ .option('--replace <json|@file>', '数据过滤:整体覆盖条件')
105
+ .option('--remove <fieldId>', '数据过滤:按字段 ID 摘条件(逗号分隔)')
106
+ .option('--relation <and|or>', '数据过滤:顶层关系')
107
+ .option('--clear-filter', '清空数据过滤(同时把开关置 0)')
108
+ .option('--disable-condition <json|@file>', '禁用条件:整体覆盖')
109
+ .option('--clear-disable-condition', '清空禁用条件')
110
+ .option('--dry-run', '只打印将要提交的报文,不保存')
111
+ .option('--json', 'JSON 输出')
112
+ .action(async (objId, appId, buttonId, o) => {
113
+ const opts = program.opts();
114
+ const auth = await AuthSession.fromOptions(opts);
115
+ if (!auth) {
116
+ process.exitCode = 1;
117
+ return;
118
+ }
119
+ const client = new ApiClient(auth);
120
+ const baseUrl = auth.getBaseUrl();
121
+ const isJson = Boolean(o.json || opts.json);
122
+ try {
123
+ const context = await readButtonContext(client, baseUrl, appId, objId, buttonId);
124
+ const { button } = context;
125
+ if (button.system === 1)
126
+ throw new Error('系统按钮不支持修改(只支持自定义按钮)');
127
+ const patch = {};
128
+ const changes = [];
129
+ if (o.name !== undefined) {
130
+ patch.name = o.name;
131
+ changes.push(`名称→${o.name}`);
132
+ }
133
+ if (o.tips !== undefined) {
134
+ patch.tipsMessage = o.tips;
135
+ changes.push('提示内容');
136
+ }
137
+ if (o.desc !== undefined) {
138
+ patch.buttonDescription = o.desc;
139
+ changes.push('备注');
140
+ }
141
+ // —— 图标 ——
142
+ const iconStyleTouched = o.iconColor !== undefined || o.iconBg !== undefined || o.iconDisplay !== undefined;
143
+ if (o.iconNone && (o.icon !== undefined || iconStyleTouched)) {
144
+ throw new Error('--icon-none 不能与 --icon/--icon-color/--icon-bg/--icon-display 同用');
145
+ }
146
+ if (o.iconNone) {
147
+ patch.iconPath = '';
148
+ changes.push('清空图标');
149
+ }
150
+ else if (o.icon !== undefined || iconStyleTouched) {
151
+ if (o.iconDisplay !== undefined && !['line', 'fill'].includes(String(o.iconDisplay))) {
152
+ throw new Error('--icon-display 只支持 line / fill');
153
+ }
154
+ const current = parseIconPath(button.iconPath);
155
+ if (o.icon === undefined && !current) {
156
+ throw new Error('当前按钮没有图标,请用 --icon 指定图标名(只改颜色/描边得先有图标)');
157
+ }
158
+ patch.iconPath = buildIconPath({
159
+ path: o.icon ?? current.path,
160
+ color: o.iconColor ?? current?.color,
161
+ bgColor: o.iconBg ?? current?.bgColor,
162
+ display: o.iconDisplay ?? current?.display,
163
+ });
164
+ changes.push('图标');
165
+ }
166
+ if (o.onlyIcon !== undefined) {
167
+ patch.onlyIcon = o.onlyIcon ? 1 : 0;
168
+ changes.push(o.onlyIcon ? '只显示图标' : '图标+文字');
169
+ }
170
+ // —— 数据过滤 ——
171
+ const filterTouched = o.add !== undefined || o.replace !== undefined || o.remove !== undefined
172
+ || Boolean(o.clearFilter) || o.relation !== undefined;
173
+ if (filterTouched) {
174
+ const currentTree = parseRootdata(button.condition?.rootdata);
175
+ const { plain, count } = await editFilter(client, baseUrl, appId, objId, currentTree, o);
176
+ patch.condition = { rootdata: encodeRootdata(plain) };
177
+ patch.conditionEnable = plain ? 1 : 0;
178
+ changes.push(plain ? `数据过滤(${count} 条)` : '清空数据过滤');
179
+ }
180
+ // —— 禁用条件 ——
181
+ if (o.clearDisableCondition && o.disableCondition !== undefined) {
182
+ throw new Error('--clear-disable-condition 不能与 --disable-condition 同用');
183
+ }
184
+ if (o.clearDisableCondition) {
185
+ patch.disableCondition = { rootdata: '' };
186
+ changes.push('清空禁用条件');
187
+ }
188
+ else if (o.disableCondition !== undefined) {
189
+ const nodes = parseConditionInput(o.disableCondition);
190
+ const fields = await fetchFields(client, baseUrl, objId);
191
+ await validateConditionFields(client, baseUrl, appId, objId, nodes, fields);
192
+ const plain = buildConditionTree(nodes, fields, objId, true);
193
+ if (!plain)
194
+ throw new Error('禁用条件为空');
195
+ patch.disableCondition = { rootdata: encodeRootdata(plain) };
196
+ changes.push('禁用条件');
197
+ }
198
+ // —— 点击日志 ——
199
+ let logMessage;
200
+ if (o.log !== undefined || o.logMessage !== undefined) {
201
+ const previous = context.details.logMessage;
202
+ const enable = o.log === undefined ? (previous?.enableLog ? 1 : 0) : (o.log ? 1 : 0);
203
+ logMessage = buildLogMessage(enable, String(patch.name ?? button.name ?? ''), o.logMessage, previous?.message);
204
+ changes.push(o.logMessage !== undefined ? '日志文案' : (enable ? '开启点击日志' : '关闭点击日志'));
205
+ }
206
+ if (!changes.length) {
207
+ throw new Error('没有指定任何要改的项(--name / --tips / --desc / --icon / --only-icon / --log / --add …)');
208
+ }
209
+ const statePatch = { button: patch };
210
+ if (logMessage)
211
+ statePatch.logMessage = logMessage;
212
+ if (o.dryRun) {
213
+ const payload = buildButtonSavePayload(context, statePatch);
214
+ console.log(isJson
215
+ ? JSON.stringify(payload, null, 2)
216
+ : `(--dry-run)将修改:${changes.join(' / ')}`);
217
+ return;
218
+ }
219
+ const { after } = await saveButtonState(client, baseUrl, appId, objId, context, statePatch);
220
+ assertUntouched(context, after, statePatch); // 只改属性时,动作/权限不能被顺手删掉
221
+ verifyProps(after, patch, logMessage);
222
+ if (isJson) {
223
+ console.log(JSON.stringify({ success: true, verified: true, buttonId, changes }, null, 2));
224
+ }
225
+ else {
226
+ console.log(`按钮已更新并回读校验: [${buttonId}] ${String(after.button.name ?? '')}`);
227
+ console.log(` ${changes.join(' / ')}`);
228
+ }
229
+ }
230
+ catch (error) {
231
+ console.error(error?.message || error);
232
+ process.exitCode = 1;
233
+ }
234
+ });
235
+ }
236
+ //# sourceMappingURL=form-button-props-cmd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form-button-props-cmd.js","sourceRoot":"","sources":["../../src/commands/form-button-props-cmd.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"form-button.d.ts","sourceRoot":"","sources":["../../src/commands/form-button.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAqbhF"}
1
+ {"version":3,"file":"form-button.d.ts","sourceRoot":"","sources":["../../src/commands/form-button.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAcpC,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CA+bhF"}
@@ -1,8 +1,14 @@
1
1
  import { AuthSession } from '../core/auth.js';
2
2
  import { ApiClient } from '../core/client.js';
3
3
  import { readButtonContext, buildButtonPosition, resolveButtonView, parsePositions, saveButtonPosition } from '../services/form-button-position.js';
4
- import { buildPlatformButtonAction, mappingInputs, verifyButtonAction } from '../services/form-button-action.js';
4
+ import { buildPlatformButtonAction, buildUrlButtonAction, mappingInputs, verifyButtonAction } from '../services/form-button-action.js';
5
5
  import { AssociationService, buildUrlActionParams } from '../services/form-association.js';
6
+ import { buildIconPath, buildLogMessage } from '../services/form-button-props.js';
7
+ import { encodeRootdata } from '../services/form-button-condition.js';
8
+ import { fetchFields, buildConditionTree, parseConditionInput, validateConditionFields } from './form-list-utils.js';
9
+ import { registerFormButtonPropsCommands } from './form-button-props-cmd.js';
10
+ import { registerFormButtonPermissionCommands } from './form-button-permission-cmd.js';
11
+ import { registerFormButtonActionCommands } from './form-button-actions-cmd.js';
6
12
  export function registerFormButtonCommands(form, program) {
7
13
  const btnCmd = form.command('button').description('表单台账按钮管理');
8
14
  btnCmd.command('list')
@@ -51,6 +57,16 @@ export function registerFormButtonCommands(form, program) {
51
57
  .option('--open-type <type>', '打开方式: 1=弹窗 / 2=当前页 / 3=新窗口', '1')
52
58
  .option('--position <pos...>', '显示位置(可多个):右上/右上下拉/行上/行末下拉(缺省右上)')
53
59
  .option('--view <view...>', '显示视图(可多个):视图 ID/唯一名称/新建/编辑/显示;台账仅在唯一时可用')
60
+ .option('--tips <文本>', '提示内容')
61
+ .option('--desc <文本>', '备注')
62
+ .option('--icon <图标名>', '图标名,如 Icon-N-Offer-management(不带 # 会自动补)')
63
+ .option('--icon-color <色值>', '图标颜色(缺省 #999)')
64
+ .option('--icon-bg <色值>', '图标背景色')
65
+ .option('--icon-display <line|fill>', '图标描边(line)或填充(fill)')
66
+ .option('--only-icon', '只显示图标(不显示文字)')
67
+ .option('--no-log', '关闭点击日志(缺省开启「点击了“<按钮名>”」)')
68
+ .option('--log-message <文本>', '点击日志文案')
69
+ .option('--data-filter <json|@file>', '数据过滤条件,结构同 form button set --replace')
54
70
  .option('--page-type <type>', 'URL 动作的页面类型(缺省 LINK —— 平台自己的设计器对 URL 路径用的就是这个;'
55
71
  + 'CUSTOMPAGE 是「自定义页面」类型,pageId 要页面 id,装 URL 路径点不开)')
56
72
  .action(async (objId, appId, name, cmdOpts) => {
@@ -99,27 +115,65 @@ export function registerFormButtonCommands(form, program) {
99
115
  process.exitCode = 1;
100
116
  return;
101
117
  }
118
+ // 基础属性按需写。**不传的键与加这些参数之前逐字一致**(含 onlyIcon:0 / conditionEnable:0)。
119
+ const button = {
120
+ objId,
121
+ name,
122
+ buttonType: 'CUSTOM',
123
+ enable: 1,
124
+ showPosition,
125
+ showPositionSpan,
126
+ conditionEnable: 0,
127
+ condition: { rootdata: '' },
128
+ disableCondition: { rootdata: '' },
129
+ onlyIcon: cmdOpts.onlyIcon ? 1 : 0,
130
+ operateType: '1',
131
+ sysParams: '[]',
132
+ enableHelp: 0,
133
+ listDataFilterType: 'LIST',
134
+ };
135
+ if (cmdOpts.tips !== undefined)
136
+ button.tipsMessage = cmdOpts.tips;
137
+ if (cmdOpts.desc !== undefined)
138
+ button.buttonDescription = cmdOpts.desc;
139
+ if (cmdOpts.icon !== undefined) {
140
+ if (cmdOpts.iconDisplay !== undefined && !['line', 'fill'].includes(cmdOpts.iconDisplay)) {
141
+ console.error('--icon-display 只支持 line / fill');
142
+ process.exitCode = 1;
143
+ return;
144
+ }
145
+ button.iconPath = buildIconPath({
146
+ path: cmdOpts.icon, color: cmdOpts.iconColor, bgColor: cmdOpts.iconBg,
147
+ display: cmdOpts.iconDisplay,
148
+ });
149
+ }
150
+ else if (cmdOpts.iconColor !== undefined || cmdOpts.iconBg !== undefined || cmdOpts.iconDisplay !== undefined) {
151
+ console.error('--icon-color/--icon-bg/--icon-display 需要同时给 --icon');
152
+ process.exitCode = 1;
153
+ return;
154
+ }
155
+ if (cmdOpts.dataFilter !== undefined) {
156
+ try {
157
+ const nodes = parseConditionInput(cmdOpts.dataFilter);
158
+ const fields = await fetchFields(client, baseUrl, objId);
159
+ await validateConditionFields(client, baseUrl, appId, objId, nodes, fields);
160
+ const plain = buildConditionTree(nodes, fields, objId, true);
161
+ button.condition = { rootdata: encodeRootdata(plain) };
162
+ button.conditionEnable = plain ? 1 : 0;
163
+ }
164
+ catch (error) {
165
+ console.error(error.message);
166
+ process.exitCode = 1;
167
+ return;
168
+ }
169
+ }
102
170
  const payload = {
103
- button: {
104
- objId,
105
- name,
106
- buttonType: 'CUSTOM',
107
- enable: 1,
108
- showPosition,
109
- showPositionSpan,
110
- conditionEnable: 0,
111
- condition: { rootdata: '' },
112
- disableCondition: { rootdata: '' },
113
- onlyIcon: 0,
114
- operateType: '1',
115
- sysParams: '[]',
116
- enableHelp: 0,
117
- listDataFilterType: 'LIST',
118
- },
171
+ button,
119
172
  actionDatas: [],
120
173
  permissionDatas: [],
121
174
  customTips: { tipsCustomApi: '' },
122
- logMessage: { enableLog: 1, message: '点击了"' + name + '"' },
175
+ // 日志文案与 form button set 统一走 buildLogMessage(中文引号,与设计器一致)
176
+ logMessage: buildLogMessage(cmdOpts.log === false ? 0 : 1, name, cmdOpts.logMessage),
123
177
  };
124
178
  if (cmdOpts.url) {
125
179
  // Fix MSYS path mangling: /sp/... → D:/Program Files/Git/sp/...
@@ -146,42 +200,8 @@ export function registerFormButtonCommands(form, program) {
146
200
  return;
147
201
  }
148
202
  }
149
- const actionUrl = JSON.stringify({
150
- name: '',
151
- openMode: '0',
152
- microCode: '',
153
- isRelationCustomPage: false,
154
- page: { pageType, pageId: url, pageName: url },
155
- params,
156
- });
157
- payload.actionDatas.push({
158
- name: url,
159
- conditionTxt: '',
160
- id: '-' + Date.now(),
161
- enable: 1,
162
- actionType: 'openpage',
163
- buttonId: '',
164
- windowSize: 30,
165
- executeSelectedDatas: 0,
166
- url: actionUrl,
167
- openType: cmdOpts.openType || '1',
168
- index: 0,
169
- interfacePath: '',
170
- desc: '',
171
- urlType: '0',
172
- urlFieldId: '',
173
- interfaceType: '',
174
- confirmTitle: '',
175
- ecode: '',
176
- littlecardName: '',
177
- littlecardJson: '',
178
- dataSource: '2',
179
- fieldAssignType: '[]',
180
- confirmContent: '',
181
- confirmTrue: '',
182
- confirmFalse: '',
183
- enableLog: 0,
184
- });
203
+ // 动作形状统一由 service 产出(与 `form button action` 共用同一份,别再在命令里内联拼)
204
+ payload.actionDatas.push(buildUrlButtonAction({ url, pageType, params, openType: cmdOpts.openType }));
185
205
  }
186
206
  else if (cmdOpts.openView || cmdOpts.openLayout || cmdOpts.startWorkflow) {
187
207
  try {
@@ -233,7 +253,7 @@ export function registerFormButtonCommands(form, program) {
233
253
  }
234
254
  });
235
255
  btnCmd.command('action-set')
236
- .description('设置已有按钮的单一打开页面动作(视图/表单布局/流程),保留按钮位置和权限')
256
+ .description('[已废弃,改用 form button action] 设置已有按钮的单一打开页面动作(视图/表单布局/流程),保留按钮位置和权限')
237
257
  .argument('<objId>', '表单 objId').argument('<appId>', '应用 ID').argument('<buttonId>', '按钮 ID')
238
258
  .option('--open-view <view>', '打开平台视图(名称或 viewId)')
239
259
  .option('--open-layout <form>', '打开目标表单布局(名称或 objId)')
@@ -249,6 +269,8 @@ export function registerFormButtonCommands(form, program) {
249
269
  process.exitCode = 1;
250
270
  return;
251
271
  }
272
+ console.error('[deprecated] action-set 已被 form button action 取代,'
273
+ + '例:form button action <objId> <appId> <buttonId> --clear --add-view <视图>');
252
274
  const client = new ApiClient(auth);
253
275
  const base = auth.getBaseUrl();
254
276
  const context = await readButtonContext(client, base, appId, objId, buttonId);
@@ -459,5 +481,10 @@ export function registerFormButtonCommands(form, program) {
459
481
  process.exit(1);
460
482
  }
461
483
  });
484
+ // 基础属性(名称/提示内容/备注/图标/点击日志/数据过滤)、按钮权限、动作,各自一个子命令组:
485
+ // 单独放文件,不把这几坨塞进本文件(本文件已经很长了)。
486
+ registerFormButtonPropsCommands(btnCmd, program);
487
+ registerFormButtonPermissionCommands(btnCmd, program);
488
+ registerFormButtonActionCommands(btnCmd, program);
462
489
  }
463
490
  //# sourceMappingURL=form-button.js.map