weaver-e10-builder 1.0.10-beta → 1.0.12-beta

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 (254) hide show
  1. package/dist/commands/actionflow.d.ts.map +1 -1
  2. package/dist/commands/actionflow.js +10 -6
  3. package/dist/commands/actionflow.js.map +1 -1
  4. package/dist/commands/auth.d.ts.map +1 -1
  5. package/dist/commands/auth.js +13 -0
  6. package/dist/commands/auth.js.map +1 -1
  7. package/dist/commands/form-layout-init.d.ts.map +1 -1
  8. package/dist/commands/form-layout-init.js +7 -1
  9. package/dist/commands/form-layout-init.js.map +1 -1
  10. package/dist/commands/form-list-permission.d.ts.map +1 -1
  11. package/dist/commands/form-list-permission.js +130 -15
  12. package/dist/commands/form-list-permission.js.map +1 -1
  13. package/dist/commands/form-nlist.d.ts +22 -0
  14. package/dist/commands/form-nlist.d.ts.map +1 -0
  15. package/dist/commands/form-nlist.js +179 -0
  16. package/dist/commands/form-nlist.js.map +1 -0
  17. package/dist/commands/form-serial-mark.d.ts +0 -15
  18. package/dist/commands/form-serial-mark.d.ts.map +1 -1
  19. package/dist/commands/form-serial-mark.js +604 -137
  20. package/dist/commands/form-serial-mark.js.map +1 -1
  21. package/dist/commands/form.d.ts.map +1 -1
  22. package/dist/commands/form.js +145 -16
  23. package/dist/commands/form.js.map +1 -1
  24. package/dist/commands/skill.d.ts +3 -0
  25. package/dist/commands/skill.d.ts.map +1 -0
  26. package/dist/commands/skill.js +112 -0
  27. package/dist/commands/skill.js.map +1 -0
  28. package/dist/commands/wf-form.d.ts +18 -0
  29. package/dist/commands/wf-form.d.ts.map +1 -1
  30. package/dist/commands/wf-form.js +156 -181
  31. package/dist/commands/wf-form.js.map +1 -1
  32. package/dist/commands/workflow-condition.d.ts.map +1 -1
  33. package/dist/commands/workflow-condition.js +3 -1
  34. package/dist/commands/workflow-condition.js.map +1 -1
  35. package/dist/commands/workflow-create-workflow.d.ts.map +1 -1
  36. package/dist/commands/workflow-create-workflow.js +14 -0
  37. package/dist/commands/workflow-create-workflow.js.map +1 -1
  38. package/dist/commands/workflow-node-validate.d.ts.map +1 -1
  39. package/dist/commands/workflow-node-validate.js +16 -2
  40. package/dist/commands/workflow-node-validate.js.map +1 -1
  41. package/dist/commands/workflow-numbering.d.ts.map +1 -1
  42. package/dist/commands/workflow-numbering.js +18 -2
  43. package/dist/commands/workflow-numbering.js.map +1 -1
  44. package/dist/commands/workflow.d.ts.map +1 -1
  45. package/dist/commands/workflow.js +58 -42
  46. package/dist/commands/workflow.js.map +1 -1
  47. package/dist/index.js +4 -0
  48. package/dist/index.js.map +1 -1
  49. package/dist/services/actionflow/build_workflow_draft.d.ts.map +1 -1
  50. package/dist/services/actionflow/build_workflow_draft.js +23 -2
  51. package/dist/services/actionflow/build_workflow_draft.js.map +1 -1
  52. package/dist/services/actionflow/command_output.d.ts +6 -0
  53. package/dist/services/actionflow/command_output.d.ts.map +1 -0
  54. package/dist/services/actionflow/command_output.js +91 -0
  55. package/dist/services/actionflow/command_output.js.map +1 -0
  56. package/dist/services/actionflow/components/action_eb_add.d.ts.map +1 -1
  57. package/dist/services/actionflow/components/action_eb_add.js +5 -4
  58. package/dist/services/actionflow/components/action_eb_add.js.map +1 -1
  59. package/dist/services/actionflow/components/action_eb_delete.js +1 -1
  60. package/dist/services/actionflow/components/action_eb_delete.js.map +1 -1
  61. package/dist/services/actionflow/components/action_eb_update.js +4 -4
  62. package/dist/services/actionflow/components/action_eb_update.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 +4 -1
  65. package/dist/services/actionflow/components/action_eb_update_compiler.js.map +1 -1
  66. package/dist/services/actionflow/components/approve_create.js +1 -1
  67. package/dist/services/actionflow/components/approve_create.js.map +1 -1
  68. package/dist/services/actionflow/components/approve_trigger.d.ts.map +1 -1
  69. package/dist/services/actionflow/components/approve_trigger.js +48 -16
  70. package/dist/services/actionflow/components/approve_trigger.js.map +1 -1
  71. package/dist/services/actionflow/components/date_trigger.js +3 -3
  72. package/dist/services/actionflow/components/date_trigger.js.map +1 -1
  73. package/dist/services/actionflow/components/enquiry_form.d.ts.map +1 -1
  74. package/dist/services/actionflow/components/enquiry_form.js +15 -8
  75. package/dist/services/actionflow/components/enquiry_form.js.map +1 -1
  76. package/dist/services/actionflow/enrich_approve_trigger.d.ts.map +1 -1
  77. package/dist/services/actionflow/enrich_approve_trigger.js +47 -17
  78. package/dist/services/actionflow/enrich_approve_trigger.js.map +1 -1
  79. package/dist/services/actionflow/formula_service.d.ts.map +1 -1
  80. package/dist/services/actionflow/formula_service.js +71 -3
  81. package/dist/services/actionflow/formula_service.js.map +1 -1
  82. package/dist/services/actionflow/functions_catalog.d.ts +26 -0
  83. package/dist/services/actionflow/functions_catalog.d.ts.map +1 -0
  84. package/dist/services/actionflow/functions_catalog.js +8986 -0
  85. package/dist/services/actionflow/functions_catalog.js.map +1 -0
  86. package/dist/services/actionflow/functions_source.d.ts +7 -0
  87. package/dist/services/actionflow/functions_source.d.ts.map +1 -0
  88. package/dist/services/actionflow/functions_source.js +50 -0
  89. package/dist/services/actionflow/functions_source.js.map +1 -0
  90. package/dist/services/actionflow/generation_service.d.ts +8 -0
  91. package/dist/services/actionflow/generation_service.d.ts.map +1 -1
  92. package/dist/services/actionflow/generation_service.js +60 -2
  93. package/dist/services/actionflow/generation_service.js.map +1 -1
  94. package/dist/services/actionflow/preflight_service.d.ts +6 -0
  95. package/dist/services/actionflow/preflight_service.d.ts.map +1 -1
  96. package/dist/services/actionflow/preflight_service.js +69 -0
  97. package/dist/services/actionflow/preflight_service.js.map +1 -1
  98. package/dist/services/actionflow/workflow_compiler.d.ts.map +1 -1
  99. package/dist/services/actionflow/workflow_compiler.js +102 -85
  100. package/dist/services/actionflow/workflow_compiler.js.map +1 -1
  101. package/dist/services/actionflow/workflow_source.d.ts +2 -0
  102. package/dist/services/actionflow/workflow_source.d.ts.map +1 -1
  103. package/dist/services/actionflow/workflow_source.js +8 -0
  104. package/dist/services/actionflow/workflow_source.js.map +1 -1
  105. package/dist/services/condition-rules.d.ts.map +1 -1
  106. package/dist/services/condition-rules.js +3 -1
  107. package/dist/services/condition-rules.js.map +1 -1
  108. package/dist/services/form-create.d.ts.map +1 -1
  109. package/dist/services/form-create.js +4 -1
  110. package/dist/services/form-create.js.map +1 -1
  111. package/dist/services/form-nlist.d.ts +42 -0
  112. package/dist/services/form-nlist.d.ts.map +1 -0
  113. package/dist/services/form-nlist.js +332 -0
  114. package/dist/services/form-nlist.js.map +1 -0
  115. package/dist/services/skill-provision.d.ts +18 -0
  116. package/dist/services/skill-provision.d.ts.map +1 -0
  117. package/dist/services/skill-provision.js +86 -0
  118. package/dist/services/skill-provision.js.map +1 -0
  119. package/dist/services/workflow-initiator.js +3 -3
  120. package/dist/services/workflow-initiator.js.map +1 -1
  121. package/dist/services/workflow-operator.d.ts +3 -1
  122. package/dist/services/workflow-operator.d.ts.map +1 -1
  123. package/dist/services/workflow-operator.js +5 -4
  124. package/dist/services/workflow-operator.js.map +1 -1
  125. package/package.json +4 -2
  126. package/skill-docs/SKILL.md +348 -0
  127. package/skill-docs/actionflows/references/components/calendar/MeetingCreate.md +17 -0
  128. package/skill-docs/actionflows/references/components/calendar/ScheduleCreate.md +17 -0
  129. package/skill-docs/actionflows/references/components/document/AttachmentCopy.md +17 -0
  130. package/skill-docs/actionflows/references/components/document/AttachmentMove.md +17 -0
  131. package/skill-docs/actionflows/references/components/document/DocumentCopy.md +17 -0
  132. package/skill-docs/actionflows/references/components/document/DocumentDelete.md +17 -0
  133. package/skill-docs/actionflows/references/components/document/DocumentEdit.md +17 -0
  134. package/skill-docs/actionflows/references/components/document/DocumentMove.md +17 -0
  135. package/skill-docs/actionflows/references/components/document/DocumentPermissionChange.md +17 -0
  136. package/skill-docs/actionflows/references/components/document/DocumentRenewal.md +17 -0
  137. package/skill-docs/actionflows/references/components/document/DocumentRevert.md +17 -0
  138. package/skill-docs/actionflows/references/components/document/DocumentSave.md +17 -0
  139. package/skill-docs/actionflows/references/components/document/DocumentSubscription.md +17 -0
  140. package/skill-docs/actionflows/references/components/document/DocumentSubscriptionApprove.md +17 -0
  141. package/skill-docs/actionflows/references/components/document/DocumentSubscriptionSendBack.md +17 -0
  142. package/skill-docs/actionflows/references/components/document/DocumentSubscriptionWithdraw.md +17 -0
  143. package/skill-docs/actionflows/references/components/document/FileFolderSave.md +17 -0
  144. package/skill-docs/actionflows/references/components/document/GetAttachmentInfo.md +17 -0
  145. package/skill-docs/actionflows/references/components/document/GetDocumentInfo.md +17 -0
  146. package/skill-docs/actionflows/references/components/document/ModifyDocumentStatus.md +17 -0
  147. package/skill-docs/actionflows/references/components/document/ReplaceAttachment.md +17 -0
  148. package/skill-docs/actionflows/references/components/document/UpdatePrintNum.md +17 -0
  149. package/skill-docs/actionflows/references/components/ebuilder/ActionEbAdd.md +39 -0
  150. package/skill-docs/actionflows/references/components/ebuilder/ActionEbDelete.md +21 -0
  151. package/skill-docs/actionflows/references/components/ebuilder/ActionEbRecover.md +17 -0
  152. package/skill-docs/actionflows/references/components/ebuilder/ActionEbSaveVersion.md +17 -0
  153. package/skill-docs/actionflows/references/components/ebuilder/ActionEbUpdate.md +21 -0
  154. package/skill-docs/actionflows/references/components/ebuilder/DateTrigger.md +17 -0
  155. package/skill-docs/actionflows/references/components/ebuilder/EbGetDataById.md +17 -0
  156. package/skill-docs/actionflows/references/components/ebuilder/EnquiryForm.md +75 -0
  157. package/skill-docs/actionflows/references/components/ebuilder/EventFormData.md +17 -0
  158. package/skill-docs/actionflows/references/components/ebuilder/TimeBatchTrigger.md +17 -0
  159. package/skill-docs/actionflows/references/components/logic/Condition.md +23 -0
  160. package/skill-docs/actionflows/references/components/logic/LogicFlowSet.md +17 -0
  161. package/skill-docs/actionflows/references/components/logic/MultipleExecution.md +38 -0
  162. package/skill-docs/actionflows/references/components/logic/Output.md +17 -0
  163. package/skill-docs/actionflows/references/components/message/SendMessage.md +17 -0
  164. package/skill-docs/actionflows/references/components/personnel/AlterPersonStatus.md +30 -0
  165. package/skill-docs/actionflows/references/components/personnel/HrmEmployeeUpdate.md +32 -0
  166. package/skill-docs/actionflows/references/components/personnel/PersonnelOnboarding.md +34 -0
  167. package/skill-docs/actionflows/references/components/trigger/SimpleScheduler.md +17 -0
  168. package/skill-docs/actionflows/references/components/workflow/ApproveAddSign.md +17 -0
  169. package/skill-docs/actionflows/references/components/workflow/ApproveAgreeRejectApply.md +17 -0
  170. package/skill-docs/actionflows/references/components/workflow/ApproveCommit.md +17 -0
  171. package/skill-docs/actionflows/references/components/workflow/ApproveCompletelyDelete.md +17 -0
  172. package/skill-docs/actionflows/references/components/workflow/ApproveConsulTurnTodo.md +17 -0
  173. package/skill-docs/actionflows/references/components/workflow/ApproveCreate.md +17 -0
  174. package/skill-docs/actionflows/references/components/workflow/ApproveDelete.md +17 -0
  175. package/skill-docs/actionflows/references/components/workflow/ApproveDoCirculate.md +17 -0
  176. package/skill-docs/actionflows/references/components/workflow/ApproveDoForward.md +17 -0
  177. package/skill-docs/actionflows/references/components/workflow/ApproveDoTurnTodo.md +17 -0
  178. package/skill-docs/actionflows/references/components/workflow/ApproveEntrust.md +17 -0
  179. package/skill-docs/actionflows/references/components/workflow/ApproveIntervention.md +17 -0
  180. package/skill-docs/actionflows/references/components/workflow/ApproveMandatoryArchiving.md +17 -0
  181. package/skill-docs/actionflows/references/components/workflow/ApproveManualCC.md +17 -0
  182. package/skill-docs/actionflows/references/components/workflow/ApproveRefuseRejectApply.md +17 -0
  183. package/skill-docs/actionflows/references/components/workflow/ApproveRejectApply.md +17 -0
  184. package/skill-docs/actionflows/references/components/workflow/ApproveSave.md +17 -0
  185. package/skill-docs/actionflows/references/components/workflow/ApproveSendBack.md +17 -0
  186. package/skill-docs/actionflows/references/components/workflow/ApproveShareEntry.md +17 -0
  187. package/skill-docs/actionflows/references/components/workflow/ApproveTrigger.md +49 -0
  188. package/skill-docs/actionflows/references/components/workflow/ApproveWithdraw.md +17 -0
  189. package/skill-docs/actionflows/references/components/workflow/WorkFlowDocEmpowerment.md +17 -0
  190. package/skill-docs/actionflows/references/components/workflow/WorkflowToDoc.md +17 -0
  191. package/skill-docs/actionflows/references/condition_rules.md +97 -0
  192. package/skill-docs/actionflows/references/examples/enquiry-form-batch-insert-scene2.json +1046 -0
  193. package/skill-docs/actionflows/references/function_rules.md +13 -0
  194. package/skill-docs/actionflows/references/trigger_runtime_notes.md +51 -0
  195. package/skill-docs/assets/sample/.claude/settings.local.json +8 -0
  196. package/skill-docs/assets/sample/api/formApi.js +510 -0
  197. package/skill-docs/assets/sample/config/config.js +0 -0
  198. package/skill-docs/assets/sample/config/configLoad.js +0 -0
  199. package/skill-docs/assets/sample/config/configLoad_default.js +0 -0
  200. package/skill-docs/assets/sample/config/config_default.js +0 -0
  201. package/skill-docs/assets/sample/entry.js +22 -0
  202. package/skill-docs/assets/sample/eslint.config.cjs +48 -0
  203. package/skill-docs/assets/sample/memo.md +0 -0
  204. package/skill-docs/assets/sample/readme.js +8 -0
  205. package/skill-docs/references/auth/guide-auth.md +88 -0
  206. package/skill-docs/references/coding/guide-edit-backfill.md +189 -0
  207. package/skill-docs/references/coding/guide-form-crud.md +262 -0
  208. package/skill-docs/references/coding/guide-page-code.md +224 -0
  209. package/skill-docs/references/coding/guide-page-export.md +119 -0
  210. package/skill-docs/references/coding/ref-compile-rules.md +106 -0
  211. package/skill-docs/references/common/ref-cli-commands.md +286 -0
  212. package/skill-docs/references/components/@weapp-Button.md +104 -0
  213. package/skill-docs/references/components/base-Badge.md +100 -0
  214. package/skill-docs/references/components/base-Dialog.md +358 -0
  215. package/skill-docs/references/components/base-Empty.md +58 -0
  216. package/skill-docs/references/components/base-Tag.md +112 -0
  217. package/skill-docs/references/components/display-Alert.md +64 -0
  218. package/skill-docs/references/components/display-Avatar.md +150 -0
  219. package/skill-docs/references/components/display-Calendar.md +263 -0
  220. package/skill-docs/references/components/display-Carousel.md +115 -0
  221. package/skill-docs/references/components/display-Collapse.md +299 -0
  222. package/skill-docs/references/components/display-FilePreview.md +49 -0
  223. package/skill-docs/references/components/display-Icon.md +66 -0
  224. package/skill-docs/references/components/display-List.md +320 -0
  225. package/skill-docs/references/components/display-Pagination.md +41 -0
  226. package/skill-docs/references/components/display-Spin.md +34 -0
  227. package/skill-docs/references/components/display-Steps.md +89 -0
  228. package/skill-docs/references/components/display-Table.md +160 -0
  229. package/skill-docs/references/components/display-Title.md +117 -0
  230. package/skill-docs/references/components/form-Checkbox.md +161 -0
  231. package/skill-docs/references/components/form-DepartmentBrowser-api.md +52 -0
  232. package/skill-docs/references/components/form-EmployeeBrowser-api.md +51 -0
  233. package/skill-docs/references/components/form-EmployeeBrowser.md +51 -0
  234. package/skill-docs/references/components/form-Input.md +123 -0
  235. package/skill-docs/references/components/form-Radio.md +145 -0
  236. package/skill-docs/references/components/form-Select.md +191 -0
  237. package/skill-docs/references/components/form-Switch.md +46 -0
  238. package/skill-docs/references/components/form-Upload.md +53 -0
  239. package/skill-docs/references/components/generic-Echarts.md +102 -0
  240. package/skill-docs/references/form/guide-create-form.md +407 -0
  241. package/skill-docs/references/form/guide-ebuilder-filter.md +73 -0
  242. package/skill-docs/references/form/guide-ebuilder-scope.md +82 -0
  243. package/skill-docs/references/form/guide-form-data.md +48 -0
  244. package/skill-docs/references/form/guide-form-formula-functions.md +297 -0
  245. package/skill-docs/references/form/guide-form-linkage.md +185 -0
  246. package/skill-docs/references/form/guide-form-view-permission.md +38 -0
  247. package/skill-docs/references/form/guide-form-view.md +267 -0
  248. package/skill-docs/references/form/style-templates.md +44 -0
  249. package/skill-docs/references/hrm/guide-matrix.md +103 -0
  250. package/skill-docs/references/menu/system-menus.md +63 -0
  251. package/skill-docs/references/workflow/guide-workflow-action.md +168 -0
  252. package/skill-docs/references/workflow/guide-workflow-condition.md +405 -0
  253. package/skill-docs/references/workflow/guide-workflow.md +388 -0
  254. package/skill-docs/references/workflow/operator-matrix.md +74 -0
@@ -7,7 +7,7 @@ import { genSfId } 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, attachEsbAssign, resolveEnumConstant, resolveParamKey, resolveSourceFieldLabel, resolveSourceFieldType, normalizeConstantAssignment, lookupTargetFieldMeta, formulaFixedForAssignSwitch, formulaSystemVar, formulaContext, assignFlatContext, assignFlatContextDirect, getFormulaFn, formulaFunction, } from './formula_service.js';
10
+ import { buildPersonFormula, buildSettingEntry, buildAssignBean, attachEsbAssign, resolveEnumConstant, resolveParamKey, resolveSourceFieldLabel, resolveSourceFieldType, normalizeConstantAssignment, lookupTargetFieldMeta, formulaFixedForAssignSwitch, formulaSystemVar, formulaContext, assignFlatContext, assignFlatContextDirect, getFormulaFn, formulaFunction, } from './formula_service.js';
11
11
  import { buildFormulaReference, buildUpdateFieldCondition } from './components/action_eb_update_compiler.js';
12
12
  import { resolveSystemParameter, isDateSystemParameter } from './system_params.js';
13
13
  import { conditionFieldFamily, filterFieldType, normalizeFilterOperator, conditionOperatorOverride, resolveFormCtx, buildFilterContextFormula, } from './filter_rules.js';
@@ -264,6 +264,9 @@ function handleSpecial(draftKey, special, val, result, meta, appId, idx, eventId
264
264
  const rawSystem = val.systemValue || val.key;
265
265
  result.requestName = formulaSystemVar(rawSystem);
266
266
  }
267
+ else if (String(val.kind || val.assignmentKind || '') === 'function') {
268
+ result.requestName = buildAssignBean(val, 'requestName', String(val.fieldType || val.valueType || 'string'), meta, appId, String(eventId || ''));
269
+ }
267
270
  else {
268
271
  const wfId = String(meta?._workflow_id || '');
269
272
  const rqKey = resolveParamKey(wfId, String(val.key ?? val.value ?? ''));
@@ -414,7 +417,28 @@ export function fillSetting(result, updates, mapping, constants, formula, meta,
414
417
  const refKey = String(targetFieldId.paramKey || sourceKey);
415
418
  const refLabel = String(targetFieldId.label || resolveSourceFieldLabel(refKey, meta, String(sourceKey)));
416
419
  const refDetail = String(targetFieldId.detailLabel || '');
417
- const assignment = { kind: 'context', paramKey: refKey, label: refLabel };
420
+ const assignment = {
421
+ ...(targetFieldId.assignment && typeof targetFieldId.assignment === 'object' ? targetFieldId.assignment : {}),
422
+ kind: String(targetFieldId.kind || targetFieldId.assignmentKind || 'context'),
423
+ paramKey: refKey,
424
+ label: refLabel,
425
+ };
426
+ if (targetFieldId.source !== undefined)
427
+ assignment.source = targetFieldId.source;
428
+ if (targetFieldId.comId !== undefined)
429
+ assignment.comId = targetFieldId.comId;
430
+ if (targetFieldId.formId !== undefined)
431
+ assignment.formId = targetFieldId.formId;
432
+ if (targetFieldId.queryFormId !== undefined)
433
+ assignment.queryFormId = targetFieldId.queryFormId;
434
+ if (targetFieldId.fieldId !== undefined)
435
+ assignment.fieldId = targetFieldId.fieldId;
436
+ if (targetFieldId.queryFieldId !== undefined)
437
+ assignment.queryFieldId = targetFieldId.queryFieldId;
438
+ if (targetFieldId.index !== undefined)
439
+ assignment.index = targetFieldId.index;
440
+ if (targetFieldId.parentName !== undefined)
441
+ assignment.parentName = targetFieldId.parentName;
418
442
  if (refDetail)
419
443
  assignment.detailLabel = refDetail;
420
444
  assertCompatibleEnumContextMapping(refKey, raw, result, meta || {});
@@ -463,6 +487,12 @@ export function fillSetting(result, updates, mapping, constants, formula, meta,
463
487
  const fspec = fspecRaw;
464
488
  if (!fspec || typeof fspec !== 'object')
465
489
  continue;
490
+ if (String(fspec.kind || '') === 'function') {
491
+ const fieldMeta = lookupTargetFieldMeta(String(targetFieldId), result);
492
+ const targetFieldType = String(fieldMeta?.componentKey || fieldMeta?.type || fspec.resultType || 'Number');
493
+ main[String(targetFieldId)] = buildSettingEntry(String(targetFieldId), fspec, targetFieldType, meta, appId, String(eventId), 'OPERATE_EQUAL', componentType, false, assignmentMode);
494
+ continue;
495
+ }
466
496
  const op = fspec.op || 'add';
467
497
  const fields = fspec.fields || [];
468
498
  if (!fields.length)
@@ -477,7 +507,7 @@ export function fillSetting(result, updates, mapping, constants, formula, meta,
477
507
  child.fieldType = 'number';
478
508
  childs.push(child);
479
509
  }
480
- const bean = formulaFunction(fnInfo.fnId, fnInfo.name, childs, 'double', op, fnInfo.functionType || 'operation', undefined, appId);
510
+ const bean = formulaFunction(fnInfo.fnId, fnInfo.name, childs, 'double', null, fnInfo.functionType || 'operation', undefined, appId);
481
511
  const flatId = bean.id || genSfId();
482
512
  const assign = Object.fromEntries(Object.entries(bean).filter(([k]) => !['configObject', 'childs', 'parentId', 'sortWeight', 'position'].includes(k)));
483
513
  if (bean.childs)
@@ -520,13 +550,13 @@ export function fillSetting(result, updates, mapping, constants, formula, meta,
520
550
  function isFilterGroup(value) {
521
551
  if (!value || typeof value !== 'object' || Array.isArray(value))
522
552
  return false;
523
- const children = value.conditions ?? value.datas;
553
+ const children = value.conditions;
524
554
  if (!Array.isArray(children))
525
555
  return false;
526
556
  return !['left', 'right', 'field', 'operator', 'value', 'id', 'key', 'fieldName'].some((k) => k in value);
527
557
  }
528
558
  function filterGroupChildren(value) {
529
- const children = value.conditions ?? value.datas ?? [];
559
+ const children = value.conditions ?? [];
530
560
  if (!Array.isArray(children))
531
561
  throw new Error('filterCondition 分组的 conditions 必须是数组');
532
562
  if (!children.length)
@@ -534,18 +564,18 @@ function filterGroupChildren(value) {
534
564
  return children;
535
565
  }
536
566
  function filterRelationship(value) {
537
- const text = String(value ?? '1').trim().toLowerCase();
538
- if (['1', 'and', '&&'].includes(text))
567
+ const text = String(value ?? '').trim().toLowerCase();
568
+ if (text === 'and')
539
569
  return '1';
540
- if (['0', 'or', '||'].includes(text))
570
+ if (text === 'or')
541
571
  return '0';
542
- throw new Error('filterCondition relationship 只支持 and/or(或 1/0)');
572
+ throw new Error('filterCondition relationship 只支持 and/or');
543
573
  }
544
574
  function containsFilterGroup(value) {
545
575
  if (isFilterGroup(value))
546
576
  return true;
547
577
  if (value && typeof value === 'object' && !Array.isArray(value)) {
548
- const children = value.conditions ?? value.datas;
578
+ const children = value.conditions;
549
579
  if (Array.isArray(children))
550
580
  return children.some(containsFilterGroup);
551
581
  return false;
@@ -567,25 +597,58 @@ function rejectUnsupportedFilterModes(value) {
567
597
  rejectUnsupportedFilterModes(item);
568
598
  }
569
599
  }
600
+ const CANONICAL_FILTER_OPERATORS = new Set([
601
+ 'eq', 'neq', 'gt', 'lt', 'gte', 'lte', 'contains', 'uncontains',
602
+ 'empty', 'nempty', 'range', 'aggregate', 'unaggregate',
603
+ 'startWith', 'unStartWith', 'endWith', 'unEndWith', 'containedWith',
604
+ ]);
605
+ const CANONICAL_FILTER_RIGHT_TYPES = new Set([
606
+ 'fixed', 'system', 'context', 'formfield', 'selectdata',
607
+ 'custombyhander', 'native', 'varfield', 'filterval',
608
+ ]);
609
+ /** Validates the public semantic plan. Platform filterInput is built only after this boundary. */
610
+ function assertCanonicalFilterPlan(value) {
611
+ if (!value || typeof value !== 'object' || Array.isArray(value)) {
612
+ throw new Error('filterCondition 必须是单个条件对象或 {relationship:"and|or",conditions:[...]};不接受数组');
613
+ }
614
+ if (isFilterGroup(value)) {
615
+ if ('datas' in value)
616
+ throw new Error('filterCondition 条件组只接受 conditions,不接受 datas');
617
+ filterRelationship(value.relationship);
618
+ for (const child of filterGroupChildren(value))
619
+ assertCanonicalFilterPlan(child);
620
+ return;
621
+ }
622
+ if ('value' in value || 'left' in value || 'key' in value || 'id' in value) {
623
+ throw new Error('filterCondition 叶子只接受 field/operator/right;不接受 value、left、key 或 id');
624
+ }
625
+ const field = value.field;
626
+ if (!field || typeof field !== 'object' || Array.isArray(field) || !String(field.id ?? '').trim()) {
627
+ throw new Error('filterCondition field 必须是 {id,label} 对象');
628
+ }
629
+ const operator = String(value.operator ?? '').trim();
630
+ if (!CANONICAL_FILTER_OPERATORS.has(operator)) {
631
+ throw new Error(`filterCondition operator='${operator}' 不支持;请使用 eq/neq/gt/lt/gte/lte/contains/uncontains/empty/nempty/range`);
632
+ }
633
+ if (operator === 'empty' || operator === 'nempty')
634
+ return;
635
+ const right = value.right;
636
+ if (!right || typeof right !== 'object' || Array.isArray(right)) {
637
+ throw new Error('filterCondition 非空操作符必须使用 right 对象');
638
+ }
639
+ const rightType = String(right.type ?? '').trim().toLowerCase();
640
+ if (!CANONICAL_FILTER_RIGHT_TYPES.has(rightType)) {
641
+ throw new Error(`filterCondition right.type='${rightType}' 不支持;请使用 fixed/system/context/formField/selectData/customByHander/native/varField/filterVal`);
642
+ }
643
+ }
570
644
  export function buildFilterInput(result, val, meta, appId, componentType = '', allowTree = true) {
571
645
  componentType = String(componentType || '');
646
+ assertCanonicalFilterPlan(val);
572
647
  if (allowTree && containsFilterGroup(val)) {
573
648
  return buildFilterTree(result, val, meta, appId, componentType);
574
649
  }
575
650
  const eventLocalFilter = (get(componentType) || {}).filterValueScope === 'local';
576
- let conditions;
577
- if (val && typeof val === 'object' && !Array.isArray(val)) {
578
- if (val.condition && typeof val.condition === 'object')
579
- conditions = [val.condition];
580
- else if ('conditions' in val)
581
- conditions = val.conditions;
582
- else
583
- conditions = [val];
584
- }
585
- else if (Array.isArray(val))
586
- conditions = val;
587
- else
588
- conditions = [];
651
+ const conditions = [val];
589
652
  const formId = result.objId || (result.targetForm || {}).id || (result.dataSource || {}).id || (result.dataSource || {}).sourceId || '';
590
653
  const fctx = resolveFormCtx(result, meta, formId);
591
654
  const form = findInMetadata(meta, 'forms', { id: formId }) || {};
@@ -598,30 +661,9 @@ export function buildFilterInput(result, val, meta, appId, componentType = '', a
598
661
  conditions.forEach((c, idx) => {
599
662
  if (!c || typeof c !== 'object')
600
663
  return;
601
- const left = c.left && typeof c.left === 'object' ? c.left : c;
602
- let fieldId = '';
603
- let label = '';
604
- let right;
605
- if (left.field && typeof left.field === 'object' && left.field.id) {
606
- fieldId = String(left.field.id);
607
- label = left.field.label || left.field.name || fieldId;
608
- if (c.right && typeof c.right === 'object')
609
- right = c.right;
610
- else if (c.value && typeof c.value === 'object')
611
- right = c.value;
612
- else
613
- right = { value: c.value ?? '' };
614
- }
615
- else if (left.key || left.id) {
616
- fieldId = String(left.key ?? left.id ?? '');
617
- label = left.label ?? left.name ?? '';
618
- right = c.right ?? c.value ?? '';
619
- }
620
- else {
621
- fieldId = '';
622
- label = '';
623
- right = '';
624
- }
664
+ const fieldId = String(c.field.id);
665
+ let label = c.field.label || c.field.name || fieldId;
666
+ let right = c.right ?? { type: 'fixed', value: '' };
625
667
  const fmeta = fieldIndex[fieldId] || {};
626
668
  if (!fmeta || Object.keys(fmeta).length === 0) {
627
669
  throw new Error(`filterCondition 左侧字段 id='${fieldId}' 不在目标表单 '${formId}' 的实时字段列表中`);
@@ -645,26 +687,7 @@ export function buildFilterInput(result, val, meta, appId, componentType = '', a
645
687
  if (multiSelect === undefined && rawConfig && typeof rawConfig === 'object' && 'isSingle' in rawConfig)
646
688
  multiSelect = !Boolean(rawConfig.isSingle);
647
689
  const isMultiSelect = multiSelect === true || String(multiSelect).toLowerCase() === 'true';
648
- if (right && typeof right === 'object' && right.kind === 'context' && !right.type) {
649
- throw new Error("filterCondition 不支持 value.kind:'context';请使用 right:{type:'context',paramKey:'<真实paramKey>',label:'<显示名>'}");
650
- }
651
- let rightType = right && typeof right === 'object' ? String(right.type || 'fixed').trim().toLowerCase() : 'fixed';
652
- if (right && typeof right === 'object' && right.paramKey && !right.type) {
653
- throw new Error("filterCondition 动态右值缺少 type:'context';请使用 right:{type:'context',paramKey:'<真实paramKey>',label:'<显示名>'}");
654
- }
655
- if (['manual', 'constant', 'const'].includes(rightType))
656
- rightType = 'fixed';
657
- else if (['dynamic', 'assign', 'workflowfield', 'workflow_field'].includes(rightType))
658
- rightType = 'context';
659
- else if (['formfield', 'form_field'].includes(rightType))
660
- rightType = 'formfield';
661
- else if (['custom', 'custombyhandler'].includes(rightType))
662
- rightType = 'custombyhander';
663
- else if (['platform', 'condition'].includes(rightType))
664
- rightType = 'native';
665
- if (!['fixed', 'system', 'context', 'formfield', 'selectdata', 'custombyhander', 'native', 'varfield', 'filterval'].includes(rightType)) {
666
- throw new Error(`filterCondition 右值 type='${rightType}' 不支持; 支持 fixed/manual/context/formField/selectData/customByHander/native/varField/filterVal`);
667
- }
690
+ let rightType = String(right.type).trim().toLowerCase();
668
691
  // 原生「当前时间/当前日期」改写为系统参数(真机验证 2026-08-18):平台 native type 列表不含 currentTime/currentDate
669
692
  // 等具体 token,原样透传后 conditionData.value="" 触发设计器「右值未配置」判断(外面能显示摘要,点进去空)。
670
693
  // 与 system_params 的 currentTime→{time}/currentDate→{date} 映射一致,落到 system 路径后走完整校验+value 非空。
@@ -705,7 +728,7 @@ export function buildFilterInput(result, val, meta, appId, componentType = '', a
705
728
  }
706
729
  const isContext = ['context', 'formfield', 'custombyhander'].includes(rightType);
707
730
  const isNative = ['native', 'varfield', 'filterval'].includes(rightType);
708
- const filterValueType = String((right && typeof right === 'object' ? right.filterValueType : '') || c.filterValueType || '');
731
+ const filterValueType = String(right.filterValueType || '');
709
732
  const allowedOverride = conditionOperatorOverride(fmeta, family, compType, fieldId, filterValueType);
710
733
  let contextIsArray = false;
711
734
  let value;
@@ -722,7 +745,7 @@ export function buildFilterInput(result, val, meta, appId, componentType = '', a
722
745
  }
723
746
  value = rawValue;
724
747
  }
725
- const func = normalizeFilterOperator(c.operator ?? 'eq', family, { contextIsArray, multiSelect: isMultiSelect, allowedOverride });
748
+ const func = normalizeFilterOperator(c.operator, family, { contextIsArray, multiSelect: isMultiSelect, allowedOverride });
726
749
  const isNullary = ['empty', 'nempty'].includes(func);
727
750
  if (isNullary)
728
751
  value = '';
@@ -808,15 +831,7 @@ export function buildFilterInput(result, val, meta, appId, componentType = '', a
808
831
  }
809
832
  function buildFilterTree(result, value, meta, appId, componentType) {
810
833
  rejectUnsupportedFilterModes(value);
811
- let rootSource;
812
- if (isFilterGroup(value))
813
- rootSource = value;
814
- else if (Array.isArray(value))
815
- rootSource = { relationship: 'and', conditions: value };
816
- else if (value && typeof value === 'object' && Array.isArray(value.conditions))
817
- rootSource = value;
818
- else
819
- rootSource = { relationship: 'and', conditions: [value] };
834
+ const rootSource = value;
820
835
  const build = (source) => {
821
836
  if (isFilterGroup(source)) {
822
837
  return {
@@ -825,7 +840,7 @@ function buildFilterTree(result, value, meta, appId, componentType) {
825
840
  parentNode: '', relationship: filterRelationship(source.relationship), key: '',
826
841
  };
827
842
  }
828
- const compiled = buildFilterInput(result, [JSON.parse(JSON.stringify(source))], meta, appId, componentType, false);
843
+ const compiled = buildFilterInput(result, JSON.parse(JSON.stringify(source)), meta, appId, componentType, false);
829
844
  if (compiled.datas.length !== 1)
830
845
  throw new Error('filterCondition 叶子必须是单个有效条件');
831
846
  return compiled.datas[0];
@@ -1411,12 +1426,10 @@ export function convertNode(draftAction, isEvent = false, meta = null, appId = '
1411
1426
  }
1412
1427
  else {
1413
1428
  node.componentId = nidStr;
1414
- // 首节点(previousNodeId=event)通常不写 sources,平台对 ActionEb 等数据/动作组件自动接 event;
1415
- // 但 EnquiryForm 查询组件不适用该约定——漏 sources 会被平台判定为「起始执行组件」,
1416
- // 报「有两个起始执行组件」(真机验证 2026-08-27,sjrdemo 环境)。
1417
- const needsEventSource = nodeType === 'EnquiryForm' && ['', '0', String(eventNodeId)].includes(String(previousNodeId));
1418
- if (!['', '0', String(eventNodeId)].includes(String(previousNodeId)) || needsEventSource) {
1419
- node.sources = [{ wId: needsEventSource ? String(eventNodeId) : String(previousNodeId) }];
1429
+ // 首个动作不写 sources;手工保存的场景 2 中 EnquiryForm 作为首动作也是无 sources。
1430
+ // 后续节点一律显式指向前序节点,避免出现多个起始执行组件。
1431
+ if (!['', '0', String(eventNodeId)].includes(String(previousNodeId))) {
1432
+ node.sources = [{ wId: String(previousNodeId) }];
1420
1433
  }
1421
1434
  }
1422
1435
  // 设计器通过“添加操作”创建节点时,除平台执行 DTO 外还会保留组件目录项。
@@ -1589,6 +1602,9 @@ function registerRealNodeIds(draftNode, realNode, nodeIds) {
1589
1602
  const realId = String(realNode?.id ?? '');
1590
1603
  if (draftId && realId)
1591
1604
  nodeIds[draftId] = realId;
1605
+ const ref = String(draftNode?.ref ?? '').trim();
1606
+ if (ref && realId)
1607
+ nodeIds[ref] = realId;
1592
1608
  }
1593
1609
  function replaceFormulaSourceAliases(value, nodeIds) {
1594
1610
  if (value && typeof value === 'object' && !Array.isArray(value)) {
@@ -1650,6 +1666,7 @@ export function convert(draft, appId = '', sceneId = '', metadataPath = '', leni
1650
1666
  meta._componentOptions = draft._componentOptions && typeof draft._componentOptions === 'object'
1651
1667
  ? draft._componentOptions
1652
1668
  : {};
1669
+ meta._function_registry = Array.isArray(draft._functionRegistry) ? draft._functionRegistry : undefined;
1653
1670
  let draftEvent = draft.event || {};
1654
1671
  let draftActions = draft.actions || [];
1655
1672
  const lenientWarnings = [];