weaver-e10-builder 1.6.4 → 1.6.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (130) hide show
  1. package/dist/commands/actionflow.d.ts.map +1 -1
  2. package/dist/commands/actionflow.js +2 -0
  3. package/dist/commands/actionflow.js.map +1 -1
  4. package/dist/commands/form-add-detail-table.js +3 -3
  5. package/dist/commands/form-add-detail-table.js.map +1 -1
  6. package/dist/commands/form-browser-definition.js +8 -8
  7. package/dist/commands/form-browser-definition.js.map +1 -1
  8. package/dist/commands/form-code.js +7 -7
  9. package/dist/commands/form-code.js.map +1 -1
  10. package/dist/commands/form-data.js +1 -1
  11. package/dist/commands/form-data.js.map +1 -1
  12. package/dist/commands/form-ebuilder-scope.js +8 -8
  13. package/dist/commands/form-ebuilder-scope.js.map +1 -1
  14. package/dist/commands/form-engine-linkage.js +12 -12
  15. package/dist/commands/form-engine-linkage.js.map +1 -1
  16. package/dist/commands/form-layout-diff.js +1 -1
  17. package/dist/commands/form-layout-diff.js.map +1 -1
  18. package/dist/commands/form-layout-edit.js +1 -1
  19. package/dist/commands/form-layout-edit.js.map +1 -1
  20. package/dist/commands/form-layout-init-reviewed.js +1 -1
  21. package/dist/commands/form-layout-init-reviewed.js.map +1 -1
  22. package/dist/commands/form-layout-init.js +2 -2
  23. package/dist/commands/form-layout-init.js.map +1 -1
  24. package/dist/commands/form-layout-template-easy.js +1 -1
  25. package/dist/commands/form-layout-template-easy.js.map +1 -1
  26. package/dist/commands/form-layout.js +4 -4
  27. package/dist/commands/form-layout.js.map +1 -1
  28. package/dist/commands/form-view.d.ts.map +1 -1
  29. package/dist/commands/form-view.js +1 -2
  30. package/dist/commands/form-view.js.map +1 -1
  31. package/dist/commands/form.js +3 -3
  32. package/dist/commands/form.js.map +1 -1
  33. package/dist/commands/report-admin.js +1 -1
  34. package/dist/commands/report-admin.js.map +1 -1
  35. package/dist/commands/report-query.js +1 -1
  36. package/dist/commands/report-query.js.map +1 -1
  37. package/dist/commands/report.js +1 -1
  38. package/dist/commands/report.js.map +1 -1
  39. package/dist/commands/wf-form-layout-init-reviewed.d.ts +3 -0
  40. package/dist/commands/wf-form-layout-init-reviewed.d.ts.map +1 -0
  41. package/dist/commands/wf-form-layout-init-reviewed.js +71 -0
  42. package/dist/commands/wf-form-layout-init-reviewed.js.map +1 -0
  43. package/dist/commands/wf-form.d.ts +1 -0
  44. package/dist/commands/wf-form.d.ts.map +1 -1
  45. package/dist/commands/wf-form.js +16 -16
  46. package/dist/commands/wf-form.js.map +1 -1
  47. package/dist/commands/workflow-advanced.js +1 -1
  48. package/dist/commands/workflow-advanced.js.map +1 -1
  49. package/dist/commands/workflow-basic-info.js +4 -4
  50. package/dist/commands/workflow-basic-info.js.map +1 -1
  51. package/dist/commands/workflow.js +6 -6
  52. package/dist/commands/workflow.js.map +1 -1
  53. package/dist/index.js +22 -0
  54. package/dist/index.js.map +1 -1
  55. package/dist/services/actionflow/classified_protection_source.d.ts +10 -0
  56. package/dist/services/actionflow/classified_protection_source.d.ts.map +1 -0
  57. package/dist/services/actionflow/classified_protection_source.js +27 -0
  58. package/dist/services/actionflow/classified_protection_source.js.map +1 -0
  59. package/dist/services/actionflow/components/action_eb_add.d.ts.map +1 -1
  60. package/dist/services/actionflow/components/action_eb_add.js +4 -5
  61. package/dist/services/actionflow/components/action_eb_add.js.map +1 -1
  62. package/dist/services/actionflow/components/action_eb_update.d.ts.map +1 -1
  63. package/dist/services/actionflow/components/action_eb_update.js +13 -1
  64. package/dist/services/actionflow/components/action_eb_update.js.map +1 -1
  65. package/dist/services/actionflow/components/action_eb_update_compiler.d.ts +12 -0
  66. package/dist/services/actionflow/components/action_eb_update_compiler.d.ts.map +1 -1
  67. package/dist/services/actionflow/components/action_eb_update_compiler.js +88 -3
  68. package/dist/services/actionflow/components/action_eb_update_compiler.js.map +1 -1
  69. package/dist/services/actionflow/components/approve_create.d.ts.map +1 -1
  70. package/dist/services/actionflow/components/approve_create.js +6 -10
  71. package/dist/services/actionflow/components/approve_create.js.map +1 -1
  72. package/dist/services/actionflow/components/condition.d.ts.map +1 -1
  73. package/dist/services/actionflow/components/condition.js +3 -2
  74. package/dist/services/actionflow/components/condition.js.map +1 -1
  75. package/dist/services/actionflow/components/eb_get_data_by_id.d.ts.map +1 -1
  76. package/dist/services/actionflow/components/eb_get_data_by_id.js +9 -1
  77. package/dist/services/actionflow/components/eb_get_data_by_id.js.map +1 -1
  78. package/dist/services/actionflow/components/send_message.js +1 -1
  79. package/dist/services/actionflow/components/send_message.js.map +1 -1
  80. package/dist/services/actionflow/components/workflow_actions.d.ts.map +1 -1
  81. package/dist/services/actionflow/components/workflow_actions.js +20 -11
  82. package/dist/services/actionflow/components/workflow_actions.js.map +1 -1
  83. package/dist/services/actionflow/context_preflight.d.ts.map +1 -1
  84. package/dist/services/actionflow/context_preflight.js +9 -1
  85. package/dist/services/actionflow/context_preflight.js.map +1 -1
  86. package/dist/services/actionflow/design_client.d.ts +4 -0
  87. package/dist/services/actionflow/design_client.d.ts.map +1 -1
  88. package/dist/services/actionflow/design_client.js +65 -0
  89. package/dist/services/actionflow/design_client.js.map +1 -1
  90. package/dist/services/actionflow/form_source.d.ts +9 -2
  91. package/dist/services/actionflow/form_source.d.ts.map +1 -1
  92. package/dist/services/actionflow/form_source.js +21 -6
  93. package/dist/services/actionflow/form_source.js.map +1 -1
  94. package/dist/services/actionflow/formula_service.d.ts.map +1 -1
  95. package/dist/services/actionflow/formula_service.js +153 -37
  96. package/dist/services/actionflow/formula_service.js.map +1 -1
  97. package/dist/services/actionflow/preflight_service.d.ts +14 -3
  98. package/dist/services/actionflow/preflight_service.d.ts.map +1 -1
  99. package/dist/services/actionflow/preflight_service.js +276 -42
  100. package/dist/services/actionflow/preflight_service.js.map +1 -1
  101. package/dist/services/actionflow/workflow_compiler.d.ts.map +1 -1
  102. package/dist/services/actionflow/workflow_compiler.js +154 -23
  103. package/dist/services/actionflow/workflow_compiler.js.map +1 -1
  104. package/dist/services/workflow-layout-init-reviewed.d.ts +35 -0
  105. package/dist/services/workflow-layout-init-reviewed.d.ts.map +1 -0
  106. package/dist/services/workflow-layout-init-reviewed.js +120 -0
  107. package/dist/services/workflow-layout-init-reviewed.js.map +1 -0
  108. package/package.json +1 -1
  109. package/skill-docs/SKILL.md +4 -4
  110. package/skill-docs/actionflows/SKILL.md +2 -0
  111. package/skill-docs/actionflows/references/components/ebuilder/ActionEbUpdate.md +2 -0
  112. package/skill-docs/actionflows/references/components/ebuilder/EventButton.md +1 -1
  113. package/skill-docs/actionflows/references/components/logic/Condition.md +2 -0
  114. package/skill-docs/actionflows/references/components/message/SendMessage.md +2 -2
  115. package/skill-docs/actionflows/references/components/workflow/ApproveCommit.md +17 -17
  116. package/skill-docs/actionflows/references/components/workflow/ApproveCreate.md +1 -1
  117. package/skill-docs/actionflows/references/components/workflow/ApproveSave.md +1 -1
  118. package/skill-docs/actionflows/references/components/workflow/ApproveSendBack.md +17 -17
  119. package/skill-docs/references/common/ref-cli-commands.md +1 -0
  120. package/skill-docs/references/form/guide-browser-definition.md +73 -40
  121. package/skill-docs/references/form/layout/code-block/layout-css.md +41 -0
  122. package/skill-docs/references/form/layout/initialization.md +2 -0
  123. package/skill-docs/references/form/layout/layout-overview.md +8 -0
  124. package/skill-docs/references/form/layout/template/advanced.md +21 -0
  125. package/skill-docs/references/form/layout/template/easy.md +2 -0
  126. package/skill-docs/references/form/layout/template/flow.md +2 -0
  127. package/skill-docs/references/form/layout/template/template-guide.md +3 -1
  128. package/skill-docs/references/form/layout/workflow-layout.md +13 -1
  129. package/skill-docs/references/form/ref-form-fields.md +18 -4
  130. package/skill-docs/references/workflow/guide-workflow-odoc.md +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"workflow_compiler.d.ts","sourceRoot":"","sources":["../../../src/services/actionflow/workflow_compiler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workflow_compiler.d.ts","sourceRoot":"","sources":["../../../src/services/actionflow/workflow_compiler.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AA+H7D;;;;;GAKG;AACH,wBAAgB,kCAAkC,CAChD,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACxB,IAAI,CAeN;AAID,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAChC,aAAa,EAAE,MAAM,EACrB,GAAG,EAAE,eAAe,EACpB,YAAY,UAAQ,GACnB,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CA4DrB;AA8SD,wBAAgB,WAAW,CACzB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EACrF,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAClG,IAAI,CAkMN;AA2FD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,SAAK,EAAE,SAAS,UAAO,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CA0O3K;AAuMD,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,OAAO,GAAG,OAAO,CAIlE;AA+ID;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAW,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAuBnJ;AA8BD,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC1E,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAC/C,IAAI,CA4PN;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,YAAY,EAAE,MAAM,EAC7E,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAC1E,IAAI,CAuBN;AAsBD,wBAAgB,WAAW,CACzB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAChC,OAAO,UAAQ,EACf,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAW,EACvC,KAAK,SAAK,EACV,WAAW,SAAI,EACf,WAAW,SAAK,EAChB,SAAS,SAAK,EACd,cAAc,GAAE,MAAM,GAAG,MAAY,EACrC,OAAO,UAAQ,GACd,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAuOrB;AAID,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAW,EAAE,KAAK,SAAK,EACrF,WAAW,SAAI,EAAE,OAAO,SAAK,EAAE,cAAc,GAAE,MAAM,GAAG,MAAY,EAAE,OAAO,UAAQ,GACpF,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAwErB;AAED,oDAAoD;AACpD,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAW,EAAE,KAAK,SAAK,EACrF,WAAW,SAAI,EAAE,OAAO,SAAK,EAAE,SAAS,SAAK,EAAE,cAAc,GAAE,MAAM,GAAG,MAAY,EAAE,OAAO,UAAQ,GACpG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAiDrB;AAID,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAIlG;AAyDD,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,SAAK,EAAE,OAAO,SAAK,EAAE,YAAY,SAAK,EAAE,OAAO,UAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAqIrI;AAMD,wBAAgB,cAAc,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,CAW5C"}
@@ -9,7 +9,7 @@ import { get, getCompiler, getNodePost } from './components/index.js';
9
9
  import { applyFormFieldSettingOptions, buildEsbFormDataDto, buildEsbFormField, } from './components/form_data_builder.js';
10
10
  import { findInMetadata, getTargetFormFields, getTargetDataSourceFields, getWorkflowDetailNames, getTargetDetailFields, getWorkflowDetailFields, getWorkflowFieldIds, workflowFieldId, getWorkflowContextFields, getWorkflowContextFieldsByKey } from './runtime_metadata.js';
11
11
  import { buildPersonFormula, buildAssignBean, attachEsbAssign, resolveEnumConstant, resolveParamKey, resolveSourceFieldLabel, resolveSourceFieldType, normalizeConstantAssignment, lookupTargetFieldMeta, formulaFixedForAssignSwitch, formulaSystemVar, formulaContext, assignFlatContextDirect, getFormulaFn, formulaFunction, contextTableNameForRoot, normalizeContextParamKey, resolveFormSettingBasisParentName, contextMetaForReference, resolvedContextRoot, protocolParamKey, } from './formula_service.js';
12
- import { buildFormulaReference, buildUpdateFieldCondition } from './components/action_eb_update_compiler.js';
12
+ import { buildFormulaReference, buildUpdateFieldCondition, resolveUpdateBasisChild } from './components/action_eb_update_compiler.js';
13
13
  import { resolveCustomTriggerDtoId } from './custom_trigger_context.js';
14
14
  import { resolveSystemParameter, isDateSystemParameter } from './system_params.js';
15
15
  import { conditionFieldFamily, filterFieldType, normalizeFilterOperator, conditionOperatorOverride, resolveFormCtx, buildFilterContextFormula, } from './filter_rules.js';
@@ -180,7 +180,7 @@ export function compileComponentData(draftParams, componentType, ctx, skipCompil
180
180
  for (const t of targets) {
181
181
  if (t.startsWith('_')) {
182
182
  try {
183
- handleSpecial(draftKey, t, val, result, meta, appId, actionIndex, eventNodeId, componentType, eventName, hasBasisValue);
183
+ handleSpecial(draftKey, t, val, result, meta, appId, actionIndex, eventNodeId, componentType, eventName, hasBasisValue, params.basisValue);
184
184
  }
185
185
  catch (e) {
186
186
  if (!lenient)
@@ -258,7 +258,7 @@ function normalizeEventFormDataTrigger(result, params, componentType) {
258
258
  result.triggerType = 'sequence';
259
259
  }
260
260
  // ── _handle_special ─────────────────────────────────────────
261
- function handleSpecial(draftKey, special, val, result, meta, appId, idx, eventId, componentType, eventName, hasBasisValue = false) {
261
+ function handleSpecial(draftKey, special, val, result, meta, appId, idx, eventId, componentType, eventName, hasBasisValue = false, basisValue = undefined) {
262
262
  if (special === '_person' && val && typeof val === 'object' && !Array.isArray(val)) {
263
263
  const contract = get(componentType) || {};
264
264
  const personTarget = contract.personTarget ?? 'person';
@@ -278,6 +278,16 @@ function handleSpecial(draftKey, special, val, result, meta, appId, idx, eventId
278
278
  attachEsbAssign(result.updateId, meta, String(eventId || ''));
279
279
  return;
280
280
  }
281
+ const basisChild = resolveUpdateBasisChild(val, basisValue);
282
+ if (basisChild) {
283
+ result.updateId = buildAssignBean({
284
+ ...val,
285
+ basisParamKey: basisChild.basisParamKey,
286
+ basisType: basisChild.basisType,
287
+ }, 'updateId', String(val?.fieldType || val?.valueType || 'string'), meta, appId, eventId);
288
+ attachEsbAssign(result.updateId, meta, String(eventId || val?.source || '0'));
289
+ return;
290
+ }
281
291
  const wfId = String(meta?._workflow_id || '');
282
292
  if (val && typeof val === 'object' && (val.kind === 'context' || val.key || val.paramKey)) {
283
293
  const key = String(val.paramKey || val.key || val.fieldKey || '');
@@ -319,7 +329,7 @@ function handleSpecial(draftKey, special, val, result, meta, appId, idx, eventId
319
329
  }
320
330
  }
321
331
  else if (special === '_updateFieldCondition') {
322
- const condition = buildUpdateFieldCondition(val, { meta, appId, eventId, componentType });
332
+ const condition = buildUpdateFieldCondition(val, { meta, appId, eventId, componentType, basisValue });
323
333
  result.updateFieldCondition = condition;
324
334
  (result.setting ??= {}).updateFieldCondition = JSON.parse(JSON.stringify(condition));
325
335
  result.updateCondition = (condition.updateField || []).filter((it) => it && typeof it === 'object' && it.fieldKey).map((it) => String(it.fieldKey));
@@ -843,7 +853,9 @@ export function buildFilterInput(result, val, meta, appId, componentType = '', a
843
853
  const fieldIndex = {};
844
854
  // ActionEbDelete 的前端 ConditionSet 与查询/定时组件共用 dataSource
845
855
  // 字段选择器;条件左值必须来自 ds/fields,不能仅依赖 getEbField。
846
- const strictDataSourceCondition = ['ActionEbDelete', 'EnquiryForm', 'TimeBatchTrigger', 'DateTrigger'].includes(componentType);
856
+ const strictDataSourceCondition = [
857
+ 'ActionEbDelete', 'ActionEbUpdate', 'EnquiryForm', 'TimeBatchTrigger', 'DateTrigger',
858
+ ].includes(componentType);
847
859
  if (!strictDataSourceCondition) {
848
860
  for (const f of form.fields || [])
849
861
  fieldIndex[String(f.id || '')] = f;
@@ -1173,6 +1185,62 @@ function conditionFieldShape(workflowId, fieldKey, fieldLabel) {
1173
1185
  return { family: 'list', prefix: 'List', formulaType: 'json' };
1174
1186
  return { family: 'string', prefix: 'String', formulaType: 'string' };
1175
1187
  }
1188
+ function conditionFormulaShape(left, workflowId, fieldKey, fieldLabel) {
1189
+ const kind = String(left?.kind || left?.assignmentKind || left?.type || '').trim().toLowerCase();
1190
+ if (kind !== 'function' && kind !== 'formula')
1191
+ return conditionFieldShape(workflowId, fieldKey, fieldLabel);
1192
+ const resultType = String(left?.resultType || left?.fieldType || left?.valueType || '').trim().toLowerCase();
1193
+ if (['int', 'integer', 'number', 'double', 'float', 'money', 'decimal'].includes(resultType)) {
1194
+ return { family: 'number', prefix: 'Number', formulaType: 'double' };
1195
+ }
1196
+ if (['datetime', 'date', 'time'].includes(resultType)) {
1197
+ const prefix = resultType === 'datetime' ? 'DateTime' : resultType[0].toUpperCase() + resultType.slice(1);
1198
+ return { family: resultType, prefix, formulaType: resultType };
1199
+ }
1200
+ if (['bool', 'boolean'].includes(resultType))
1201
+ return { family: 'bool', prefix: 'Bool', formulaType: 'bool' };
1202
+ return { family: 'string', prefix: 'String', formulaType: 'string' };
1203
+ }
1204
+ function conditionFunctionBean(left, fieldLabel, shape, meta, sourceId) {
1205
+ const bean = buildAssignBean(left, fieldLabel, shape.formulaType, meta, String(meta?._app_id || ''), sourceId);
1206
+ // 条件编辑器的 FunctionItem 与普通赋值 FormulaBean 使用同一棵 childs
1207
+ // 树,但前端保留 config 为对象、resultType 为结果类型;普通赋值组件则
1208
+ // 会把 config 序列化成字符串。saveCondition 只会持久化前者,后者会被
1209
+ // 接受但在 getExpressionBean 回读时丢掉整个叶子。
1210
+ let config = {};
1211
+ if (typeof bean.config === 'string') {
1212
+ try {
1213
+ config = JSON.parse(bean.config);
1214
+ }
1215
+ catch {
1216
+ config = {};
1217
+ }
1218
+ }
1219
+ else if (bean.config && typeof bean.config === 'object') {
1220
+ config = { ...bean.config };
1221
+ }
1222
+ const conditionType = shape.family === 'number' ? 'number' : shape.formulaType;
1223
+ const normalized = {
1224
+ ...bean,
1225
+ formulaType: conditionType,
1226
+ resultType: conditionType,
1227
+ fieldType: conditionType,
1228
+ config: {
1229
+ originId: String(config.originId || ''),
1230
+ paramSize: String(config.paramSize ?? bean.childs?.length ?? 0),
1231
+ paramType: conditionType,
1232
+ functionType: config.functionType || conditionType,
1233
+ detail: Array.isArray(bean.detail) ? bean.detail : [],
1234
+ },
1235
+ };
1236
+ if (config.excelFunc && typeof config.excelFunc === 'object')
1237
+ normalized.config.excelFunc = config.excelFunc;
1238
+ delete normalized.configObject;
1239
+ delete normalized.applicationId;
1240
+ delete normalized.parentId;
1241
+ delete normalized.sortWeight;
1242
+ return normalized;
1243
+ }
1176
1244
  function conditionRelationCode(value) {
1177
1245
  const relation = String(value ?? 'and').trim().toLowerCase();
1178
1246
  return ['2', 'or', '||', '或'].includes(relation) ? 2 : 1;
@@ -1240,8 +1308,14 @@ function buildSingleConditionDetail(condition, sourceId, meta = null) {
1240
1308
  if (!condition || typeof condition !== 'object')
1241
1309
  return {};
1242
1310
  const left = condition.left || {};
1243
- const requestedFieldKey = String(left.key || left.value || '').trim();
1244
- const requestedLabel = String(left.label || left.name || requestedFieldKey || '').trim();
1311
+ const leftKind = String(left.kind || left.assignmentKind || left.type || '').trim().toLowerCase();
1312
+ const functionLeft = leftKind === 'function' || leftKind === 'formula';
1313
+ const leftArgs = Array.isArray(left.args) ? left.args : (Array.isArray(left.arguments) ? left.arguments : []);
1314
+ const contextArg = functionLeft
1315
+ ? leftArgs.find((arg) => ['context', 'dynamic', 'formfield', 'form_field'].includes(String(arg?.kind || arg?.assignmentKind || arg?.type || '').toLowerCase()))
1316
+ : null;
1317
+ const requestedFieldKey = String(contextArg?.paramKey || contextArg?.key || left.key || left.value || '').trim();
1318
+ const requestedLabel = String(contextArg?.label || contextArg?.name || left.label || left.name || requestedFieldKey || '').trim();
1245
1319
  const operator = String(condition.operator || '').trim().toLowerCase();
1246
1320
  const workflowId = meta && typeof meta === 'object' ? String(meta._workflow_id || '') : '';
1247
1321
  // 条件计划允许使用完整 paramKey、paramName、真实字段 id 或界面显示名;统一回到
@@ -1262,7 +1336,7 @@ function buildSingleConditionDetail(condition, sourceId, meta = null) {
1262
1336
  throw new Error(`Condition.left.key='${requestedFieldKey}' 未在流程 '${workflowId}' 的实时上下文中找到。请传完整 paramKey、字段显示名或 getComponentContext 返回的字段对象。`);
1263
1337
  }
1264
1338
  }
1265
- const shape = conditionFieldShape(workflowId, fieldKey, fieldLabel);
1339
+ const shape = conditionFormulaShape(left, workflowId, fieldKey, fieldLabel);
1266
1340
  const opt = CONDITION_OPT_CODE_MAP[operator];
1267
1341
  if (!opt)
1268
1342
  throw new Error(`Condition 操作符 '${condition.operator}' 不支持`);
@@ -1309,10 +1383,13 @@ function buildSingleConditionDetail(condition, sourceId, meta = null) {
1309
1383
  const customFieldBiz = genSfId();
1310
1384
  // 流程字段需保留“流程 ID.字段名”的上下文显示路径,规则编辑器才能定位来源。
1311
1385
  const contextDisplayName = rawField && workflowId ? `${workflowId}.${fieldLabel}` : fieldLabel;
1386
+ const leftFormula = functionLeft
1387
+ ? conditionFunctionBean(left, fieldLabel, shape, meta || {}, contextWId)
1388
+ : null;
1312
1389
  const leftOperand = {
1313
1390
  expressionBaseId: baseId, [`${shape.prefix}CompareOptionLeft`]: opt, dataValueId: dvId,
1314
1391
  elementValue2Id: ev2, elementValue1Id: ev1, selectType: 97,
1315
- customFieldType: {
1392
+ customFieldType: leftFormula || {
1316
1393
  paramType: shape.formulaType, formulaType: shape.formulaType, name: fieldLabel, businessId: customFieldBiz,
1317
1394
  selectType: '-1', id: customFieldId, source: contextWId, type: '3', value: valueId,
1318
1395
  config: {
@@ -1422,6 +1499,7 @@ function buildDetailRowId(value, meta, appId, eventId, nodeType) {
1422
1499
  export function buildSettingDetail(nodeData, detailItems, meta, appId, eventId, nodeType) {
1423
1500
  if (!Array.isArray(detailItems))
1424
1501
  return;
1502
+ const assignmentMode = String((get(nodeType) || {}).assignmentContextMode || '');
1425
1503
  const detailOut = [];
1426
1504
  for (const item of detailItems) {
1427
1505
  if (!item || typeof item !== 'object' || !item.detailTableId)
@@ -1435,7 +1513,9 @@ export function buildSettingDetail(nodeData, detailItems, meta, appId, eventId,
1435
1513
  }
1436
1514
  const ele = { detailTableId: String(item.detailTableId) };
1437
1515
  if (item.updateFieldCondition && typeof item.updateFieldCondition === 'object') {
1438
- ele.updateFieldCondition = buildUpdateFieldCondition(item.updateFieldCondition, { meta, appId, eventId: String(eventId), componentType: nodeType });
1516
+ ele.updateFieldCondition = buildUpdateFieldCondition(item.updateFieldCondition, {
1517
+ meta, appId, eventId: String(eventId), componentType: nodeType, basisValue: item.basisValue,
1518
+ });
1439
1519
  }
1440
1520
  else {
1441
1521
  ele.updateFieldCondition = { updateField: [] };
@@ -1525,6 +1605,10 @@ export function buildSettingDetail(nodeData, detailItems, meta, appId, eventId,
1525
1605
  }
1526
1606
  const mapping = item.mapping || {};
1527
1607
  const constants = item.constants || {};
1608
+ const detailBasisParamKey = String(item.basisValue?.paramKey || item.basisValue?.key || '').trim();
1609
+ const detailBasisType = String(item.basisValue?.basisType || 'formSetting');
1610
+ const isDetailBasisDescendant = (sourceParamKey) => Boolean(detailBasisParamKey && (sourceParamKey === detailBasisParamKey
1611
+ || sourceParamKey.startsWith(`${detailBasisParamKey}.`)));
1528
1612
  const detailTargetFormId = String((nodeData.targetForm || {}).id || '');
1529
1613
  const targetDetailFields = detailTargetFormId
1530
1614
  ? (getTargetDetailFields()[detailTargetFormId] || {})[String(item.detailTableId)] || {}
@@ -1553,16 +1637,39 @@ export function buildSettingDetail(nodeData, detailItems, meta, appId, eventId,
1553
1637
  const refKey = String(targetFieldId.paramKey || sourceKey);
1554
1638
  const refLabel = String(targetFieldId.label || sourceKey);
1555
1639
  const refDetail = String(targetFieldId.detailLabel || '');
1640
+ const basisDescendant = isDetailBasisDescendant(refKey);
1556
1641
  const declaredKind = String(targetFieldId.kind || targetFieldId.assignmentKind || 'context');
1557
1642
  assignment = {
1558
1643
  ...(targetFieldId.assignment && typeof targetFieldId.assignment === 'object' ? targetFieldId.assignment : {}),
1559
1644
  kind: declaredKind, paramKey: refKey, label: refLabel,
1560
1645
  };
1646
+ // 明细字段同样必须沿用 getComponentContext 的真实来源元数据。
1647
+ // 不能因为进入 detail 分支就只保留 paramKey;否则
1648
+ // assignFlatEsbChild 无法得到 WebHook 的 Body 根和真实字段 ID。
1649
+ for (const key of ['scope', 'contextScope', 'componentType', 'tablePrimaryKey', 'tableName', 'frontId', 'fieldType', 'valueType']) {
1650
+ if (targetFieldId[key] !== undefined)
1651
+ assignment[key] = targetFieldId[key];
1652
+ }
1653
+ if (targetFieldId._resolvedContext && typeof targetFieldId._resolvedContext === 'object') {
1654
+ assignment._resolvedContext = { ...targetFieldId._resolvedContext };
1655
+ }
1656
+ if (targetFieldId.source !== undefined)
1657
+ assignment.source = targetFieldId.source;
1658
+ if (targetFieldId.comId !== undefined)
1659
+ assignment.comId = targetFieldId.comId;
1660
+ if (targetFieldId.fieldId !== undefined)
1661
+ assignment.fieldId = targetFieldId.fieldId;
1662
+ if (targetFieldId.parentName !== undefined)
1663
+ assignment.parentName = targetFieldId.parentName;
1561
1664
  if (refDetail)
1562
1665
  assignment.detailLabel = refDetail;
1666
+ if (basisDescendant) {
1667
+ assignment.basisParamKey = detailBasisParamKey;
1668
+ assignment.basisType = detailBasisType;
1669
+ }
1563
1670
  const targetMeta = targetDetailFields[raw] || {};
1564
1671
  const targetType = String(targetMeta.componentKey || targetMeta.type || 'Text');
1565
- eleData[raw] = buildEsbFormField(raw, assignment, targetType, meta, appId, eventId, operate, nodeType, true, '', options);
1672
+ eleData[raw] = buildEsbFormField(raw, assignment, targetType, meta, appId, eventId, operate, nodeType, true, basisDescendant ? assignmentMode : '', options);
1566
1673
  }
1567
1674
  else {
1568
1675
  let raw = String(targetFieldId);
@@ -1575,9 +1682,14 @@ export function buildSettingDetail(nodeData, detailItems, meta, appId, eventId,
1575
1682
  raw = raw.slice(1);
1576
1683
  }
1577
1684
  assignment = { kind: 'context', paramKey: String(sourceKey), label: resolveSourceFieldLabel(String(sourceKey), meta, String(sourceKey)) };
1685
+ const basisDescendant = isDetailBasisDescendant(String(sourceKey));
1686
+ if (basisDescendant) {
1687
+ assignment.basisParamKey = detailBasisParamKey;
1688
+ assignment.basisType = detailBasisType;
1689
+ }
1578
1690
  const targetMeta = targetDetailFields[raw] || {};
1579
1691
  const targetType = String(targetMeta.componentKey || targetMeta.type || 'Text');
1580
- eleData[raw] = buildEsbFormField(raw, assignment, targetType, meta, appId, eventId, operate, nodeType, true, '');
1692
+ eleData[raw] = buildEsbFormField(raw, assignment, targetType, meta, appId, eventId, operate, nodeType, true, basisDescendant ? assignmentMode : '');
1581
1693
  }
1582
1694
  }
1583
1695
  }
@@ -1625,6 +1737,8 @@ export function buildSettingDetail(nodeData, detailItems, meta, appId, eventId,
1625
1737
  // 组件按新增明细处理。ActionEbUpdate 则保留用户明确选择的策略。
1626
1738
  if (item.operateType)
1627
1739
  ele.operateType = String(item.operateType);
1740
+ else if (['ApproveSave', 'ApproveCommit', 'ApproveSendBack'].includes(nodeType))
1741
+ ele.operateType = 'default';
1628
1742
  else if (nodeType !== 'ActionEbAdd' && nodeType !== 'ActionEbUpdate')
1629
1743
  ele.operateType = 'insert';
1630
1744
  if (item.updateType)
@@ -1727,8 +1841,7 @@ export function convertNode(draftAction, isEvent = false, meta = null, appId = '
1727
1841
  // ApproveCreateComponent#save 使用这些 DTO 字段;它们不能依赖前端默认值。
1728
1842
  nodeData.module ??= 'workflow';
1729
1843
  nodeData.applicationId ??= String(appId);
1730
- nodeData.dataId ??= [];
1731
- nodeData.rejectToNodeId ??= [];
1844
+ nodeData.isNextFlow ??= '1';
1732
1845
  }
1733
1846
  const pendingMapping = nodeData._pending_mapping;
1734
1847
  delete nodeData._pending_mapping;
@@ -1749,7 +1862,10 @@ export function convertNode(draftAction, isEvent = false, meta = null, appId = '
1749
1862
  delete nodeData.setting;
1750
1863
  const main = (setting || {}).main || {};
1751
1864
  const detailOut = (setting || {}).detail || [];
1752
- nodeData.formData = buildEsbFormDataDto(main, detailOut);
1865
+ // 表单设置的 dataDrWithCalc 属于 EsbFormDataDto,不是 ApproveSaveDto 顶层字段。
1866
+ const dataDrWithCalc = nodeData.dataDrWithCalc ?? false;
1867
+ delete nodeData.dataDrWithCalc;
1868
+ nodeData.formData = buildEsbFormDataDto(main, detailOut, { dataDrWithCalc: Boolean(dataDrWithCalc) });
1753
1869
  // ApproveCreateDTO 没有使用 fields;目标字段仅用于编译 mapping,不能写入保存 DTO。
1754
1870
  if (nodeType !== 'ApproveCreate') {
1755
1871
  const fieldsMetaKey = String(formDataPayload.fieldsMetaKey || '_bizFields');
@@ -1770,7 +1886,10 @@ export function convertNode(draftAction, isEvent = false, meta = null, appId = '
1770
1886
  }
1771
1887
  else if (formDataPayload && typeof formDataPayload === 'object') {
1772
1888
  // 声明 formDataPayload 的组件即使没有字段映射,也显式携带表单数据容器。
1773
- nodeData.formData ??= buildEsbFormDataDto();
1889
+ const dataDrWithCalc = nodeData.dataDrWithCalc ?? false;
1890
+ delete nodeData.dataDrWithCalc;
1891
+ nodeData.formData ??= buildEsbFormDataDto({}, [], { dataDrWithCalc: Boolean(dataDrWithCalc) });
1892
+ nodeData.formData.dataDrWithCalc = Boolean(dataDrWithCalc);
1774
1893
  if (nodeType !== 'ApproveCreate')
1775
1894
  nodeData.fields ??= { main: [], detail: [] };
1776
1895
  nodeData.formDataId ??= genSfId();
@@ -1940,11 +2059,12 @@ export function convertNode(draftAction, isEvent = false, meta = null, appId = '
1940
2059
  export function convertCondition(draftAction, meta = null, appId = '', actionIndex = 0, eventId = '', previousNodeId = '0', lenient = false) {
1941
2060
  const node = convertNode(draftAction, false, meta, appId, actionIndex, eventId, '', previousNodeId, lenient);
1942
2061
  const branches = getStepBranches(draftAction);
2062
+ const executeMethod = String(draftAction.params?.executeMethod ?? node.data.executeMethod ?? '1');
2063
+ if (!['1', '2'].includes(executeMethod))
2064
+ throw new Error(`Condition.executeMethod 不支持 '${executeMethod}',请使用 1 或 2`);
2065
+ node.data.executeMethod = executeMethod;
1943
2066
  if (!branches || branches.length === 0) {
1944
- node.data.trueBranchActions = [];
1945
- node.data.falseBranchActions = [];
1946
- node.data.otherConditionBranch = [];
1947
- return node;
2067
+ throw new Error('Condition.branches 不能为空');
1948
2068
  }
1949
2069
  const conditionalBranches = [];
1950
2070
  let elseBranchActions = null;
@@ -1955,12 +2075,20 @@ export function convertCondition(draftAction, meta = null, appId = '', actionInd
1955
2075
  cond = {};
1956
2076
  const isElse = cond.type === 'else';
1957
2077
  const hasRealCond = !isElse && hasConditionExpression(cond);
2078
+ if (hasRealCond && elseBranchActions !== null)
2079
+ throw new Error(`Condition.branches[${i}] 条件分支不能位于其他情况之后`);
2080
+ if (!hasRealCond && elseBranchActions !== null)
2081
+ throw new Error(`Condition.branches[${i}] 只允许一个其他情况分支`);
2082
+ if (!hasRealCond && !isElse && Object.keys(cond).length)
2083
+ throw new Error(`Condition.branches[${i}] 条件为空或不完整`);
1958
2084
  const bacts = [];
1959
2085
  let branchPreviousId = '0';
1960
2086
  for (const a of branch.actions || []) {
1961
- if (a.type === 'Output')
1962
- continue;
1963
- const branchNode = convertNode(a, false, meta, appId, i, eventId, '', branchPreviousId, lenient);
2087
+ const branchNode = a?.type === 'Condition'
2088
+ ? convertCondition(a, meta, appId, i, eventId, branchPreviousId, lenient)
2089
+ : a?.type === 'MultipleExecution'
2090
+ ? convertMultipleExecution(a, meta, appId, i, eventId, '', branchPreviousId, lenient)
2091
+ : convertNode(a, false, meta, appId, i, eventId, '', branchPreviousId, lenient);
1964
2092
  bacts.push(branchNode);
1965
2093
  branchPreviousId = branchNode.wId;
1966
2094
  }
@@ -1972,6 +2100,8 @@ export function convertCondition(draftAction, meta = null, appId = '', actionInd
1972
2100
  elseBranchActions = bacts;
1973
2101
  }
1974
2102
  }
2103
+ if (!conditionalBranches.length)
2104
+ throw new Error('Condition 排他或包容分支至少需要一个有效条件');
1975
2105
  const trueBranchActions = conditionalBranches.length ? conditionalBranches[0][1] : [];
1976
2106
  const falseBranchActions = elseBranchActions || [];
1977
2107
  const otherBranchActions = [];
@@ -2125,6 +2255,7 @@ export function convert(draft, appId = '', sceneId = '', metadataPath = '', leni
2125
2255
  let draftEvent = draft.event || {};
2126
2256
  let draftActions = draft.actions || [];
2127
2257
  meta._scene_id = String(sceneId || '');
2258
+ meta._app_id = String(appId || '');
2128
2259
  meta._http_response_fields = collectHttpResponseFields(draft.actions || []);
2129
2260
  meta._componentOptions = draft._componentOptions && typeof draft._componentOptions === 'object'
2130
2261
  ? draft._componentOptions