weaver-e10-builder 1.5.15 → 1.6.0

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 (300) hide show
  1. package/dist/commands/auth.d.ts.map +1 -1
  2. package/dist/commands/auth.js +4 -2
  3. package/dist/commands/auth.js.map +1 -1
  4. package/dist/commands/form-add-detail-table.d.ts.map +1 -1
  5. package/dist/commands/form-add-detail-table.js +37 -17
  6. package/dist/commands/form-add-detail-table.js.map +1 -1
  7. package/dist/commands/form-ebuilder-scope.d.ts +21 -0
  8. package/dist/commands/form-ebuilder-scope.d.ts.map +1 -1
  9. package/dist/commands/form-ebuilder-scope.js +41 -8
  10. package/dist/commands/form-ebuilder-scope.js.map +1 -1
  11. package/dist/commands/form-layout-code-reviewed.d.ts +3 -0
  12. package/dist/commands/form-layout-code-reviewed.d.ts.map +1 -0
  13. package/dist/commands/form-layout-code-reviewed.js +61 -0
  14. package/dist/commands/form-layout-code-reviewed.js.map +1 -0
  15. package/dist/commands/form-layout-describe.d.ts +3 -0
  16. package/dist/commands/form-layout-describe.d.ts.map +1 -0
  17. package/dist/commands/form-layout-describe.js +58 -0
  18. package/dist/commands/form-layout-describe.js.map +1 -0
  19. package/dist/commands/form-layout-diff.d.ts +3 -0
  20. package/dist/commands/form-layout-diff.d.ts.map +1 -0
  21. package/dist/commands/form-layout-diff.js +48 -0
  22. package/dist/commands/form-layout-diff.js.map +1 -0
  23. package/dist/commands/form-layout-document.d.ts +3 -0
  24. package/dist/commands/form-layout-document.d.ts.map +1 -0
  25. package/dist/commands/form-layout-document.js +81 -0
  26. package/dist/commands/form-layout-document.js.map +1 -0
  27. package/dist/commands/form-layout-edit.d.ts +3 -0
  28. package/dist/commands/form-layout-edit.d.ts.map +1 -0
  29. package/dist/commands/form-layout-edit.js +51 -0
  30. package/dist/commands/form-layout-edit.js.map +1 -0
  31. package/dist/commands/form-layout-init-reviewed.d.ts +3 -0
  32. package/dist/commands/form-layout-init-reviewed.d.ts.map +1 -0
  33. package/dist/commands/form-layout-init-reviewed.js +78 -0
  34. package/dist/commands/form-layout-init-reviewed.js.map +1 -0
  35. package/dist/commands/form-layout-restore.d.ts.map +1 -1
  36. package/dist/commands/form-layout-restore.js +23 -0
  37. package/dist/commands/form-layout-restore.js.map +1 -1
  38. package/dist/commands/form-layout-template-catalog.d.ts +3 -0
  39. package/dist/commands/form-layout-template-catalog.d.ts.map +1 -0
  40. package/dist/commands/form-layout-template-catalog.js +45 -0
  41. package/dist/commands/form-layout-template-catalog.js.map +1 -0
  42. package/dist/commands/form-list-custom.d.ts +5 -0
  43. package/dist/commands/form-list-custom.d.ts.map +1 -0
  44. package/dist/commands/form-list-custom.js +24 -0
  45. package/dist/commands/form-list-custom.js.map +1 -0
  46. package/dist/commands/form-list-search-group.d.ts.map +1 -1
  47. package/dist/commands/form-list-search-group.js +101 -7
  48. package/dist/commands/form-list-search-group.js.map +1 -1
  49. package/dist/commands/form-list.d.ts.map +1 -1
  50. package/dist/commands/form-list.js +45 -1
  51. package/dist/commands/form-list.js.map +1 -1
  52. package/dist/commands/form-permission.d.ts.map +1 -1
  53. package/dist/commands/form-permission.js +10 -8
  54. package/dist/commands/form-permission.js.map +1 -1
  55. package/dist/commands/form.d.ts.map +1 -1
  56. package/dist/commands/form.js +87 -8
  57. package/dist/commands/form.js.map +1 -1
  58. package/dist/commands/menu.d.ts.map +1 -1
  59. package/dist/commands/menu.js +98 -1
  60. package/dist/commands/menu.js.map +1 -1
  61. package/dist/commands/report-cell.d.ts +3 -0
  62. package/dist/commands/report-cell.d.ts.map +1 -0
  63. package/dist/commands/report-cell.js +365 -0
  64. package/dist/commands/report-cell.js.map +1 -0
  65. package/dist/commands/wf-form.d.ts +2 -0
  66. package/dist/commands/wf-form.d.ts.map +1 -1
  67. package/dist/commands/wf-form.js +10 -9
  68. package/dist/commands/wf-form.js.map +1 -1
  69. package/dist/commands/workflow-base-command.js +1 -1
  70. package/dist/commands/workflow-base-command.js.map +1 -1
  71. package/dist/commands/workflow-basic-info.d.ts +5 -0
  72. package/dist/commands/workflow-basic-info.d.ts.map +1 -0
  73. package/dist/commands/workflow-basic-info.js +47 -0
  74. package/dist/commands/workflow-basic-info.js.map +1 -0
  75. package/dist/commands/workflow-create-workflow.d.ts.map +1 -1
  76. package/dist/commands/workflow-create-workflow.js +49 -83
  77. package/dist/commands/workflow-create-workflow.js.map +1 -1
  78. package/dist/commands/workflow-function-settings.d.ts.map +1 -1
  79. package/dist/commands/workflow-function-settings.js +3 -2
  80. package/dist/commands/workflow-function-settings.js.map +1 -1
  81. package/dist/commands/workflow.d.ts.map +1 -1
  82. package/dist/commands/workflow.js +19 -37
  83. package/dist/commands/workflow.js.map +1 -1
  84. package/dist/index.js +19 -0
  85. package/dist/index.js.map +1 -1
  86. package/dist/services/actionflow/components/action_eb_add.d.ts.map +1 -1
  87. package/dist/services/actionflow/components/action_eb_add.js +12 -5
  88. package/dist/services/actionflow/components/action_eb_add.js.map +1 -1
  89. package/dist/services/actionflow/components/action_eb_add_compiler.d.ts.map +1 -1
  90. package/dist/services/actionflow/components/action_eb_add_compiler.js +5 -0
  91. package/dist/services/actionflow/components/action_eb_add_compiler.js.map +1 -1
  92. package/dist/services/actionflow/components/action_eb_delete.d.ts +6 -1
  93. package/dist/services/actionflow/components/action_eb_delete.d.ts.map +1 -1
  94. package/dist/services/actionflow/components/action_eb_delete.js +23 -5
  95. package/dist/services/actionflow/components/action_eb_delete.js.map +1 -1
  96. package/dist/services/actionflow/components/action_eb_delete_compiler.d.ts.map +1 -1
  97. package/dist/services/actionflow/components/action_eb_delete_compiler.js +22 -0
  98. package/dist/services/actionflow/components/action_eb_delete_compiler.js.map +1 -1
  99. package/dist/services/actionflow/components/action_eb_update.d.ts.map +1 -1
  100. package/dist/services/actionflow/components/action_eb_update.js +13 -4
  101. package/dist/services/actionflow/components/action_eb_update.js.map +1 -1
  102. package/dist/services/actionflow/components/action_eb_update_compiler.d.ts.map +1 -1
  103. package/dist/services/actionflow/components/action_eb_update_compiler.js +9 -2
  104. package/dist/services/actionflow/components/action_eb_update_compiler.js.map +1 -1
  105. package/dist/services/actionflow/components/date_trigger.js +2 -2
  106. package/dist/services/actionflow/components/date_trigger.js.map +1 -1
  107. package/dist/services/actionflow/components/enquiry_form.d.ts.map +1 -1
  108. package/dist/services/actionflow/components/enquiry_form.js +11 -10
  109. package/dist/services/actionflow/components/enquiry_form.js.map +1 -1
  110. package/dist/services/actionflow/components/event_button.js +1 -1
  111. package/dist/services/actionflow/components/event_button.js.map +1 -1
  112. package/dist/services/actionflow/components/form_data_builder.d.ts +29 -1
  113. package/dist/services/actionflow/components/form_data_builder.d.ts.map +1 -1
  114. package/dist/services/actionflow/components/form_data_builder.js +67 -3
  115. package/dist/services/actionflow/components/form_data_builder.js.map +1 -1
  116. package/dist/services/actionflow/components/time_batch_trigger.js +2 -2
  117. package/dist/services/actionflow/components/time_batch_trigger.js.map +1 -1
  118. package/dist/services/actionflow/form_source.d.ts +44 -1
  119. package/dist/services/actionflow/form_source.d.ts.map +1 -1
  120. package/dist/services/actionflow/form_source.js +231 -5
  121. package/dist/services/actionflow/form_source.js.map +1 -1
  122. package/dist/services/actionflow/preflight_service.d.ts +8 -0
  123. package/dist/services/actionflow/preflight_service.d.ts.map +1 -1
  124. package/dist/services/actionflow/preflight_service.js +120 -14
  125. package/dist/services/actionflow/preflight_service.js.map +1 -1
  126. package/dist/services/actionflow/system_params.d.ts.map +1 -1
  127. package/dist/services/actionflow/system_params.js +4 -1
  128. package/dist/services/actionflow/system_params.js.map +1 -1
  129. package/dist/services/actionflow/trigger_common.d.ts.map +1 -1
  130. package/dist/services/actionflow/trigger_common.js +12 -3
  131. package/dist/services/actionflow/trigger_common.js.map +1 -1
  132. package/dist/services/actionflow/workflow_compiler.d.ts.map +1 -1
  133. package/dist/services/actionflow/workflow_compiler.js +117 -40
  134. package/dist/services/actionflow/workflow_compiler.js.map +1 -1
  135. package/dist/services/form-field-build.d.ts +13 -0
  136. package/dist/services/form-field-build.d.ts.map +1 -1
  137. package/dist/services/form-field-build.js +18 -0
  138. package/dist/services/form-field-build.js.map +1 -1
  139. package/dist/services/form-field-dataset.d.ts +101 -0
  140. package/dist/services/form-field-dataset.d.ts.map +1 -0
  141. package/dist/services/form-field-dataset.js +180 -0
  142. package/dist/services/form-field-dataset.js.map +1 -0
  143. package/dist/services/form-field-template.d.ts +15 -10
  144. package/dist/services/form-field-template.d.ts.map +1 -1
  145. package/dist/services/form-field-template.js +30 -15
  146. package/dist/services/form-field-template.js.map +1 -1
  147. package/dist/services/form-layout-code-reviewed.d.ts +32 -0
  148. package/dist/services/form-layout-code-reviewed.d.ts.map +1 -0
  149. package/dist/services/form-layout-code-reviewed.js +101 -0
  150. package/dist/services/form-layout-code-reviewed.js.map +1 -0
  151. package/dist/services/form-layout-describe.d.ts +4 -0
  152. package/dist/services/form-layout-describe.d.ts.map +1 -0
  153. package/dist/services/form-layout-describe.js +107 -0
  154. package/dist/services/form-layout-describe.js.map +1 -0
  155. package/dist/services/form-layout-diff.d.ts +37 -0
  156. package/dist/services/form-layout-diff.d.ts.map +1 -0
  157. package/dist/services/form-layout-diff.js +232 -0
  158. package/dist/services/form-layout-diff.js.map +1 -0
  159. package/dist/services/form-layout-document-apply.d.ts +23 -0
  160. package/dist/services/form-layout-document-apply.d.ts.map +1 -0
  161. package/dist/services/form-layout-document-apply.js +82 -0
  162. package/dist/services/form-layout-document-apply.js.map +1 -0
  163. package/dist/services/form-layout-document.d.ts +13 -0
  164. package/dist/services/form-layout-document.d.ts.map +1 -0
  165. package/dist/services/form-layout-document.js +228 -0
  166. package/dist/services/form-layout-document.js.map +1 -0
  167. package/dist/services/form-layout-edit.d.ts +21 -0
  168. package/dist/services/form-layout-edit.d.ts.map +1 -0
  169. package/dist/services/form-layout-edit.js +103 -0
  170. package/dist/services/form-layout-edit.js.map +1 -0
  171. package/dist/services/form-layout-init-plan.d.ts +54 -0
  172. package/dist/services/form-layout-init-plan.d.ts.map +1 -0
  173. package/dist/services/form-layout-init-plan.js +211 -0
  174. package/dist/services/form-layout-init-plan.js.map +1 -0
  175. package/dist/services/form-layout-insert.d.ts +22 -0
  176. package/dist/services/form-layout-insert.d.ts.map +1 -1
  177. package/dist/services/form-layout-insert.js +88 -8
  178. package/dist/services/form-layout-insert.js.map +1 -1
  179. package/dist/services/form-layout-source/review.d.ts +4 -0
  180. package/dist/services/form-layout-source/review.d.ts.map +1 -0
  181. package/dist/services/form-layout-source/review.js +54 -0
  182. package/dist/services/form-layout-source/review.js.map +1 -0
  183. package/dist/services/form-layout-template-advanced.d.ts +5 -0
  184. package/dist/services/form-layout-template-advanced.d.ts.map +1 -1
  185. package/dist/services/form-layout-template-advanced.js +17 -1
  186. package/dist/services/form-layout-template-advanced.js.map +1 -1
  187. package/dist/services/form-layout-template-catalog.d.ts +13 -0
  188. package/dist/services/form-layout-template-catalog.d.ts.map +1 -0
  189. package/dist/services/form-layout-template-catalog.js +27 -0
  190. package/dist/services/form-layout-template-catalog.js.map +1 -0
  191. package/dist/services/form-layout-template-flow.d.ts +1 -1
  192. package/dist/services/form-layout-template-flow.d.ts.map +1 -1
  193. package/dist/services/form-layout-template-flow.js.map +1 -1
  194. package/dist/services/form-layout-template-verification.d.ts +34 -0
  195. package/dist/services/form-layout-template-verification.d.ts.map +1 -0
  196. package/dist/services/form-layout-template-verification.js +124 -0
  197. package/dist/services/form-layout-template-verification.js.map +1 -0
  198. package/dist/services/form-list-search-custom.d.ts +25 -0
  199. package/dist/services/form-list-search-custom.d.ts.map +1 -0
  200. package/dist/services/form-list-search-custom.js +98 -0
  201. package/dist/services/form-list-search-custom.js.map +1 -0
  202. package/dist/services/form-list-search-group.d.ts +36 -2
  203. package/dist/services/form-list-search-group.d.ts.map +1 -1
  204. package/dist/services/form-list-search-group.js +89 -10
  205. package/dist/services/form-list-search-group.js.map +1 -1
  206. package/dist/services/form-list-search.d.ts +1 -0
  207. package/dist/services/form-list-search.d.ts.map +1 -1
  208. package/dist/services/form-list-search.js +5 -2
  209. package/dist/services/form-list-search.js.map +1 -1
  210. package/dist/services/form-permission-archive.d.ts +15 -2
  211. package/dist/services/form-permission-archive.d.ts.map +1 -1
  212. package/dist/services/form-permission-archive.js +22 -3
  213. package/dist/services/form-permission-archive.js.map +1 -1
  214. package/dist/services/form-physical-table.d.ts +17 -0
  215. package/dist/services/form-physical-table.d.ts.map +1 -1
  216. package/dist/services/form-physical-table.js +19 -0
  217. package/dist/services/form-physical-table.js.map +1 -1
  218. package/dist/services/form-style-template.d.ts +3 -3
  219. package/dist/services/form-style-template.d.ts.map +1 -1
  220. package/dist/services/form-style-template.js +18 -13
  221. package/dist/services/form-style-template.js.map +1 -1
  222. package/dist/services/form-sub-detail.d.ts +11 -0
  223. package/dist/services/form-sub-detail.d.ts.map +1 -1
  224. package/dist/services/form-sub-detail.js +23 -0
  225. package/dist/services/form-sub-detail.js.map +1 -1
  226. package/dist/services/menu-catalog.d.ts +11 -0
  227. package/dist/services/menu-catalog.d.ts.map +1 -1
  228. package/dist/services/menu-catalog.js +32 -0
  229. package/dist/services/menu-catalog.js.map +1 -1
  230. package/dist/services/report/cell-edit.d.ts +53 -0
  231. package/dist/services/report/cell-edit.d.ts.map +1 -0
  232. package/dist/services/report/cell-edit.js +137 -0
  233. package/dist/services/report/cell-edit.js.map +1 -0
  234. package/dist/services/report/cell-event.d.ts +28 -0
  235. package/dist/services/report/cell-event.d.ts.map +1 -0
  236. package/dist/services/report/cell-event.js +71 -0
  237. package/dist/services/report/cell-event.js.map +1 -0
  238. package/dist/services/report/cell-filter.d.ts +46 -0
  239. package/dist/services/report/cell-filter.d.ts.map +1 -0
  240. package/dist/services/report/cell-filter.js +153 -0
  241. package/dist/services/report/cell-filter.js.map +1 -0
  242. package/dist/services/workflow-basic-info.d.ts +27 -0
  243. package/dist/services/workflow-basic-info.d.ts.map +1 -0
  244. package/dist/services/workflow-basic-info.js +170 -0
  245. package/dist/services/workflow-basic-info.js.map +1 -0
  246. package/dist/services/workflow-function-management.d.ts +1 -1
  247. package/dist/services/workflow-function-settings.d.ts +1 -0
  248. package/dist/services/workflow-function-settings.d.ts.map +1 -1
  249. package/dist/services/workflow-function-settings.js +10 -2
  250. package/dist/services/workflow-function-settings.js.map +1 -1
  251. package/dist/services/workflow-watermark-template.d.ts +8 -0
  252. package/dist/services/workflow-watermark-template.d.ts.map +1 -0
  253. package/dist/services/workflow-watermark-template.js +78 -0
  254. package/dist/services/workflow-watermark-template.js.map +1 -0
  255. package/package.json +1 -1
  256. package/skill-docs/SKILL.md +24 -19
  257. package/skill-docs/_catalog.md +108 -106
  258. package/skill-docs/actionflows/references/components/ebuilder/ActionEbDelete.md +60 -3
  259. package/skill-docs/actionflows/references/components/ebuilder/EventButton.md +35 -33
  260. package/skill-docs/references/common/capability-boundaries.md +20 -1
  261. package/skill-docs/references/common/guide-plan-template.md +29 -3
  262. package/skill-docs/references/common/map.md +11 -7
  263. package/skill-docs/references/common/ref-cli-commands.md +710 -695
  264. package/skill-docs/references/form/guide-browser-definition.md +57 -13
  265. package/skill-docs/references/form/guide-create-form.md +258 -258
  266. package/skill-docs/references/form/guide-form-archive-permission.md +5 -2
  267. package/skill-docs/references/form/guide-form-layout-incremental.md +6 -4
  268. package/skill-docs/references/form/guide-form-view.md +423 -374
  269. package/skill-docs/references/form/layout/code-block/code-block-guide.md +153 -0
  270. package/skill-docs/references/form/layout/code-block/controls.md +60 -0
  271. package/skill-docs/references/form/layout/code-block/coverage.md +32 -0
  272. package/skill-docs/references/form/layout/code-block/details.md +57 -0
  273. package/skill-docs/references/form/layout/code-block/events-validation.md +42 -0
  274. package/skill-docs/references/form/layout/code-block/foundations-fields.md +56 -0
  275. package/skill-docs/references/form/layout/code-block/layout-css.md +116 -0
  276. package/skill-docs/references/form/layout/code-block/recipes.md +164 -0
  277. package/skill-docs/references/form/layout/code-block/troubleshooting.md +49 -0
  278. package/skill-docs/references/form/layout/code-block/ui-global.md +47 -0
  279. package/skill-docs/references/form/layout/document.md +39 -0
  280. package/skill-docs/references/form/layout/incremental.md +133 -0
  281. package/skill-docs/references/form/layout/initialization.md +39 -0
  282. package/skill-docs/references/form/layout/inspect-edit.md +76 -0
  283. package/skill-docs/references/form/layout/layout-overview.md +67 -0
  284. package/skill-docs/references/form/layout/management.md +64 -0
  285. package/skill-docs/references/form/layout/planning.md +76 -0
  286. package/skill-docs/references/form/layout/source-restoration.md +388 -0
  287. package/skill-docs/references/form/layout/template/advanced-css.md +167 -0
  288. package/skill-docs/references/form/layout/template/advanced.md +318 -0
  289. package/skill-docs/references/form/layout/template/easy.md +64 -0
  290. package/skill-docs/references/form/layout/template/flow.md +30 -0
  291. package/skill-docs/references/form/layout/template/template-guide.md +56 -0
  292. package/skill-docs/references/form/layout/workflow-layout.md +44 -0
  293. package/skill-docs/references/form/ref-form-fields.md +303 -301
  294. package/skill-docs/references/report/cross-dataset-filter-guide.md +33 -19
  295. package/skill-docs/references/report/event-hreflink-guide.md +30 -0
  296. package/skill-docs/references/report/ref-report-commands.md +14 -0
  297. package/skill-docs/references/report/report-designer-feature-map.md +2 -2
  298. package/skill-docs/references/workflow/guide-function-settings.md +112 -55
  299. package/skill-docs/references/workflow/guide-workflow-node-layout.md +189 -187
  300. package/skill-docs/references/workflow/guide-workflow.md +632 -630
@@ -0,0 +1,365 @@
1
+ import { withReport } from './report.js';
2
+ import { applyCellEdit, findCell, jsonArrayOf, parseCellRef, } from '../services/report/cell-edit.js';
3
+ import { buildCustomFilterEntry, buildResultFilterEntry, describeFilter, isOptionField, loadDatasetFields, readCellFilters, resolveDatasetField, resolveFilterOp, resolveOptionValueKey, splitValues, } from '../services/report/cell-filter.js';
4
+ import { openTypeLabel, readCellEvents, resolveOpenType, validateCellLink, } from '../services/report/cell-event.js';
5
+ function filterFlag(kind) {
6
+ return kind === 'custom' ? 'customFilterField' : 'dataFilterField';
7
+ }
8
+ function parseKind(input) {
9
+ const raw = String(input ?? 'custom').trim().toLowerCase();
10
+ if (raw === 'custom' || raw === '自定义' || raw === '自定义筛选')
11
+ return 'custom';
12
+ if (raw === 'result' || raw === '结果' || raw === '结果筛选')
13
+ return 'result';
14
+ throw new Error(`--kind 只认 custom / result(收到「${input}」)`);
15
+ }
16
+ /** 单元格自己的数据字段(筛选默认作用在它所属的数据集上)。 */
17
+ function ownFieldOf(cell) {
18
+ return {
19
+ name: String(cell?.name ?? ''),
20
+ text: String(cell?.text ?? ''),
21
+ nameIndex: String(cell?.nameIndex ?? ''),
22
+ };
23
+ }
24
+ function listCellFilters(fields) {
25
+ const out = [];
26
+ for (const f of fields || []) {
27
+ const r = readCellFilters(f);
28
+ if (r.custom.length)
29
+ out.push({ cell: `${f.x},${f.y}`, text: String(f.text ?? ''), kind: 'custom', conditions: r.custom });
30
+ if (r.result.length)
31
+ out.push({ cell: `${f.x},${f.y}`, text: String(f.text ?? ''), kind: 'result', conditions: r.result });
32
+ }
33
+ return out;
34
+ }
35
+ export function registerReportCellCommands(report, program) {
36
+ // ── 单元格筛选 ────────────────────────────────────────────
37
+ const cf = report
38
+ .command('cell-filter')
39
+ .description('单元格筛选(「单元格设置 → 筛选」):自定义筛选 / 结果筛选,写入后回读校验');
40
+ cf.command('list')
41
+ .argument('<reportId>', '报表 ID')
42
+ .requiredOption('--app-id <id>', '应用 ID')
43
+ .option('--json', 'JSON 输出')
44
+ .description('列出报表里所有带筛选的单元格')
45
+ .action(async (reportId, raw) => {
46
+ await withReport(program, raw.appId, async (http, json) => {
47
+ const { getReportDevInfo } = await import('../services/report/reports.js');
48
+ const dev = await getReportDevInfo(http, reportId);
49
+ const rows = listCellFilters(dev.fields || []);
50
+ if (json || raw.json) {
51
+ console.log(JSON.stringify(rows, null, 2));
52
+ return;
53
+ }
54
+ if (!rows.length) {
55
+ console.log('该报表没有单元格筛选。');
56
+ return;
57
+ }
58
+ for (const r of rows) {
59
+ console.log(`${r.cell}\t${r.text}\t${r.kind === 'custom' ? '自定义筛选' : '结果筛选'} (${r.conditions.length})`);
60
+ r.conditions.forEach((c) => console.log(` - ${describeFilter(c)}`));
61
+ }
62
+ });
63
+ });
64
+ cf.command('set')
65
+ .argument('<reportId>', '报表 ID')
66
+ .requiredOption('--app-id <id>', '应用 ID')
67
+ .requiredOption('--cell <行,列>', '目标单元格坐标,如 1,0(x=行,y=列)')
68
+ .requiredOption('--op <算子>', '等于/不等于/大于/包含/开头是/为空…;结果筛选用 前多少个/后多少个/奇数/偶数/特定')
69
+ .option('--field <名称>', '被筛选字段(缺省 = 该单元格自己的字段)')
70
+ .option('--value <值>', '筛选值;选项类字段可用逗号分隔多个(写选项名或 valueKey)')
71
+ .option('--kind <custom|result>', '筛选类型:custom=自定义筛选(缺省)/ result=结果筛选', 'custom')
72
+ .option('--append', '追加到已有条件后面(缺省是替换该格该类筛选)')
73
+ .option('--json', 'JSON 输出')
74
+ .description('设置单元格筛选并落库(写入 fields 与 workbook,保存后回读比对)')
75
+ .action(async (reportId, raw) => {
76
+ const ref = parseCellRef(raw.cell);
77
+ const kind = parseKind(raw.kind);
78
+ if (kind === 'result' && raw.field) {
79
+ throw new Error('结果筛选按行号/奇偶/特定行过滤,不针对字段,不要给 --field');
80
+ }
81
+ const op = resolveFilterOp(kind, raw.op);
82
+ if (kind === 'custom') {
83
+ const valueRequired = !['Null', 'NotNull'].includes(op);
84
+ if (valueRequired && raw.value === undefined) {
85
+ throw new Error(`算子「${raw.op}」需要一个 --value`);
86
+ }
87
+ }
88
+ else if (['Before', 'Last', 'Designates'].includes(op) && raw.value === undefined) {
89
+ throw new Error(`结果筛选「${raw.op}」需要一个 --value(数量/序号)`);
90
+ }
91
+ await withReport(program, raw.appId, async (http, json) => {
92
+ const { getReportDevInfo } = await import('../services/report/reports.js');
93
+ const dev = await getReportDevInfo(http, reportId);
94
+ const fields = dev.fields || [];
95
+ const cell = findCell(fields, ref);
96
+ const own = ownFieldOf(cell);
97
+ if (!cell.dataSetId || !own.nameIndex) {
98
+ throw new Error(`单元格 (${ref.x},${ref.y}) 不是数据字段格,不能挂筛选`);
99
+ }
100
+ // 解析被筛选字段(默认就是本格字段)
101
+ let targetName = own.name;
102
+ let targetText = own.text;
103
+ let value;
104
+ if (kind === 'custom') {
105
+ if (raw.field) {
106
+ const metaFields = await loadDatasetFields(http, String(cell.dataSetId), reportId, raw.appId);
107
+ const meta = metaFields.length
108
+ ? resolveDatasetField(metaFields, raw.field)
109
+ : (() => { throw new Error('取不到数据集字段清单,无法解析 --field,请只筛本单元格字段'); })();
110
+ targetName = String(meta.name);
111
+ targetText = String(meta.text || meta.name);
112
+ if (isOptionField(meta) && raw.value !== undefined) {
113
+ value = splitValues(raw.value).map((v) => resolveOptionValueKey(meta, v));
114
+ }
115
+ else if (raw.value !== undefined) {
116
+ value = String(raw.value);
117
+ }
118
+ }
119
+ else if (raw.value !== undefined) {
120
+ // 本格字段:也尝试按数据集元数据解析选项
121
+ const metaFields = await loadDatasetFields(http, String(cell.dataSetId), reportId, raw.appId);
122
+ const meta = metaFields.find((f) => String(f.name) === own.name) || metaFields.find((f) => String(f.text) === own.text);
123
+ if (meta && isOptionField(meta)) {
124
+ value = splitValues(raw.value).map((v) => resolveOptionValueKey(meta, v));
125
+ }
126
+ else {
127
+ value = String(raw.value);
128
+ }
129
+ }
130
+ }
131
+ else if (raw.value !== undefined) {
132
+ value = String(raw.value);
133
+ }
134
+ const fieldKey = `${String(cell.dataSetId)}.${own.nameIndex}.${targetName}`;
135
+ const key = filterFlag(kind);
136
+ // 一次算好目标条件(重试时也按同一份写,避免追加语义在重读后重复叠加)
137
+ const current = readCellFilters(cell)[kind === 'custom' ? 'custom' : 'result'];
138
+ const nextIndex = current.length + 1;
139
+ const entry = kind === 'custom'
140
+ ? buildCustomFilterEntry(fieldKey, op, value, nextIndex)
141
+ : buildResultFilterEntry(op, String(value ?? ''), nextIndex);
142
+ const want = raw.append ? [...current, entry] : [entry];
143
+ const result = await applyCellEdit(http, {
144
+ http,
145
+ appId: raw.appId,
146
+ reportId,
147
+ ...ref,
148
+ patchFields: (fs) => {
149
+ const c = findCell(fs, ref);
150
+ c[key] = JSON.stringify(want);
151
+ },
152
+ patchCellType: (ct) => {
153
+ ct[key] = want;
154
+ },
155
+ verify: (c) => {
156
+ const got = jsonArrayOf(c[key]);
157
+ const errors = [];
158
+ if (JSON.stringify(got) !== JSON.stringify(want)) {
159
+ errors.push(`${key} 回读=${JSON.stringify(got)},期望=${JSON.stringify(want)}`);
160
+ }
161
+ return errors;
162
+ },
163
+ });
164
+ const stored = jsonArrayOf(result.cell[key]);
165
+ const text = `${kind === 'custom' ? '自定义筛选' : '结果筛选'} 已写入 (${ref.x},${ref.y}) ${targetText}`;
166
+ if (json || raw.json) {
167
+ console.log(JSON.stringify({ ok: true, reportId, cell: `${ref.x},${ref.y}`, kind, fieldKey, conditions: stored }, null, 2));
168
+ }
169
+ else {
170
+ console.log(text);
171
+ stored.forEach((c) => console.log(` - ${describeFilter(c)}`));
172
+ }
173
+ });
174
+ });
175
+ cf.command('remove')
176
+ .argument('<reportId>', '报表 ID')
177
+ .requiredOption('--app-id <id>', '应用 ID')
178
+ .requiredOption('--cell <行,列>', '目标单元格坐标,如 1,0')
179
+ .option('--kind <custom|result>', '只清某一类;缺省两类都清')
180
+ .option('--json', 'JSON 输出')
181
+ .description('清空某个单元格上的筛选条件')
182
+ .action(async (reportId, raw) => {
183
+ const ref = parseCellRef(raw.cell);
184
+ const kinds = raw.kind ? [parseKind(raw.kind)] : ['custom', 'result'];
185
+ await withReport(program, raw.appId, async (http, json) => {
186
+ const result = await applyCellEdit(http, {
187
+ http,
188
+ appId: raw.appId,
189
+ reportId,
190
+ ...ref,
191
+ patchFields: (fs) => {
192
+ const c = findCell(fs, ref);
193
+ for (const k of kinds)
194
+ c[filterFlag(k)] = '[]';
195
+ },
196
+ patchCellType: (ct) => {
197
+ for (const k of kinds)
198
+ ct[filterFlag(k)] = [];
199
+ },
200
+ verify: (c) => kinds.flatMap((k) => jsonArrayOf(c[filterFlag(k)]).length
201
+ ? [`${filterFlag(k)} 回读仍非空:${JSON.stringify(c[filterFlag(k)])}`]
202
+ : []),
203
+ });
204
+ if (json || raw.json) {
205
+ console.log(JSON.stringify({ ok: true, reportId, cell: `${ref.x},${ref.y}`, cleared: kinds }, null, 2));
206
+ }
207
+ else {
208
+ console.log(`已清空 (${ref.x},${ref.y}) 的${kinds.map((k) => (k === 'custom' ? '自定义筛选' : '结果筛选')).join(' / ')}`);
209
+ }
210
+ void result;
211
+ });
212
+ });
213
+ // ── 单元格事件(链接) ────────────────────────────────────
214
+ const ce = report
215
+ .command('cell-event')
216
+ .description('单元格事件(「事件」Tab):PC/H5 链接地址与打开方式,写入后回读校验');
217
+ ce.command('list')
218
+ .argument('<reportId>', '报表 ID')
219
+ .requiredOption('--app-id <id>', '应用 ID')
220
+ .option('--json', 'JSON 输出')
221
+ .description('列出报表里配置了链接的单元格')
222
+ .action(async (reportId, raw) => {
223
+ await withReport(program, raw.appId, async (http, json) => {
224
+ const { getReportDevInfo } = await import('../services/report/reports.js');
225
+ const dev = await getReportDevInfo(http, reportId);
226
+ const rows = (dev.fields || [])
227
+ .map((f) => ({ cell: `${f.x},${f.y}`, text: String(f.text ?? ''), ...readCellEvents(f) }))
228
+ .filter((r) => r.pcHreflink || r.h5Hreflink);
229
+ if (json || raw.json) {
230
+ console.log(JSON.stringify(rows, null, 2));
231
+ return;
232
+ }
233
+ if (!rows.length) {
234
+ console.log('该报表没有单元格链接。');
235
+ return;
236
+ }
237
+ rows.forEach((r) => console.log(`${r.cell}\t${r.text}\t${openTypeLabel(r.openType)}\tPC=${r.pcHreflink || '-'}\tH5=${r.h5Hreflink || '-'}`));
238
+ });
239
+ });
240
+ ce.command('set')
241
+ .argument('<reportId>', '报表 ID')
242
+ .requiredOption('--app-id <id>', '应用 ID')
243
+ .requiredOption('--cell <行,列>', '目标单元格坐标,如 1,0')
244
+ .option('--pc <链接>', 'PC 链接地址(URL,或「执行js代码」时的 JS)')
245
+ .option('--h5 <链接>', 'H5 链接地址(移动端优先)')
246
+ .option('--open <方式>', '打开方式:弹出页 / 当前页 / 执行js代码;缺省保持原值(新链接为弹出页)')
247
+ .option('--json', 'JSON 输出')
248
+ .description('设置单元格链接(全角?&会直接报错;保存后回读校验)')
249
+ .action(async (reportId, raw) => {
250
+ if (raw.pc === undefined && raw.h5 === undefined) {
251
+ throw new Error('至少要给 --pc 或 --h5');
252
+ }
253
+ const ref = parseCellRef(raw.cell);
254
+ const openType = raw.open === undefined ? null : resolveOpenType(raw.open);
255
+ await withReport(program, raw.appId, async (http, json) => {
256
+ const { getReportDevInfo } = await import('../services/report/reports.js');
257
+ const dev = await getReportDevInfo(http, reportId);
258
+ const cell = findCell(dev.fields || [], ref);
259
+ const before = readCellEvents(cell);
260
+ const effectiveOpen = openType ?? before.openType;
261
+ if (raw.pc !== undefined)
262
+ validateCellLink(String(raw.pc), effectiveOpen, '--pc');
263
+ if (raw.h5 !== undefined)
264
+ validateCellLink(String(raw.h5), effectiveOpen, '--h5');
265
+ const next = {
266
+ pcHreflink: raw.pc !== undefined ? String(raw.pc) : before.pcHreflink,
267
+ h5Hreflink: raw.h5 !== undefined ? String(raw.h5) : before.h5Hreflink,
268
+ openType: effectiveOpen,
269
+ };
270
+ const result = await applyCellEdit(http, {
271
+ http,
272
+ appId: raw.appId,
273
+ reportId,
274
+ ...ref,
275
+ patchFields: (fs) => {
276
+ const c = findCell(fs, ref);
277
+ c.pcHreflink = next.pcHreflink;
278
+ c.h5Hreflink = next.h5Hreflink;
279
+ c.openType = next.openType;
280
+ },
281
+ patchCellType: (ct) => {
282
+ ct.pcHreflink = next.pcHreflink;
283
+ ct.h5Hreflink = next.h5Hreflink;
284
+ ct.openType = next.openType;
285
+ },
286
+ verify: (c) => {
287
+ const got = readCellEvents(c);
288
+ const errors = [];
289
+ if (got.pcHreflink !== next.pcHreflink)
290
+ errors.push(`pcHreflink 回读=${JSON.stringify(got.pcHreflink)}`);
291
+ if (got.h5Hreflink !== next.h5Hreflink)
292
+ errors.push(`h5Hreflink 回读=${JSON.stringify(got.h5Hreflink)}`);
293
+ if (got.openType !== next.openType)
294
+ errors.push(`openType 回读=${JSON.stringify(got.openType)}`);
295
+ return errors;
296
+ },
297
+ });
298
+ const stored = readCellEvents(result.cell);
299
+ if (json || raw.json) {
300
+ console.log(JSON.stringify({ ok: true, reportId, cell: `${ref.x},${ref.y}`, ...stored }, null, 2));
301
+ }
302
+ else {
303
+ console.log(`已写入 (${ref.x},${ref.y}) 事件:${openTypeLabel(stored.openType)}`);
304
+ if (stored.pcHreflink)
305
+ console.log(` PC: ${stored.pcHreflink}`);
306
+ if (stored.h5Hreflink)
307
+ console.log(` H5: ${stored.h5Hreflink}`);
308
+ }
309
+ });
310
+ });
311
+ ce.command('clear')
312
+ .argument('<reportId>', '报表 ID')
313
+ .requiredOption('--app-id <id>', '应用 ID')
314
+ .requiredOption('--cell <行,列>', '目标单元格坐标,如 1,0')
315
+ .option('--pc', '只清 PC 链接')
316
+ .option('--h5', '只清 H5 链接')
317
+ .option('--json', 'JSON 输出')
318
+ .description('清空某个单元格的链接(缺省 PC+H5 都清,并把打开方式复位为弹出页)')
319
+ .action(async (reportId, raw) => {
320
+ const ref = parseCellRef(raw.cell);
321
+ const clearPc = raw.pc || (!raw.pc && !raw.h5);
322
+ const clearH5 = raw.h5 || (!raw.pc && !raw.h5);
323
+ await withReport(program, raw.appId, async (http, json) => {
324
+ const { getReportDevInfo } = await import('../services/report/reports.js');
325
+ const dev = await getReportDevInfo(http, reportId);
326
+ const before = readCellEvents(findCell(dev.fields || [], ref));
327
+ const next = {
328
+ pcHreflink: clearPc ? '' : before.pcHreflink,
329
+ h5Hreflink: clearH5 ? '' : before.h5Hreflink,
330
+ openType: clearPc && clearH5 ? 'blank' : before.openType,
331
+ };
332
+ const result = await applyCellEdit(http, {
333
+ http,
334
+ appId: raw.appId,
335
+ reportId,
336
+ ...ref,
337
+ patchFields: (fs) => {
338
+ const c = findCell(fs, ref);
339
+ c.pcHreflink = next.pcHreflink;
340
+ c.h5Hreflink = next.h5Hreflink;
341
+ c.openType = next.openType;
342
+ },
343
+ patchCellType: (ct) => {
344
+ ct.pcHreflink = next.pcHreflink;
345
+ ct.h5Hreflink = next.h5Hreflink;
346
+ ct.openType = next.openType;
347
+ },
348
+ verify: (c) => {
349
+ const got = readCellEvents(c);
350
+ return got.pcHreflink === next.pcHreflink && got.h5Hreflink === next.h5Hreflink
351
+ ? []
352
+ : [`链接回读不一致:${JSON.stringify(got)}`];
353
+ },
354
+ });
355
+ const stored = readCellEvents(result.cell);
356
+ if (json || raw.json) {
357
+ console.log(JSON.stringify({ ok: true, reportId, cell: `${ref.x},${ref.y}`, ...stored }, null, 2));
358
+ }
359
+ else {
360
+ console.log(`已清空 (${ref.x},${ref.y}) 的${clearPc && clearH5 ? ' PC/H5 链接' : clearPc ? ' PC 链接' : ' H5 链接'}`);
361
+ }
362
+ });
363
+ });
364
+ }
365
+ //# sourceMappingURL=report-cell.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report-cell.js","sourceRoot":"","sources":["../../src/commands/report-cell.ts"],"names":[],"mappings":"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"}
@@ -36,6 +36,8 @@ interface FieldOpts {
36
36
  browserType?: string | Record<string, unknown>;
37
37
  /** `browserType=form` 时的来源:business(默认) / ebuilder。 */
38
38
  browserFormSource?: string;
39
+ /** 字段编码 dataKey;不给则按字段名拼音首字母(与 add-field 一致)。 */
40
+ dataKey?: string;
39
41
  }
40
42
  /**
41
43
  * wf-form 分支链**自己处理**的类型。
@@ -1 +1 @@
1
- {"version":3,"file":"wf-form.d.ts","sourceRoot":"","sources":["../../src/commands/wf-form.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAyP9C;;;gHAGgH;AAChH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAClD,CAAC,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAAC,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAAO,EAC9I,KAAK,GAAE;IAAE,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,IAAI,CAAA;CAAO,GACnD,OAAO,CAAC;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAiEzE;AAWD,yCAAyC;AACzC,UAAU,SAAS;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAChG,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAC/D,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxE,yEAAyE;IACzE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/C,uDAAuD;IACvD,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;GAKG;AACH,eAAO,MAAM,eAAe,aAG1B,CAAC;AAEH;;;;;GAKG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,SAAS,GAAG,IAAI,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EACtF,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GACvE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAiIlC;AAED,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CA4+DtE"}
1
+ {"version":3,"file":"wf-form.d.ts","sourceRoot":"","sources":["../../src/commands/wf-form.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAyP9C;;;gHAGgH;AAChH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAClD,CAAC,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAAC,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAAO,EAC9I,KAAK,GAAE;IAAE,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,IAAI,CAAA;CAAO,GACnD,OAAO,CAAC;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAiEzE;AAWD,yCAAyC;AACzC,UAAU,SAAS;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAChG,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAC/D,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxE,yEAAyE;IACzE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/C,uDAAuD;IACvD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,iDAAiD;IACjD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;GAKG;AACH,eAAO,MAAM,eAAe,aAG1B,CAAC;AAEH;;;;;GAKG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,SAAS,GAAG,IAAI,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EACtF,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GACvE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAiIlC;AAED,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAg/DtE"}
@@ -309,7 +309,7 @@ export const WF_FORM_HANDLED = new Set([
309
309
  */
310
310
  export async function buildFieldJsonObj(client, baseUrl, fieldName, fieldType, title, o, formId, fieldId) {
311
311
  const ck = canon(fieldType);
312
- const colName = toColumnName(fieldName);
312
+ const colName = String(o.dataKey ?? '').trim() || toColumnName(fieldName);
313
313
  const jsonObj = {
314
314
  type: ck, title: title || fieldName, fieldId, groupId: '-1', formId, showOrder: '0.00',
315
315
  dataKey: colName, columnName: colName,
@@ -1809,6 +1809,7 @@ export function registerWorkflowFormCommands(program) {
1809
1809
  .option('--data-key <k>', '子表物理表名/dataKey(默认 uf_拼音_随机)')
1810
1810
  .option('--init', '创建后跑 layout init 放入 DetailTable 组件')
1811
1811
  .option('--first-field-type <t>', '首字段类型(默认 Text)')
1812
+ .option('--first-field-data-key <k>', '首字段编码 dataKey(缺省取首字段名拼音首字母,与 add-field 一致)')
1812
1813
  .action(async (formId, name, firstFieldName, o) => {
1813
1814
  try {
1814
1815
  const opts = program.opts();
@@ -1831,19 +1832,18 @@ export function registerWorkflowFormCommands(program) {
1831
1832
  throw new Error(`saveSubForm 失败: ${subRes?.msg}`);
1832
1833
  console.error(` 子表已建: subFormId=${subFormId} name=${name} dataKey=${dataKey}`);
1833
1834
  let firstFieldId = '';
1835
+ let firstFieldDataKey = '';
1834
1836
  if (firstFieldName) {
1835
1837
  const [fid] = await genIds(client, baseUrl, 1);
1836
1838
  firstFieldId = fid;
1837
- const ftype = canon(o.firstFieldType || 'Text');
1838
- const fo = {
1839
- type: ftype, title: firstFieldName, fieldId: firstFieldId, groupId: '-1', formId, showOrder: '0.00',
1840
- dataKey: toSubTableName(firstFieldName).replace(/^uf_/, ''), columnName: toSubTableName(firstFieldName).replace(/^uf_/, ''),
1841
- componentKey: ftype, subFormId,
1842
- };
1839
+ // 与 wf-form add-field 走同一个构造器(buildFieldJsonObj):只有 subFormId 与
1840
+ // dataKey 由这里传入,其余属性完全一致。wf-form 的普通字段同样不带 formTableId。
1841
+ const fo = await buildFieldJsonObj(client, baseUrl, firstFieldName, o.firstFieldType || 'Text', undefined, { subFormId, dataKey: o.firstFieldDataKey }, formId, firstFieldId);
1842
+ firstFieldDataKey = String(fo.dataKey);
1843
1843
  const fRes = await client.post(`${baseUrl}${ROUTE}/field/manage/saveFormFieldNew`, { formId, module: MODULE, customParam: {}, jsonObj: JSON.stringify(fo) }, ebb);
1844
1844
  if (fRes?.code !== 200 || !fRes?.status)
1845
1845
  throw new Error(`加首字段失败: ${fRes?.msg}`);
1846
- console.error(` 首字段已加: ${firstFieldName} (${firstFieldId})`);
1846
+ console.error(` 首字段已加: ${firstFieldName} (${firstFieldId}) dataKey=${firstFieldDataKey}`);
1847
1847
  }
1848
1848
  else {
1849
1849
  console.error(' ⚠ 未传首字段:子表已建但空子表 getConfig 读不到,需手动加字段后才可 init 放置');
@@ -1866,7 +1866,8 @@ export function registerWorkflowFormCommands(program) {
1866
1866
  }
1867
1867
  }
1868
1868
  console.log(opts.json
1869
- ? JSON.stringify({ success: true, formId, subFormId, name, dataKey, firstFieldId, initComps: compCount || undefined }, null, 2)
1869
+ ? JSON.stringify({ success: true, formId, subFormId, name, dataKey, firstFieldId,
1870
+ firstFieldDataKey: firstFieldDataKey || undefined, initComps: compCount || undefined }, null, 2)
1870
1871
  : `明细子表已建: ${name} subFormId=${subFormId}${firstFieldName ? ` 首字段=${firstFieldName}` : ''}${o.init ? ` 已 init 放入布局` : ' (未 init,跑 wf-form layout init 放置)'}`);
1871
1872
  if (!opts.json && !o.init) {
1872
1873
  console.log(' 后续加字段: e10-cli wf-form add-field <formId> <字段名> <类型> --sub-form-id ' + subFormId);