weaver-e10-builder 1.2.2 → 1.2.5

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 (274) hide show
  1. package/README.md +8 -19
  2. package/dist/commands/actionflow.d.ts.map +1 -1
  3. package/dist/commands/actionflow.js +14 -1
  4. package/dist/commands/actionflow.js.map +1 -1
  5. package/dist/commands/designer-css.d.ts +15 -0
  6. package/dist/commands/designer-css.d.ts.map +1 -0
  7. package/dist/commands/designer-css.js +205 -0
  8. package/dist/commands/designer-css.js.map +1 -0
  9. package/dist/commands/form-add-detail-table.d.ts.map +1 -1
  10. package/dist/commands/form-add-detail-table.js +127 -7
  11. package/dist/commands/form-add-detail-table.js.map +1 -1
  12. package/dist/commands/form-ebuilder-columns.d.ts +7 -0
  13. package/dist/commands/form-ebuilder-columns.d.ts.map +1 -1
  14. package/dist/commands/form-ebuilder-columns.js +2 -24
  15. package/dist/commands/form-ebuilder-columns.js.map +1 -1
  16. package/dist/commands/form-field-lang.d.ts.map +1 -1
  17. package/dist/commands/form-field-lang.js +4 -39
  18. package/dist/commands/form-field-lang.js.map +1 -1
  19. package/dist/commands/form-formula.d.ts.map +1 -1
  20. package/dist/commands/form-formula.js +35 -11
  21. package/dist/commands/form-formula.js.map +1 -1
  22. package/dist/commands/form-layout-init.d.ts.map +1 -1
  23. package/dist/commands/form-layout-init.js +15 -10
  24. package/dist/commands/form-layout-init.js.map +1 -1
  25. package/dist/commands/form-layout.js +24 -21
  26. package/dist/commands/form-layout.js.map +1 -1
  27. package/dist/commands/form-native.d.ts.map +1 -1
  28. package/dist/commands/form-native.js +181 -0
  29. package/dist/commands/form-native.js.map +1 -1
  30. package/dist/commands/form-nlist.d.ts +1 -1
  31. package/dist/commands/form-nlist.d.ts.map +1 -1
  32. package/dist/commands/form-nlist.js +5 -3
  33. package/dist/commands/form-nlist.js.map +1 -1
  34. package/dist/commands/form-validate.d.ts.map +1 -1
  35. package/dist/commands/form-validate.js +11 -3
  36. package/dist/commands/form-validate.js.map +1 -1
  37. package/dist/commands/form.d.ts.map +1 -1
  38. package/dist/commands/form.js +168 -90
  39. package/dist/commands/form.js.map +1 -1
  40. package/dist/commands/menu.d.ts.map +1 -1
  41. package/dist/commands/menu.js +170 -23
  42. package/dist/commands/menu.js.map +1 -1
  43. package/dist/commands/wf-form.d.ts +1 -0
  44. package/dist/commands/wf-form.d.ts.map +1 -1
  45. package/dist/commands/wf-form.js +44 -13
  46. package/dist/commands/wf-form.js.map +1 -1
  47. package/dist/commands/workflow-auth-resp.d.ts.map +1 -1
  48. package/dist/commands/workflow-auth-resp.js +69 -8
  49. package/dist/commands/workflow-auth-resp.js.map +1 -1
  50. package/dist/commands/workflow-node-assign-flow.d.ts +3 -0
  51. package/dist/commands/workflow-node-assign-flow.d.ts.map +1 -0
  52. package/dist/commands/workflow-node-assign-flow.js +341 -0
  53. package/dist/commands/workflow-node-assign-flow.js.map +1 -0
  54. package/dist/commands/workflow-node.d.ts +2 -0
  55. package/dist/commands/workflow-node.d.ts.map +1 -1
  56. package/dist/commands/workflow-node.js +219 -48
  57. package/dist/commands/workflow-node.js.map +1 -1
  58. package/dist/commands/workflow-odoc.d.ts.map +1 -1
  59. package/dist/commands/workflow-odoc.js +56 -56
  60. package/dist/commands/workflow-odoc.js.map +1 -1
  61. package/dist/commands/workflow-setting.d.ts.map +1 -1
  62. package/dist/commands/workflow-setting.js +77 -1
  63. package/dist/commands/workflow-setting.js.map +1 -1
  64. package/dist/commands/workflow.d.ts.map +1 -1
  65. package/dist/commands/workflow.js +36 -80
  66. package/dist/commands/workflow.js.map +1 -1
  67. package/dist/core/auth.js +1 -1
  68. package/dist/core/client.d.ts +14 -0
  69. package/dist/core/client.d.ts.map +1 -1
  70. package/dist/core/client.js +28 -12
  71. package/dist/core/client.js.map +1 -1
  72. package/dist/index.js +4 -0
  73. package/dist/index.js.map +1 -1
  74. package/dist/services/actionflow/command_output.d.ts +7 -0
  75. package/dist/services/actionflow/command_output.d.ts.map +1 -1
  76. package/dist/services/actionflow/command_output.js +46 -0
  77. package/dist/services/actionflow/command_output.js.map +1 -1
  78. package/dist/services/actionflow/components/action_eb_add.d.ts.map +1 -1
  79. package/dist/services/actionflow/components/action_eb_add.js +14 -4
  80. package/dist/services/actionflow/components/action_eb_add.js.map +1 -1
  81. package/dist/services/actionflow/components/action_eb_add_compiler.d.ts.map +1 -1
  82. package/dist/services/actionflow/components/action_eb_add_compiler.js +29 -0
  83. package/dist/services/actionflow/components/action_eb_add_compiler.js.map +1 -1
  84. package/dist/services/actionflow/components/action_eb_update.d.ts.map +1 -1
  85. package/dist/services/actionflow/components/action_eb_update.js +23 -8
  86. package/dist/services/actionflow/components/action_eb_update.js.map +1 -1
  87. package/dist/services/actionflow/components/action_eb_update_compiler.d.ts.map +1 -1
  88. package/dist/services/actionflow/components/action_eb_update_compiler.js +239 -6
  89. package/dist/services/actionflow/components/action_eb_update_compiler.js.map +1 -1
  90. package/dist/services/actionflow/components/assign_var.d.ts +12 -0
  91. package/dist/services/actionflow/components/assign_var.d.ts.map +1 -0
  92. package/dist/services/actionflow/components/assign_var.js +133 -0
  93. package/dist/services/actionflow/components/assign_var.js.map +1 -0
  94. package/dist/services/actionflow/components/custom_set_form.d.ts +10 -0
  95. package/dist/services/actionflow/components/custom_set_form.d.ts.map +1 -0
  96. package/dist/services/actionflow/components/custom_set_form.js +65 -0
  97. package/dist/services/actionflow/components/custom_set_form.js.map +1 -0
  98. package/dist/services/actionflow/components/custom_trigger.d.ts +2 -2
  99. package/dist/services/actionflow/components/custom_trigger.d.ts.map +1 -1
  100. package/dist/services/actionflow/components/custom_trigger.js +7 -10
  101. package/dist/services/actionflow/components/custom_trigger.js.map +1 -1
  102. package/dist/services/actionflow/components/enquiry_form.js +1 -1
  103. package/dist/services/actionflow/components/enquiry_form.js.map +1 -1
  104. package/dist/services/actionflow/components/index.d.ts.map +1 -1
  105. package/dist/services/actionflow/components/index.js +9 -0
  106. package/dist/services/actionflow/components/index.js.map +1 -1
  107. package/dist/services/actionflow/components/output.d.ts.map +1 -1
  108. package/dist/services/actionflow/components/output.js +6 -1
  109. package/dist/services/actionflow/components/output.js.map +1 -1
  110. package/dist/services/actionflow/context_preflight.d.ts.map +1 -1
  111. package/dist/services/actionflow/context_preflight.js +13 -6
  112. package/dist/services/actionflow/context_preflight.js.map +1 -1
  113. package/dist/services/actionflow/context_provider.d.ts.map +1 -1
  114. package/dist/services/actionflow/context_provider.js +3 -2
  115. package/dist/services/actionflow/context_provider.js.map +1 -1
  116. package/dist/services/actionflow/dynamic_resources.d.ts +7 -1
  117. package/dist/services/actionflow/dynamic_resources.d.ts.map +1 -1
  118. package/dist/services/actionflow/dynamic_resources.js +65 -8
  119. package/dist/services/actionflow/dynamic_resources.js.map +1 -1
  120. package/dist/services/actionflow/ebuilder_source.d.ts +19 -0
  121. package/dist/services/actionflow/ebuilder_source.d.ts.map +1 -0
  122. package/dist/services/actionflow/ebuilder_source.js +78 -0
  123. package/dist/services/actionflow/ebuilder_source.js.map +1 -0
  124. package/dist/services/actionflow/form_source.d.ts +76 -0
  125. package/dist/services/actionflow/form_source.d.ts.map +1 -1
  126. package/dist/services/actionflow/form_source.js +195 -1
  127. package/dist/services/actionflow/form_source.js.map +1 -1
  128. package/dist/services/actionflow/formula_service.d.ts +4 -1
  129. package/dist/services/actionflow/formula_service.d.ts.map +1 -1
  130. package/dist/services/actionflow/formula_service.js +97 -23
  131. package/dist/services/actionflow/formula_service.js.map +1 -1
  132. package/dist/services/actionflow/preflight_service.d.ts +6 -0
  133. package/dist/services/actionflow/preflight_service.d.ts.map +1 -1
  134. package/dist/services/actionflow/preflight_service.js +211 -3
  135. package/dist/services/actionflow/preflight_service.js.map +1 -1
  136. package/dist/services/actionflow/workflow_compiler.d.ts.map +1 -1
  137. package/dist/services/actionflow/workflow_compiler.js +83 -15
  138. package/dist/services/actionflow/workflow_compiler.js.map +1 -1
  139. package/dist/services/designer-css.d.ts +89 -0
  140. package/dist/services/designer-css.d.ts.map +1 -0
  141. package/dist/services/designer-css.js +163 -0
  142. package/dist/services/designer-css.js.map +1 -0
  143. package/dist/services/dom-structure.d.ts +42 -0
  144. package/dist/services/dom-structure.d.ts.map +1 -0
  145. package/dist/services/dom-structure.js +251 -0
  146. package/dist/services/dom-structure.js.map +1 -0
  147. package/dist/services/form-create.d.ts +2 -1
  148. package/dist/services/form-create.d.ts.map +1 -1
  149. package/dist/services/form-create.js.map +1 -1
  150. package/dist/services/form-ebuilder-columns.d.ts +50 -0
  151. package/dist/services/form-ebuilder-columns.d.ts.map +1 -0
  152. package/dist/services/form-ebuilder-columns.js +68 -0
  153. package/dist/services/form-ebuilder-columns.js.map +1 -0
  154. package/dist/services/form-field-drop.d.ts +30 -1
  155. package/dist/services/form-field-drop.d.ts.map +1 -1
  156. package/dist/services/form-field-drop.js +60 -0
  157. package/dist/services/form-field-drop.js.map +1 -1
  158. package/dist/services/form-field-patch.d.ts +69 -0
  159. package/dist/services/form-field-patch.d.ts.map +1 -0
  160. package/dist/services/form-field-patch.js +117 -0
  161. package/dist/services/form-field-patch.js.map +1 -0
  162. package/dist/services/form-i18n-label.d.ts +48 -0
  163. package/dist/services/form-i18n-label.d.ts.map +1 -0
  164. package/dist/services/form-i18n-label.js +91 -0
  165. package/dist/services/form-i18n-label.js.map +1 -0
  166. package/dist/services/form-nlist.d.ts +1 -0
  167. package/dist/services/form-nlist.d.ts.map +1 -1
  168. package/dist/services/form-nlist.js +32 -5
  169. package/dist/services/form-nlist.js.map +1 -1
  170. package/dist/services/form-style-template.d.ts +6 -2
  171. package/dist/services/form-style-template.d.ts.map +1 -1
  172. package/dist/services/form-style-template.js +8 -4
  173. package/dist/services/form-style-template.js.map +1 -1
  174. package/dist/services/form-sub-detail.d.ts +51 -3
  175. package/dist/services/form-sub-detail.d.ts.map +1 -1
  176. package/dist/services/form-sub-detail.js +183 -20
  177. package/dist/services/form-sub-detail.js.map +1 -1
  178. package/dist/services/formula-detail.d.ts +68 -5
  179. package/dist/services/formula-detail.d.ts.map +1 -1
  180. package/dist/services/formula-detail.js +110 -44
  181. package/dist/services/formula-detail.js.map +1 -1
  182. package/dist/services/menu-catalog.d.ts +84 -0
  183. package/dist/services/menu-catalog.d.ts.map +1 -0
  184. package/dist/services/menu-catalog.js +183 -0
  185. package/dist/services/menu-catalog.js.map +1 -0
  186. package/dist/services/rich-text.d.ts +33 -0
  187. package/dist/services/rich-text.d.ts.map +1 -0
  188. package/dist/services/rich-text.js +134 -0
  189. package/dist/services/rich-text.js.map +1 -0
  190. package/dist/services/workflow-add-step.d.ts +45 -0
  191. package/dist/services/workflow-add-step.d.ts.map +1 -0
  192. package/dist/services/workflow-add-step.js +122 -0
  193. package/dist/services/workflow-add-step.js.map +1 -0
  194. package/dist/services/workflow-assign-flow.d.ts +109 -0
  195. package/dist/services/workflow-assign-flow.d.ts.map +1 -0
  196. package/dist/services/workflow-assign-flow.js +306 -0
  197. package/dist/services/workflow-assign-flow.js.map +1 -0
  198. package/dist/services/workflow-drawback.d.ts +19 -0
  199. package/dist/services/workflow-drawback.d.ts.map +1 -0
  200. package/dist/services/workflow-drawback.js +59 -0
  201. package/dist/services/workflow-drawback.js.map +1 -0
  202. package/dist/services/workflow-links.d.ts +51 -0
  203. package/dist/services/workflow-links.d.ts.map +1 -0
  204. package/dist/services/workflow-links.js +162 -0
  205. package/dist/services/workflow-links.js.map +1 -0
  206. package/dist/services/workflow-node-layout.d.ts +45 -4
  207. package/dist/services/workflow-node-layout.d.ts.map +1 -1
  208. package/dist/services/workflow-node-layout.js +142 -41
  209. package/dist/services/workflow-node-layout.js.map +1 -1
  210. package/dist/services/workflow-node-menu.d.ts +57 -0
  211. package/dist/services/workflow-node-menu.d.ts.map +1 -0
  212. package/dist/services/workflow-node-menu.js +144 -0
  213. package/dist/services/workflow-node-menu.js.map +1 -0
  214. package/dist/services/workflow-odoc-setting.d.ts +43 -0
  215. package/dist/services/workflow-odoc-setting.d.ts.map +1 -0
  216. package/dist/services/workflow-odoc-setting.js +100 -0
  217. package/dist/services/workflow-odoc-setting.js.map +1 -0
  218. package/dist/services/workflow-tab-config.d.ts +54 -0
  219. package/dist/services/workflow-tab-config.d.ts.map +1 -0
  220. package/dist/services/workflow-tab-config.js +137 -0
  221. package/dist/services/workflow-tab-config.js.map +1 -0
  222. package/dist/types.d.ts +5 -1
  223. package/dist/types.d.ts.map +1 -1
  224. package/package.json +1 -1
  225. package/skill-docs/SKILL.md +8 -7
  226. package/skill-docs/_catalog.md +81 -77
  227. package/skill-docs/actionflows/SKILL.md +170 -167
  228. package/skill-docs/actionflows/references/components/ebuilder/ActionEbAdd.md +39 -2
  229. package/skill-docs/actionflows/references/components/ebuilder/ActionEbUpdate.md +42 -0
  230. package/skill-docs/actionflows/references/components/ebuilder/EventButton.md +33 -33
  231. package/skill-docs/actionflows/references/components/logic/Output.md +2 -0
  232. package/skill-docs/actionflows/references/components/trigger/CustomTrigger.md +16 -11
  233. package/skill-docs/assets/dom-structure/Bar.json +341 -0
  234. package/skill-docs/assets/dom-structure/BarStack.json +341 -0
  235. package/skill-docs/assets/dom-structure/Bubble.json +323 -0
  236. package/skill-docs/assets/dom-structure/Calendar.json +515 -0
  237. package/skill-docs/assets/dom-structure/Circular.json +337 -0
  238. package/skill-docs/assets/dom-structure/CollapsePanel.json +289 -0
  239. package/skill-docs/assets/dom-structure/Comment.json +617 -0
  240. package/skill-docs/assets/dom-structure/CountDown.json +755 -0
  241. package/skill-docs/assets/dom-structure/DigitalPanel.json +191 -0
  242. package/skill-docs/assets/dom-structure/EbButton.json +387 -0
  243. package/skill-docs/assets/dom-structure/FastCreate.json +242 -0
  244. package/skill-docs/assets/dom-structure/Gauge.json +282 -0
  245. package/skill-docs/assets/dom-structure/HBar.json +336 -0
  246. package/skill-docs/assets/dom-structure/HBarStack.json +337 -0
  247. package/skill-docs/assets/dom-structure/Line.json +341 -0
  248. package/skill-docs/assets/dom-structure/NList.json +712 -0
  249. package/skill-docs/assets/dom-structure/NavBar.json +274 -0
  250. package/skill-docs/assets/dom-structure/NavPanel.json +390 -0
  251. package/skill-docs/assets/dom-structure/NewTab.json +606 -0
  252. package/skill-docs/assets/dom-structure/Nightingale.json +336 -0
  253. package/skill-docs/assets/dom-structure/PageHeader.json +205 -0
  254. package/skill-docs/assets/dom-structure/Picture.json +209 -0
  255. package/skill-docs/assets/dom-structure/Pie.json +338 -0
  256. package/skill-docs/assets/dom-structure/ProgressChart.json +299 -0
  257. package/skill-docs/assets/dom-structure/SearchGlobal.json +628 -0
  258. package/skill-docs/assets/dom-structure/Slide.json +489 -0
  259. package/skill-docs/assets/dom-structure/Treemap.json +324 -0
  260. package/skill-docs/references/common/guide-plan-template.md +254 -251
  261. package/skill-docs/references/common/ref-cli-commands.md +537 -519
  262. package/skill-docs/references/ebuilder-designer/guide-designer-components.md +12 -1
  263. package/skill-docs/references/ebuilder-designer/guide-designer-css.md +127 -0
  264. package/skill-docs/references/ebuilder-designer/guide-designer.md +6 -5
  265. package/skill-docs/references/form/guide-create-form.md +233 -232
  266. package/skill-docs/references/form/guide-form-formula-functions.md +11 -1
  267. package/skill-docs/references/form/guide-form-layout-planning.md +1 -1
  268. package/skill-docs/references/form/guide-form-linkage.md +28 -2
  269. package/skill-docs/references/form/guide-form-sub-detail.md +82 -0
  270. package/skill-docs/references/form/guide-list-custom-text.md +52 -0
  271. package/skill-docs/references/menu/system-menus.md +12 -0
  272. package/skill-docs/references/workflow/guide-workflow-auth-resp.md +198 -190
  273. package/skill-docs/references/workflow/guide-workflow-odoc.md +22 -2
  274. package/skill-docs/references/workflow/guide-workflow.md +25 -3
@@ -1,5 +1,6 @@
1
1
  import { AuthSession } from '../core/auth.js';
2
2
  import { ApiClient } from '../core/client.js';
3
+ import { createMultilangLabel, resolveLabelText } from '../services/form-i18n-label.js';
3
4
  export function registerFormValidateCommands(form, program) {
4
5
  const val = form.command('validate').description('字段查重校验规则(重名校验/重复日期,多字段 AND)');
5
6
  val.command('list')
@@ -26,10 +27,15 @@ export function registerFormValidateCommands(form, program) {
26
27
  console.log('当前表单无查重规则');
27
28
  return;
28
29
  }
30
+ // helpContent 存的是标签 id,解回文本再显示;老规则(存的中文原文)原样显示
31
+ const helpOf = new Map();
32
+ await Promise.all(rules.map(async (r) => {
33
+ helpOf.set(String(r.id), await resolveLabelText(client, baseUrl, r.helpContent, 'ebuilderform'));
34
+ }));
29
35
  for (const r of rules) {
30
36
  const method = r.treatmentMethod === 'REMINDER' ? '提醒' : '禁止提交';
31
37
  const fields = (r.checkFields || []).map((c) => c.fieldName).join(' + ');
32
- console.log(`[${r.id}] ${method} | ${fields} | ${r.helpContent || ''}`);
38
+ console.log(`[${r.id}] ${method} | ${fields} | ${helpOf.get(String(r.id)) || ''}`);
33
39
  }
34
40
  });
35
41
  val.command('add')
@@ -37,7 +43,7 @@ export function registerFormValidateCommands(form, program) {
37
43
  .argument('<objId>', '表单 objId')
38
44
  .argument('<appId>', '应用 ID')
39
45
  .argument('<fields...>', '查重字段名(可多个,如 "填报人" "工时日期")')
40
- .option('--help <text>', '重复时的提示内容', '字段值不允许重复')
46
+ .option('--help <text>', '重复时的提示内容(会建一条多语言标签,存的是标签 id)', '字段值不允许重复')
41
47
  .option('--remind', '重复时仅提醒允许提交(缺省禁止提交 NOSUBMISSION)')
42
48
  .action(async (objId, appId, fieldNames, cmdOpts) => {
43
49
  const opts = program.opts();
@@ -71,11 +77,13 @@ export function registerFormValidateCommands(form, program) {
71
77
  }
72
78
  checkFields.push(c);
73
79
  }
80
+ // 提示语必须走多语言标签:直接传文本会被服务端拒(提示内容格式不正确。)
81
+ const helpLabelId = await createMultilangLabel(client, baseUrl, String(cmdOpts.help || '字段值不允许重复'), 'ebuilderform');
74
82
  const payload = {
75
83
  module: 'ebuilderform', formId,
76
84
  treatmentMethod: cmdOpts.remind ? 'REMINDER' : 'NOSUBMISSION',
77
85
  remindTime: 'SUB_REMIND', taggingColour: '#000000', subFieldCheckType: 'ALL_DATA',
78
- helpContent: cmdOpts.help,
86
+ helpContent: helpLabelId,
79
87
  checkFields,
80
88
  };
81
89
  const res = await client.post(`${baseUrl}/api/ebuilder/form/validate/save`, payload);
@@ -1 +1 @@
1
- {"version":3,"file":"form-validate.js","sourceRoot":"","sources":["../../src/commands/form-validate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"form-validate.js","sourceRoot":"","sources":["../../src/commands/form-validate.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"form.d.ts","sourceRoot":"","sources":["../../src/commands/form.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA8CpC;0DAC0D;AAC1D,eAAO,MAAM,kBAAkB,EAAE,MAAM,EAI7B,CAAC;AAwHX,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CA4vG9D"}
1
+ {"version":3,"file":"form.d.ts","sourceRoot":"","sources":["../../src/commands/form.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiDpC;0DAC0D;AAC1D,eAAO,MAAM,kBAAkB,EAAE,MAAM,EAI7B,CAAC;AAwHX,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAq0G9D"}
@@ -3,10 +3,13 @@ import { AuthSession } from '../core/auth.js';
3
3
  import { ApiClient } from '../core/client.js';
4
4
  import { toColumnName, toTableName } from '../utils/column-name.js';
5
5
  import { createCustomPhysicalForm, addInitialFieldsToCustomPhysicalForm, placeholderFromFormat, reapplyGroupLayout } from '../services/form-create.js';
6
- import { FormSubDetailService } from '../services/form-sub-detail.js';
6
+ import { FormSubDetailService, resolveDetailTable } from '../services/form-sub-detail.js';
7
7
  import { RICH_TYPE_MAP, getRichType, richIdUnits, BROWSER_KINDS } from '../services/rich-types.js';
8
8
  import { dropFieldComponents, prepareLayoutForSave } from '../services/form-field-drop.js';
9
9
  import { describeEditBaseFailure, resolveEditBase as resolveEditBasePure } from '../services/form-edit-base.js';
10
+ import { applyFieldPatches, platformFieldShape } from '../services/form-field-patch.js';
11
+ import { ensureDisplayColumns } from '../services/form-ebuilder-columns.js';
12
+ import { buildFormulaParameters, defaultReturnType } from '../services/formula-detail.js';
10
13
  import { registerOptionTemplateCommand } from './form-option-template.js';
11
14
  /**
12
15
  * componentKey 大小写归一:用户/示例常写 "Textarea"/"Ebuilder" 等小写变体,但代码各处
@@ -1645,8 +1648,9 @@ export function registerFormCommands(program) {
1645
1648
  catch { /* 读不到字段则公式会报"引用字段不存在" */ }
1646
1649
  for (const fd of formulaDefs) {
1647
1650
  try {
1651
+ // formula 写字符串时**不再默认 Number** —— 返回类型留空,由下面按目标字段类型推断。
1648
1652
  const formula = (typeof fd.formula === 'string')
1649
- ? { expression: fd.formula, returnType: 'Number' }
1653
+ ? { expression: fd.formula }
1650
1654
  : (fd.formula || {});
1651
1655
  const expression = formula.expression || formula.formulaExpress || '';
1652
1656
  if (!expression) {
@@ -1667,52 +1671,25 @@ export function registerFormCommands(program) {
1667
1671
  continue;
1668
1672
  }
1669
1673
  const targetFieldId = String(targetField.fieldId);
1670
- // 解析 {主表.字段名} / {明细表名.字段名} 引用(不去重:同一字段引用多次时每个出现位置
1671
- // 都要一个参数,否则平台报「参数列表与执行语句不一致」)
1672
- const refRegex = /\{(?:主表|([^.}]+))\.([^}]+)\}/g;
1673
- const refNames = [];
1674
- let rm;
1675
- while ((rm = refRegex.exec(expression)) !== null) {
1676
- const table = rm[1] ? rm[1].trim() : '主表';
1677
- const field = rm[2].trim();
1678
- refNames.push({ table, field });
1679
- }
1680
- const parameters = [];
1681
- let refMissing = false;
1682
- for (const ref of refNames) {
1683
- let rf;
1684
- if (ref.table === '主表') {
1685
- rf = allFields.find((f) => f.fieldName === ref.field || f.title === ref.field || String(f.fieldId) === ref.field);
1686
- }
1687
- else {
1688
- const dt = detailFields.find((d) => d.name === ref.table || String(d.id) === ref.table);
1689
- rf = dt && (dt.fields || []).find((f) => f.fieldName === ref.field || String(f.fieldId) === ref.field);
1690
- }
1691
- if (!rf) {
1692
- console.error(` ⚠ 公式引用字段不存在: ${ref.table}.${ref.field}`);
1693
- refMissing = true;
1694
- break;
1695
- }
1696
- const param = {
1697
- fieldId: String(rf.fieldId), formId: resolvedFormId, module: 'ebuilderform',
1698
- properKey: rf.fieldKey || rf.type || 'Text', title: rf.title || rf.fieldName,
1699
- name: rf.fieldName || rf.title, appId, id: null,
1700
- };
1701
- if (ref.table !== '主表') {
1702
- const dt = detailFields.find((d) => d.name === ref.table || String(d.id) === ref.table);
1703
- if (dt) {
1704
- param.sFormId = String(dt.id);
1705
- param.sFormName = dt.name;
1706
- }
1707
- }
1708
- parameters.push(param);
1709
- }
1710
- if (refMissing)
1674
+ // 引用解析与归一化**统一走 services/formula-detail.ts**,与 `form formula set` 同一套:
1675
+ // 两种写法都收(`{主表.x}` 与编辑器里的 `[x]`),方括号一律归一化成花括号再存 ——
1676
+ // 方括号直接下发会「保存成功但字段没接上」;参数按出现位置逐个给,不去重。
1677
+ const parsed = await buildFormulaParameters(client, baseUrl, objId, appId, resolvedFormId, expression);
1678
+ if (parsed.errors.length > 0) {
1679
+ for (const e of parsed.errors)
1680
+ console.error(` ⚠ ${e}`);
1711
1681
  continue;
1682
+ }
1683
+ for (const w of parsed.warnings)
1684
+ console.error(` ⚠ ${w}`);
1685
+ const parameters = parsed.parameters;
1712
1686
  const formulaName = formula.name || `公式_${fd.fieldName}`;
1713
1687
  const savePayload = {
1714
- expressSql: expression, name: formulaName, parameters,
1715
- returnType: formula.returnType || 'Number', validateType: 'normal',
1688
+ expressSql: parsed.normalizedExpression, name: formulaName, parameters,
1689
+ // 返回类型:显式给了就用,否则按目标字段类型推断。此前一律 Number,
1690
+ // 给文本/日期字段挂公式必被平台拒(「公式计算结果必须为: 数字」)。
1691
+ returnType: formula.returnType || defaultReturnType(targetField.fieldKey || targetField.type),
1692
+ validateType: 'normal',
1716
1693
  referenceType: 'assign',
1717
1694
  extendParam: JSON.stringify({ exceptIds: targetFieldId, createType: 'once' }),
1718
1695
  formulaId: null, dataSources: [], formulaType: 'normal',
@@ -2144,7 +2121,9 @@ export function registerFormCommands(program) {
2144
2121
  .option('--max-field <field>', 'Date/DateTime 日期限制:最晚不得晚于该字段(字段名,max.dateField)')
2145
2122
  .option('--precision <n>', '小数位数(Number/Money 类型,缺省 Number=0 整数、Money=2、百分比=1)')
2146
2123
  .option('--percent', 'Number 百分比显示(numberType=percentage)')
2147
- .option('--default <value>', 'Number/Money 默认值(content + isDefault,如 工时单价默认 1000)')
2124
+ .option('--default <value>', '默认值(Text / TextArea / Number / Money,如 工时单价默认 1000)')
2125
+ .option('--data-key <key>', '数据库字段名(默认按字段名生成拼音;字母数字下划线,不以数字开头)')
2126
+ .option('--desc <text>', '字段描述(设计器字段属性里的「描述」)')
2148
2127
  .option('--delimiter', 'Number/Money 千分位(Money 默认开,--no-delimiter 关闭)')
2149
2128
  .option('--capital', 'Number/Money 大写金额显示')
2150
2129
  .option('--sub-form-id <id>', '明细表 subFormId(在指定明细表里加字段)')
@@ -2197,18 +2176,19 @@ export function registerFormCommands(program) {
2197
2176
  dataKey: colName,
2198
2177
  columnName: colName,
2199
2178
  };
2200
- // 明细表字段:--sub-form-id 时 formTableId 用明细表的,jsonObj 带 subFormId
2179
+ // 明细表字段:--sub-form-id 时 jsonObj 带 subFormId —— **字段落点由它决定**。
2180
+ // 必须用 resolveDetailTable 而不是直接查 getEbField:后者列不出空明细表,
2181
+ // 用户把明细字段删光后就再也加不回去(详见 services/form-sub-detail.ts)。
2201
2182
  if (cmdOpts.subFormId) {
2202
- const eb = await client.post(`${baseUrl}/api/bs/esb/setting/component/getEbField`, { tableId: objId, appId });
2203
- const dt = (eb?.data?.detail || []).find((d) => String(d.detailTableId) === String(cmdOpts.subFormId));
2204
- if (!dt) {
2205
- console.error(`未找到明细表 subFormId=${cmdOpts.subFormId}`);
2183
+ const sub = await resolveDetailTable(client, baseUrl, appId, objId, formId, cmdOpts.subFormId);
2184
+ if (!sub) {
2185
+ console.error(`未找到明细表 subFormId=${cmdOpts.subFormId}(getEbField 与 querySubForms 均无此表,请确认 id)`);
2206
2186
  process.exit(1);
2207
2187
  }
2208
2188
  Object.assign(jsonObj, { subFormId: cmdOpts.subFormId });
2209
- const detailFormTableId = dt.fields?.[0]?.formTableId || '';
2210
- if (detailFormTableId)
2211
- jsonObj.formTableId = detailFormTableId;
2189
+ // 空表拿不到物理表 id,保持主表的值不动:实测带主表 formTableId 一样落进明细表。
2190
+ if (sub.formTableId)
2191
+ jsonObj.formTableId = sub.formTableId;
2212
2192
  }
2213
2193
  // 富组件:映射到平台真实 type/componentKey + 附加配置(对齐 batch/save/formField 抓包)。
2214
2194
  // 之前 jsonObj 只有 type 没有 componentKey → 平台 FormFieldDto.getComponentKey() 为 null → NPE。
@@ -2537,6 +2517,21 @@ export function registerFormCommands(program) {
2537
2517
  console.error('提示:模板下拉当前按单选(currentLevel=1)绑定;多选+模板组合未验证');
2538
2518
  }
2539
2519
  }
2520
+ // 默认值 / 数据库字段名 / 描述:与 edit-field 共用同一套补丁规则。
2521
+ // 放在最后 —— 前面各类型分支会写 content(如 TextArea 恒置 ''),先打补丁会被冲掉。
2522
+ const patch = applyFieldPatches(jsonObj, {
2523
+ defaultValue: cmdOpts.default,
2524
+ dataKey: cmdOpts.dataKey,
2525
+ desc: cmdOpts.desc,
2526
+ });
2527
+ if (patch.errors.length > 0) {
2528
+ for (const e of patch.errors)
2529
+ console.error(` ❌ ${e}`);
2530
+ console.error(' 已中止,未做任何改动。');
2531
+ process.exit(1);
2532
+ }
2533
+ for (const w of patch.warnings)
2534
+ console.error(` ⚠ ${w}`);
2540
2535
  const payload = {
2541
2536
  formId, module: 'ebuilderform',
2542
2537
  customParam: { appId, objId },
@@ -2546,26 +2541,13 @@ export function registerFormCommands(program) {
2546
2541
  if (data?.code === 200 && data?.status) {
2547
2542
  const msg = opts.json ? JSON.stringify({ fieldId, fieldName }) : `字段已添加: ${fieldName} (fieldId=${fieldId})`;
2548
2543
  console.log(msg);
2549
- // 关联浏览弹窗显示列:add-field 的 EBuilder 字段自动配 ffDisplayColumns = 目标表全部业务字段(去系统字段),
2550
- // 对齐 create Step2。直接带 ffDisplayColumns 进 jsonObj 不落库,需 getFormField 完整配置 + 单独 save。
2544
+ // 关联浏览弹窗显示列:新建的 EBuilder 字段自动配 ffDisplayColumns = 目标表业务字段(去系统字段,最多 5 个)。
2545
+ // 直接带 ffDisplayColumns 进 jsonObj 不落库,需 getFormField 完整配置 + 单独 save。
2551
2546
  if (fieldType === 'EBuilder' && sformId) {
2552
2547
  try {
2553
- const tfd = await client.post(`${baseUrl}/api/ebuilder/form/dataset/v1/getFields`, {
2554
- objId: sformId, userid: auth.userId, tenantKey: auth.tenantKey,
2555
- });
2556
- // 默认显示列最多 5 个(去系统字段后取前 5 个业务字段)
2557
- const bizCols = (tfd?.data?.mainFields || [])
2558
- .filter((f) => /^\d+$/.test(String(f.fieldId)))
2559
- .map((f) => ({ id: String(f.fieldId), name: String(f.fieldName || f.title || '') }))
2560
- .slice(0, 5);
2561
- if (bizCols.length) {
2562
- const gf = await client.post(`${baseUrl}/api/ebuilder/form/form/field/manage/getFormField`, { module: 'ebuilderform', formTableField: { formField: { id: fieldId, form: { id: formId } } } }, { ebbusinessid: formId });
2563
- const full = gf?.data || {};
2564
- if (full.fieldId) {
2565
- await client.post(`${baseUrl}/api/ebuilder/form/form/field/manage/saveFormFieldNew?apid=${appId}`, { formId, module: 'ebuilderform', customParam: { appId, objId }, jsonObj: JSON.stringify({ ...full, ffDisplayColumns: bizCols }) }, { ebbusinessid: formId });
2566
- console.error(` 关联显示列已自动配置 (${bizCols.length} 列)`);
2567
- }
2568
- }
2548
+ const applied = await ensureDisplayColumns(client, baseUrl, appId, objId, formId, fieldId, sformId, auth.userId, auth.tenantKey);
2549
+ if (applied)
2550
+ console.error(` 关联显示列已自动配置 (${applied} 列)`);
2569
2551
  }
2570
2552
  catch (e) {
2571
2553
  console.error(` 关联显示列设置失败: ${e.message}`);
@@ -2663,6 +2645,7 @@ export function registerFormCommands(program) {
2663
2645
  .option('--title <title>', '修改字段标题')
2664
2646
  .option('--type <type>', '修改字段类型(如 Text/Number/Date/Select/Department;取值同 form add-field 的 <fieldType>)。'
2665
2647
  + '⚠ 字段已有数据时平台会拒绝')
2648
+ .option('--format <fmt>', '日期精度格式,配合 --type Date/DateTime(缺省 Date=yyyy-MM-dd、DateTime=yyyy-MM-dd HH:mm)')
2666
2649
  .option('--required', '设为必填')
2667
2650
  .option('--no-required', '取消必填')
2668
2651
  .option('--sform-id <id>', 'EBuilder 关联的目标表单 objId(更新关联)')
@@ -2672,6 +2655,11 @@ export function registerFormCommands(program) {
2672
2655
  .option('--relate-from-source <fieldId>', '目标表单源字段 fieldId(复制哪个字段的值)')
2673
2656
  .option('--multiple', '设为多选(人员/部门/EBuilder/关联类字段)')
2674
2657
  .option('--no-multiple', '设为单选(人员/部门/EBuilder/关联类字段)')
2658
+ .option('--max-len <n>', '最大长度(正整数)。日期/时间/省市区/身份证/电子发票/下拉多选这几类没有该属性')
2659
+ .option('--default <value>', '默认值(Text / TextArea / Number / Money)')
2660
+ .option('--clear-default', '清空默认值')
2661
+ .option('--data-key <key>', '数据库字段名(同时改 dataKey 与 columnName;字段已有数据时平台会拒绝)')
2662
+ .option('--desc <text>', '字段描述(设计器字段属性里的「描述」)')
2675
2663
  .action(async (objId, appId, fieldId, editOpts) => {
2676
2664
  const opts = program.opts();
2677
2665
  const auth = await AuthSession.fromOptions(opts);
@@ -2738,16 +2726,10 @@ export function registerFormCommands(program) {
2738
2726
  console.error(`读到的字段定义里没有 type(fieldId=${fieldId}),拒绝写回 —— 全量覆盖会把它改成默认类型。`);
2739
2727
  process.exit(1);
2740
2728
  }
2741
- // 兜底补 componentKey:saveFormFieldNew 要求(getComponentKey() 为 null 会 NPE)。
2742
- // getFields 兜底路径建不出 componentKey,这里按类型映射补上。
2729
+ // 兜底补 componentKey:saveFormFieldNew 要求非空(getComponentKey() 为 null 直接 500)。
2730
+ // 用平台归一的 componentKey(`platformFieldShape`),不是 CLI 类型名 —— 见下方改类型分支的说明。
2743
2731
  if (!jsonObj.componentKey) {
2744
- const CK = {
2745
- Date: 'DateComponent', DateTime: 'DateComponent', Text: 'Text', Textarea: 'TextArea', Number: 'NumberComponent',
2746
- Money: 'Money', Select: 'Select', CheckBox: 'CheckBox', RadioBox: 'RadioBox',
2747
- Employee: 'Employee', Department: 'Department', EBuilder: 'Ebuilder',
2748
- Phone: 'Phone', Email: 'Email', Mobile: 'Mobile', Location: 'Location', Switch: 'Switch', IDCard: 'IDCard',
2749
- };
2750
- jsonObj.componentKey = CK[jsonObj.type] || jsonObj.type;
2732
+ jsonObj.componentKey = platformFieldShape(String(jsonObj.type)).componentKey;
2751
2733
  }
2752
2734
  // Apply title change
2753
2735
  if (editOpts.title) {
@@ -2758,6 +2740,7 @@ export function registerFormCommands(program) {
2758
2740
  // `type` 取值与 add-field 一致(CLI 规范名;富组件换成 platformType + componentKey),
2759
2741
  // 回读时对应显示为 `form read` 的 fieldKey(如 Number→NumberComponent)。
2760
2742
  // ⚠ 字段**已存在数据**时平台会拒绝改结构(报「此列已存在数据不可修改数据库字段名称」)。
2743
+ let typeChangeApplied = false;
2761
2744
  if (editOpts.type) {
2762
2745
  const targetType = canonComponentKey(editOpts.type);
2763
2746
  assertFieldType(targetType, 'edit-field ');
@@ -2766,14 +2749,72 @@ export function registerFormCommands(program) {
2766
2749
  console.error(`改成 ${targetType} 需要同时指定 --sform-id <目标表 objId>(Flow 用流程绑定的表单 objId)`);
2767
2750
  process.exit(1);
2768
2751
  }
2769
- if (targetType !== String(jsonObj.type)) {
2770
- const richTarget = getRichType(targetType);
2771
- jsonObj.type = richTarget ? richTarget.platformType : targetType;
2772
- if (richTarget)
2752
+ const richTarget = getRichType(targetType);
2753
+ const shape = platformFieldShape(targetType);
2754
+ const desiredFormat = editOpts.format || shape.format;
2755
+ // 变更判定要按**平台形状**比,不能只比类型名:
2756
+ // 「日期」与「日期时间」在存储层同为 `type=Date` + `componentKey=DateComponent`,
2757
+ // 只有 `format` 不同(yyyy-MM-dd vs yyyy-MM-dd HH:mm)。只比 type 会把
2758
+ // 「DateTime → Date」判成没变化而静默跳过,精度留在原地 —— 命令报成功、字段没动。
2759
+ const typeChanged = richTarget
2760
+ ? targetType !== String(jsonObj.componentKey ?? '')
2761
+ : shape.type !== String(jsonObj.type)
2762
+ || shape.componentKey !== String(jsonObj.componentKey ?? '')
2763
+ || (shape.format !== undefined && String(desiredFormat) !== String(jsonObj.format ?? ''));
2764
+ if (editOpts.format && shape.format === undefined) {
2765
+ console.error(`--format 只对 Date / DateTime 有意义,${targetType} 没有这个属性,已忽略。`);
2766
+ }
2767
+ typeChangeApplied = typeChanged;
2768
+ if (typeChanged) {
2769
+ if (richTarget) {
2770
+ jsonObj.type = richTarget.platformType;
2773
2771
  jsonObj.componentKey = richTarget.platformComponentKey;
2774
- // 旧类型残留的组件键会在回读时盖过新类型,清掉让平台按新 type 推导
2775
- else
2776
- delete jsonObj.componentKey;
2772
+ }
2773
+ else {
2774
+ // 非富组件:写**平台归一形状**,不是 CLI 类型名。
2775
+ // 曾经的 bug:这里写的是 `delete jsonObj.componentKey`(想让平台按新 type 推导),
2776
+ // 而上面那段兜底补 componentKey 在**这之前**就执行完了 → 改完没人再补 →
2777
+ // 全量覆盖时缺键 → `getComponentKey() is null` 500「程序异常」,字段改不动。
2778
+ // 而平台的 componentKey 也不是类型名:送 `componentKey=Date` 配 `type=DateTime`
2779
+ // 照样 500,必须是 `DateComponent`。
2780
+ jsonObj.type = shape.type;
2781
+ jsonObj.componentKey = shape.componentKey;
2782
+ // 日期/日期时间/时间:精度全靠 format,平台**不会**补默认值
2783
+ // (只送 type+componentKey 会存成 format 为空)。所以一起写。
2784
+ if (shape.format !== undefined)
2785
+ jsonObj.format = desiredFormat;
2786
+ // 切到用不到 format 的类型时清掉旧值,免得留个说不清来路的精度配置
2787
+ else if (jsonObj.format !== undefined)
2788
+ delete jsonObj.format;
2789
+ // 日期区间还要 `start`/`end` 两个 DateComponent 子对象(各带一个新 fieldId)。
2790
+ // 少了平台直接 500:`DateIntervalFieldDto.getEnd() is null`。
2791
+ // 子 id 对齐 add-field 的建法现取。
2792
+ if (targetType === 'DateRange' || targetType === 'DateInterval') {
2793
+ const idsRes = await client.post(`${baseUrl}/api/form/local/generatorIds?size=2&apid=${appId}`, {});
2794
+ const ids = (idsRes?.data?.generatorIds || []).map(String);
2795
+ if (ids.length < 2) {
2796
+ console.error('日期区间需要两个子字段 ID,服务端未返回,已中止(字段未改动)。');
2797
+ process.exit(1);
2798
+ }
2799
+ const fmt = desiredFormat || 'yyyy-MM-dd';
2800
+ const rangeTitle = String(jsonObj.title || '');
2801
+ const start = {
2802
+ componentKey: 'DateComponent', content: '', describe: '', earlyDate: 'false',
2803
+ format: fmt, isDefault: 'false', lateDate: 'false',
2804
+ placeholder: placeholderFromFormat(fmt),
2805
+ position: '', relateMultiple: 'false', required: 'false', size: 'medium',
2806
+ title: `${rangeTitle}(开始时间)`, fieldId: ids[0],
2807
+ min: { type: 'currentHour' }, max: { type: 'currentHour' },
2808
+ };
2809
+ Object.assign(jsonObj, {
2810
+ isDefault: false,
2811
+ start,
2812
+ end: { ...start, title: `${rangeTitle}(结束时间)`, fieldId: ids[1] },
2813
+ hasDisplayFormat: true,
2814
+ rangeInterval: { limitType: 'max', timeUnit: 'day' },
2815
+ });
2816
+ }
2817
+ }
2777
2818
  // 富组件还要补**附加配置**,否则改出来的字段是残缺的:
2778
2819
  // add-field 走的是同一张表的 build(),两边不一致会导致「新建的对、改类型的错」
2779
2820
  // (实测 Time:改出来缺 minuteStep/timePanelStyle/defaultExtend,earlyDate/lateDate
@@ -2942,6 +2983,23 @@ export function registerFormCommands(program) {
2942
2983
  };
2943
2984
  }
2944
2985
  }
2986
+ // 长度 / 默认值 / 数据库字段名 / 描述:共用一套补丁规则(哪些类型适用、取值边界)。
2987
+ // 放在类型变更之后 —— 改完 type 才知道该不该放行 maxLen 这类按类型受限的属性。
2988
+ const patch = applyFieldPatches(jsonObj, {
2989
+ maxLen: editOpts.maxLen,
2990
+ defaultValue: editOpts.default,
2991
+ clearDefault: editOpts.clearDefault,
2992
+ dataKey: editOpts.dataKey,
2993
+ desc: editOpts.desc,
2994
+ });
2995
+ if (patch.errors.length > 0) {
2996
+ for (const e of patch.errors)
2997
+ console.error(` ❌ ${e}`);
2998
+ console.error(' 已中止,未做任何改动。');
2999
+ process.exit(1);
3000
+ }
3001
+ for (const w of patch.warnings)
3002
+ console.error(` ⚠ ${w}`);
2945
3003
  const payload = {
2946
3004
  formId, module: 'ebuilderform',
2947
3005
  customParam: { appId, objId: resolvedObjId },
@@ -2952,8 +3010,11 @@ export function registerFormCommands(program) {
2952
3010
  const changes = [];
2953
3011
  if (editOpts.title)
2954
3012
  changes.push(`title="${editOpts.title}"`);
2955
- if (editOpts.type)
2956
- changes.push(`type=${editOpts.type}`);
3013
+ // 只有**真的换了形状**才回显类型。原样重跑同一类型(尤其 Date/DateTime 在存储层同为
3014
+ // type=Date)时没做任何改动,回显「type=…」会让人以为写过了。
3015
+ if (editOpts.type) {
3016
+ changes.push(typeChangeApplied ? `type=${editOpts.type}` : `type=${editOpts.type}(未变化)`);
3017
+ }
2957
3018
  if (editOpts.required)
2958
3019
  changes.push('required');
2959
3020
  if (editOpts.noRequired)
@@ -2966,6 +3027,23 @@ export function registerFormCommands(program) {
2966
3027
  changes.push(`relateFrom ${editOpts.relateFrom}→${editOpts.relateFromSource || ''}`);
2967
3028
  if (editOpts.multiple !== undefined)
2968
3029
  changes.push(editOpts.multiple ? 'multiple' : '!multiple');
3030
+ changes.push(...patch.applied);
3031
+ // EBuilder 字段的浏览显示列:add-field 建出来的会自动配,edit-field 改出来的此前漏了这一步
3032
+ // —— 字段能建出来,但浏览弹窗回落平台默认列,会把目标表的系统字段也列出来。
3033
+ // ensureDisplayColumns 只在「没配过」或「旧列对不上当前目标表」时才写,不会冲掉手工配好的列。
3034
+ if (['EBuilder', 'Ebuilder'].includes(String(jsonObj.type))) {
3035
+ const targetId = String(jsonObj.sformId || '');
3036
+ if (targetId) {
3037
+ try {
3038
+ const applied = await ensureDisplayColumns(client, baseUrl, appId, objId, formId, fieldId, targetId, auth.userId, auth.tenantKey);
3039
+ if (applied)
3040
+ changes.push(`浏览显示列=${applied}列`);
3041
+ }
3042
+ catch (e) {
3043
+ console.error(` 警告: 浏览显示列设置失败(字段本身已改好): ${e.message}`);
3044
+ }
3045
+ }
3046
+ }
2969
3047
  const msg = opts.json ? JSON.stringify({ fieldId, changes }) : `字段已更新: ${fieldId} (${changes.join(', ') || 'no changes'})`;
2970
3048
  console.log(msg);
2971
3049
  }