weaver-e10-builder 1.5.1 → 1.5.3

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 (217) hide show
  1. package/dist/commands/form-add-detail-table.js +3 -3
  2. package/dist/commands/form-add-detail-table.js.map +1 -1
  3. package/dist/commands/form-add-physical-field.d.ts +3 -0
  4. package/dist/commands/form-add-physical-field.d.ts.map +1 -0
  5. package/dist/commands/form-add-physical-field.js +126 -0
  6. package/dist/commands/form-add-physical-field.js.map +1 -0
  7. package/dist/commands/form-data.d.ts.map +1 -1
  8. package/dist/commands/form-data.js +125 -0
  9. package/dist/commands/form-data.js.map +1 -1
  10. package/dist/commands/form-ebuilder-columns.d.ts.map +1 -1
  11. package/dist/commands/form-ebuilder-columns.js +3 -3
  12. package/dist/commands/form-ebuilder-columns.js.map +1 -1
  13. package/dist/commands/form-ebuilder-scope.d.ts.map +1 -1
  14. package/dist/commands/form-ebuilder-scope.js +3 -4
  15. package/dist/commands/form-ebuilder-scope.js.map +1 -1
  16. package/dist/commands/form-field-lang.d.ts.map +1 -1
  17. package/dist/commands/form-field-lang.js +3 -4
  18. package/dist/commands/form-field-lang.js.map +1 -1
  19. package/dist/commands/form-field-linkage.d.ts.map +1 -1
  20. package/dist/commands/form-field-linkage.js +4 -3
  21. package/dist/commands/form-field-linkage.js.map +1 -1
  22. package/dist/commands/form-formula-linkage.d.ts.map +1 -1
  23. package/dist/commands/form-formula-linkage.js +4 -2
  24. package/dist/commands/form-formula-linkage.js.map +1 -1
  25. package/dist/commands/form-formula.d.ts.map +1 -1
  26. package/dist/commands/form-formula.js +5 -5
  27. package/dist/commands/form-formula.js.map +1 -1
  28. package/dist/commands/form-layout.d.ts.map +1 -1
  29. package/dist/commands/form-layout.js +6 -0
  30. package/dist/commands/form-layout.js.map +1 -1
  31. package/dist/commands/form-list-click.d.ts.map +1 -1
  32. package/dist/commands/form-list-click.js +3 -2
  33. package/dist/commands/form-list-click.js.map +1 -1
  34. package/dist/commands/form-list-permission.js +1 -1
  35. package/dist/commands/form-list-permission.js.map +1 -1
  36. package/dist/commands/form-physical-table.d.ts +3 -0
  37. package/dist/commands/form-physical-table.d.ts.map +1 -0
  38. package/dist/commands/form-physical-table.js +195 -0
  39. package/dist/commands/form-physical-table.js.map +1 -0
  40. package/dist/commands/form-relate.d.ts.map +1 -1
  41. package/dist/commands/form-relate.js +3 -2
  42. package/dist/commands/form-relate.js.map +1 -1
  43. package/dist/commands/form-validate.d.ts.map +1 -1
  44. package/dist/commands/form-validate.js +3 -3
  45. package/dist/commands/form-validate.js.map +1 -1
  46. package/dist/commands/form-view.d.ts.map +1 -1
  47. package/dist/commands/form-view.js +2 -0
  48. package/dist/commands/form-view.js.map +1 -1
  49. package/dist/commands/form.d.ts +9 -3
  50. package/dist/commands/form.d.ts.map +1 -1
  51. package/dist/commands/form.js +150 -571
  52. package/dist/commands/form.js.map +1 -1
  53. package/dist/commands/org.d.ts.map +1 -1
  54. package/dist/commands/org.js +131 -7
  55. package/dist/commands/org.js.map +1 -1
  56. package/dist/commands/special.d.ts +24 -0
  57. package/dist/commands/special.d.ts.map +1 -0
  58. package/dist/commands/special.js +487 -0
  59. package/dist/commands/special.js.map +1 -0
  60. package/dist/commands/wf-form.d.ts.map +1 -1
  61. package/dist/commands/wf-form.js +4 -4
  62. package/dist/commands/wf-form.js.map +1 -1
  63. package/dist/commands/workflow-message.d.ts.map +1 -1
  64. package/dist/commands/workflow-message.js +1 -2
  65. package/dist/commands/workflow-message.js.map +1 -1
  66. package/dist/commands/workflow-operator-sign.js +1 -1
  67. package/dist/commands/workflow-operator-sign.js.map +1 -1
  68. package/dist/index.js +28 -0
  69. package/dist/index.js.map +1 -1
  70. package/dist/services/actionflow/components/action_eb_update_compiler.d.ts.map +1 -1
  71. package/dist/services/actionflow/components/action_eb_update_compiler.js +54 -12
  72. package/dist/services/actionflow/components/action_eb_update_compiler.js.map +1 -1
  73. package/dist/services/actionflow/components/index.d.ts.map +1 -1
  74. package/dist/services/actionflow/components/index.js +6 -0
  75. package/dist/services/actionflow/components/index.js.map +1 -1
  76. package/dist/services/actionflow/components/multiple_execution.d.ts.map +1 -1
  77. package/dist/services/actionflow/components/multiple_execution.js +73 -13
  78. package/dist/services/actionflow/components/multiple_execution.js.map +1 -1
  79. package/dist/services/actionflow/components/output.d.ts.map +1 -1
  80. package/dist/services/actionflow/components/output.js +144 -5
  81. package/dist/services/actionflow/components/output.js.map +1 -1
  82. package/dist/services/actionflow/components/send_message.d.ts.map +1 -1
  83. package/dist/services/actionflow/components/send_message.js +60 -32
  84. package/dist/services/actionflow/components/send_message.js.map +1 -1
  85. package/dist/services/actionflow/components/serverless_action.d.ts +5 -0
  86. package/dist/services/actionflow/components/serverless_action.d.ts.map +1 -0
  87. package/dist/services/actionflow/components/serverless_action.js +134 -0
  88. package/dist/services/actionflow/components/serverless_action.js.map +1 -0
  89. package/dist/services/actionflow/components/webhook_trigger.d.ts +5 -0
  90. package/dist/services/actionflow/components/webhook_trigger.d.ts.map +1 -0
  91. package/dist/services/actionflow/components/webhook_trigger.js +85 -0
  92. package/dist/services/actionflow/components/webhook_trigger.js.map +1 -0
  93. package/dist/services/actionflow/context_preflight.d.ts +6 -0
  94. package/dist/services/actionflow/context_preflight.d.ts.map +1 -1
  95. package/dist/services/actionflow/context_preflight.js +247 -7
  96. package/dist/services/actionflow/context_preflight.js.map +1 -1
  97. package/dist/services/actionflow/context_provider.d.ts.map +1 -1
  98. package/dist/services/actionflow/context_provider.js +67 -3
  99. package/dist/services/actionflow/context_provider.js.map +1 -1
  100. package/dist/services/actionflow/custom_trigger_context.d.ts.map +1 -1
  101. package/dist/services/actionflow/custom_trigger_context.js +9 -2
  102. package/dist/services/actionflow/custom_trigger_context.js.map +1 -1
  103. package/dist/services/actionflow/formula_service.d.ts +2 -0
  104. package/dist/services/actionflow/formula_service.d.ts.map +1 -1
  105. package/dist/services/actionflow/formula_service.js +381 -63
  106. package/dist/services/actionflow/formula_service.js.map +1 -1
  107. package/dist/services/actionflow/generation_service.d.ts.map +1 -1
  108. package/dist/services/actionflow/generation_service.js +9 -0
  109. package/dist/services/actionflow/generation_service.js.map +1 -1
  110. package/dist/services/actionflow/param_group_dto.d.ts +5 -0
  111. package/dist/services/actionflow/param_group_dto.d.ts.map +1 -0
  112. package/dist/services/actionflow/param_group_dto.js +181 -0
  113. package/dist/services/actionflow/param_group_dto.js.map +1 -0
  114. package/dist/services/actionflow/preflight_service.d.ts.map +1 -1
  115. package/dist/services/actionflow/preflight_service.js +53 -11
  116. package/dist/services/actionflow/preflight_service.js.map +1 -1
  117. package/dist/services/actionflow/readback_verifier.d.ts.map +1 -1
  118. package/dist/services/actionflow/readback_verifier.js +14 -1
  119. package/dist/services/actionflow/readback_verifier.js.map +1 -1
  120. package/dist/services/actionflow/update_service.d.ts.map +1 -1
  121. package/dist/services/actionflow/update_service.js +14 -8
  122. package/dist/services/actionflow/update_service.js.map +1 -1
  123. package/dist/services/actionflow/webhook_source.d.ts +4 -0
  124. package/dist/services/actionflow/webhook_source.d.ts.map +1 -0
  125. package/dist/services/actionflow/webhook_source.js +99 -0
  126. package/dist/services/actionflow/webhook_source.js.map +1 -0
  127. package/dist/services/actionflow/workflow_compiler.d.ts.map +1 -1
  128. package/dist/services/actionflow/workflow_compiler.js +1 -0
  129. package/dist/services/actionflow/workflow_compiler.js.map +1 -1
  130. package/dist/services/form-create.d.ts +45 -2
  131. package/dist/services/form-create.d.ts.map +1 -1
  132. package/dist/services/form-create.js +78 -8
  133. package/dist/services/form-create.js.map +1 -1
  134. package/dist/services/form-data-openapi.d.ts +142 -0
  135. package/dist/services/form-data-openapi.d.ts.map +1 -0
  136. package/dist/services/form-data-openapi.js +363 -0
  137. package/dist/services/form-data-openapi.js.map +1 -0
  138. package/dist/services/form-field-build.d.ts +71 -0
  139. package/dist/services/form-field-build.d.ts.map +1 -0
  140. package/dist/services/form-field-build.js +436 -0
  141. package/dist/services/form-field-build.js.map +1 -0
  142. package/dist/services/form-field-template.d.ts +71 -0
  143. package/dist/services/form-field-template.d.ts.map +1 -0
  144. package/dist/services/form-field-template.js +103 -0
  145. package/dist/services/form-field-template.js.map +1 -0
  146. package/dist/services/form-field-validate.d.ts +26 -0
  147. package/dist/services/form-field-validate.d.ts.map +1 -0
  148. package/dist/services/form-field-validate.js +121 -0
  149. package/dist/services/form-field-validate.js.map +1 -0
  150. package/dist/services/form-id.d.ts +50 -0
  151. package/dist/services/form-id.d.ts.map +1 -0
  152. package/dist/services/form-id.js +110 -0
  153. package/dist/services/form-id.js.map +1 -0
  154. package/dist/services/form-layout-grid.d.ts +123 -0
  155. package/dist/services/form-layout-grid.d.ts.map +1 -0
  156. package/dist/services/form-layout-grid.js +177 -0
  157. package/dist/services/form-layout-grid.js.map +1 -0
  158. package/dist/services/form-layout-insert.d.ts +24 -1
  159. package/dist/services/form-layout-insert.d.ts.map +1 -1
  160. package/dist/services/form-layout-insert.js +192 -27
  161. package/dist/services/form-layout-insert.js.map +1 -1
  162. package/dist/services/form-physical-table.d.ts +115 -0
  163. package/dist/services/form-physical-table.d.ts.map +1 -0
  164. package/dist/services/form-physical-table.js +153 -0
  165. package/dist/services/form-physical-table.js.map +1 -0
  166. package/dist/services/form-table-view.d.ts.map +1 -1
  167. package/dist/services/form-table-view.js +2 -11
  168. package/dist/services/form-table-view.js.map +1 -1
  169. package/dist/services/form-view.d.ts +2 -0
  170. package/dist/services/form-view.d.ts.map +1 -1
  171. package/dist/services/form-view.js +57 -7
  172. package/dist/services/form-view.js.map +1 -1
  173. package/dist/services/form-virtual.d.ts.map +1 -1
  174. package/dist/services/form-virtual.js +6 -1
  175. package/dist/services/form-virtual.js.map +1 -1
  176. package/dist/services/org-employee.d.ts +105 -1
  177. package/dist/services/org-employee.d.ts.map +1 -1
  178. package/dist/services/org-employee.js +186 -5
  179. package/dist/services/org-employee.js.map +1 -1
  180. package/dist/services/special-page.d.ts +85 -0
  181. package/dist/services/special-page.d.ts.map +1 -0
  182. package/dist/services/special-page.js +129 -0
  183. package/dist/services/special-page.js.map +1 -0
  184. package/dist/services/special-route.d.ts +92 -0
  185. package/dist/services/special-route.d.ts.map +1 -0
  186. package/dist/services/special-route.js +93 -0
  187. package/dist/services/special-route.js.map +1 -0
  188. package/dist/services/workflow-node-layout.d.ts +13 -1
  189. package/dist/services/workflow-node-layout.d.ts.map +1 -1
  190. package/dist/services/workflow-node-layout.js +11 -3
  191. package/dist/services/workflow-node-layout.js.map +1 -1
  192. package/package.json +1 -1
  193. package/skill-docs/SKILL.md +5 -5
  194. package/skill-docs/_catalog.md +1 -0
  195. package/skill-docs/actionflows/SKILL.md +5 -4
  196. package/skill-docs/actionflows/references/components/logic/MultipleExecution.md +38 -38
  197. package/skill-docs/actionflows/references/components/logic/Output.md +9 -2
  198. package/skill-docs/actionflows/references/components/message/SendMessage.md +3 -3
  199. package/skill-docs/actionflows/references/components/serverless/ServerlessAction.md +42 -0
  200. package/skill-docs/actionflows/references/components/trigger/WebHookTrigger.md +89 -0
  201. package/skill-docs/actionflows/references/dynamic_capability_matrix.md +2 -2
  202. package/skill-docs/references/common/ref-cli-commands.md +11 -3
  203. package/skill-docs/references/form/guide-form-association.md +1 -1
  204. package/skill-docs/references/form/guide-form-data.md +30 -0
  205. package/skill-docs/references/form/guide-form-layout-incremental.md +18 -3
  206. package/skill-docs/references/form/guide-form-linkage.md +2 -2
  207. package/skill-docs/references/form/guide-form-physical-table.md +146 -0
  208. package/skill-docs/references/form/ref-form-fields.md +1 -1
  209. package/skill-docs/references/hrm/guide-org-employee.md +71 -3
  210. package/skill-docs/references/report/cell-config-echo-guide.md +1 -1
  211. package/skill-docs/references/report/dataset-query-filter-guide.md +3 -3
  212. package/skill-docs/references/report/date-range-query-reference.md +2 -2
  213. package/skill-docs/references/report/query-condition-api-guide.md +11 -11
  214. package/skill-docs/references/report/report-designer-feature-map.md +1 -1
  215. package/skill-docs/references/report/report-permission-guide.md +2 -2
  216. package/skill-docs/references/workflow/guide-workflow-odoc-setting.md +6 -6
  217. package/skill-docs/references/workflow/guide-workflow.md +1 -1
@@ -0,0 +1,436 @@
1
+ // objId → 表单记录:obj/getList 不含三方表单(专项应用),内部带 getInfoById 兜底。
2
+ import { resolveFormRecord } from './form-id.js';
3
+ import { getRichType, richIdUnits } from './rich-types.js';
4
+ import { placeholderFromFormat } from './form-create.js';
5
+ import { resolveDetailTable } from './form-sub-detail.js';
6
+ import { applyFieldPatches } from './form-field-patch.js';
7
+ import { createMultilangLabel } from './form-i18n-label.js';
8
+ /**
9
+ * 「字段定义 → 平台 jsonObj」的构造器。
10
+ *
11
+ * **这是唯一一份**。`form add-field` 与按物理表加字段的命令(`form add-physical-field`)都走它 ——
12
+ * 此前这段逻辑内联在 `commands/form.ts` 的 add-field action 里(约 340 行),
13
+ * 一旦要出第二个入口就会变成两处真相,所以原样搬到这里,行为一字未改。
14
+ *
15
+ * 搬动时只做了三处**等价**改写:
16
+ * 1. `client/baseUrl/...` 改为从入参取(原来是闭包变量)
17
+ * 2. `auth.userId` / `auth.tenantKey` → 入参 `userId` / `tenantKey`
18
+ * 3. `console.error(...) + process.exit(1)` → `throw new Error(...)`,
19
+ * 由调用方接住后打印并 `process.exit(1)`。**库函数不该直接退进程。**
20
+ *
21
+ * 字段落点由 `formTableId` 决定:主表的 id = 主表;某张附属物理表的 id = 落到「字段管理 → 其他」
22
+ * 里那张表上。
23
+ */
24
+ /** 平台系统字段 id(非业务字段)。`defaultEBuilderDataTitle` 用来筛业务字段。 */
25
+ export const SYSTEM_FIELD_IDS = new Set([
26
+ 'name', 'creator', 'create_time', 'update_time', 'id',
27
+ 'updater', 'data_status', 'flow_status', 'current_step',
28
+ 'batchpubtags', 'batchmytags', 'operate', 'data_read_status',
29
+ 'flow_system_number',
30
+ ]);
31
+ // EBuilder dataTitle(关联字段标题栏)默认解析:优先字段名含「名称」的业务字段,无则第一个业务字段。
32
+ // 需求:默认选带"名称"二字的字段(如 客户名称/类型名称),没有就默认选第一个。
33
+ export function defaultEBuilderDataTitle(fields) {
34
+ const isBiz = (id) => /^\d{15,}$/.test(id) && !SYSTEM_FIELD_IDS.has(id);
35
+ const biz = (fields || []).filter((f) => isBiz(String(f.fieldId ?? '')));
36
+ const byName = biz.find((f) => String(f.fieldName ?? f.title ?? '').includes('名称'));
37
+ return byName?.fieldId || biz[0]?.fieldId || 'name';
38
+ }
39
+ /** 构造字段的 jsonObj。致命错误一律抛出(不退出进程)。 */
40
+ export async function buildFieldJsonObject(ctx) {
41
+ const { client, baseUrl, appId, objId, userId, tenantKey, fieldType, fieldName, title, formId, fieldId, startId, endId } = ctx;
42
+ const cmdOpts = ctx.opts;
43
+ const sformId = cmdOpts.sformId || '';
44
+ const dataTitle = cmdOpts.dataTitle || '';
45
+ const formName = cmdOpts.formName || '';
46
+ const keys = { dataKey: ctx.dataKey, columnName: ctx.columnName };
47
+ // Build jsonObj based on field type
48
+ const jsonObj = {
49
+ type: fieldType,
50
+ title: title || fieldName,
51
+ formTableId: ctx.formTableId, fieldId, groupId: '-1', formId,
52
+ showOrder: '0.00',
53
+ dataKey: keys.dataKey,
54
+ columnName: keys.columnName,
55
+ };
56
+ // 明细表字段:--sub-form-id 时 jsonObj 带 subFormId —— **字段落点由它决定**。
57
+ // 必须用 resolveDetailTable 而不是直接查 getEbField:后者列不出空明细表,
58
+ // 用户把明细字段删光后就再也加不回去(详见 services/form-sub-detail.ts)。
59
+ if (cmdOpts.subFormId) {
60
+ const sub = await resolveDetailTable(client, baseUrl, appId, objId, formId, cmdOpts.subFormId);
61
+ if (!sub) {
62
+ throw new Error(`未找到明细表 subFormId=${cmdOpts.subFormId}(getEbField 与 querySubForms 均无此表,请确认 id)`);
63
+ }
64
+ Object.assign(jsonObj, { subFormId: cmdOpts.subFormId });
65
+ // 空表拿不到物理表 id,保持主表的值不动:实测带主表 formTableId 一样落进明细表。
66
+ if (sub.formTableId)
67
+ jsonObj.formTableId = sub.formTableId;
68
+ }
69
+ // 富组件:映射到平台真实 type/componentKey + 附加配置(对齐 batch/save/formField 抓包)。
70
+ // 之前 jsonObj 只有 type 没有 componentKey → 平台 FormFieldDto.getComponentKey() 为 null → NPE。
71
+ const rich = getRichType(fieldType);
72
+ if (rich) {
73
+ jsonObj.type = rich.platformType;
74
+ jsonObj.componentKey = rich.platformComponentKey;
75
+ if (rich.build) {
76
+ const extra = richIdUnits(fieldType, {}) - 1;
77
+ let extraIds = [];
78
+ if (extra > 0) {
79
+ const extraRes = await client.post(`${baseUrl}/api/form/local/generatorIds?size=${extra}&apid=${appId}`, {});
80
+ extraIds = (extraRes?.data?.generatorIds || []).map(String);
81
+ }
82
+ const extraCfg = await rich.build({
83
+ def: {
84
+ multiple: cmdOpts.multiple,
85
+ browserType: cmdOpts.browserType,
86
+ browserFormSource: cmdOpts.browserFormSource,
87
+ }, fieldId, formId, formTableId: ctx.formTableId, dataKey: keys.dataKey, columnName: keys.columnName,
88
+ showOrder: '0.00', extraIds,
89
+ });
90
+ Object.assign(jsonObj, extraCfg);
91
+ }
92
+ }
93
+ // 非富组件也补 componentKey(平台要求,否则 FormFieldDto.getComponentKey() 为 null → NPE)。
94
+ // 富组件已在上方设置 platformComponentKey;此处 fallback 到类型名(平台对常见类型有归一容错)。
95
+ if (!jsonObj.componentKey)
96
+ jsonObj.componentKey = fieldType;
97
+ // Number/Money decimal precision: --precision 指定,缺省 Number=0 整数、Money=2、百分比=1
98
+ // 百分比:--percent → numberType=percentage;默认值:--default → content+isDefault
99
+ // 实测:设默认值必须连 isDelimiter/stepMode/step/isCapital 一起,否则平台丢默认(只设 content+isDefault 不落库)
100
+ if (fieldType === 'Number' || fieldType === 'Money') {
101
+ const defaultPrec = fieldType === 'Money' ? '2' : '0';
102
+ const isPercent = fieldType === 'Number' && cmdOpts.percent === true;
103
+ // 注意:commander 把 --default 映射到 opts.default(非 defaultValue)
104
+ const hasDefault = cmdOpts.default !== undefined && cmdOpts.default !== null && cmdOpts.default !== '';
105
+ // 千分位:Money 默认开(--no-delimiter 关闭)、Number 默认关(--delimiter 开启)
106
+ const isDelim = fieldType === 'Money' ? cmdOpts.delimiter !== false : cmdOpts.delimiter === true;
107
+ const isCap = cmdOpts.capital === true;
108
+ const patch = {
109
+ pointSize: cmdOpts.precision !== undefined ? cmdOpts.precision : (isPercent ? '1' : defaultPrec),
110
+ isDefault: hasDefault,
111
+ isDelimiter: isDelim,
112
+ isCapital: isCap,
113
+ capitalFormat: 'onlyUpperCase',
114
+ capitalPosition: 'outside',
115
+ capitalSetting: 'system',
116
+ capitalPrecision: 'yuan',
117
+ isExchangeRates: false,
118
+ };
119
+ if (fieldType === 'Number')
120
+ patch.numberType = isPercent ? 'percentage' : 'number';
121
+ // content 始终带(无默认值时空串)——浏览器抓包 Number 字段 getFormField 恒有 content:"",
122
+ // 缺 content 在 FLOW 渲染异常(与多行文本同因)。
123
+ if (fieldType === 'Number')
124
+ patch.content = hasDefault ? String(cmdOpts.default) : '';
125
+ if (hasDefault) {
126
+ patch.stepMode = false;
127
+ patch.step = 1;
128
+ }
129
+ Object.assign(jsonObj, patch);
130
+ }
131
+ if (fieldType === 'TextArea') {
132
+ // 多行文本:对齐浏览器抓包——content 恒 ""(无默认值时空串)、maxLen=4000。
133
+ // 缺 content 在 FLOW 渲染异常;maxLen 不发则前端最大长度回显异常。
134
+ Object.assign(jsonObj, { content: '', maxLen: 4000 });
135
+ }
136
+ const isDateRange = fieldType === 'DateRange' || fieldType === 'DateInterval';
137
+ if (fieldType === 'EInvoice') {
138
+ Object.assign(jsonObj, {
139
+ isSingle: false,
140
+ invoiceType: 1,
141
+ });
142
+ delete jsonObj.maxLen;
143
+ delete jsonObj.unique;
144
+ delete jsonObj.scan;
145
+ delete jsonObj.readonlyTransLink;
146
+ }
147
+ else if (fieldType === 'Date' || fieldType === 'DateTime') {
148
+ // 日期:默认精度 年月日(yyyy-MM-dd,对齐浏览器抓包);DateTime:默认带时:分(yyyy-MM-dd HH:mm 不含秒)。
149
+ // 默认值不填(isDefault:false);--format 覆盖精度。
150
+ const isDt = fieldType === 'DateTime';
151
+ const fmt = cmdOpts.format || (isDt ? 'yyyy-MM-dd HH:mm' : 'yyyy-MM-dd');
152
+ Object.assign(jsonObj, {
153
+ type: 'Date',
154
+ format: fmt,
155
+ placeholder: placeholderFromFormat(fmt),
156
+ timePanelStyle: { type: 'system' },
157
+ isDefault: false,
158
+ });
159
+ // 日期限制:--min-field 最早不得早于 / --max-field 最晚不得晚于另一字段(对齐抓包 min.dateField)。
160
+ // 目标字段 fieldId 从 getFields mainFields 按字段名解析。
161
+ if (cmdOpts.minField || cmdOpts.maxField) {
162
+ try {
163
+ const tfd = await client.post(`${baseUrl}/api/ebuilder/form/dataset/v1/getFields`, {
164
+ objId, userid: userId, tenantKey,
165
+ });
166
+ const tfields = tfd?.data?.mainFields || [];
167
+ const minTarget = cmdOpts.minField ? tfields.find((f) => f.fieldName === cmdOpts.minField)?.fieldId : '';
168
+ const maxTarget = cmdOpts.maxField ? tfields.find((f) => f.fieldName === cmdOpts.maxField)?.fieldId : '';
169
+ if (minTarget) {
170
+ jsonObj.min = { type: 'dateField', checkValue: String(minTarget) };
171
+ jsonObj.earlyDate = true;
172
+ }
173
+ if (maxTarget) {
174
+ jsonObj.max = { type: 'dateField', checkValue: String(maxTarget) };
175
+ jsonObj.lateDate = true;
176
+ }
177
+ }
178
+ catch { /* 解析失败则不加限制 */ }
179
+ }
180
+ delete jsonObj.maxLen;
181
+ delete jsonObj.unique;
182
+ delete jsonObj.scan;
183
+ delete jsonObj.readonlyTransLink;
184
+ }
185
+ else if (fieldType === 'SubCompany') {
186
+ Object.assign(jsonObj, {
187
+ componentKey: 'Subcompany', isSingle: cmdOpts.multiple ? false : true,
188
+ displayType: 'space', defaultExtend: { type: 'custom', relation: 'current' },
189
+ viewDataDetail: true, showDimension: true,
190
+ pcDisplaySelectedCount: { type: 'default' },
191
+ mobileDisplaySelectedCount: { type: 'default' },
192
+ });
193
+ delete jsonObj.maxLen;
194
+ delete jsonObj.unique;
195
+ delete jsonObj.scan;
196
+ delete jsonObj.readonlyTransLink;
197
+ }
198
+ else if (fieldType === 'City') {
199
+ // 城市/地区选择(对齐浏览器 payload:region 模式 + 系统级联层级 + 字母索引)
200
+ Object.assign(jsonObj, {
201
+ isSingle: false,
202
+ levelSetting: 'system',
203
+ isDefault: false,
204
+ useLetterIndex: true,
205
+ mode: 'region',
206
+ });
207
+ delete jsonObj.maxLen;
208
+ delete jsonObj.unique;
209
+ delete jsonObj.scan;
210
+ delete jsonObj.readonlyTransLink;
211
+ }
212
+ else if (fieldType === 'EBuilder') {
213
+ if (!sformId) {
214
+ throw new Error('EBuilder 类型必须指定 --sform-id(目标表单 objId)');
215
+ }
216
+ // Resolve formName from target form if not provided
217
+ let resolvedFormName = formName;
218
+ if (!resolvedFormName) {
219
+ try {
220
+ const tf = await resolveFormRecord(client, baseUrl, appId, sformId);
221
+ resolvedFormName = tf?.formName || tf?.name || sformId;
222
+ }
223
+ catch {
224
+ resolvedFormName = sformId;
225
+ }
226
+ }
227
+ // Resolve dataTitle:纯数字 fieldId 直接用;'name'/字段名 → 查目标表字段。
228
+ // 未传 --data-title 时按 name 处理:默认优先字段名含「名称」的业务字段(如 客户名称/类型名称),无则第一个业务字段。
229
+ let resolvedDataTitle = dataTitle || 'name';
230
+ if (!/^\d{15,}$/.test(resolvedDataTitle)) {
231
+ try {
232
+ const tfd = await client.post(`${baseUrl}/api/ebuilder/form/dataset/v1/getFields`, {
233
+ objId: sformId, userid: userId, tenantKey,
234
+ });
235
+ const tfields = tfd?.data?.mainFields || [];
236
+ if (resolvedDataTitle === 'name') {
237
+ resolvedDataTitle = defaultEBuilderDataTitle(tfields);
238
+ }
239
+ else {
240
+ const m = tfields.find((f) => f.fieldName === resolvedDataTitle)
241
+ || tfields.find((f) => String(f.fieldName || '').includes(resolvedDataTitle));
242
+ resolvedDataTitle = m?.fieldId || resolvedDataTitle;
243
+ }
244
+ }
245
+ catch { /* 解析失败保留原值 */ }
246
+ }
247
+ Object.assign(jsonObj, {
248
+ sformId,
249
+ dataTitle: resolvedDataTitle || 'name',
250
+ formName: resolvedFormName,
251
+ virtualForm: false,
252
+ displayType: 'line',
253
+ isAddForRelation: true,
254
+ isSingle: cmdOpts.multiple ? false : true, // 默认单选;--multiple 多选
255
+ viewDataDetail: true,
256
+ pcDisplaySelectedCount: { type: 'default' },
257
+ mobileDisplaySelectedCount: { type: 'default' },
258
+ quickAddParams: [],
259
+ relateViewData: [],
260
+ relateField: null,
261
+ appId,
262
+ virtualTable: false,
263
+ });
264
+ }
265
+ else if (fieldType === 'Flow') {
266
+ // 浏览-流程字段(对齐浏览器 payload:type=Flow + relateExt.module=workflow)
267
+ if (!sformId) {
268
+ throw new Error('Flow 类型必须指定 --sform-id(目标流程绑定的表单 objId)');
269
+ }
270
+ let resolvedFormName = formName;
271
+ if (!resolvedFormName) {
272
+ try {
273
+ const tf = await resolveFormRecord(client, baseUrl, appId, sformId);
274
+ resolvedFormName = tf?.formName || tf?.name || sformId;
275
+ }
276
+ catch {
277
+ resolvedFormName = sformId;
278
+ }
279
+ }
280
+ Object.assign(jsonObj, {
281
+ isAddForRelation: true,
282
+ sformId,
283
+ formName: resolvedFormName,
284
+ conditionOperate: 'and',
285
+ filterParams: '{}',
286
+ filterQueryParams: '{}',
287
+ columnFields: [],
288
+ displayType: 'line',
289
+ viewDataDetail: true,
290
+ pcDisplaySelectedCount: { type: 'default' },
291
+ mobileDisplaySelectedCount: { type: 'default' },
292
+ relateExt: { module: 'workflow' },
293
+ relateField: null,
294
+ quickAddParams: [],
295
+ });
296
+ }
297
+ else if (isDateRange) {
298
+ // 日期区间:补 start/end 两个 DateComponent + rangeInterval(对齐浏览器 payload)
299
+ const format = cmdOpts.format || 'yyyy-MM-dd';
300
+ const rangeTitle = title || fieldName;
301
+ const start = {
302
+ componentKey: 'DateComponent', content: '', describe: '', earlyDate: 'false',
303
+ format, isDefault: 'false', lateDate: 'false',
304
+ placeholder: placeholderFromFormat(format),
305
+ position: '', relateMultiple: 'false', required: 'false', size: 'medium',
306
+ title: `${rangeTitle}(开始时间)`, fieldId: startId,
307
+ min: { type: 'currentHour' }, max: { type: 'currentHour' },
308
+ };
309
+ const end = { ...start, title: `${rangeTitle}(结束时间)`, fieldId: endId };
310
+ Object.assign(jsonObj, {
311
+ isDefault: false,
312
+ start, end,
313
+ hasDisplayFormat: true,
314
+ rangeInterval: { limitType: 'max', timeUnit: 'day' },
315
+ });
316
+ }
317
+ else if (fieldType === 'IDCard') {
318
+ // 身份证号:平台原生简单字段,浏览器抓包 payload 极简(type/title/formTableId/dataKey/
319
+ // columnName/fieldId/formId/showOrder/groupId 即全部)——无 componentKey、无文本长度配置。
320
+ delete jsonObj.componentKey;
321
+ delete jsonObj.maxLen;
322
+ delete jsonObj.unique;
323
+ delete jsonObj.scan;
324
+ delete jsonObj.readonlyTransLink;
325
+ }
326
+ else {
327
+ // 文本最大长度:--max-len 指定,缺省 Text=100、TextArea=4000(对齐浏览器抓包;TextArea 在上面分支已设 content:"")
328
+ const defaultMaxLen = fieldType === 'TextArea' ? 4000 : 100;
329
+ const maxLen = cmdOpts.maxLen !== undefined ? Number(cmdOpts.maxLen) : defaultMaxLen;
330
+ Object.assign(jsonObj, {
331
+ maxLen: Number.isFinite(maxLen) && maxLen > 0 ? maxLen : defaultMaxLen,
332
+ unique: false, scan: false,
333
+ readonlyTransLink: false,
334
+ });
335
+ }
336
+ // 人员/部门多选:默认单选,--multiple 改多选(isSingle:false)。EBuilder 已在上文分支设过。
337
+ if (fieldType === 'Employee' || fieldType === 'Department') {
338
+ jsonObj.isSingle = cmdOpts.multiple ? false : true;
339
+ }
340
+ // 下拉多选是独立类型 SelectMultiple(非 Select + 开关)。浏览器抓包:type:"SelectMultiple",
341
+ // 无 componentKey/maxLen/unique/scan(else 分支给 Select 加的 junk 要清掉),options 单独配。
342
+ if (fieldType === 'Select' && cmdOpts.multiple) {
343
+ jsonObj.type = 'SelectMultiple';
344
+ jsonObj.componentKey = 'SelectMultiple';
345
+ delete jsonObj.maxLen;
346
+ delete jsonObj.unique;
347
+ delete jsonObj.scan;
348
+ delete jsonObj.readonlyTransLink;
349
+ }
350
+ // Select 绑定选项预设模板:--option-template(ID 或名称)。
351
+ // 浏览器抓包(2026-09-09):jsonObj 带 templateId+templateName+publicTemplate:false+options:[](选项不内联),
352
+ // 平台渲染时按模板拉选项。模板管理见 `form option-template`。
353
+ if (fieldType === 'Select' && cmdOpts.optionTemplate) {
354
+ // 先清 else 分支给文本类加的 junk + options 占位(模板字段不发选项)
355
+ delete jsonObj.maxLen;
356
+ delete jsonObj.unique;
357
+ delete jsonObj.scan;
358
+ delete jsonObj.readonlyTransLink;
359
+ const tplIdOrName = cmdOpts.optionTemplate;
360
+ // 解析模板:纯数字按 ID 直查详情;否则在 custom+system 列表按名称精确匹配
361
+ let tplId = '';
362
+ let tplName = '';
363
+ const readTpl = async (id) => {
364
+ const r = await client.post(`${baseUrl}/api/form/datasources/queryDataSourcesByTemplateValueKey`, { templateId: id });
365
+ return r?.formDataTemplate?.id ? r.formDataTemplate : null;
366
+ };
367
+ if (/^\d+$/.test(tplIdOrName)) {
368
+ const t = await readTpl(tplIdOrName);
369
+ if (!t)
370
+ throw new Error(`选项模板 ${tplIdOrName} 不存在`);
371
+ tplId = String(t.id);
372
+ tplName = String(t.name);
373
+ }
374
+ else {
375
+ for (const type of ['custom', 'system']) {
376
+ const list = await client.post(`${baseUrl}/api/form/datasources/queryDataList`, { pageNo: 1, pageSize: 100, name: tplIdOrName, type });
377
+ const hit = (list?.templatePage?.result || []).find((r) => r.name === tplIdOrName);
378
+ if (hit) {
379
+ tplId = String(hit.id);
380
+ tplName = String(hit.name);
381
+ break;
382
+ }
383
+ }
384
+ if (!tplId)
385
+ throw new Error(`未找到名为「${tplIdOrName}」的选项模板(custom+system 均已查)`);
386
+ }
387
+ Object.assign(jsonObj, {
388
+ hideScore: true,
389
+ optionBackgroundStyle: 'default',
390
+ options: [],
391
+ templateScore: {},
392
+ currentLevel: '1',
393
+ templateId: tplId,
394
+ templateName: tplName,
395
+ publicTemplate: false,
396
+ parentId: [],
397
+ });
398
+ if (cmdOpts.multiple) {
399
+ console.error('提示:模板下拉当前按单选(currentLevel=1)绑定;多选+模板组合未验证');
400
+ }
401
+ }
402
+ // 默认值 / 数据库字段名 / 描述:与 edit-field 共用同一套补丁规则。
403
+ // 放在最后 —— 前面各类型分支会写 content(如 TextArea 恒置 ''),先打补丁会被冲掉。
404
+ const patch = applyFieldPatches(jsonObj, {
405
+ defaultValue: cmdOpts.default,
406
+ dataKey: cmdOpts.dataKey,
407
+ columnName: cmdOpts.columnName,
408
+ desc: cmdOpts.desc,
409
+ });
410
+ if (patch.errors.length > 0) {
411
+ // 原实现在这里逐行 console.error 后 process.exit(1);变成抛出,由调用方统一打印。
412
+ // 文案与顺序保持不变(多行拼在一个 Error 里)。
413
+ throw new Error([...patch.errors.map((e) => ` ❌ ${e}`), ' 已中止,未做任何改动。'].join('\n'));
414
+ }
415
+ for (const w of patch.warnings)
416
+ console.error(` ⚠ ${w}`);
417
+ // 必填**只存在于布局 comp 里**(`config.required`)—— 字段记录没有这个键。所以下面那句
418
+ // 只是形式上的补齐,真正生效的是布局落点:增量插入的 `overrides.required`,
419
+ // 或 --reinit 时 configs 里那条 newFieldConfig。两处都写全了用户才看不出差别。
420
+ if (cmdOpts.required === true)
421
+ jsonObj.required = true;
422
+ // 字段标题在平台里存的是**多语言标签 id**(字段记录的 `labelObj.title`),不是文本本身。
423
+ // 不建标签也能显示(设计器退回读 `title`),但只要有谁引用了标签而这个标签不存在,
424
+ // 标题就会**静默变空** —— 平台既不校验也不报错。所以顺手建一个真的,不留自造 id 的口子。
425
+ // 建失败只告警:字段本身才是主操作,不该被标签服务拖垮。
426
+ try {
427
+ const titleLabelId = await createMultilangLabel(client, baseUrl, title || fieldName, 'ebuilderform');
428
+ jsonObj.labelObj = { ...(jsonObj.labelObj || {}), title: titleLabelId };
429
+ jsonObj.titleLabelId = titleLabelId;
430
+ }
431
+ catch (e) {
432
+ console.error(` ⚠ 标题的多语言标签未建立(字段不受影响,设计器会退回用 title 显示): ${e.message}`);
433
+ }
434
+ return jsonObj;
435
+ }
436
+ //# sourceMappingURL=form-field-build.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form-field-build.js","sourceRoot":"","sources":["../../src/services/form-field-build.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * **按字段取组件模板** —— 布局增量插入在「本表还没有这个类型」时的模板来源。
3
+ *
4
+ * ## 这条路解决的是什么
5
+ *
6
+ * `form-layout-insert` 的增量插入是**照现成的同类型 comp 克隆**的(布局层专有键 + 各类型
7
+ * 自己的键集,按类型名拼只能猜)。于是一张表里**第一次**加某个类型时会中止:
8
+ * 「本表还没有『Switch』类型的字段,没有可参照的组件模板」。
9
+ *
10
+ * 平台其实有现成的模板,只是不在布局里 —— 在 `getFormFieldExist` 的返回里。
11
+ *
12
+ * ## `getFormFieldExist` 给什么
13
+ *
14
+ * `POST /api/ebuilder/form/form/builder/getFormFieldExist`(body 里的 `formField.title` 传空串即
15
+ * 「本表单全部字段」)按分类返回字段的**面板形态**:
16
+ *
17
+ * ```
18
+ * { id: <fieldId>, name, higherLevelId, leftSideType: 'used', applyStyle, category, icon,
19
+ * configPC: '[{ styleCategoryCompKey, package, prop, applyStyle, styleCategoryPackage,
20
+ * type, config: { …该字段的完整配置… } }]' }
21
+ * ```
22
+ *
23
+ * `configPC[0]` 就是**平台按该字段定义生成的组件模板**:顶层键(按类型的样式键)与 config
24
+ * (含类型专有键)都给全了。拿一根 Switch 实测对照平台自己 `initLayout` 产出的 comp:
25
+ *
26
+ * | 键 | 平台 comp | 字段记录 | **configPC** |
27
+ * |---|---|---|---|
28
+ * | `switchType` | `"switch"` | `"switch"` | `"switch"` |
29
+ * | `childName` / `parentName` | `""` | **无** | `""` |
30
+ * | `hasChild` | `false` | **无** | `false` |
31
+ * | `options` | `[]` | **无** | `[]` |
32
+ * | `typeLen` | `1` | **无** | `1` |
33
+ *
34
+ * ⚠ **字段记录(`getFormFieldPage`)不够** —— 它缺 `childName`/`parentName`/`hasChild`/`options`/
35
+ * `typeLen` 这类**只存在于组件侧的默认值**。所以模板必须从这个接口拿,不能靠字段记录拼。
36
+ *
37
+ * ## 覆盖范围(实测)
38
+ *
39
+ * - ✅ **主表字段**:新建的字段立刻就在返回里(`leftSideType: 'used'`),**本表从没有过的类型也有**。
40
+ * - ❌ **明细表字段**:拿不到 —— 分类「明细表」恒为空,试过 `subFormId` / `higherLevelId` /
41
+ * `formTableId` / `ebbusinessid` 换成子表 id 等 8 种参数,一律不返回。
42
+ * **但 configPC 是「按类型」而不是「按作用域」的**(`config.flow` 是空对象、没有 `excel`),
43
+ * 所以明细表要新类型时,可以借**主表**同类型字段的那一份,作用域由调用方自己写。
44
+ */
45
+ /** `getFormFieldExist` 的返回里,一个字段对应的一条。 */
46
+ export interface FieldTemplateEntry {
47
+ fieldId: string;
48
+ /** 组件模板的顶层键 + `config`(`configPC[0]`)。 */
49
+ comp: Record<string, any>;
50
+ /** 组件类型(`comp.type`)。 */
51
+ type: string;
52
+ }
53
+ /**
54
+ * 取本表单**主表**字段的组件模板,按 `fieldId` 索引。
55
+ *
56
+ * 明细表字段不在返回里(见模块头),所以这张表只覆盖主表。
57
+ * 调用方要明细表的模板时,用 `componentKey` 去这张表里找同类型的主表字段。
58
+ */
59
+ export declare function fetchFieldTypeTemplates(client: {
60
+ post: (url: string, body?: any, headers?: any) => Promise<any>;
61
+ }, baseUrl: string, appId: string, formId: string): Promise<Map<string, FieldTemplateEntry>>;
62
+ /** `configPC` 是**JSON 字符串**(设计器那边存的形态),解析失败当没有。 */
63
+ export declare function parseConfigPC(raw: unknown): any[];
64
+ /**
65
+ * 在模板表里找一个**指定类型**的模板(`fieldId` 命中不了时用)。
66
+ *
67
+ * 给明细表字段用:明细表自己那份拿不到,就借主表同类型的。`preferType` 是
68
+ * `componentKey`(如 `Switch` / `NumberComponent`),对不上 `type` 时再比一次 `type`。
69
+ */
70
+ export declare function findTemplateByType(templates: Map<string, FieldTemplateEntry>, want: string): FieldTemplateEntry | null;
71
+ //# sourceMappingURL=form-field-template.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form-field-template.d.ts","sourceRoot":"","sources":["../../src/services/form-field-template.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AAEH,0CAA0C;AAC1C,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,0CAA0C;IAC1C,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1B,yBAAyB;IACzB,IAAI,EAAE,MAAM,CAAC;CACd;AAID;;;;;GAKG;AACH,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE;IAAE,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,CAAA;CAAE,EAC1E,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAuB1C;AAED,mDAAmD;AACnD,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,EAAE,CASjD;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,EAC1C,IAAI,EAAE,MAAM,GACX,kBAAkB,GAAG,IAAI,CAO3B"}
@@ -0,0 +1,103 @@
1
+ /**
2
+ * **按字段取组件模板** —— 布局增量插入在「本表还没有这个类型」时的模板来源。
3
+ *
4
+ * ## 这条路解决的是什么
5
+ *
6
+ * `form-layout-insert` 的增量插入是**照现成的同类型 comp 克隆**的(布局层专有键 + 各类型
7
+ * 自己的键集,按类型名拼只能猜)。于是一张表里**第一次**加某个类型时会中止:
8
+ * 「本表还没有『Switch』类型的字段,没有可参照的组件模板」。
9
+ *
10
+ * 平台其实有现成的模板,只是不在布局里 —— 在 `getFormFieldExist` 的返回里。
11
+ *
12
+ * ## `getFormFieldExist` 给什么
13
+ *
14
+ * `POST /api/ebuilder/form/form/builder/getFormFieldExist`(body 里的 `formField.title` 传空串即
15
+ * 「本表单全部字段」)按分类返回字段的**面板形态**:
16
+ *
17
+ * ```
18
+ * { id: <fieldId>, name, higherLevelId, leftSideType: 'used', applyStyle, category, icon,
19
+ * configPC: '[{ styleCategoryCompKey, package, prop, applyStyle, styleCategoryPackage,
20
+ * type, config: { …该字段的完整配置… } }]' }
21
+ * ```
22
+ *
23
+ * `configPC[0]` 就是**平台按该字段定义生成的组件模板**:顶层键(按类型的样式键)与 config
24
+ * (含类型专有键)都给全了。拿一根 Switch 实测对照平台自己 `initLayout` 产出的 comp:
25
+ *
26
+ * | 键 | 平台 comp | 字段记录 | **configPC** |
27
+ * |---|---|---|---|
28
+ * | `switchType` | `"switch"` | `"switch"` | `"switch"` |
29
+ * | `childName` / `parentName` | `""` | **无** | `""` |
30
+ * | `hasChild` | `false` | **无** | `false` |
31
+ * | `options` | `[]` | **无** | `[]` |
32
+ * | `typeLen` | `1` | **无** | `1` |
33
+ *
34
+ * ⚠ **字段记录(`getFormFieldPage`)不够** —— 它缺 `childName`/`parentName`/`hasChild`/`options`/
35
+ * `typeLen` 这类**只存在于组件侧的默认值**。所以模板必须从这个接口拿,不能靠字段记录拼。
36
+ *
37
+ * ## 覆盖范围(实测)
38
+ *
39
+ * - ✅ **主表字段**:新建的字段立刻就在返回里(`leftSideType: 'used'`),**本表从没有过的类型也有**。
40
+ * - ❌ **明细表字段**:拿不到 —— 分类「明细表」恒为空,试过 `subFormId` / `higherLevelId` /
41
+ * `formTableId` / `ebbusinessid` 换成子表 id 等 8 种参数,一律不返回。
42
+ * **但 configPC 是「按类型」而不是「按作用域」的**(`config.flow` 是空对象、没有 `excel`),
43
+ * 所以明细表要新类型时,可以借**主表**同类型字段的那一份,作用域由调用方自己写。
44
+ */
45
+ const PATH = '/api/ebuilder/form/form/builder/getFormFieldExist';
46
+ /**
47
+ * 取本表单**主表**字段的组件模板,按 `fieldId` 索引。
48
+ *
49
+ * 明细表字段不在返回里(见模块头),所以这张表只覆盖主表。
50
+ * 调用方要明细表的模板时,用 `componentKey` 去这张表里找同类型的主表字段。
51
+ */
52
+ export async function fetchFieldTypeTemplates(client, baseUrl, appId, formId) {
53
+ const res = await client.post(`${baseUrl}${PATH}?apid=${encodeURIComponent(appId)}`, {
54
+ module: 'ebuilderform',
55
+ appId,
56
+ customParam: { terminal: '', objId: formId },
57
+ formField: { formId, title: '' },
58
+ }, { ebbusinessid: formId });
59
+ const out = new Map();
60
+ if (res?.code !== 200 || !res?.status)
61
+ return out;
62
+ for (const cat of res?.data || []) {
63
+ for (const entry of cat?.comps || []) {
64
+ const comps = parseConfigPC(entry?.configPC);
65
+ const comp = comps[0];
66
+ if (!comp || !entry?.id)
67
+ continue;
68
+ out.set(String(entry.id), { fieldId: String(entry.id), comp, type: String(comp.type || '') });
69
+ }
70
+ }
71
+ return out;
72
+ }
73
+ /** `configPC` 是**JSON 字符串**(设计器那边存的形态),解析失败当没有。 */
74
+ export function parseConfigPC(raw) {
75
+ if (Array.isArray(raw))
76
+ return raw;
77
+ if (typeof raw !== 'string' || !raw.trim())
78
+ return [];
79
+ try {
80
+ const parsed = JSON.parse(raw);
81
+ return Array.isArray(parsed) ? parsed : [];
82
+ }
83
+ catch {
84
+ return [];
85
+ }
86
+ }
87
+ /**
88
+ * 在模板表里找一个**指定类型**的模板(`fieldId` 命中不了时用)。
89
+ *
90
+ * 给明细表字段用:明细表自己那份拿不到,就借主表同类型的。`preferType` 是
91
+ * `componentKey`(如 `Switch` / `NumberComponent`),对不上 `type` 时再比一次 `type`。
92
+ */
93
+ export function findTemplateByType(templates, want) {
94
+ const target = String(want);
95
+ for (const entry of templates.values()) {
96
+ if (entry.type === target)
97
+ return entry;
98
+ if (String(entry.comp?.config?.componentKey ?? '') === target)
99
+ return entry;
100
+ }
101
+ return null;
102
+ }
103
+ //# sourceMappingURL=form-field-template.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form-field-template.js","sourceRoot":"","sources":["../../src/services/form-field-template.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AAWH,MAAM,IAAI,GAAG,mDAAmD,CAAC;AAEjE;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,MAA0E,EAC1E,OAAe,EACf,KAAa,EACb,MAAc;IAEd,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,IAAI,CAC3B,GAAG,OAAO,GAAG,IAAI,SAAS,kBAAkB,CAAC,KAAK,CAAC,EAAE,EACrD;QACE,MAAM,EAAE,cAAc;QACtB,KAAK;QACL,WAAW,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE;QAC5C,SAAS,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE;KACjC,EACD,EAAE,YAAY,EAAE,MAAM,EAAE,CACzB,CAAC;IACF,MAAM,GAAG,GAAG,IAAI,GAAG,EAA8B,CAAC;IAClD,IAAI,GAAG,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,MAAM;QAAE,OAAO,GAAG,CAAC;IAElD,KAAK,MAAM,GAAG,IAAI,GAAG,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC;QAClC,KAAK,MAAM,KAAK,IAAI,GAAG,EAAE,KAAK,IAAI,EAAE,EAAE,CAAC;YACrC,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YAC7C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACtB,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,EAAE;gBAAE,SAAS;YAClC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;QAChG,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,mDAAmD;AACnD,MAAM,UAAU,aAAa,CAAC,GAAY;IACxC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC;IACnC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,CAAC;IACtD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/B,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAChC,SAA0C,EAC1C,IAAY;IAEZ,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAC5B,KAAK,MAAM,KAAK,IAAI,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC;QACvC,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;YAAE,OAAO,KAAK,CAAC;QACxC,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,IAAI,EAAE,CAAC,KAAK,MAAM;YAAE,OAAO,KAAK,CAAC;IAC9E,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}