weaver-e10-builder 1.5.16 → 1.6.4

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 (232) 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/check.d.ts.map +1 -1
  5. package/dist/commands/check.js +109 -51
  6. package/dist/commands/check.js.map +1 -1
  7. package/dist/commands/form-attachment-setting.d.ts +3 -0
  8. package/dist/commands/form-attachment-setting.d.ts.map +1 -0
  9. package/dist/commands/form-attachment-setting.js +422 -0
  10. package/dist/commands/form-attachment-setting.js.map +1 -0
  11. package/dist/commands/form-data.d.ts.map +1 -1
  12. package/dist/commands/form-data.js +49 -1
  13. package/dist/commands/form-data.js.map +1 -1
  14. package/dist/commands/form-ebuilder-scope.d.ts +21 -0
  15. package/dist/commands/form-ebuilder-scope.d.ts.map +1 -1
  16. package/dist/commands/form-ebuilder-scope.js +41 -8
  17. package/dist/commands/form-ebuilder-scope.js.map +1 -1
  18. package/dist/commands/form-field-linkage.d.ts +6 -1
  19. package/dist/commands/form-field-linkage.d.ts.map +1 -1
  20. package/dist/commands/form-field-linkage.js +138 -31
  21. package/dist/commands/form-field-linkage.js.map +1 -1
  22. package/dist/commands/form-layout-code-reviewed.d.ts +3 -0
  23. package/dist/commands/form-layout-code-reviewed.d.ts.map +1 -0
  24. package/dist/commands/form-layout-code-reviewed.js +61 -0
  25. package/dist/commands/form-layout-code-reviewed.js.map +1 -0
  26. package/dist/commands/form-layout-describe.d.ts +3 -0
  27. package/dist/commands/form-layout-describe.d.ts.map +1 -0
  28. package/dist/commands/form-layout-describe.js +58 -0
  29. package/dist/commands/form-layout-describe.js.map +1 -0
  30. package/dist/commands/form-layout-diff.d.ts +3 -0
  31. package/dist/commands/form-layout-diff.d.ts.map +1 -0
  32. package/dist/commands/form-layout-diff.js +48 -0
  33. package/dist/commands/form-layout-diff.js.map +1 -0
  34. package/dist/commands/form-layout-document.d.ts +3 -0
  35. package/dist/commands/form-layout-document.d.ts.map +1 -0
  36. package/dist/commands/form-layout-document.js +81 -0
  37. package/dist/commands/form-layout-document.js.map +1 -0
  38. package/dist/commands/form-layout-edit.d.ts +3 -0
  39. package/dist/commands/form-layout-edit.d.ts.map +1 -0
  40. package/dist/commands/form-layout-edit.js +51 -0
  41. package/dist/commands/form-layout-edit.js.map +1 -0
  42. package/dist/commands/form-layout-init-reviewed.d.ts +3 -0
  43. package/dist/commands/form-layout-init-reviewed.d.ts.map +1 -0
  44. package/dist/commands/form-layout-init-reviewed.js +78 -0
  45. package/dist/commands/form-layout-init-reviewed.js.map +1 -0
  46. package/dist/commands/form-layout-restore.d.ts.map +1 -1
  47. package/dist/commands/form-layout-restore.js +23 -0
  48. package/dist/commands/form-layout-restore.js.map +1 -1
  49. package/dist/commands/form-layout-template-catalog.d.ts +3 -0
  50. package/dist/commands/form-layout-template-catalog.d.ts.map +1 -0
  51. package/dist/commands/form-layout-template-catalog.js +45 -0
  52. package/dist/commands/form-layout-template-catalog.js.map +1 -0
  53. package/dist/commands/form.d.ts.map +1 -1
  54. package/dist/commands/form.js +80 -5
  55. package/dist/commands/form.js.map +1 -1
  56. package/dist/commands/project.d.ts.map +1 -1
  57. package/dist/commands/project.js +39 -6
  58. package/dist/commands/project.js.map +1 -1
  59. package/dist/index.js +15 -0
  60. package/dist/index.js.map +1 -1
  61. package/dist/services/actionflow/components/action_eb_add.d.ts.map +1 -1
  62. package/dist/services/actionflow/components/action_eb_add.js +12 -5
  63. package/dist/services/actionflow/components/action_eb_add.js.map +1 -1
  64. package/dist/services/actionflow/components/action_eb_add_compiler.d.ts.map +1 -1
  65. package/dist/services/actionflow/components/action_eb_add_compiler.js +5 -0
  66. package/dist/services/actionflow/components/action_eb_add_compiler.js.map +1 -1
  67. package/dist/services/actionflow/components/action_eb_delete.d.ts +6 -1
  68. package/dist/services/actionflow/components/action_eb_delete.d.ts.map +1 -1
  69. package/dist/services/actionflow/components/action_eb_delete.js +23 -5
  70. package/dist/services/actionflow/components/action_eb_delete.js.map +1 -1
  71. package/dist/services/actionflow/components/action_eb_delete_compiler.d.ts.map +1 -1
  72. package/dist/services/actionflow/components/action_eb_delete_compiler.js +22 -0
  73. package/dist/services/actionflow/components/action_eb_delete_compiler.js.map +1 -1
  74. package/dist/services/actionflow/components/action_eb_update.d.ts.map +1 -1
  75. package/dist/services/actionflow/components/action_eb_update.js +13 -4
  76. package/dist/services/actionflow/components/action_eb_update.js.map +1 -1
  77. package/dist/services/actionflow/components/action_eb_update_compiler.d.ts.map +1 -1
  78. package/dist/services/actionflow/components/action_eb_update_compiler.js +9 -2
  79. package/dist/services/actionflow/components/action_eb_update_compiler.js.map +1 -1
  80. package/dist/services/actionflow/components/date_trigger.js +2 -2
  81. package/dist/services/actionflow/components/date_trigger.js.map +1 -1
  82. package/dist/services/actionflow/components/enquiry_form.d.ts.map +1 -1
  83. package/dist/services/actionflow/components/enquiry_form.js +11 -10
  84. package/dist/services/actionflow/components/enquiry_form.js.map +1 -1
  85. package/dist/services/actionflow/components/event_button.js +1 -1
  86. package/dist/services/actionflow/components/event_button.js.map +1 -1
  87. package/dist/services/actionflow/components/form_data_builder.d.ts +29 -1
  88. package/dist/services/actionflow/components/form_data_builder.d.ts.map +1 -1
  89. package/dist/services/actionflow/components/form_data_builder.js +67 -3
  90. package/dist/services/actionflow/components/form_data_builder.js.map +1 -1
  91. package/dist/services/actionflow/components/time_batch_trigger.js +2 -2
  92. package/dist/services/actionflow/components/time_batch_trigger.js.map +1 -1
  93. package/dist/services/actionflow/form_source.d.ts +44 -1
  94. package/dist/services/actionflow/form_source.d.ts.map +1 -1
  95. package/dist/services/actionflow/form_source.js +231 -5
  96. package/dist/services/actionflow/form_source.js.map +1 -1
  97. package/dist/services/actionflow/preflight_service.d.ts +8 -0
  98. package/dist/services/actionflow/preflight_service.d.ts.map +1 -1
  99. package/dist/services/actionflow/preflight_service.js +120 -14
  100. package/dist/services/actionflow/preflight_service.js.map +1 -1
  101. package/dist/services/actionflow/system_params.d.ts.map +1 -1
  102. package/dist/services/actionflow/system_params.js +4 -1
  103. package/dist/services/actionflow/system_params.js.map +1 -1
  104. package/dist/services/actionflow/trigger_common.d.ts.map +1 -1
  105. package/dist/services/actionflow/trigger_common.js +12 -3
  106. package/dist/services/actionflow/trigger_common.js.map +1 -1
  107. package/dist/services/actionflow/workflow_compiler.d.ts.map +1 -1
  108. package/dist/services/actionflow/workflow_compiler.js +117 -40
  109. package/dist/services/actionflow/workflow_compiler.js.map +1 -1
  110. package/dist/services/form-attachment-settings.d.ts +110 -0
  111. package/dist/services/form-attachment-settings.d.ts.map +1 -0
  112. package/dist/services/form-attachment-settings.js +332 -0
  113. package/dist/services/form-attachment-settings.js.map +1 -0
  114. package/dist/services/form-attachment-upload.d.ts +30 -0
  115. package/dist/services/form-attachment-upload.d.ts.map +1 -0
  116. package/dist/services/form-attachment-upload.js +76 -0
  117. package/dist/services/form-attachment-upload.js.map +1 -0
  118. package/dist/services/form-data-openapi.d.ts +2 -0
  119. package/dist/services/form-data-openapi.d.ts.map +1 -1
  120. package/dist/services/form-data-openapi.js +1 -0
  121. package/dist/services/form-data-openapi.js.map +1 -1
  122. package/dist/services/form-layout-code-reviewed.d.ts +32 -0
  123. package/dist/services/form-layout-code-reviewed.d.ts.map +1 -0
  124. package/dist/services/form-layout-code-reviewed.js +101 -0
  125. package/dist/services/form-layout-code-reviewed.js.map +1 -0
  126. package/dist/services/form-layout-describe.d.ts +4 -0
  127. package/dist/services/form-layout-describe.d.ts.map +1 -0
  128. package/dist/services/form-layout-describe.js +107 -0
  129. package/dist/services/form-layout-describe.js.map +1 -0
  130. package/dist/services/form-layout-diff.d.ts +37 -0
  131. package/dist/services/form-layout-diff.d.ts.map +1 -0
  132. package/dist/services/form-layout-diff.js +232 -0
  133. package/dist/services/form-layout-diff.js.map +1 -0
  134. package/dist/services/form-layout-document-apply.d.ts +23 -0
  135. package/dist/services/form-layout-document-apply.d.ts.map +1 -0
  136. package/dist/services/form-layout-document-apply.js +82 -0
  137. package/dist/services/form-layout-document-apply.js.map +1 -0
  138. package/dist/services/form-layout-document.d.ts +13 -0
  139. package/dist/services/form-layout-document.d.ts.map +1 -0
  140. package/dist/services/form-layout-document.js +228 -0
  141. package/dist/services/form-layout-document.js.map +1 -0
  142. package/dist/services/form-layout-edit.d.ts +21 -0
  143. package/dist/services/form-layout-edit.d.ts.map +1 -0
  144. package/dist/services/form-layout-edit.js +103 -0
  145. package/dist/services/form-layout-edit.js.map +1 -0
  146. package/dist/services/form-layout-init-plan.d.ts +54 -0
  147. package/dist/services/form-layout-init-plan.d.ts.map +1 -0
  148. package/dist/services/form-layout-init-plan.js +211 -0
  149. package/dist/services/form-layout-init-plan.js.map +1 -0
  150. package/dist/services/form-layout-source/review.d.ts +4 -0
  151. package/dist/services/form-layout-source/review.d.ts.map +1 -0
  152. package/dist/services/form-layout-source/review.js +54 -0
  153. package/dist/services/form-layout-source/review.js.map +1 -0
  154. package/dist/services/form-layout-template-advanced.d.ts +5 -0
  155. package/dist/services/form-layout-template-advanced.d.ts.map +1 -1
  156. package/dist/services/form-layout-template-advanced.js +17 -1
  157. package/dist/services/form-layout-template-advanced.js.map +1 -1
  158. package/dist/services/form-layout-template-catalog.d.ts +13 -0
  159. package/dist/services/form-layout-template-catalog.d.ts.map +1 -0
  160. package/dist/services/form-layout-template-catalog.js +27 -0
  161. package/dist/services/form-layout-template-catalog.js.map +1 -0
  162. package/dist/services/form-layout-template-flow.d.ts +1 -1
  163. package/dist/services/form-layout-template-flow.d.ts.map +1 -1
  164. package/dist/services/form-layout-template-flow.js.map +1 -1
  165. package/dist/services/form-layout-template-verification.d.ts +34 -0
  166. package/dist/services/form-layout-template-verification.d.ts.map +1 -0
  167. package/dist/services/form-layout-template-verification.js +124 -0
  168. package/dist/services/form-layout-template-verification.js.map +1 -0
  169. package/dist/services/form-style-template.d.ts +3 -3
  170. package/dist/services/form-style-template.d.ts.map +1 -1
  171. package/dist/services/form-style-template.js +18 -13
  172. package/dist/services/form-style-template.js.map +1 -1
  173. package/package.json +1 -1
  174. package/skill-docs/SKILL.md +163 -155
  175. package/skill-docs/_catalog.md +110 -106
  176. package/skill-docs/actionflows/references/components/ebuilder/ActionEbDelete.md +60 -3
  177. package/skill-docs/actionflows/references/components/ebuilder/EventButton.md +35 -33
  178. package/skill-docs/assets/sample/api/formApi.js +689 -510
  179. package/skill-docs/assets/sample/app/config.js +4 -0
  180. package/skill-docs/assets/sample/app/fields.js +25 -0
  181. package/skill-docs/assets/sample/entry.js +24 -22
  182. package/skill-docs/assets/sample/eslint.config.cjs +1 -0
  183. package/skill-docs/assets/sample/pages/Items.js +247 -0
  184. package/skill-docs/assets/sample/styles/prototypeStyles.js +137 -0
  185. package/skill-docs/references/coding/guide-edit-backfill.md +102 -150
  186. package/skill-docs/references/coding/guide-form-crud.md +195 -172
  187. package/skill-docs/references/coding/guide-html-to-react.md +250 -0
  188. package/skill-docs/references/coding/guide-page-code.md +194 -167
  189. package/skill-docs/references/coding/guide-page-export.md +27 -18
  190. package/skill-docs/references/coding/ref-compile-rules.md +7 -7
  191. package/skill-docs/references/common/capability-boundaries.md +20 -1
  192. package/skill-docs/references/common/guide-plan-template.md +29 -3
  193. package/skill-docs/references/common/map.md +13 -8
  194. package/skill-docs/references/common/ref-cli-commands.md +31 -10
  195. package/skill-docs/references/components/display-FilePreview.md +5 -4
  196. package/skill-docs/references/form/guide-browser-definition.md +57 -13
  197. package/skill-docs/references/form/guide-create-form.md +258 -258
  198. package/skill-docs/references/form/guide-field-linkage.md +4 -1
  199. package/skill-docs/references/form/guide-form-attachment-setting.md +95 -0
  200. package/skill-docs/references/form/guide-form-data.md +22 -1
  201. package/skill-docs/references/form/layout/code-block/code-block-guide.md +153 -0
  202. package/skill-docs/references/form/layout/code-block/controls.md +60 -0
  203. package/skill-docs/references/form/layout/code-block/coverage.md +32 -0
  204. package/skill-docs/references/form/layout/code-block/details.md +57 -0
  205. package/skill-docs/references/form/layout/code-block/events-validation.md +42 -0
  206. package/skill-docs/references/form/layout/code-block/foundations-fields.md +56 -0
  207. package/skill-docs/references/form/layout/code-block/layout-css.md +116 -0
  208. package/skill-docs/references/form/layout/code-block/recipes.md +164 -0
  209. package/skill-docs/references/form/layout/code-block/troubleshooting.md +49 -0
  210. package/skill-docs/references/form/layout/code-block/ui-global.md +47 -0
  211. package/skill-docs/references/form/layout/document.md +39 -0
  212. package/skill-docs/references/form/layout/incremental.md +133 -0
  213. package/skill-docs/references/form/layout/initialization.md +39 -0
  214. package/skill-docs/references/form/layout/inspect-edit.md +76 -0
  215. package/skill-docs/references/form/layout/layout-overview.md +67 -0
  216. package/skill-docs/references/form/layout/management.md +64 -0
  217. package/skill-docs/references/form/layout/planning.md +76 -0
  218. package/skill-docs/references/form/layout/source-restoration.md +388 -0
  219. package/skill-docs/references/form/layout/template/advanced-css.md +167 -0
  220. package/skill-docs/references/form/layout/template/advanced.md +318 -0
  221. package/skill-docs/references/form/layout/template/easy.md +64 -0
  222. package/skill-docs/references/form/layout/template/flow.md +30 -0
  223. package/skill-docs/references/form/layout/template/template-guide.md +56 -0
  224. package/skill-docs/references/form/layout/workflow-layout.md +44 -0
  225. package/skill-docs/references/form/ref-form-fields.md +303 -301
  226. package/skill-docs/references/workflow/guide-workflow-node-layout.md +189 -187
  227. package/skill-docs/assets/sample/config/config.js +0 -0
  228. package/skill-docs/assets/sample/config/configLoad.js +0 -0
  229. package/skill-docs/assets/sample/config/configLoad_default.js +0 -0
  230. package/skill-docs/assets/sample/config/config_default.js +0 -0
  231. package/skill-docs/assets/sample/memo.md +0 -0
  232. package/skill-docs/assets/sample/readme.js +0 -8
@@ -23,10 +23,12 @@ import { resolveFormRecord, resolveFormId, appendThirdPartyForms, resolveObjIdBy
23
23
  // 字段类型归一 / 校验:与「专项建表」共用同一份(原为本文件内联)。
24
24
  import { FIELD_TYPE_CHOICES, canonComponentKey, assertFieldType, normalizeFieldDef } from '../services/form-field-validate.js';
25
25
  import { listFormTables, readFieldRecords, mapFieldsToTables } from '../services/form-physical-table.js';
26
+ import { fetchFormSchema } from '../services/form-data-openapi.js';
26
27
  import { buildFormulaParameters, defaultReturnType } from '../services/formula-detail.js';
27
28
  import { assertViewLinkageFormulaFunctions, loadViewLinkageFunctions } from '../services/form-view-linkage-functions.js';
28
29
  import { registerOptionTemplateCommand } from './form-option-template.js';
29
30
  import { registerFormObjMetaCommands } from './form-obj-meta.js';
31
+ import { registerFormAttachmentSettingCommands } from './form-attachment-setting.js';
30
32
  import { prepareSourceLayoutInputs, restoreSourceLayoutAfterCreate } from '../services/form-layout-source/creation.js';
31
33
  /**
32
34
  * 字段类型归一 / 校验 / 校验清单已抽到 `services/form-field-validate.ts` ——
@@ -106,6 +108,7 @@ export function registerFormCommands(program) {
106
108
  const form = program.command('form').description('表单管理');
107
109
  registerOptionTemplateCommand(form, program);
108
110
  registerFormObjMetaCommands(form, program);
111
+ registerFormAttachmentSettingCommands(form, program);
109
112
  form.command('read')
110
113
  .description('读取表单字段结构')
111
114
  .argument('<objId>', '表单 objId')
@@ -179,6 +182,9 @@ export function registerFormCommands(program) {
179
182
  const options = fieldData?.data?.options || [];
180
183
  if (options.length > 0) {
181
184
  f.options = options.map((o) => ({ valueKey: o.valueKey, name: o.name }));
185
+ f.optionIds = {};
186
+ for (const o of f.options)
187
+ f.optionIds[o.name] = o.valueKey;
182
188
  }
183
189
  // 选项预设模板:模板字段的 options 为空,回显模板引用(选项用 form option-template read 查)
184
190
  if (!options.length && fieldData?.data?.templateId) {
@@ -245,6 +251,33 @@ export function registerFormCommands(program) {
245
251
  }
246
252
  catch { /* 物理表归属读不到不影响主流程 */ }
247
253
  }
254
+ // 写入契约补读:dataKey(request key)、multiSelect、日期 format。
255
+ // getFields 不直接给这些信息;ds/fields 给的才是平台实际写入要用的。
256
+ if (cmdOpts?.appId) {
257
+ try {
258
+ const schema = await fetchFormSchema(client, baseUrl, cmdOpts.appId, objId);
259
+ const metaById = new Map();
260
+ for (const f of schema.main)
261
+ metaById.set(String(f.id), f);
262
+ for (const d of schema.details) {
263
+ for (const f of d.fields)
264
+ metaById.set(String(f.id), f);
265
+ }
266
+ for (const f of allFields) {
267
+ const meta = metaById.get(String(f.fieldId));
268
+ if (!meta)
269
+ continue;
270
+ if (meta.dataKey)
271
+ f.dataKey = meta.dataKey;
272
+ f.multiSelect = meta.multiSelect;
273
+ if (meta.format)
274
+ f.format = meta.format;
275
+ if (meta.compType && !f.fieldKey)
276
+ f.fieldKey = meta.compType;
277
+ }
278
+ }
279
+ catch { /* 写入契约补读失败不影响字段读取主流程 */ }
280
+ }
248
281
  if (cmdOpts?.out) {
249
282
  // Write JSON to file with UTF-8 encoding, bypassing terminal encoding
250
283
  writeFileSync(cmdOpts.out, JSON.stringify(allFields, null, 2), 'utf-8');
@@ -261,7 +294,13 @@ export function registerFormCommands(program) {
261
294
  if (SYSTEM_FIELD_IDS.has(f.fieldId))
262
295
  continue;
263
296
  const t = tableLabel(f);
264
- console.log(` [${f.fieldKey || f.fieldType}] ${f.fieldName} (fieldId: ${f.fieldId || f.id})${t ? ` · 物理表: ${t}` : ''}`);
297
+ const extra = [
298
+ t ? `物理表: ${t}` : '',
299
+ f.dataKey ? `dataKey: ${f.dataKey}` : '',
300
+ f.multiSelect ? '多选' : '',
301
+ f.format ? `格式: ${f.format}` : '',
302
+ ].filter(Boolean).join(' · ');
303
+ console.log(` [${f.fieldKey || f.fieldType}] ${f.fieldName} (fieldId: ${f.fieldId || f.id})${extra ? ` · ${extra}` : ''}`);
265
304
  if (f.options)
266
305
  console.log(` 选项: ${JSON.stringify(f.options)}`);
267
306
  if (f.optionTemplate)
@@ -273,7 +312,13 @@ export function registerFormCommands(program) {
273
312
  if (SYSTEM_FIELD_IDS.has(f.fieldId))
274
313
  continue;
275
314
  const parent = f.subFormName || '';
276
- console.log(` [${f.fieldKey || f.fieldType}] ${f.fieldName} (fieldId: ${f.fieldId || f.id}${parent ? `, 明细表: ${parent}` : ''})`);
315
+ const extra = [
316
+ parent ? `明细表: ${parent}` : '',
317
+ f.dataKey ? `dataKey: ${f.dataKey}` : '',
318
+ f.multiSelect ? '多选' : '',
319
+ f.format ? `格式: ${f.format}` : '',
320
+ ].filter(Boolean).join(' · ');
321
+ console.log(` [${f.fieldKey || f.fieldType}] ${f.fieldName} (fieldId: ${f.fieldId || f.id})${extra ? ` · ${extra}` : ''}`);
277
322
  if (f.options)
278
323
  console.log(` 选项: ${JSON.stringify(f.options)}`);
279
324
  }
@@ -2752,6 +2797,8 @@ export function registerFormCommands(program) {
2752
2797
  .option('--sform-id <id>', 'EBuilder 关联的目标表单 objId(更新关联)')
2753
2798
  .option('--data-title <field>', '目标表单显示字段名/fieldId(默认 name=目标表含"名称"的字段,无则第一个业务字段)')
2754
2799
  .option('--form-name <name>', '目标表单名称(默认查目标表单名)')
2800
+ .option('--browser-name <name>', '按名称精确指定关联浏览数据源(Browser/RelateBrowser)')
2801
+ .option('--browser-type <type>', `关联浏览系统类型:${BROWSER_KINDS.join('、')}`)
2755
2802
  .option('--relate-from <fieldName>', 'EBuilder 字段名:选关联记录后自动带出值到当前字段')
2756
2803
  .option('--relate-from-source <fieldId>', '目标表单源字段 fieldId(复制哪个字段的值)')
2757
2804
  .option('--multiple', '设为多选(人员/部门/EBuilder/关联类字段)')
@@ -2878,6 +2925,12 @@ export function registerFormCommands(program) {
2878
2925
  if (editOpts.type) {
2879
2926
  const targetType = canonComponentKey(editOpts.type);
2880
2927
  assertFieldType(targetType, 'edit-field ');
2928
+ if (['Browser', 'RelateBrowser'].includes(targetType)
2929
+ && !['RelateBrowser'].includes(String(jsonObj.type))
2930
+ && !editOpts.browserName && !editOpts.browserType) {
2931
+ console.error('改成关联浏览需要同时指定 --browser-name <浏览源名称> 或 --browser-type <系统浏览类型>');
2932
+ process.exit(1);
2933
+ }
2881
2934
  // 关联类字段必须同时给目标表单,否则切出来的是个指不到东西的残缺字段
2882
2935
  if (['EBuilder', 'Flow'].includes(targetType) && !editOpts.sformId && targetType !== String(jsonObj.type)) {
2883
2936
  console.error(`改成 ${targetType} 需要同时指定 --sform-id <目标表 objId>(Flow 用流程绑定的表单 objId)`);
@@ -2960,10 +3013,11 @@ export function registerFormCommands(program) {
2960
3013
  const extraRes = await client.post(`${baseUrl}/api/form/local/generatorIds?size=${extra}&apid=${appId}`, {});
2961
3014
  extraIds = (extraRes?.data?.generatorIds || []).map(String);
2962
3015
  }
3016
+ const browserType = editOpts.browserName
3017
+ ? await resolveBrowserByName(client, baseUrl, editOpts.browserName, { ebbusinessid: formId })
3018
+ : editOpts.browserType;
2963
3019
  const extraCfg = await richTarget.build({
2964
- // edit-field 没有 --format / --browser-* 选项:能带的只有 multiple,
2965
- // 其余交给富组件模板的默认值(与 add-field 缺省时同一套默认)。
2966
- def: { multiple: editOpts.multiple },
3020
+ def: { multiple: editOpts.multiple, browserType },
2967
3021
  fieldId,
2968
3022
  formId,
2969
3023
  formTableId,
@@ -2976,6 +3030,27 @@ export function registerFormCommands(program) {
2976
3030
  }
2977
3031
  }
2978
3032
  }
3033
+ if (editOpts.browserName || editOpts.browserType) {
3034
+ if (String(jsonObj.type) !== 'RelateBrowser') {
3035
+ console.error('--browser-name / --browser-type 仅适用于 Browser/RelateBrowser 字段,已中止,未做任何改动。');
3036
+ process.exit(1);
3037
+ }
3038
+ // 同类型字段也可以只更换浏览数据源;全量写回保留其余配置。
3039
+ if (!typeChangeApplied) {
3040
+ const browserType = editOpts.browserName
3041
+ ? await resolveBrowserByName(client, baseUrl, editOpts.browserName, { ebbusinessid: formId })
3042
+ : editOpts.browserType;
3043
+ const richTarget = getRichType('Browser');
3044
+ const browserConfig = await richTarget.build({
3045
+ def: { browserType, multiple: editOpts.multiple ?? jsonObj.isSingle === false },
3046
+ fieldId, formId, formTableId,
3047
+ dataKey: String(jsonObj.dataKey || jsonObj.columnName || ''),
3048
+ columnName: String(jsonObj.columnName || jsonObj.dataKey || ''),
3049
+ showOrder: String(jsonObj.showOrder ?? '0.00'), extraIds: [],
3050
+ });
3051
+ Object.assign(jsonObj, browserConfig);
3052
+ }
3053
+ }
2979
3054
  // `required` 不是字段记录的键(整张表的字段记录里都没有),写到 jsonObj 只是**保持与
2980
3055
  // 既有代码一致的形式**,真正生效的是保存成功之后那段布局 comp 补丁 —— 见下面 `patchFieldLayout`。
2981
3056
  if (editOpts.required) {