weaver-e10-builder 1.5.6 → 1.5.9

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 (194) hide show
  1. package/dist/commands/actionflow.d.ts.map +1 -1
  2. package/dist/commands/actionflow.js +6 -0
  3. package/dist/commands/actionflow.js.map +1 -1
  4. package/dist/commands/app.d.ts.map +1 -1
  5. package/dist/commands/app.js +259 -0
  6. package/dist/commands/app.js.map +1 -1
  7. package/dist/commands/form-add-detail-table.d.ts.map +1 -1
  8. package/dist/commands/form-add-detail-table.js +13 -2
  9. package/dist/commands/form-add-detail-table.js.map +1 -1
  10. package/dist/commands/form-button.d.ts.map +1 -1
  11. package/dist/commands/form-button.js +6 -4
  12. package/dist/commands/form-button.js.map +1 -1
  13. package/dist/commands/form-formula-linkage.d.ts.map +1 -1
  14. package/dist/commands/form-formula-linkage.js +4 -4
  15. package/dist/commands/form-formula-linkage.js.map +1 -1
  16. package/dist/commands/form-list-filter.d.ts +3 -0
  17. package/dist/commands/form-list-filter.d.ts.map +1 -1
  18. package/dist/commands/form-list-filter.js +88 -24
  19. package/dist/commands/form-list-filter.js.map +1 -1
  20. package/dist/commands/form-list-search-group.d.ts.map +1 -1
  21. package/dist/commands/form-list-search-group.js +54 -64
  22. package/dist/commands/form-list-search-group.js.map +1 -1
  23. package/dist/commands/form-list-stats.d.ts.map +1 -1
  24. package/dist/commands/form-list-stats.js +29 -4
  25. package/dist/commands/form-list-stats.js.map +1 -1
  26. package/dist/commands/form-list-utils.d.ts +46 -1
  27. package/dist/commands/form-list-utils.d.ts.map +1 -1
  28. package/dist/commands/form-list-utils.js +140 -47
  29. package/dist/commands/form-list-utils.js.map +1 -1
  30. package/dist/commands/form-list.d.ts.map +1 -1
  31. package/dist/commands/form-list.js +141 -71
  32. package/dist/commands/form-list.js.map +1 -1
  33. package/dist/commands/form-message.d.ts +3 -0
  34. package/dist/commands/form-message.d.ts.map +1 -0
  35. package/dist/commands/form-message.js +341 -0
  36. package/dist/commands/form-message.js.map +1 -0
  37. package/dist/commands/form-view.d.ts.map +1 -1
  38. package/dist/commands/form-view.js +31 -4
  39. package/dist/commands/form-view.js.map +1 -1
  40. package/dist/commands/form.js +1 -1
  41. package/dist/commands/form.js.map +1 -1
  42. package/dist/commands/matrix.d.ts.map +1 -1
  43. package/dist/commands/matrix.js +80 -42
  44. package/dist/commands/matrix.js.map +1 -1
  45. package/dist/commands/org.d.ts.map +1 -1
  46. package/dist/commands/org.js +61 -0
  47. package/dist/commands/org.js.map +1 -1
  48. package/dist/commands/role.d.ts.map +1 -1
  49. package/dist/commands/role.js +69 -9
  50. package/dist/commands/role.js.map +1 -1
  51. package/dist/commands/wf-form.d.ts.map +1 -1
  52. package/dist/commands/wf-form.js +5 -5
  53. package/dist/commands/wf-form.js.map +1 -1
  54. package/dist/commands/workflow-node-validate.d.ts.map +1 -1
  55. package/dist/commands/workflow-node-validate.js +159 -15
  56. package/dist/commands/workflow-node-validate.js.map +1 -1
  57. package/dist/core/crypto.d.ts +19 -0
  58. package/dist/core/crypto.d.ts.map +1 -1
  59. package/dist/core/crypto.js +70 -35
  60. package/dist/core/crypto.js.map +1 -1
  61. package/dist/index.js +2 -0
  62. package/dist/index.js.map +1 -1
  63. package/dist/services/actionflow/components/action_eb_update_compiler.d.ts.map +1 -1
  64. package/dist/services/actionflow/components/action_eb_update_compiler.js +3 -1
  65. package/dist/services/actionflow/components/action_eb_update_compiler.js.map +1 -1
  66. package/dist/services/actionflow/components/custom_trigger.d.ts.map +1 -1
  67. package/dist/services/actionflow/components/custom_trigger.js +2 -0
  68. package/dist/services/actionflow/components/custom_trigger.js.map +1 -1
  69. package/dist/services/actionflow/components/event_button.d.ts.map +1 -1
  70. package/dist/services/actionflow/components/event_button.js +2 -0
  71. package/dist/services/actionflow/components/event_button.js.map +1 -1
  72. package/dist/services/actionflow/components/event_form_data.d.ts.map +1 -1
  73. package/dist/services/actionflow/components/event_form_data.js +2 -0
  74. package/dist/services/actionflow/components/event_form_data.js.map +1 -1
  75. package/dist/services/actionflow/components/form_data_builder.d.ts +23 -0
  76. package/dist/services/actionflow/components/form_data_builder.d.ts.map +1 -0
  77. package/dist/services/actionflow/components/form_data_builder.js +106 -0
  78. package/dist/services/actionflow/components/form_data_builder.js.map +1 -0
  79. package/dist/services/actionflow/components/hrm_actions.d.ts +1 -0
  80. package/dist/services/actionflow/components/hrm_actions.d.ts.map +1 -1
  81. package/dist/services/actionflow/components/hrm_actions.js +136 -44
  82. package/dist/services/actionflow/components/hrm_actions.js.map +1 -1
  83. package/dist/services/actionflow/components/inner_mq_listener.d.ts.map +1 -1
  84. package/dist/services/actionflow/components/inner_mq_listener.js +2 -0
  85. package/dist/services/actionflow/components/inner_mq_listener.js.map +1 -1
  86. package/dist/services/actionflow/components/webhook_trigger.d.ts.map +1 -1
  87. package/dist/services/actionflow/components/webhook_trigger.js +6 -5
  88. package/dist/services/actionflow/components/webhook_trigger.js.map +1 -1
  89. package/dist/services/actionflow/components/workflow_actions.d.ts.map +1 -1
  90. package/dist/services/actionflow/components/workflow_actions.js +6 -3
  91. package/dist/services/actionflow/components/workflow_actions.js.map +1 -1
  92. package/dist/services/actionflow/context_preflight.d.ts +3 -3
  93. package/dist/services/actionflow/context_preflight.d.ts.map +1 -1
  94. package/dist/services/actionflow/context_preflight.js +45 -24
  95. package/dist/services/actionflow/context_preflight.js.map +1 -1
  96. package/dist/services/actionflow/context_provider.d.ts +7 -0
  97. package/dist/services/actionflow/context_provider.d.ts.map +1 -1
  98. package/dist/services/actionflow/context_provider.js +13 -1
  99. package/dist/services/actionflow/context_provider.js.map +1 -1
  100. package/dist/services/actionflow/formula_service.d.ts +16 -1
  101. package/dist/services/actionflow/formula_service.d.ts.map +1 -1
  102. package/dist/services/actionflow/formula_service.js +414 -63
  103. package/dist/services/actionflow/formula_service.js.map +1 -1
  104. package/dist/services/actionflow/hrm_source.d.ts +2 -0
  105. package/dist/services/actionflow/hrm_source.d.ts.map +1 -1
  106. package/dist/services/actionflow/hrm_source.js +4 -0
  107. package/dist/services/actionflow/hrm_source.js.map +1 -1
  108. package/dist/services/actionflow/param_group_dto.d.ts.map +1 -1
  109. package/dist/services/actionflow/param_group_dto.js +17 -3
  110. package/dist/services/actionflow/param_group_dto.js.map +1 -1
  111. package/dist/services/actionflow/param_type.d.ts +14 -0
  112. package/dist/services/actionflow/param_type.d.ts.map +1 -0
  113. package/dist/services/actionflow/param_type.js +69 -0
  114. package/dist/services/actionflow/param_type.js.map +1 -0
  115. package/dist/services/actionflow/preflight_service.d.ts.map +1 -1
  116. package/dist/services/actionflow/preflight_service.js +121 -41
  117. package/dist/services/actionflow/preflight_service.js.map +1 -1
  118. package/dist/services/actionflow/workflow_compiler.d.ts.map +1 -1
  119. package/dist/services/actionflow/workflow_compiler.js +83 -50
  120. package/dist/services/actionflow/workflow_compiler.js.map +1 -1
  121. package/dist/services/app-publish.d.ts +227 -0
  122. package/dist/services/app-publish.d.ts.map +1 -0
  123. package/dist/services/app-publish.js +403 -0
  124. package/dist/services/app-publish.js.map +1 -0
  125. package/dist/services/form-button-position.d.ts.map +1 -1
  126. package/dist/services/form-button-position.js +7 -1
  127. package/dist/services/form-button-position.js.map +1 -1
  128. package/dist/services/form-field-drop.d.ts.map +1 -1
  129. package/dist/services/form-field-drop.js +7 -0
  130. package/dist/services/form-field-drop.js.map +1 -1
  131. package/dist/services/form-formula-linkage.d.ts +24 -3
  132. package/dist/services/form-formula-linkage.d.ts.map +1 -1
  133. package/dist/services/form-formula-linkage.js +24 -5
  134. package/dist/services/form-formula-linkage.js.map +1 -1
  135. package/dist/services/form-layout-insert.js +1 -1
  136. package/dist/services/form-layout-insert.js.map +1 -1
  137. package/dist/services/form-list-search-group.d.ts +89 -0
  138. package/dist/services/form-list-search-group.d.ts.map +1 -0
  139. package/dist/services/form-list-search-group.js +260 -0
  140. package/dist/services/form-list-search-group.js.map +1 -0
  141. package/dist/services/form-list-search.d.ts +110 -0
  142. package/dist/services/form-list-search.d.ts.map +1 -0
  143. package/dist/services/form-list-search.js +231 -0
  144. package/dist/services/form-list-search.js.map +1 -0
  145. package/dist/services/form-list-stats.d.ts +21 -1
  146. package/dist/services/form-list-stats.d.ts.map +1 -1
  147. package/dist/services/form-list-stats.js +86 -12
  148. package/dist/services/form-list-stats.js.map +1 -1
  149. package/dist/services/form-message.d.ts +273 -0
  150. package/dist/services/form-message.d.ts.map +1 -0
  151. package/dist/services/form-message.js +575 -0
  152. package/dist/services/form-message.js.map +1 -0
  153. package/dist/services/form-sub-detail.d.ts.map +1 -1
  154. package/dist/services/form-sub-detail.js +5 -1
  155. package/dist/services/form-sub-detail.js.map +1 -1
  156. package/dist/services/form-view.d.ts +34 -2
  157. package/dist/services/form-view.d.ts.map +1 -1
  158. package/dist/services/form-view.js +74 -8
  159. package/dist/services/form-view.js.map +1 -1
  160. package/dist/services/matrix-fields.d.ts +42 -0
  161. package/dist/services/matrix-fields.d.ts.map +1 -0
  162. package/dist/services/matrix-fields.js +102 -0
  163. package/dist/services/matrix-fields.js.map +1 -0
  164. package/dist/services/org-browser.d.ts +60 -0
  165. package/dist/services/org-browser.d.ts.map +1 -0
  166. package/dist/services/org-browser.js +62 -0
  167. package/dist/services/org-browser.js.map +1 -0
  168. package/dist/services/quick-date-range.d.ts +22 -0
  169. package/dist/services/quick-date-range.d.ts.map +1 -0
  170. package/dist/services/quick-date-range.js +134 -0
  171. package/dist/services/quick-date-range.js.map +1 -0
  172. package/dist/services/role-member.d.ts +73 -2
  173. package/dist/services/role-member.d.ts.map +1 -1
  174. package/dist/services/role-member.js +141 -9
  175. package/dist/services/role-member.js.map +1 -1
  176. package/package.json +1 -1
  177. package/skill-docs/SKILL.md +20 -21
  178. package/skill-docs/_catalog.md +90 -86
  179. package/skill-docs/actionflows/SKILL.md +2 -1
  180. package/skill-docs/actionflows/references/components/message/InnerMQSend.md +6 -0
  181. package/skill-docs/actionflows/references/components/personnel/HrmEmployeeUpdate.md +3 -1
  182. package/skill-docs/actionflows/references/components/personnel/PersonnelAlterType.md +38 -0
  183. package/skill-docs/actionflows/references/components/personnel/PersonnelOnboarding.md +36 -34
  184. package/skill-docs/actionflows/references/components/trigger/WebHookTrigger.md +4 -2
  185. package/skill-docs/references/app/guide-app-publish.md +92 -0
  186. package/skill-docs/references/common/guide-plan-template.md +150 -246
  187. package/skill-docs/references/common/map.md +153 -0
  188. package/skill-docs/references/common/ref-cli-commands.md +28 -8
  189. package/skill-docs/references/form/guide-form-message.md +57 -0
  190. package/skill-docs/references/form/guide-form-view.md +7 -2
  191. package/skill-docs/references/form/guide-formula-linkage.md +1 -1
  192. package/skill-docs/references/form/guide-list-stats.md +55 -2
  193. package/skill-docs/references/hrm/guide-matrix.md +30 -2
  194. package/skill-docs/references/workflow/guide-workflow.md +20 -2
@@ -6,8 +6,9 @@
6
6
  import { genSfId, normalizeNumericFrontId } from './id_generator.js';
7
7
  import fs from 'node:fs';
8
8
  import { get, getCompiler, getNodePost } from './components/index.js';
9
+ import { buildEsbFormDataDto, buildEsbFormField } from './components/form_data_builder.js';
9
10
  import { findInMetadata, getTargetFormFields, getWorkflowDetailNames, getTargetDetailFields, getWorkflowDetailFields, getWorkflowFieldIds, workflowFieldId, getWorkflowContextFields, getWorkflowContextFieldsByKey } from './runtime_metadata.js';
10
- import { buildPersonFormula, buildSettingEntry, buildAssignBean, attachEsbAssign, resolveEnumConstant, resolveParamKey, resolveSourceFieldLabel, resolveSourceFieldType, normalizeConstantAssignment, lookupTargetFieldMeta, formulaFixedForAssignSwitch, formulaSystemVar, formulaContext, assignFlatContextDirect, getFormulaFn, formulaFunction, contextRootForComponent, contextTableNameForRoot, normalizeContextParamKey, } from './formula_service.js';
11
+ import { buildPersonFormula, buildAssignBean, attachEsbAssign, resolveEnumConstant, resolveParamKey, resolveSourceFieldLabel, resolveSourceFieldType, normalizeConstantAssignment, lookupTargetFieldMeta, formulaFixedForAssignSwitch, formulaSystemVar, formulaContext, assignFlatContextDirect, getFormulaFn, formulaFunction, contextRootForComponent, contextTableNameForRoot, normalizeContextParamKey, resolveFormSettingBasisParentName, contextMetaForReference, resolvedContextRoot, protocolParamKey, } from './formula_service.js';
11
12
  import { buildFormulaReference, buildUpdateFieldCondition } from './components/action_eb_update_compiler.js';
12
13
  import { resolveCustomTriggerDtoId } from './custom_trigger_context.js';
13
14
  import { resolveSystemParameter, isDateSystemParameter } from './system_params.js';
@@ -349,7 +350,10 @@ function handleSpecial(draftKey, special, val, result, meta, appId, idx, eventId
349
350
  function handleBasisValue(val, result, meta, appId, eventId) {
350
351
  if (!val || typeof val !== 'object')
351
352
  return;
352
- let bvKey = String(val.paramKey || val.key || val.value || '').trim();
353
+ const resolved = val._resolvedContext && typeof val._resolvedContext === 'object' ? val._resolvedContext : {};
354
+ const sourceComponent = String(resolved.componentType || meta?._context_component_type || meta?._upstream_component_type || 'ApproveTrigger');
355
+ const sourceMeta = contextMetaForReference(meta, val, sourceComponent);
356
+ let bvKey = String(val.paramKey || val.key || val.value || resolved.paramKey || '').trim();
353
357
  let bvLabel = String(val.label || val.name || '');
354
358
  // 明细表依据值 paramKey 必须带 [](早期正确产物 FormData.{wfId}.{明细表id}[])。
355
359
  // plan 允许省略 [],编译器检测上下文存在数组版本时自动补齐(真机验证 2026-08-19:漏 [] 前端定位不到明细表标红)。
@@ -360,6 +364,8 @@ function handleBasisValue(val, result, meta, appId, eventId) {
360
364
  if (keyIndex[arrKey] && !keyIndex[bvKey])
361
365
  bvKey = arrKey;
362
366
  }
367
+ const basisRoot = resolvedContextRoot(resolved, sourceComponent, sourceComponent === 'CustomTrigger' ? contextRootForComponent('CustomTrigger') : 'FormData');
368
+ bvKey = protocolParamKey(sourceComponent === 'CustomTrigger' ? normalizeContextParamKey(bvKey, sourceComponent) : bvKey, basisRoot, sourceComponent);
363
369
  if (bvKey) {
364
370
  const idx = bvKey.lastIndexOf('.');
365
371
  const bkHead = idx >= 0 ? bvKey.slice(0, idx) : '';
@@ -378,21 +384,28 @@ function handleBasisValue(val, result, meta, appId, eventId) {
378
384
  const fBiz = genSfId();
379
385
  const srcId = eventId || String(meta?._upstream_node_id || '');
380
386
  const wnBv = String(meta?._upstream_workflow_name || '');
381
- const bvParent = wnBv ? `${wnBv}.${bvLabel}[]` : `${bvLabel}[]`;
382
- const bvfType = resolveSourceFieldType(bvKey, meta);
387
+ const resolvedParentName = String(resolved.parentName || '').replace(/^(?:FormData|ApprovalData|SelectParams)\./, '');
388
+ const bvParent = resolvedParentName || (wnBv ? `${wnBv}.${bvLabel}[]` : `${bvLabel}[]`);
389
+ const bvfType = String(resolved.fieldType || resolveSourceFieldType(bvKey, sourceMeta));
390
+ const basisPath = `${basisRoot}.${bvKey}`;
391
+ const explicitId = String(resolved.fieldId || val.frontId || val.fieldId || '').trim();
392
+ const legacyId = /^\d+$/.test(tail) ? tail : bvKey;
393
+ const basisId = sourceComponent === 'CustomTrigger'
394
+ ? resolveCustomTriggerDtoId(bvKey, meta?._custom_trigger_data, String(resolved.dimension || 'table'))
395
+ : (sourceComponent === 'WebHookTrigger' && /^\d+$/.test(explicitId) ? explicitId : legacyId);
383
396
  const bvfConfig = {
384
- paramKey: bvKey, isMultCom: false, comType: 'ApproveTrigger', switchType: 'assign', parentComId: 0, formulaVersion: 'V1',
385
- fieldInfo: { paramKey: bvKey, tablePrimaryKey: 'FormData' },
386
- tableName: '表单数据', paramType: bvfType, parentName: bvParent, multName: '', multKey: '',
397
+ paramKey: bvKey, isMultCom: Boolean(resolved.isMultCom), comType: sourceComponent, switchType: 'assign', parentComId: 0, formulaVersion: 'V1',
398
+ fieldInfo: { paramKey: bvKey, tablePrimaryKey: basisRoot },
399
+ tableName: String(resolved.tableName || contextTableNameForRoot(basisRoot)), paramType: bvfType, parentName: bvParent, multName: '', multKey: '',
387
400
  multTypeObj: {
388
401
  allName: bvParent, currentName: bvParent,
389
- currentParamKey: `FormData.${bvKey}`, allParamKey: `FormData.${bvKey}`,
402
+ currentParamKey: basisPath, allParamKey: basisPath,
390
403
  },
391
404
  comId: srcId, newParentName: bvParent,
392
405
  };
393
406
  const bvf = {
394
- frontId: normalizeNumericFrontId(bvId, '依据值 FormulaBean.frontId'), formulaType: bvfType, name: bvLabel, businessId: fBiz, id: fId,
395
- source: srcId, type: '3', value: `FormData.${bvKey}`, childs: [], config: bvfConfig, parentId: '0',
407
+ frontId: normalizeNumericFrontId(basisId, '依据值 FormulaBean.frontId'), formulaType: bvfType, name: bvLabel, businessId: fBiz, id: fId,
408
+ source: srcId, type: '3', value: basisPath, childs: [], config: bvfConfig, parentId: '0',
396
409
  };
397
410
  // 依据值公式同样需要 esbAssign.wId 指向当前数据动作节点(设计器动态赋值定位用)。
398
411
  attachEsbAssign(bvf, meta, srcId);
@@ -443,7 +456,7 @@ export function fillSetting(result, updates, mapping, constants, formula, meta,
443
456
  const sourceType = field.type ?? '';
444
457
  fieldType = { String: 'Text', string: 'Text', Number: 'NumberComponent', number: 'NumberComponent' }[sourceType] ?? (sourceType || 'Text');
445
458
  }
446
- main[String(fid)] = buildSettingEntry(String(fid), u, fieldType, meta, appId, String(eventId), 'OPERATE_EQUAL', componentType, false, assignmentMode);
459
+ main[String(fid)] = buildEsbFormField(String(fid), u, fieldType, meta, appId, String(eventId), 'OPERATE_EQUAL', componentType, false, assignmentMode);
447
460
  }
448
461
  }
449
462
  if (mapping && typeof mapping === 'object' && !Array.isArray(mapping)) {
@@ -456,7 +469,7 @@ export function fillSetting(result, updates, mapping, constants, formula, meta,
456
469
  const tfid = String(targetFieldId.target || '');
457
470
  if (!tfid)
458
471
  throw new Error(`mapping 系统变量值缺少目标字段 id: 应传 {'target':'<目标字段id>', 'systemValue':'currentUser'}`);
459
- main[tfid] = buildSettingEntry(tfid, { kind: 'system_variable', key: svKey }, 'Text', meta, appId, String(eventId), 'OPERATE_EQUAL', componentType, false, assignmentMode);
472
+ main[tfid] = buildEsbFormField(tfid, { kind: 'system_variable', key: svKey }, 'Text', meta, appId, String(eventId), 'OPERATE_EQUAL', componentType, false, assignmentMode);
460
473
  continue;
461
474
  }
462
475
  const declaredKind = String(targetFieldId.kind || targetFieldId.assignmentKind || 'context');
@@ -489,6 +502,19 @@ export function fillSetting(result, updates, mapping, constants, formula, meta,
489
502
  if (targetFieldId[key] !== undefined)
490
503
  assignment[key] = targetFieldId[key];
491
504
  }
505
+ // 参数设置组件的字段身份来自用户实际选中的 ParamBean。
506
+ // 预检会把该行的真实 id 写入 _resolvedContext.fieldId;映射编译时
507
+ // 必须把这个 id 继续带到 FormulaBean.frontId,不能让
508
+ // assignFlatContextDirect 退回 paramKey/paramName 尾段。
509
+ const selectedParamId = targetFieldId._resolvedContext?.fieldId
510
+ || targetFieldId.frontId
511
+ || targetFieldId.fieldId;
512
+ if (selectedParamId !== undefined && selectedParamId !== null && String(selectedParamId).trim() !== '') {
513
+ assignment.frontId = String(selectedParamId);
514
+ }
515
+ if (targetFieldId._resolvedContext && typeof targetFieldId._resolvedContext === 'object') {
516
+ assignment._resolvedContext = { ...targetFieldId._resolvedContext };
517
+ }
492
518
  if (targetFieldId.source !== undefined)
493
519
  assignment.source = targetFieldId.source;
494
520
  if (targetFieldId.comId !== undefined)
@@ -512,7 +538,7 @@ export function fillSetting(result, updates, mapping, constants, formula, meta,
512
538
  const srcFt = resolveSourceFieldType(srcParamKey, meta);
513
539
  const targetMeta = lookupTargetFieldMeta(raw, result);
514
540
  const targetFt = String(targetMeta?.componentKey || targetMeta?.type || srcFt || 'Text');
515
- main[raw] = buildSettingEntry(raw, assignment, targetFt, meta, appId, String(eventId), operate, componentType, false, assignmentMode);
541
+ main[raw] = buildEsbFormField(raw, assignment, targetFt, meta, appId, String(eventId), operate, componentType, false, assignmentMode);
516
542
  }
517
543
  else {
518
544
  let raw = String(targetFieldId);
@@ -530,7 +556,7 @@ export function fillSetting(result, updates, mapping, constants, formula, meta,
530
556
  const srcFt = resolveSourceFieldType(refKey, meta);
531
557
  const targetMeta = lookupTargetFieldMeta(raw, result);
532
558
  const targetFt = String(targetMeta?.componentKey || targetMeta?.type || srcFt || 'Text');
533
- main[raw] = buildSettingEntry(raw, assignment, targetFt, meta, appId, String(eventId), operate, componentType, false, assignmentMode);
559
+ main[raw] = buildEsbFormField(raw, assignment, targetFt, meta, appId, String(eventId), operate, componentType, false, assignmentMode);
534
560
  }
535
561
  }
536
562
  }
@@ -549,7 +575,7 @@ export function fillSetting(result, updates, mapping, constants, formula, meta,
549
575
  // 固定枚举值的外层 fieldType 必须是目标组件类型(例如 Select),
550
576
  // 与手工保存 JSON 一致;使用默认 Text 会导致设计器下拉回显为空。
551
577
  const targetFieldType = String(fieldMeta?.componentKey || fieldMeta?.type || ft);
552
- main[tfid] = buildSettingEntry(tfid, assignment, targetFieldType, meta, appId, String(eventId), operateC, componentType, false, assignmentMode);
578
+ main[tfid] = buildEsbFormField(tfid, assignment, targetFieldType, meta, appId, String(eventId), operateC, componentType, false, assignmentMode);
553
579
  }
554
580
  }
555
581
  if (formula && typeof formula === 'object' && !Array.isArray(formula)) {
@@ -560,7 +586,7 @@ export function fillSetting(result, updates, mapping, constants, formula, meta,
560
586
  if (String(fspec.kind || '') === 'function') {
561
587
  const fieldMeta = lookupTargetFieldMeta(String(targetFieldId), result);
562
588
  const targetFieldType = String(fieldMeta?.componentKey || fieldMeta?.type || fspec.resultType || 'Number');
563
- main[String(targetFieldId)] = buildSettingEntry(String(targetFieldId), fspec, targetFieldType, meta, appId, String(eventId), 'OPERATE_EQUAL', componentType, false, assignmentMode);
589
+ main[String(targetFieldId)] = buildEsbFormField(String(targetFieldId), fspec, targetFieldType, meta, appId, String(eventId), 'OPERATE_EQUAL', componentType, false, assignmentMode);
564
590
  continue;
565
591
  }
566
592
  const op = fspec.op || 'add';
@@ -609,15 +635,11 @@ export function fillSetting(result, updates, mapping, constants, formula, meta,
609
635
  main[fidS] = { formFieldKey: '', value: { original: false, operate: 'OPERATE_EQUAL', fieldKey: fidS, multiSelect: false } };
610
636
  }
611
637
  }
612
- result.setting = {
638
+ result.setting = buildEsbFormDataDto(main, [], {
613
639
  opType: result.opType ?? 'insert',
614
640
  updatePolicy: result.updatePolicy ?? 'ALL',
615
- dataDrWithCalc: false,
616
- main,
617
- detail: [],
618
- deleteMainFields: [],
619
641
  updateFieldCondition: { updateField: [] },
620
- };
642
+ });
621
643
  }
622
644
  // ── filter 筛选条件树 ───────────────────────────────────────
623
645
  function isFilterGroup(value) {
@@ -1313,12 +1335,15 @@ export function buildSettingDetail(nodeData, detailItems, meta, appId, eventId,
1313
1335
  // 明细项依据值:引用整个明细表,source=event 节点 id, frontId=明细表 id。
1314
1336
  if (item.basisValue && typeof item.basisValue === 'object') {
1315
1337
  const bvVal = item.basisValue;
1316
- let bvKey = String(bvVal.paramKey || bvVal.key || '').trim();
1317
- const isCustomTriggerSource = String(meta?._context_component_type || meta?._upstream_component_type || '') === 'CustomTrigger';
1318
- const basisContextRoot = isCustomTriggerSource ? contextRootForComponent('CustomTrigger') : 'FormData';
1319
- const basisTableName = contextTableNameForRoot(basisContextRoot);
1320
- if (isCustomTriggerSource)
1321
- bvKey = normalizeContextParamKey(bvKey, 'CustomTrigger');
1338
+ const resolved = bvVal._resolvedContext && typeof bvVal._resolvedContext === 'object'
1339
+ ? bvVal._resolvedContext : {};
1340
+ const sourceComponent = String(resolved.componentType || meta?._context_component_type || meta?._upstream_component_type || 'ApproveTrigger');
1341
+ const sourceMeta = contextMetaForReference(meta, bvVal, sourceComponent);
1342
+ let bvKey = String(bvVal.paramKey || bvVal.key || resolved.paramKey || '').trim();
1343
+ const isCustomTriggerSource = sourceComponent === 'CustomTrigger';
1344
+ const basisContextRoot = resolvedContextRoot(resolved, sourceComponent, isCustomTriggerSource ? contextRootForComponent('CustomTrigger') : 'FormData');
1345
+ const basisTableName = String(resolved.tableName || contextTableNameForRoot(basisContextRoot));
1346
+ bvKey = protocolParamKey(isCustomTriggerSource ? normalizeContextParamKey(bvKey, 'CustomTrigger') : bvKey, basisContextRoot, sourceComponent);
1322
1347
  if (bvKey && !bvKey.includes('[]')) {
1323
1348
  const wfId = String(meta?._workflow_id || '');
1324
1349
  const keyIndex = wfId ? getWorkflowContextFieldsByKey()[wfId] || {} : {};
@@ -1328,18 +1353,13 @@ export function buildSettingDetail(nodeData, detailItems, meta, appId, eventId,
1328
1353
  }
1329
1354
  const bvLabel = String(bvVal.label || bvVal.name || bvKey);
1330
1355
  if (bvKey) {
1331
- const bvType = resolveSourceFieldType(bvKey, meta);
1332
- let prefix = '';
1333
- if (meta && typeof meta === 'object') {
1334
- prefix = String(meta._upstream_workflow_name || '');
1335
- if (!prefix)
1336
- prefix = String(meta._upstream_form_name || '');
1337
- }
1338
- const parentName = prefix ? `${prefix}.${bvLabel}[]` : `${bvLabel}[]`;
1356
+ const bvType = String(resolved.fieldType || resolveSourceFieldType(bvKey, sourceMeta));
1357
+ const resolvedParentName = String(resolved.parentName || '').replace(/^(?:FormData|ApprovalData|SelectParams)\./, '');
1358
+ const parentName = resolvedParentName || resolveFormSettingBasisParentName(bvKey, bvLabel, sourceMeta);
1339
1359
  // CustomTrigger 的明细依据值也是表维度上下文,frontId 必须取
1340
1360
  // CustFormTableDto.id,不能把 detail1 这类 paramKey 尾段直接当成 ID。
1341
1361
  const customTriggerTableId = isCustomTriggerSource
1342
- ? resolveCustomTriggerDtoId(bvKey, meta?._custom_trigger_data, 'table')
1362
+ ? resolveCustomTriggerDtoId(bvKey, meta?._custom_trigger_data, String(resolved.dimension || 'table'))
1343
1363
  : '';
1344
1364
  const legacyBvSubformId = bvKey.includes('[]')
1345
1365
  ? bvKey.split('[]')[0].includes('.')
@@ -1348,7 +1368,20 @@ export function buildSettingDetail(nodeData, detailItems, meta, appId, eventId,
1348
1368
  : bvKey;
1349
1369
  // CustomTrigger 无法定位 DTO 表对象时按统一规则留空;不能回退到
1350
1370
  // detail1 这类业务 paramKey,否则既不是真实 ID,也会触发数字校验。
1351
- const bvSubformId = isCustomTriggerSource ? customTriggerTableId : legacyBvSubformId;
1371
+ // WebHook 的明细依据值来自 ParamGroupSettingBean 的父参数行。
1372
+ // 这里必须使用该行的真实 id;不能把 detailOne/detailTwo 这种
1373
+ // paramKey 尾段误当作 FormulaBean.frontId。
1374
+ const explicitBasisId = String(resolved.fieldId
1375
+ || bvVal.frontId
1376
+ || bvVal.fieldId
1377
+ || '').trim();
1378
+ const isWebhookSource = sourceComponent === 'WebHookTrigger';
1379
+ const bvSubformId = isCustomTriggerSource
1380
+ ? customTriggerTableId
1381
+ : isWebhookSource && /^\d+$/.test(explicitBasisId)
1382
+ ? explicitBasisId
1383
+ : legacyBvSubformId;
1384
+ const basisValuePath = `${basisContextRoot}.${bvKey}`;
1352
1385
  ele.basisValue = {
1353
1386
  frontId: normalizeNumericFrontId(bvSubformId, '明细依据值 FormulaBean.frontId'),
1354
1387
  formulaType: bvType,
@@ -1357,7 +1390,7 @@ export function buildSettingDetail(nodeData, detailItems, meta, appId, eventId,
1357
1390
  id: genSfId(),
1358
1391
  source: String(eventId),
1359
1392
  type: '3',
1360
- value: `${basisContextRoot}.${bvKey}`,
1393
+ value: basisValuePath,
1361
1394
  childs: [],
1362
1395
  config: {
1363
1396
  paramKey: bvKey,
@@ -1369,10 +1402,10 @@ export function buildSettingDetail(nodeData, detailItems, meta, appId, eventId,
1369
1402
  multKey: '',
1370
1403
  multTypeObj: {
1371
1404
  allName: parentName, currentName: parentName,
1372
- currentParamKey: `${basisContextRoot}.${bvKey}`, allParamKey: `${basisContextRoot}.${bvKey}`,
1405
+ currentParamKey: basisValuePath, allParamKey: basisValuePath,
1373
1406
  },
1374
1407
  comId: String(eventId),
1375
- comType: isCustomTriggerSource ? 'CustomTrigger' : 'ApproveTrigger',
1408
+ comType: sourceComponent,
1376
1409
  newParentName: parentName,
1377
1410
  tableName: basisTableName,
1378
1411
  fieldInfo: { paramKey: bvKey, tablePrimaryKey: basisContextRoot },
@@ -1416,7 +1449,7 @@ export function buildSettingDetail(nodeData, detailItems, meta, appId, eventId,
1416
1449
  assignment.detailLabel = refDetail;
1417
1450
  const targetMeta = targetDetailFields[raw] || {};
1418
1451
  const targetType = String(targetMeta.componentKey || targetMeta.type || 'Text');
1419
- eleData[raw] = buildSettingEntry(raw, assignment, targetType, meta, appId, eventId, operate, nodeType, true, '');
1452
+ eleData[raw] = buildEsbFormField(raw, assignment, targetType, meta, appId, eventId, operate, nodeType, true, '');
1420
1453
  }
1421
1454
  else {
1422
1455
  let raw = String(targetFieldId);
@@ -1431,7 +1464,7 @@ export function buildSettingDetail(nodeData, detailItems, meta, appId, eventId,
1431
1464
  assignment = { kind: 'context', paramKey: String(sourceKey), label: resolveSourceFieldLabel(String(sourceKey), meta, String(sourceKey)) };
1432
1465
  const targetMeta = targetDetailFields[raw] || {};
1433
1466
  const targetType = String(targetMeta.componentKey || targetMeta.type || 'Text');
1434
- eleData[raw] = buildSettingEntry(raw, assignment, targetType, meta, appId, eventId, operate, nodeType, true, '');
1467
+ eleData[raw] = buildEsbFormField(raw, assignment, targetType, meta, appId, eventId, operate, nodeType, true, '');
1435
1468
  }
1436
1469
  }
1437
1470
  }
@@ -1442,7 +1475,7 @@ export function buildSettingDetail(nodeData, detailItems, meta, appId, eventId,
1442
1475
  const value = resolveEnumConstant(valueRaw, targetMeta);
1443
1476
  const [assignment, ft] = normalizeConstantAssignment(value, 'Text');
1444
1477
  const targetType = String(targetMeta.componentKey || targetMeta.type || ft);
1445
- eleData[targetFieldId] = buildSettingEntry(targetFieldId, assignment, targetType, meta, appId, eventId, 'OPERATE_EQUAL', nodeType, true, '');
1478
+ eleData[targetFieldId] = buildEsbFormField(targetFieldId, assignment, targetType, meta, appId, eventId, 'OPERATE_EQUAL', nodeType, true, '');
1446
1479
  }
1447
1480
  }
1448
1481
  const formula = item.formula || {};
@@ -1456,7 +1489,7 @@ export function buildSettingDetail(nodeData, detailItems, meta, appId, eventId,
1456
1489
  continue;
1457
1490
  const targetMeta = targetDetailFields[String(targetFieldId)] || {};
1458
1491
  const targetType = String(targetMeta.componentKey || targetMeta.type || formulaSpec.resultType || 'Text');
1459
- eleData[String(targetFieldId)] = buildSettingEntry(String(targetFieldId), formulaSpec, targetType, meta, appId, eventId, 'OPERATE_EQUAL', nodeType, true, '');
1492
+ eleData[String(targetFieldId)] = buildEsbFormField(String(targetFieldId), formulaSpec, targetType, meta, appId, eventId, 'OPERATE_EQUAL', nodeType, true, '');
1460
1493
  }
1461
1494
  }
1462
1495
  // detail 自动按名补全
@@ -1512,7 +1545,7 @@ export function autoFillDetailMapping(eleData, item, targetFormId, meta, appId,
1512
1545
  const assignment = { kind: 'context', paramKey: srcPk, label: tname };
1513
1546
  if (bvLabel)
1514
1547
  assignment.detailLabel = bvLabel;
1515
- eleData[tidS] = buildSettingEntry(tidS, assignment, String(tmeta.componentKey || tmeta.type || 'Text'), meta, appId, eventId, 'OPERATE_EQUAL', nodeType, true, '');
1548
+ eleData[tidS] = buildEsbFormField(tidS, assignment, String(tmeta.componentKey || tmeta.type || 'Text'), meta, appId, eventId, 'OPERATE_EQUAL', nodeType, true, '');
1516
1549
  }
1517
1550
  }
1518
1551
  // ── convert_node ────────────────────────────────────────────
@@ -1567,7 +1600,7 @@ export function convertNode(draftAction, isEvent = false, meta = null, appId = '
1567
1600
  delete nodeData.setting;
1568
1601
  const main = (setting || {}).main || {};
1569
1602
  const detailOut = (setting || {}).detail || [];
1570
- nodeData.formData = { main, detail: detailOut, dataDrWithCalc: false, deleteMainFields: [] };
1603
+ nodeData.formData = buildEsbFormDataDto(main, detailOut);
1571
1604
  // ApproveCreateDTO 没有使用 fields;目标字段仅用于编译 mapping,不能写入保存 DTO。
1572
1605
  if (nodeType !== 'ApproveCreate') {
1573
1606
  const fieldsMetaKey = String(formDataPayload.fieldsMetaKey || '_bizFields');
@@ -1588,7 +1621,7 @@ export function convertNode(draftAction, isEvent = false, meta = null, appId = '
1588
1621
  }
1589
1622
  else if (formDataPayload && typeof formDataPayload === 'object') {
1590
1623
  // 声明 formDataPayload 的组件即使没有字段映射,也显式携带表单数据容器。
1591
- nodeData.formData ??= { main: {}, detail: [], dataDrWithCalc: false, deleteMainFields: [] };
1624
+ nodeData.formData ??= buildEsbFormDataDto();
1592
1625
  if (nodeType !== 'ApproveCreate')
1593
1626
  nodeData.fields ??= { main: [], detail: [] };
1594
1627
  nodeData.formDataId ??= genSfId();
@@ -1639,7 +1672,7 @@ export function convertNode(draftAction, isEvent = false, meta = null, appId = '
1639
1672
  continue;
1640
1673
  const targetFieldMeta = lookupTargetFieldMeta(raw, nodeData);
1641
1674
  const targetFieldType = String(targetFieldMeta?.componentKey || targetFieldMeta?.type || 'Text');
1642
- main[raw] = buildSettingEntry(raw, { kind: 'context', paramKey: String(sourceKey), label: String(sourceKey) }, targetFieldType, meta || {}, appId, eventNodeId || nidStr, operate, nodeType, false, assignmentMode);
1675
+ main[raw] = buildEsbFormField(raw, { kind: 'context', paramKey: String(sourceKey), label: String(sourceKey) }, targetFieldType, meta || {}, appId, eventNodeId || nidStr, operate, nodeType, false, assignmentMode);
1643
1676
  }
1644
1677
  }
1645
1678
  if (pendingConstants && typeof pendingConstants === 'object') {
@@ -1656,7 +1689,7 @@ export function convertNode(draftAction, isEvent = false, meta = null, appId = '
1656
1689
  rawV = resolveEnumConstant(rawV, targetFieldMeta);
1657
1690
  const [assignment, ft] = normalizeConstantAssignment(rawV, 'Text');
1658
1691
  const targetFieldType = String(targetFieldMeta?.componentKey || targetFieldMeta?.type || ft);
1659
- main[targetFieldId] = buildSettingEntry(targetFieldId, assignment, targetFieldType, meta || {}, appId, eventNodeId || nidStr, operateC, nodeType, false, assignmentMode);
1692
+ main[targetFieldId] = buildEsbFormField(targetFieldId, assignment, targetFieldType, meta || {}, appId, eventNodeId || nidStr, operateC, nodeType, false, assignmentMode);
1660
1693
  }
1661
1694
  }
1662
1695
  nodeData.setting.main = main;