weaver-e10-builder 1.2.5 → 1.5.1

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 (201) hide show
  1. package/assets/org-employee-template.xlsx +0 -0
  2. package/dist/commands/form-button.d.ts.map +1 -1
  3. package/dist/commands/form-button.js +28 -5
  4. package/dist/commands/form-button.js.map +1 -1
  5. package/dist/commands/form-field-linkage.d.ts.map +1 -1
  6. package/dist/commands/form-field-linkage.js +27 -6
  7. package/dist/commands/form-field-linkage.js.map +1 -1
  8. package/dist/commands/form-formula-linkage.d.ts +3 -0
  9. package/dist/commands/form-formula-linkage.d.ts.map +1 -0
  10. package/dist/commands/form-formula-linkage.js +434 -0
  11. package/dist/commands/form-formula-linkage.js.map +1 -0
  12. package/dist/commands/form-formula.d.ts.map +1 -1
  13. package/dist/commands/form-formula.js +22 -3
  14. package/dist/commands/form-formula.js.map +1 -1
  15. package/dist/commands/form-list-click.d.ts.map +1 -1
  16. package/dist/commands/form-list-click.js +2 -1
  17. package/dist/commands/form-list-click.js.map +1 -1
  18. package/dist/commands/form-native.d.ts.map +1 -1
  19. package/dist/commands/form-native.js +11 -3
  20. package/dist/commands/form-native.js.map +1 -1
  21. package/dist/commands/form.d.ts.map +1 -1
  22. package/dist/commands/form.js +247 -173
  23. package/dist/commands/form.js.map +1 -1
  24. package/dist/commands/matrix.d.ts.map +1 -1
  25. package/dist/commands/matrix.js +175 -36
  26. package/dist/commands/matrix.js.map +1 -1
  27. package/dist/commands/org.d.ts +10 -0
  28. package/dist/commands/org.d.ts.map +1 -0
  29. package/dist/commands/org.js +278 -0
  30. package/dist/commands/org.js.map +1 -0
  31. package/dist/commands/role.d.ts.map +1 -1
  32. package/dist/commands/role.js +106 -62
  33. package/dist/commands/role.js.map +1 -1
  34. package/dist/commands/wf-form.d.ts.map +1 -1
  35. package/dist/commands/wf-form.js +501 -26
  36. package/dist/commands/wf-form.js.map +1 -1
  37. package/dist/commands/workflow-auth-resp.d.ts.map +1 -1
  38. package/dist/commands/workflow-auth-resp.js +53 -5
  39. package/dist/commands/workflow-auth-resp.js.map +1 -1
  40. package/dist/commands/workflow-create-auth-resp.d.ts.map +1 -1
  41. package/dist/commands/workflow-create-auth-resp.js +5 -1
  42. package/dist/commands/workflow-create-auth-resp.js.map +1 -1
  43. package/dist/commands/workflow.d.ts.map +1 -1
  44. package/dist/commands/workflow.js +78 -9
  45. package/dist/commands/workflow.js.map +1 -1
  46. package/dist/index.js +4 -0
  47. package/dist/index.js.map +1 -1
  48. package/dist/services/action-detail.d.ts.map +1 -1
  49. package/dist/services/action-detail.js +5 -4
  50. package/dist/services/action-detail.js.map +1 -1
  51. package/dist/services/actionflow/components/action_eb_update_compiler.d.ts.map +1 -1
  52. package/dist/services/actionflow/components/action_eb_update_compiler.js +22 -7
  53. package/dist/services/actionflow/components/action_eb_update_compiler.js.map +1 -1
  54. package/dist/services/actionflow/components/approve_create.d.ts.map +1 -1
  55. package/dist/services/actionflow/components/approve_create.js +6 -3
  56. package/dist/services/actionflow/components/approve_create.js.map +1 -1
  57. package/dist/services/actionflow/components/custom_set_form.d.ts.map +1 -1
  58. package/dist/services/actionflow/components/custom_set_form.js +35 -1
  59. package/dist/services/actionflow/components/custom_set_form.js.map +1 -1
  60. package/dist/services/actionflow/components/custom_trigger.d.ts.map +1 -1
  61. package/dist/services/actionflow/components/custom_trigger.js +4 -1
  62. package/dist/services/actionflow/components/custom_trigger.js.map +1 -1
  63. package/dist/services/actionflow/components/dml_execute.d.ts.map +1 -1
  64. package/dist/services/actionflow/components/dml_execute.js +7 -3
  65. package/dist/services/actionflow/components/dml_execute.js.map +1 -1
  66. package/dist/services/actionflow/components/document_actions.d.ts.map +1 -1
  67. package/dist/services/actionflow/components/document_actions.js +7 -3
  68. package/dist/services/actionflow/components/document_actions.js.map +1 -1
  69. package/dist/services/actionflow/components/hrm_actions.d.ts.map +1 -1
  70. package/dist/services/actionflow/components/hrm_actions.js +7 -3
  71. package/dist/services/actionflow/components/hrm_actions.js.map +1 -1
  72. package/dist/services/actionflow/components/multiple_execution.d.ts.map +1 -1
  73. package/dist/services/actionflow/components/multiple_execution.js +14 -5
  74. package/dist/services/actionflow/components/multiple_execution.js.map +1 -1
  75. package/dist/services/actionflow/components/output.js +1 -1
  76. package/dist/services/actionflow/components/output.js.map +1 -1
  77. package/dist/services/actionflow/components/send_message.js +2 -2
  78. package/dist/services/actionflow/components/send_message.js.map +1 -1
  79. package/dist/services/actionflow/components/workflow_actions.d.ts.map +1 -1
  80. package/dist/services/actionflow/components/workflow_actions.js +7 -3
  81. package/dist/services/actionflow/components/workflow_actions.js.map +1 -1
  82. package/dist/services/actionflow/context_preflight.d.ts.map +1 -1
  83. package/dist/services/actionflow/context_preflight.js +12 -2
  84. package/dist/services/actionflow/context_preflight.js.map +1 -1
  85. package/dist/services/actionflow/context_provider.d.ts.map +1 -1
  86. package/dist/services/actionflow/context_provider.js +21 -2
  87. package/dist/services/actionflow/context_provider.js.map +1 -1
  88. package/dist/services/actionflow/custom_trigger_context.d.ts +10 -0
  89. package/dist/services/actionflow/custom_trigger_context.d.ts.map +1 -0
  90. package/dist/services/actionflow/custom_trigger_context.js +46 -0
  91. package/dist/services/actionflow/custom_trigger_context.js.map +1 -0
  92. package/dist/services/actionflow/filter_rules.js +2 -2
  93. package/dist/services/actionflow/filter_rules.js.map +1 -1
  94. package/dist/services/actionflow/formula_service.d.ts +9 -1
  95. package/dist/services/actionflow/formula_service.d.ts.map +1 -1
  96. package/dist/services/actionflow/formula_service.js +59 -21
  97. package/dist/services/actionflow/formula_service.js.map +1 -1
  98. package/dist/services/actionflow/id_generator.d.ts +2 -0
  99. package/dist/services/actionflow/id_generator.d.ts.map +1 -1
  100. package/dist/services/actionflow/id_generator.js +13 -0
  101. package/dist/services/actionflow/id_generator.js.map +1 -1
  102. package/dist/services/actionflow/preflight_service.d.ts.map +1 -1
  103. package/dist/services/actionflow/preflight_service.js +6 -1
  104. package/dist/services/actionflow/preflight_service.js.map +1 -1
  105. package/dist/services/actionflow/workflow_compiler.d.ts.map +1 -1
  106. package/dist/services/actionflow/workflow_compiler.js +89 -35
  107. package/dist/services/actionflow/workflow_compiler.js.map +1 -1
  108. package/dist/services/auth-resp-condition.d.ts +35 -0
  109. package/dist/services/auth-resp-condition.d.ts.map +1 -0
  110. package/dist/services/auth-resp-condition.js +111 -0
  111. package/dist/services/auth-resp-condition.js.map +1 -0
  112. package/dist/services/condition-rules.d.ts.map +1 -1
  113. package/dist/services/condition-rules.js +4 -1
  114. package/dist/services/condition-rules.js.map +1 -1
  115. package/dist/services/esb-interface/document-parser.d.ts.map +1 -1
  116. package/dist/services/esb-interface/document-parser.js +62 -5
  117. package/dist/services/esb-interface/document-parser.js.map +1 -1
  118. package/dist/services/form-association.d.ts +19 -0
  119. package/dist/services/form-association.d.ts.map +1 -1
  120. package/dist/services/form-association.js +64 -0
  121. package/dist/services/form-association.js.map +1 -1
  122. package/dist/services/form-button-action.d.ts +7 -0
  123. package/dist/services/form-button-action.d.ts.map +1 -1
  124. package/dist/services/form-button-action.js +11 -1
  125. package/dist/services/form-button-action.js.map +1 -1
  126. package/dist/services/form-create.d.ts +4 -0
  127. package/dist/services/form-create.d.ts.map +1 -1
  128. package/dist/services/form-create.js +18 -12
  129. package/dist/services/form-create.js.map +1 -1
  130. package/dist/services/form-field-patch.d.ts +3 -1
  131. package/dist/services/form-field-patch.d.ts.map +1 -1
  132. package/dist/services/form-field-patch.js +23 -9
  133. package/dist/services/form-field-patch.js.map +1 -1
  134. package/dist/services/form-formula-linkage.d.ts +349 -0
  135. package/dist/services/form-formula-linkage.d.ts.map +1 -0
  136. package/dist/services/form-formula-linkage.js +546 -0
  137. package/dist/services/form-formula-linkage.js.map +1 -0
  138. package/dist/services/form-layout-insert.d.ts +84 -0
  139. package/dist/services/form-layout-insert.d.ts.map +1 -0
  140. package/dist/services/form-layout-insert.js +244 -0
  141. package/dist/services/form-layout-insert.js.map +1 -0
  142. package/dist/services/form-linkage-condition.d.ts +159 -0
  143. package/dist/services/form-linkage-condition.d.ts.map +1 -0
  144. package/dist/services/form-linkage-condition.js +307 -0
  145. package/dist/services/form-linkage-condition.js.map +1 -0
  146. package/dist/services/formula-detail.d.ts +98 -6
  147. package/dist/services/formula-detail.d.ts.map +1 -1
  148. package/dist/services/formula-detail.js +208 -26
  149. package/dist/services/formula-detail.js.map +1 -1
  150. package/dist/services/matrix-rows.d.ts +43 -0
  151. package/dist/services/matrix-rows.d.ts.map +1 -0
  152. package/dist/services/matrix-rows.js +104 -0
  153. package/dist/services/matrix-rows.js.map +1 -0
  154. package/dist/services/org-department.d.ts +114 -0
  155. package/dist/services/org-department.d.ts.map +1 -0
  156. package/dist/services/org-department.js +209 -0
  157. package/dist/services/org-department.js.map +1 -0
  158. package/dist/services/org-employee.d.ts +87 -0
  159. package/dist/services/org-employee.d.ts.map +1 -0
  160. package/dist/services/org-employee.js +219 -0
  161. package/dist/services/org-employee.js.map +1 -0
  162. package/dist/services/role-member.d.ts +99 -0
  163. package/dist/services/role-member.d.ts.map +1 -0
  164. package/dist/services/role-member.js +206 -0
  165. package/dist/services/role-member.js.map +1 -0
  166. package/dist/services/workflow-info.d.ts +83 -0
  167. package/dist/services/workflow-info.d.ts.map +1 -0
  168. package/dist/services/workflow-info.js +97 -0
  169. package/dist/services/workflow-info.js.map +1 -0
  170. package/dist/services/workflow-odoc-setting.d.ts +1 -1
  171. package/dist/services/workflow-odoc-setting.d.ts.map +1 -1
  172. package/dist/services/workflow-odoc-setting.js +15 -6
  173. package/dist/services/workflow-odoc-setting.js.map +1 -1
  174. package/dist/utils/column-name.d.ts +24 -0
  175. package/dist/utils/column-name.d.ts.map +1 -1
  176. package/dist/utils/column-name.js +16 -0
  177. package/dist/utils/column-name.js.map +1 -1
  178. package/ecodecmd/package.json +1 -2
  179. package/ecodecmd/src/loaddep.js +19 -9
  180. package/package.json +4 -4
  181. package/skill-docs/SKILL.md +13 -9
  182. package/skill-docs/_catalog.md +85 -81
  183. package/skill-docs/actionflows/SKILL.md +173 -170
  184. package/skill-docs/actionflows/references/components/logic/Output.md +1 -1
  185. package/skill-docs/actionflows/references/components/trigger/CustomTrigger.md +32 -0
  186. package/skill-docs/actionflows/references/components/workflow/ApproveCreate.md +1 -1
  187. package/skill-docs/references/common/guide-plan-template.md +9 -3
  188. package/skill-docs/references/common/ref-cli-commands.md +47 -22
  189. package/skill-docs/references/esb-interface/guide-import.md +4 -1
  190. package/skill-docs/references/form/guide-create-form.md +13 -0
  191. package/skill-docs/references/form/guide-field-linkage.md +2 -0
  192. package/skill-docs/references/form/guide-form-formula-functions.md +36 -0
  193. package/skill-docs/references/form/guide-form-layout-incremental.md +75 -0
  194. package/skill-docs/references/form/guide-form-linkage.md +61 -3
  195. package/skill-docs/references/form/guide-formula-linkage.md +250 -0
  196. package/skill-docs/references/form/ref-form-fields.md +6 -0
  197. package/skill-docs/references/hrm/guide-matrix.md +79 -16
  198. package/skill-docs/references/hrm/guide-org-employee.md +56 -0
  199. package/skill-docs/references/workflow/guide-workflow-auth-resp.md +48 -22
  200. package/skill-docs/references/workflow/guide-workflow-odoc-setting.md +248 -0
  201. package/skill-docs/references/workflow/guide-workflow-odoc.md +23 -51
@@ -3,12 +3,13 @@
3
3
  * 对齐 Python 版 core/workflow_compiler.py(黄金参照)。
4
4
  * 第 1 期聚焦:ApproveTrigger / ActionEbAdd / ActionEbUpdate / ActionEbDelete / Output 的编译主链。
5
5
  */
6
- import { genSfId } from './id_generator.js';
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
9
  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, } from './formula_service.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
11
  import { buildFormulaReference, buildUpdateFieldCondition } from './components/action_eb_update_compiler.js';
12
+ import { resolveCustomTriggerDtoId } from './custom_trigger_context.js';
12
13
  import { resolveSystemParameter, isDateSystemParameter } from './system_params.js';
13
14
  import { conditionFieldFamily, filterFieldType, normalizeFilterOperator, conditionOperatorOverride, resolveFormCtx, buildFilterContextFormula, } from './filter_rules.js';
14
15
  import { getStepBranches } from './step_branches.js';
@@ -224,7 +225,11 @@ function handleSpecial(draftKey, special, val, result, meta, appId, idx, eventId
224
225
  if (!wfName)
225
226
  wfName = String(meta?._upstream_form_name || '');
226
227
  const pn = wfName ? `${wfName}.${label}` : label;
227
- result.updateId = assignFlatContextDirect(resolved, label, String(eventId || val.source || '0'), appId, 'string', pn, meta);
228
+ const sourceComponent = String(val._resolvedContext?.componentType || val.componentType || '');
229
+ const updateMeta = sourceComponent === 'CustomTrigger'
230
+ ? { ...(meta || {}), _context_component_type: sourceComponent }
231
+ : meta;
232
+ result.updateId = assignFlatContextDirect(resolved, label, String(eventId || val.source || '0'), appId, 'string', pn, updateMeta, val._resolvedContext?.fieldId);
228
233
  // esbAssign.wId 指向当前数据动作节点(设计器动态赋值定位用),与 filterInput 修复同源。
229
234
  attachEsbAssign(result.updateId, meta, String(eventId || val.source || '0'));
230
235
  }
@@ -279,18 +284,25 @@ function handleSpecial(draftKey, special, val, result, meta, appId, idx, eventId
279
284
  result.filterInput = buildFilterInput(result, val, meta, appId, componentType);
280
285
  }
281
286
  else if (special === '_bizWorkflowPath' && val && typeof val === 'object') {
282
- const wfId = String(val.id || '');
283
- let formIds = val.formIds;
284
- if (!Array.isArray(formIds))
285
- formIds = val.formId || val.objId ? [String(val.formId || val.objId)] : [];
286
- result.workflowPath = [{
287
- bridgeService: 'ebuilder', relateFormTypes: ['WEA_EBUILDER'],
288
- name: String(val.name || val.text || ''),
289
- formIds: formIds.filter(Boolean).map(String),
290
- id: wfId,
291
- createFlowId: String(val.createFlowId || wfId),
292
- workflowtype: String(val.workflowtype ?? val.workflowType ?? appId ?? ''),
293
- }];
287
+ const workflowRows = Array.isArray(val) ? val : [val];
288
+ result.workflowPath = workflowRows
289
+ .filter((item) => item && typeof item === 'object' && !Array.isArray(item))
290
+ .map((item) => {
291
+ // ApproveCreateDTO 接收前端完整的 WorkflowPathBrowser 对象;只归一化
292
+ // 后端保存必需的别名,不能重建对象后丢掉 version/status/分权等字段。
293
+ const workflow = JSON.parse(JSON.stringify(item));
294
+ const wfId = String(workflow.id || workflow.createFlowId || '');
295
+ let formIds = workflow.formIds;
296
+ if (!Array.isArray(formIds))
297
+ formIds = workflow.formId || workflow.objId ? [String(workflow.formId || workflow.objId)] : [];
298
+ workflow.id = wfId;
299
+ workflow.formIds = formIds.filter(Boolean).map(String);
300
+ workflow.createFlowId = String(workflow.createFlowId || wfId);
301
+ workflow.workflowtype = String(workflow.workflowtype ?? workflow.workflowType ?? appId ?? '');
302
+ workflow.bridgeService ??= 'ebuilder';
303
+ workflow.relateFormTypes ??= ['WEA_EBUILDER'];
304
+ return workflow;
305
+ });
294
306
  }
295
307
  else if (special === '_bizRequestName') {
296
308
  if (typeof val === 'string' && val.trim())
@@ -306,7 +318,10 @@ function handleSpecial(draftKey, special, val, result, meta, appId, idx, eventId
306
318
  else {
307
319
  const wfId = String(meta?._workflow_id || '');
308
320
  const rqKey = resolveParamKey(wfId, String(val.key ?? val.value ?? ''));
309
- result.requestName = formulaContext('', rqKey, { name: String(val.label || '') });
321
+ result.requestName = formulaContext('', rqKey, {
322
+ name: String(val.label || ''),
323
+ frontId: val._resolvedContext?.fieldId || val.frontId || val.fieldId,
324
+ });
310
325
  attachEsbAssign(result.requestName, meta, String(eventId || ''));
311
326
  }
312
327
  }
@@ -375,7 +390,7 @@ function handleBasisValue(val, result, meta, appId, eventId) {
375
390
  comId: srcId, newParentName: bvParent,
376
391
  };
377
392
  const bvf = {
378
- frontId: bvId, formulaType: bvfType, name: bvLabel, businessId: fBiz, id: fId,
393
+ frontId: normalizeNumericFrontId(bvId, '依据值 FormulaBean.frontId'), formulaType: bvfType, name: bvLabel, businessId: fBiz, id: fId,
379
394
  source: srcId, type: '3', value: `FormData.${bvKey}`, childs: [], config: bvfConfig, parentId: '0',
380
395
  };
381
396
  // 依据值公式同样需要 esbAssign.wId 指向当前数据动作节点(设计器动态赋值定位用)。
@@ -1076,6 +1091,7 @@ function conditionFormulaType(right, shape, sourceId) {
1076
1091
  name: String(right?.label || right?.name || key),
1077
1092
  fieldType: shape.formulaType,
1078
1093
  componentType: String(right?.componentType || right?.comType || 'ApproveTrigger'),
1094
+ frontId: right?._resolvedContext?.fieldId || right?._resolvedContext?.rawField?.id || right?.frontId || right?.fieldId,
1079
1095
  });
1080
1096
  bean.businessId = String(right?.businessId || bean.businessId || '0');
1081
1097
  return bean;
@@ -1297,6 +1313,11 @@ export function buildSettingDetail(nodeData, detailItems, meta, appId, eventId,
1297
1313
  if (item.basisValue && typeof item.basisValue === 'object') {
1298
1314
  const bvVal = item.basisValue;
1299
1315
  let bvKey = String(bvVal.paramKey || bvVal.key || '').trim();
1316
+ const isCustomTriggerSource = String(meta?._context_component_type || meta?._upstream_component_type || '') === 'CustomTrigger';
1317
+ const basisContextRoot = isCustomTriggerSource ? contextRootForComponent('CustomTrigger') : 'FormData';
1318
+ const basisTableName = contextTableNameForRoot(basisContextRoot);
1319
+ if (isCustomTriggerSource)
1320
+ bvKey = normalizeContextParamKey(bvKey, 'CustomTrigger');
1300
1321
  if (bvKey && !bvKey.includes('[]')) {
1301
1322
  const wfId = String(meta?._workflow_id || '');
1302
1323
  const keyIndex = wfId ? getWorkflowContextFieldsByKey()[wfId] || {} : {};
@@ -1314,16 +1335,28 @@ export function buildSettingDetail(nodeData, detailItems, meta, appId, eventId,
1314
1335
  prefix = String(meta._upstream_form_name || '');
1315
1336
  }
1316
1337
  const parentName = prefix ? `${prefix}.${bvLabel}[]` : `${bvLabel}[]`;
1317
- const bvSubformId = bvKey.includes('[]') ? bvKey.split('[]')[0].includes('.') ? bvKey.split('[]')[0].slice(bvKey.split('[]')[0].lastIndexOf('.') + 1) : bvKey : bvKey;
1338
+ // CustomTrigger 的明细依据值也是表维度上下文,frontId 必须取
1339
+ // CustFormTableDto.id,不能把 detail1 这类 paramKey 尾段直接当成 ID。
1340
+ const customTriggerTableId = isCustomTriggerSource
1341
+ ? resolveCustomTriggerDtoId(bvKey, meta?._custom_trigger_data, 'table')
1342
+ : '';
1343
+ const legacyBvSubformId = bvKey.includes('[]')
1344
+ ? bvKey.split('[]')[0].includes('.')
1345
+ ? bvKey.split('[]')[0].slice(bvKey.split('[]')[0].lastIndexOf('.') + 1)
1346
+ : bvKey
1347
+ : bvKey;
1348
+ // CustomTrigger 无法定位 DTO 表对象时按统一规则留空;不能回退到
1349
+ // detail1 这类业务 paramKey,否则既不是真实 ID,也会触发数字校验。
1350
+ const bvSubformId = isCustomTriggerSource ? customTriggerTableId : legacyBvSubformId;
1318
1351
  ele.basisValue = {
1319
- frontId: bvSubformId,
1352
+ frontId: normalizeNumericFrontId(bvSubformId, '明细依据值 FormulaBean.frontId'),
1320
1353
  formulaType: bvType,
1321
1354
  name: bvLabel,
1322
1355
  businessId: appId,
1323
1356
  id: genSfId(),
1324
1357
  source: String(eventId),
1325
1358
  type: '3',
1326
- value: `FormData.${bvKey}`,
1359
+ value: `${basisContextRoot}.${bvKey}`,
1327
1360
  childs: [],
1328
1361
  config: {
1329
1362
  paramKey: bvKey,
@@ -1335,12 +1368,13 @@ export function buildSettingDetail(nodeData, detailItems, meta, appId, eventId,
1335
1368
  multKey: '',
1336
1369
  multTypeObj: {
1337
1370
  allName: parentName, currentName: parentName,
1338
- currentParamKey: `FormData.${bvKey}`, allParamKey: `FormData.${bvKey}`,
1371
+ currentParamKey: `${basisContextRoot}.${bvKey}`, allParamKey: `${basisContextRoot}.${bvKey}`,
1339
1372
  },
1340
1373
  comId: String(eventId),
1341
- comType: 'ApproveTrigger',
1374
+ comType: isCustomTriggerSource ? 'CustomTrigger' : 'ApproveTrigger',
1342
1375
  newParentName: parentName,
1343
- fieldInfo: { paramKey: bvKey, tablePrimaryKey: 'FormData' },
1376
+ tableName: basisTableName,
1377
+ fieldInfo: { paramKey: bvKey, tablePrimaryKey: basisContextRoot },
1344
1378
  },
1345
1379
  parentId: '0',
1346
1380
  };
@@ -1506,6 +1540,13 @@ export function convertNode(draftAction, isEvent = false, meta = null, appId = '
1506
1540
  parentId: '0',
1507
1541
  };
1508
1542
  const nodeData = node.data || {};
1543
+ if (nodeType === 'ApproveCreate') {
1544
+ // ApproveCreateComponent#save 使用这些 DTO 字段;它们不能依赖前端默认值。
1545
+ nodeData.module ??= 'workflow';
1546
+ nodeData.applicationId ??= String(appId);
1547
+ nodeData.dataId ??= [];
1548
+ nodeData.rejectToNodeId ??= [];
1549
+ }
1509
1550
  const pendingMapping = nodeData._pending_mapping;
1510
1551
  delete nodeData._pending_mapping;
1511
1552
  const pendingConstants = nodeData._pending_constants;
@@ -1525,15 +1566,18 @@ export function convertNode(draftAction, isEvent = false, meta = null, appId = '
1525
1566
  delete nodeData.setting;
1526
1567
  const main = (setting || {}).main || {};
1527
1568
  const detailOut = (setting || {}).detail || [];
1528
- nodeData.formData = { main, detail: detailOut, dataDrWithCalc: false };
1529
- const fieldsMetaKey = String(formDataPayload.fieldsMetaKey || '_bizFields');
1530
- let bizFields = meta && typeof meta === 'object' ? (meta[fieldsMetaKey] || {}) : {};
1531
- if (!bizFields || Object.keys(bizFields).length === 0)
1532
- bizFields = draftAction.params?.[fieldsMetaKey] || {};
1533
- nodeData.fields = {
1534
- main: bizFields && typeof bizFields === 'object' ? (bizFields.main || []) : [],
1535
- detail: bizFields && typeof bizFields === 'object' ? (bizFields.detail || []) : [],
1536
- };
1569
+ nodeData.formData = { main, detail: detailOut, dataDrWithCalc: false, deleteMainFields: [] };
1570
+ // ApproveCreateDTO 没有使用 fields;目标字段仅用于编译 mapping,不能写入保存 DTO。
1571
+ if (nodeType !== 'ApproveCreate') {
1572
+ const fieldsMetaKey = String(formDataPayload.fieldsMetaKey || '_bizFields');
1573
+ let bizFields = meta && typeof meta === 'object' ? (meta[fieldsMetaKey] || {}) : {};
1574
+ if (!bizFields || Object.keys(bizFields).length === 0)
1575
+ bizFields = draftAction.params?.[fieldsMetaKey] || {};
1576
+ nodeData.fields = {
1577
+ main: bizFields && typeof bizFields === 'object' ? (bizFields.main || []) : [],
1578
+ detail: bizFields && typeof bizFields === 'object' ? (bizFields.detail || []) : [],
1579
+ };
1580
+ }
1537
1581
  }
1538
1582
  else if (pendingDetail && !(pendingMapping || pendingConstants || pendingFormula)) {
1539
1583
  // 只有明细表赋值(无主表 mapping/constants):先 _fill_setting 生成空 main + setting,再放回 detail。
@@ -1543,8 +1587,9 @@ export function convertNode(draftAction, isEvent = false, meta = null, appId = '
1543
1587
  }
1544
1588
  else if (formDataPayload && typeof formDataPayload === 'object') {
1545
1589
  // 声明 formDataPayload 的组件即使没有字段映射,也显式携带表单数据容器。
1546
- nodeData.formData ??= { main: {}, detail: [], dataDrWithCalc: false };
1547
- nodeData.fields ??= { main: [], detail: [] };
1590
+ nodeData.formData ??= { main: {}, detail: [], dataDrWithCalc: false, deleteMainFields: [] };
1591
+ if (nodeType !== 'ApproveCreate')
1592
+ nodeData.fields ??= { main: [], detail: [] };
1548
1593
  nodeData.formDataId ??= genSfId();
1549
1594
  }
1550
1595
  else if ((pendingMapping || pendingConstants || pendingFormula) && !('setting' in nodeData)) {
@@ -1673,7 +1718,9 @@ export function convertNode(draftAction, isEvent = false, meta = null, appId = '
1673
1718
  // saveDesign 需要 fields 明确登记组件配置的可持久化字段。
1674
1719
  // 手工添加的 EnquiryForm 等节点都会带这组字段;仅发送 data
1675
1720
  // 会导致后端保存后无法按 data.id 读取配置,前端回显为全部必填为空。
1676
- node.fields = Object.keys(node.data || {});
1721
+ // ApproveCreate 直接对应 ApproveCreateDTO,后端不接收该字段。
1722
+ if (nodeType !== 'ApproveCreate')
1723
+ node.fields = Object.keys(node.data || {});
1677
1724
  delete node.componentId;
1678
1725
  // 保留上面依据 previousNodeId 建立的 sources。组件目录壳只补前端元数据,
1679
1726
  // 不能把非首节点重新变成起始节点,否则平台会拒绝“有两个起始执行组件”。
@@ -1691,6 +1738,13 @@ export function convertNode(draftAction, isEvent = false, meta = null, appId = '
1691
1738
  if (postNode) {
1692
1739
  node = postNode(node, { draftAction, meta: meta || {}, appId, eventNodeId, isEvent });
1693
1740
  }
1741
+ // ApproveCreateDTO 的保存请求不需要 fields;同时清掉可能由目录元数据或
1742
+ // 旧编译结果带入的同名字段,避免它出现在最终请求 JSON 中。
1743
+ if (nodeType === 'ApproveCreate') {
1744
+ delete node.fields;
1745
+ if (node.data && typeof node.data === 'object')
1746
+ delete node.data.fields;
1747
+ }
1694
1748
  return node;
1695
1749
  }
1696
1750
  // ── convert_condition ───────────────────────────────────────