weaver-e10-builder 1.0.8-beta → 1.0.9-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.
- package/dist/commands/actionflow.d.ts +7 -0
- package/dist/commands/actionflow.d.ts.map +1 -0
- package/dist/commands/actionflow.js +105 -0
- package/dist/commands/actionflow.js.map +1 -0
- package/dist/commands/auth.js +1 -1
- package/dist/commands/auth.js.map +1 -1
- package/dist/commands/form-list.d.ts.map +1 -1
- package/dist/commands/form-list.js +18 -9
- package/dist/commands/form-list.js.map +1 -1
- package/dist/commands/form-native.d.ts +0 -14
- package/dist/commands/form-native.d.ts.map +1 -1
- package/dist/commands/form-native.js +398 -72
- package/dist/commands/form-native.js.map +1 -1
- package/dist/commands/form.d.ts.map +1 -1
- package/dist/commands/form.js +5 -2
- package/dist/commands/form.js.map +1 -1
- package/dist/commands/wf-form.d.ts.map +1 -1
- package/dist/commands/wf-form.js +49 -1
- package/dist/commands/wf-form.js.map +1 -1
- package/dist/commands/workflow-action.d.ts +11 -0
- package/dist/commands/workflow-action.d.ts.map +1 -1
- package/dist/commands/workflow-action.js +13 -1592
- package/dist/commands/workflow-action.js.map +1 -1
- package/dist/commands/workflow-create-workflow.d.ts.map +1 -1
- package/dist/commands/workflow-create-workflow.js +36 -5
- package/dist/commands/workflow-create-workflow.js.map +1 -1
- package/dist/core/client.d.ts +2 -0
- package/dist/core/client.d.ts.map +1 -1
- package/dist/core/client.js +2 -0
- package/dist/core/client.js.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/services/actionflow/build_workflow_draft.d.ts +20 -0
- package/dist/services/actionflow/build_workflow_draft.d.ts.map +1 -0
- package/dist/services/actionflow/build_workflow_draft.js +222 -0
- package/dist/services/actionflow/build_workflow_draft.js.map +1 -0
- package/dist/services/actionflow/calendar_mapper.d.ts +3 -0
- package/dist/services/actionflow/calendar_mapper.d.ts.map +1 -0
- package/dist/services/actionflow/calendar_mapper.js +152 -0
- package/dist/services/actionflow/calendar_mapper.js.map +1 -0
- package/dist/services/actionflow/component_registry.d.ts +13 -0
- package/dist/services/actionflow/component_registry.d.ts.map +1 -0
- package/dist/services/actionflow/component_registry.js +213 -0
- package/dist/services/actionflow/component_registry.js.map +1 -0
- package/dist/services/actionflow/components/action_eb_add.d.ts +3 -0
- package/dist/services/actionflow/components/action_eb_add.d.ts.map +1 -0
- package/dist/services/actionflow/components/action_eb_add.js +127 -0
- package/dist/services/actionflow/components/action_eb_add.js.map +1 -0
- package/dist/services/actionflow/components/action_eb_add_compiler.d.ts +4 -0
- package/dist/services/actionflow/components/action_eb_add_compiler.d.ts.map +1 -0
- package/dist/services/actionflow/components/action_eb_add_compiler.js +13 -0
- package/dist/services/actionflow/components/action_eb_add_compiler.js.map +1 -0
- package/dist/services/actionflow/components/action_eb_delete.d.ts +3 -0
- package/dist/services/actionflow/components/action_eb_delete.d.ts.map +1 -0
- package/dist/services/actionflow/components/action_eb_delete.js +69 -0
- package/dist/services/actionflow/components/action_eb_delete.js.map +1 -0
- package/dist/services/actionflow/components/action_eb_delete_compiler.d.ts +4 -0
- package/dist/services/actionflow/components/action_eb_delete_compiler.d.ts.map +1 -0
- package/dist/services/actionflow/components/action_eb_delete_compiler.js +7 -0
- package/dist/services/actionflow/components/action_eb_delete_compiler.js.map +1 -0
- package/dist/services/actionflow/components/action_eb_recover.d.ts +3 -0
- package/dist/services/actionflow/components/action_eb_recover.d.ts.map +1 -0
- package/dist/services/actionflow/components/action_eb_recover.js +28 -0
- package/dist/services/actionflow/components/action_eb_recover.js.map +1 -0
- package/dist/services/actionflow/components/action_eb_recover_compiler.d.ts +3 -0
- package/dist/services/actionflow/components/action_eb_recover_compiler.d.ts.map +1 -0
- package/dist/services/actionflow/components/action_eb_recover_compiler.js +16 -0
- package/dist/services/actionflow/components/action_eb_recover_compiler.js.map +1 -0
- package/dist/services/actionflow/components/action_eb_save_version.d.ts +3 -0
- package/dist/services/actionflow/components/action_eb_save_version.d.ts.map +1 -0
- package/dist/services/actionflow/components/action_eb_save_version.js +30 -0
- package/dist/services/actionflow/components/action_eb_save_version.js.map +1 -0
- package/dist/services/actionflow/components/action_eb_save_version_compiler.d.ts +3 -0
- package/dist/services/actionflow/components/action_eb_save_version_compiler.d.ts.map +1 -0
- package/dist/services/actionflow/components/action_eb_save_version_compiler.js +15 -0
- package/dist/services/actionflow/components/action_eb_save_version_compiler.js.map +1 -0
- package/dist/services/actionflow/components/action_eb_update.d.ts +3 -0
- package/dist/services/actionflow/components/action_eb_update.d.ts.map +1 -0
- package/dist/services/actionflow/components/action_eb_update.js +154 -0
- package/dist/services/actionflow/components/action_eb_update.js.map +1 -0
- package/dist/services/actionflow/components/action_eb_update_compiler.d.ts +16 -0
- package/dist/services/actionflow/components/action_eb_update_compiler.d.ts.map +1 -0
- package/dist/services/actionflow/components/action_eb_update_compiler.js +94 -0
- package/dist/services/actionflow/components/action_eb_update_compiler.js.map +1 -0
- package/dist/services/actionflow/components/approve_create.d.ts +3 -0
- package/dist/services/actionflow/components/approve_create.d.ts.map +1 -0
- package/dist/services/actionflow/components/approve_create.js +44 -0
- package/dist/services/actionflow/components/approve_create.js.map +1 -0
- package/dist/services/actionflow/components/approve_trigger.d.ts +5 -0
- package/dist/services/actionflow/components/approve_trigger.d.ts.map +1 -0
- package/dist/services/actionflow/components/approve_trigger.js +184 -0
- package/dist/services/actionflow/components/approve_trigger.js.map +1 -0
- package/dist/services/actionflow/components/approve_trigger_compiler.d.ts +4 -0
- package/dist/services/actionflow/components/approve_trigger_compiler.d.ts.map +1 -0
- package/dist/services/actionflow/components/approve_trigger_compiler.js +20 -0
- package/dist/services/actionflow/components/approve_trigger_compiler.js.map +1 -0
- package/dist/services/actionflow/components/condition.d.ts +3 -0
- package/dist/services/actionflow/components/condition.d.ts.map +1 -0
- package/dist/services/actionflow/components/condition.js +23 -0
- package/dist/services/actionflow/components/condition.js.map +1 -0
- package/dist/services/actionflow/components/date_trigger.d.ts +5 -0
- package/dist/services/actionflow/components/date_trigger.d.ts.map +1 -0
- package/dist/services/actionflow/components/date_trigger.js +129 -0
- package/dist/services/actionflow/components/date_trigger.js.map +1 -0
- package/dist/services/actionflow/components/document_actions.d.ts +28 -0
- package/dist/services/actionflow/components/document_actions.d.ts.map +1 -0
- package/dist/services/actionflow/components/document_actions.js +266 -0
- package/dist/services/actionflow/components/document_actions.js.map +1 -0
- package/dist/services/actionflow/components/eb_get_data_by_id.d.ts +5 -0
- package/dist/services/actionflow/components/eb_get_data_by_id.d.ts.map +1 -0
- package/dist/services/actionflow/components/eb_get_data_by_id.js +44 -0
- package/dist/services/actionflow/components/eb_get_data_by_id.js.map +1 -0
- package/dist/services/actionflow/components/enquiry_form.d.ts +5 -0
- package/dist/services/actionflow/components/enquiry_form.d.ts.map +1 -0
- package/dist/services/actionflow/components/enquiry_form.js +100 -0
- package/dist/services/actionflow/components/enquiry_form.js.map +1 -0
- package/dist/services/actionflow/components/event_form_data.d.ts +3 -0
- package/dist/services/actionflow/components/event_form_data.d.ts.map +1 -0
- package/dist/services/actionflow/components/event_form_data.js +29 -0
- package/dist/services/actionflow/components/event_form_data.js.map +1 -0
- package/dist/services/actionflow/components/hrm_actions.d.ts +7 -0
- package/dist/services/actionflow/components/hrm_actions.d.ts.map +1 -0
- package/dist/services/actionflow/components/hrm_actions.js +138 -0
- package/dist/services/actionflow/components/hrm_actions.js.map +1 -0
- package/dist/services/actionflow/components/index.d.ts +32 -0
- package/dist/services/actionflow/components/index.d.ts.map +1 -0
- package/dist/services/actionflow/components/index.js +132 -0
- package/dist/services/actionflow/components/index.js.map +1 -0
- package/dist/services/actionflow/components/logic_flow_set.d.ts +10 -0
- package/dist/services/actionflow/components/logic_flow_set.d.ts.map +1 -0
- package/dist/services/actionflow/components/logic_flow_set.js +79 -0
- package/dist/services/actionflow/components/logic_flow_set.js.map +1 -0
- package/dist/services/actionflow/components/meeting_create.d.ts +5 -0
- package/dist/services/actionflow/components/meeting_create.d.ts.map +1 -0
- package/dist/services/actionflow/components/meeting_create.js +37 -0
- package/dist/services/actionflow/components/meeting_create.js.map +1 -0
- package/dist/services/actionflow/components/multiple_execution.d.ts +5 -0
- package/dist/services/actionflow/components/multiple_execution.d.ts.map +1 -0
- package/dist/services/actionflow/components/multiple_execution.js +136 -0
- package/dist/services/actionflow/components/multiple_execution.js.map +1 -0
- package/dist/services/actionflow/components/output.d.ts +9 -0
- package/dist/services/actionflow/components/output.d.ts.map +1 -0
- package/dist/services/actionflow/components/output.js +81 -0
- package/dist/services/actionflow/components/output.js.map +1 -0
- package/dist/services/actionflow/components/schedule_create.d.ts +5 -0
- package/dist/services/actionflow/components/schedule_create.d.ts.map +1 -0
- package/dist/services/actionflow/components/schedule_create.js +42 -0
- package/dist/services/actionflow/components/schedule_create.js.map +1 -0
- package/dist/services/actionflow/components/send_message.d.ts +7 -0
- package/dist/services/actionflow/components/send_message.d.ts.map +1 -0
- package/dist/services/actionflow/components/send_message.js +200 -0
- package/dist/services/actionflow/components/send_message.js.map +1 -0
- package/dist/services/actionflow/components/simple_scheduler.d.ts +5 -0
- package/dist/services/actionflow/components/simple_scheduler.d.ts.map +1 -0
- package/dist/services/actionflow/components/simple_scheduler.js +22 -0
- package/dist/services/actionflow/components/simple_scheduler.js.map +1 -0
- package/dist/services/actionflow/components/time_batch_trigger.d.ts +5 -0
- package/dist/services/actionflow/components/time_batch_trigger.d.ts.map +1 -0
- package/dist/services/actionflow/components/time_batch_trigger.js +92 -0
- package/dist/services/actionflow/components/time_batch_trigger.js.map +1 -0
- package/dist/services/actionflow/components/workflow_actions.d.ts +26 -0
- package/dist/services/actionflow/components/workflow_actions.d.ts.map +1 -0
- package/dist/services/actionflow/components/workflow_actions.js +403 -0
- package/dist/services/actionflow/components/workflow_actions.js.map +1 -0
- package/dist/services/actionflow/context_data_builder.d.ts +9 -0
- package/dist/services/actionflow/context_data_builder.d.ts.map +1 -0
- package/dist/services/actionflow/context_data_builder.js +31 -0
- package/dist/services/actionflow/context_data_builder.js.map +1 -0
- package/dist/services/actionflow/context_preflight.d.ts +6 -0
- package/dist/services/actionflow/context_preflight.d.ts.map +1 -0
- package/dist/services/actionflow/context_preflight.js +122 -0
- package/dist/services/actionflow/context_preflight.js.map +1 -0
- package/dist/services/actionflow/context_provider.d.ts +18 -0
- package/dist/services/actionflow/context_provider.d.ts.map +1 -0
- package/dist/services/actionflow/context_provider.js +102 -0
- package/dist/services/actionflow/context_provider.js.map +1 -0
- package/dist/services/actionflow/context_source.d.ts +7 -0
- package/dist/services/actionflow/context_source.d.ts.map +1 -0
- package/dist/services/actionflow/context_source.js +10 -0
- package/dist/services/actionflow/context_source.js.map +1 -0
- package/dist/services/actionflow/design_client.d.ts +48 -0
- package/dist/services/actionflow/design_client.d.ts.map +1 -0
- package/dist/services/actionflow/design_client.js +170 -0
- package/dist/services/actionflow/design_client.js.map +1 -0
- package/dist/services/actionflow/document_source.d.ts +5 -0
- package/dist/services/actionflow/document_source.d.ts.map +1 -0
- package/dist/services/actionflow/document_source.js +5 -0
- package/dist/services/actionflow/document_source.js.map +1 -0
- package/dist/services/actionflow/enrich_approve_trigger.d.ts +12 -0
- package/dist/services/actionflow/enrich_approve_trigger.d.ts.map +1 -0
- package/dist/services/actionflow/enrich_approve_trigger.js +107 -0
- package/dist/services/actionflow/enrich_approve_trigger.js.map +1 -0
- package/dist/services/actionflow/filter_rules.d.ts +14 -0
- package/dist/services/actionflow/filter_rules.d.ts.map +1 -0
- package/dist/services/actionflow/filter_rules.js +259 -0
- package/dist/services/actionflow/filter_rules.js.map +1 -0
- package/dist/services/actionflow/form_source.d.ts +17 -0
- package/dist/services/actionflow/form_source.d.ts.map +1 -0
- package/dist/services/actionflow/form_source.js +42 -0
- package/dist/services/actionflow/form_source.js.map +1 -0
- package/dist/services/actionflow/formula_service.d.ts +51 -0
- package/dist/services/actionflow/formula_service.d.ts.map +1 -0
- package/dist/services/actionflow/formula_service.js +999 -0
- package/dist/services/actionflow/formula_service.js.map +1 -0
- package/dist/services/actionflow/generation_service.d.ts +28 -0
- package/dist/services/actionflow/generation_service.d.ts.map +1 -0
- package/dist/services/actionflow/generation_service.js +283 -0
- package/dist/services/actionflow/generation_service.js.map +1 -0
- package/dist/services/actionflow/hrm_source.d.ts +4 -0
- package/dist/services/actionflow/hrm_source.d.ts.map +1 -0
- package/dist/services/actionflow/hrm_source.js +8 -0
- package/dist/services/actionflow/hrm_source.js.map +1 -0
- package/dist/services/actionflow/id_generator.d.ts +13 -0
- package/dist/services/actionflow/id_generator.d.ts.map +1 -0
- package/dist/services/actionflow/id_generator.js +33 -0
- package/dist/services/actionflow/id_generator.js.map +1 -0
- package/dist/services/actionflow/person_source.d.ts +7 -0
- package/dist/services/actionflow/person_source.d.ts.map +1 -0
- package/dist/services/actionflow/person_source.js +34 -0
- package/dist/services/actionflow/person_source.js.map +1 -0
- package/dist/services/actionflow/preflight_service.d.ts +42 -0
- package/dist/services/actionflow/preflight_service.d.ts.map +1 -0
- package/dist/services/actionflow/preflight_service.js +1247 -0
- package/dist/services/actionflow/preflight_service.js.map +1 -0
- package/dist/services/actionflow/query_field_defaults.d.ts +3 -0
- package/dist/services/actionflow/query_field_defaults.d.ts.map +1 -0
- package/dist/services/actionflow/query_field_defaults.js +46 -0
- package/dist/services/actionflow/query_field_defaults.js.map +1 -0
- package/dist/services/actionflow/readback_verifier.d.ts +11 -0
- package/dist/services/actionflow/readback_verifier.d.ts.map +1 -0
- package/dist/services/actionflow/readback_verifier.js +252 -0
- package/dist/services/actionflow/readback_verifier.js.map +1 -0
- package/dist/services/actionflow/request.d.ts +13 -0
- package/dist/services/actionflow/request.d.ts.map +1 -0
- package/dist/services/actionflow/request.js +15 -0
- package/dist/services/actionflow/request.js.map +1 -0
- package/dist/services/actionflow/runtime_metadata.d.ts +27 -0
- package/dist/services/actionflow/runtime_metadata.d.ts.map +1 -0
- package/dist/services/actionflow/runtime_metadata.js +142 -0
- package/dist/services/actionflow/runtime_metadata.js.map +1 -0
- package/dist/services/actionflow/save_workflow_draft.d.ts +34 -0
- package/dist/services/actionflow/save_workflow_draft.d.ts.map +1 -0
- package/dist/services/actionflow/save_workflow_draft.js +449 -0
- package/dist/services/actionflow/save_workflow_draft.js.map +1 -0
- package/dist/services/actionflow/system_params.d.ts +5 -0
- package/dist/services/actionflow/system_params.d.ts.map +1 -0
- package/dist/services/actionflow/system_params.js +55 -0
- package/dist/services/actionflow/system_params.js.map +1 -0
- package/dist/services/actionflow/trigger_common.d.ts +6 -0
- package/dist/services/actionflow/trigger_common.d.ts.map +1 -0
- package/dist/services/actionflow/trigger_common.js +41 -0
- package/dist/services/actionflow/trigger_common.js.map +1 -0
- package/dist/services/actionflow/workflow_compiler.d.ts +27 -0
- package/dist/services/actionflow/workflow_compiler.d.ts.map +1 -0
- package/dist/services/actionflow/workflow_compiler.js +1804 -0
- package/dist/services/actionflow/workflow_compiler.js.map +1 -0
- package/dist/services/actionflow/workflow_source.d.ts +14 -0
- package/dist/services/actionflow/workflow_source.d.ts.map +1 -0
- package/dist/services/actionflow/workflow_source.js +86 -0
- package/dist/services/actionflow/workflow_source.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 本轮转换使用的表单、流程和上下文字段元数据缓存。
|
|
3
|
+
* 对齐 Python 版 core/runtime_metadata.py(黄金参照)。
|
|
4
|
+
*/
|
|
5
|
+
/** 按 id 或名称查找当前轮元数据中的对象。 */
|
|
6
|
+
export function findInMetadata(meta, collection, draftRef) {
|
|
7
|
+
const items = meta[collection] || [];
|
|
8
|
+
const rid = draftRef.id ?? '';
|
|
9
|
+
const rname = draftRef.name ?? '';
|
|
10
|
+
for (const item of items) {
|
|
11
|
+
if (rid && item.id === rid)
|
|
12
|
+
return item;
|
|
13
|
+
if (rname && item.name === rname)
|
|
14
|
+
return item;
|
|
15
|
+
}
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
// ── 全局缓存 ────────────────────────────────────────────────
|
|
19
|
+
// 中文 paramKey 会被设计器标记"已删除";generate 预检时把查询结果登记到这里,
|
|
20
|
+
// 转换器生成 paramKey/value 时替换为 id 格式。
|
|
21
|
+
const WORKFLOW_FIELD_IDS = {};
|
|
22
|
+
const TARGET_FORM_FIELDS = {};
|
|
23
|
+
const WORKFLOW_CONTEXT_FIELDS = {};
|
|
24
|
+
const WORKFLOW_CONTEXT_FIELDS_BY_KEY = {};
|
|
25
|
+
const TARGET_DETAIL_FIELDS = {};
|
|
26
|
+
const WORKFLOW_DETAIL_FIELDS = {};
|
|
27
|
+
const WORKFLOW_DETAIL_NAMES = {};
|
|
28
|
+
export function getWorkflowFieldIds() { return WORKFLOW_FIELD_IDS; }
|
|
29
|
+
export function getTargetFormFields() { return TARGET_FORM_FIELDS; }
|
|
30
|
+
export function getWorkflowContextFields() { return WORKFLOW_CONTEXT_FIELDS; }
|
|
31
|
+
export function getWorkflowContextFieldsByKey() { return WORKFLOW_CONTEXT_FIELDS_BY_KEY; }
|
|
32
|
+
export function getTargetDetailFields() { return TARGET_DETAIL_FIELDS; }
|
|
33
|
+
export function getWorkflowDetailFields() { return WORKFLOW_DETAIL_FIELDS; }
|
|
34
|
+
export function getWorkflowDetailNames() { return WORKFLOW_DETAIL_NAMES; }
|
|
35
|
+
/** 登记 workflow-fields 查询结果: workflowId → {name: id}。 */
|
|
36
|
+
export function registerWorkflowFieldIds(workflowId, fields) {
|
|
37
|
+
if (!workflowId)
|
|
38
|
+
return;
|
|
39
|
+
const mapping = (WORKFLOW_FIELD_IDS[String(workflowId)] ??= {});
|
|
40
|
+
for (const f of fields || []) {
|
|
41
|
+
if (!f || typeof f !== 'object')
|
|
42
|
+
continue;
|
|
43
|
+
const fname = f.name;
|
|
44
|
+
const fid = f.id;
|
|
45
|
+
if (fname && fid)
|
|
46
|
+
mapping[String(fname)] = String(fid);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/** 登记 getEbField 的实时字段元数据,供 ConditionSet 精确还原控件类型。 */
|
|
50
|
+
export function registerTargetFormFields(formId, fields) {
|
|
51
|
+
if (!formId)
|
|
52
|
+
return;
|
|
53
|
+
const index = (TARGET_FORM_FIELDS[String(formId)] ??= {});
|
|
54
|
+
for (const field of fields || []) {
|
|
55
|
+
if (!field || typeof field !== 'object' || !field.id)
|
|
56
|
+
continue;
|
|
57
|
+
const normalized = { ...field };
|
|
58
|
+
normalized.id = String(field.id);
|
|
59
|
+
normalized.name ??= field.showName ?? '';
|
|
60
|
+
normalized.showName ??= field.name ?? '';
|
|
61
|
+
index[normalized.id] = normalized;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/** 登记触发器上下文字段,保留真实 paramKey/componentKey/paramType。 */
|
|
65
|
+
export function registerWorkflowContextFields(workflowId, fields) {
|
|
66
|
+
if (!workflowId)
|
|
67
|
+
return;
|
|
68
|
+
const index = (WORKFLOW_CONTEXT_FIELDS[String(workflowId)] ??= {});
|
|
69
|
+
const keyIndex = (WORKFLOW_CONTEXT_FIELDS_BY_KEY[String(workflowId)] ??= {});
|
|
70
|
+
for (const field of fields || []) {
|
|
71
|
+
if (!field || typeof field !== 'object')
|
|
72
|
+
continue;
|
|
73
|
+
const name = String(field.showName || field.name || '');
|
|
74
|
+
const paramKey = String(field.paramKey || '');
|
|
75
|
+
if (!name)
|
|
76
|
+
continue;
|
|
77
|
+
const normalized = { ...field };
|
|
78
|
+
normalized.showName = name;
|
|
79
|
+
normalized.paramKey = paramKey;
|
|
80
|
+
// getComponentContext 会为同一 paramKey 返回标量字段与其 JSON 展开壳。
|
|
81
|
+
// 后者常排在最后;直接覆盖会让所有动态赋值被错误标成 json,设计器会把
|
|
82
|
+
// Select/日期/人员等正常映射回显为空。优先保留带 fieldConfig 的真实标量定义。
|
|
83
|
+
const oldByKey = keyIndex[paramKey];
|
|
84
|
+
const oldHasFieldConfig = Boolean(oldByKey && typeof oldByKey === 'object' && oldByKey.fieldConfig);
|
|
85
|
+
const nextHasFieldConfig = Boolean(normalized.fieldConfig);
|
|
86
|
+
const oldIsJson = String(oldByKey?.paramType || '').toLowerCase() === 'json';
|
|
87
|
+
const nextIsJson = String(normalized.paramType || '').toLowerCase() === 'json';
|
|
88
|
+
if (!oldByKey || (nextHasFieldConfig && !oldHasFieldConfig) || (oldIsJson && !nextIsJson)) {
|
|
89
|
+
if (paramKey)
|
|
90
|
+
keyIndex[paramKey] = normalized;
|
|
91
|
+
}
|
|
92
|
+
// 同名普通/数组字段并存时保留数组版本;ConditionSet 的"属于"依赖它。
|
|
93
|
+
// 注意:必须保留 undefined(JS 空对象 {} 是 truthy,`index[name] || {}` 会让 !old 恒为 false,
|
|
94
|
+
// 导致普通字段永远进不了索引)——对齐 Python `old = index.get(name, {})` + `not old`(空 dict 是 falsy)。
|
|
95
|
+
const old = index[name];
|
|
96
|
+
if (!old || (paramKey.endsWith('[]') && !String(old.paramKey || '').endsWith('[]'))) {
|
|
97
|
+
index[name] = normalized;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/** 把中文字段名映射为字段 id;查不到返回原名(兼容)。 */
|
|
102
|
+
export function workflowFieldId(workflowId, fieldName) {
|
|
103
|
+
const cache = WORKFLOW_FIELD_IDS[String(workflowId)] || {};
|
|
104
|
+
const hit = cache[String(fieldName)];
|
|
105
|
+
if (hit)
|
|
106
|
+
return String(hit);
|
|
107
|
+
// 依据值下级 paramKey 格式 '{明细表id}[].{子字段id}'(batchInsert/明细映射)
|
|
108
|
+
if (String(fieldName).includes('[]. ') || String(fieldName).includes('[].')) {
|
|
109
|
+
return String(fieldName);
|
|
110
|
+
}
|
|
111
|
+
if (String(fieldName).includes('.')) {
|
|
112
|
+
const parts = String(fieldName).split('.');
|
|
113
|
+
if (parts.length === 2 && /^\d+$/.test(parts[1]))
|
|
114
|
+
return parts[1];
|
|
115
|
+
}
|
|
116
|
+
return String(fieldName);
|
|
117
|
+
}
|
|
118
|
+
/** 注册目标表单明细表字段(第 2 期明细映射用)。 */
|
|
119
|
+
export function registerTargetDetailFields(formId, detailTableId, fields) {
|
|
120
|
+
if (!formId || !detailTableId)
|
|
121
|
+
return;
|
|
122
|
+
const index = ((TARGET_DETAIL_FIELDS[String(formId)] ??= {})[String(detailTableId)] ??= {});
|
|
123
|
+
for (const field of fields || []) {
|
|
124
|
+
if (!field || typeof field !== 'object' || !field.id)
|
|
125
|
+
continue;
|
|
126
|
+
index[String(field.id)] = { ...field };
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
/** 登记流程明细表子字段 + 真实名称。 */
|
|
130
|
+
export function registerWorkflowDetailFields(workflowId, subFormId, fieldName, paramKey) {
|
|
131
|
+
if (!workflowId || !subFormId)
|
|
132
|
+
return;
|
|
133
|
+
const idx = ((WORKFLOW_DETAIL_FIELDS[String(workflowId)] ??= {})[String(subFormId)] ??= {});
|
|
134
|
+
idx[String(fieldName)] = String(paramKey);
|
|
135
|
+
}
|
|
136
|
+
export function registerWorkflowDetailName(workflowId, subFormId, showName) {
|
|
137
|
+
if (!workflowId || !subFormId)
|
|
138
|
+
return;
|
|
139
|
+
const idx = (WORKFLOW_DETAIL_NAMES[String(workflowId)] ??= {});
|
|
140
|
+
idx[String(subFormId)] = String(showName);
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=runtime_metadata.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime_metadata.js","sourceRoot":"","sources":["../../../src/services/actionflow/runtime_metadata.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* save_workflow_draft — 保存编排:确保应用 → 条件持久化 → 正式保存/启用 → 正式回读。
|
|
3
|
+
*/
|
|
4
|
+
import type { ApiClient } from '../../core/client.js';
|
|
5
|
+
export interface SaveResult {
|
|
6
|
+
ok: boolean;
|
|
7
|
+
appId: string;
|
|
8
|
+
sceneId: string;
|
|
9
|
+
msg: string;
|
|
10
|
+
workflowUrl?: string;
|
|
11
|
+
appResponse?: any;
|
|
12
|
+
saveResponse?: any;
|
|
13
|
+
checkResponse?: any;
|
|
14
|
+
readBack?: any;
|
|
15
|
+
}
|
|
16
|
+
export type SaveMode = 'publish' | 'stash';
|
|
17
|
+
/** 保持 WfpRuleDesign 所需的完整分组 ExpressionBean。 */
|
|
18
|
+
export declare function buildConditionDisplayTree(tree: Record<string, any>): Record<string, any>;
|
|
19
|
+
/**
|
|
20
|
+
* 递归收集所有 ESB Rule 条件。
|
|
21
|
+
*
|
|
22
|
+
* 分支条件位于 conditionDetail/otherConditionBranch;循环体本身也可能是
|
|
23
|
+
* MultipleExecution.data.actions,其中包含分支节点。它们都必须先经
|
|
24
|
+
* saveCondition 持久化,不能与 e-builder 的 filterInput 混为一谈。
|
|
25
|
+
*/
|
|
26
|
+
export declare function collectConditionDetails(node: any, out: Record<string, any>[]): void;
|
|
27
|
+
/**
|
|
28
|
+
* ConditionRule 打开编辑器时读取节点/分支上的顶层 conditionId;它必须与
|
|
29
|
+
* conditionDetail.conditionId 一致。保存接口会生成新的真实 ID,因此保存后
|
|
30
|
+
* 需要同步回填所有持有该临时 ID 的设计节点,不能只更新 conditionDetail。
|
|
31
|
+
*/
|
|
32
|
+
export declare function replacePersistedConditionId(node: any, temporaryId: string, persistedId: string): void;
|
|
33
|
+
export declare function saveWorkflowDraft(design: Record<string, any>, client: ApiClient, appName?: string, appDescription?: string, shouldVerifyReadback?: boolean, appModule?: string, appSources?: any[], mode?: SaveMode): Promise<SaveResult>;
|
|
34
|
+
//# sourceMappingURL=save_workflow_draft.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"save_workflow_draft.d.ts","sourceRoot":"","sources":["../../../src/services/actionflow/save_workflow_draft.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAItD,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,OAAO,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,GAAG,CAAC;IAClB,YAAY,CAAC,EAAE,GAAG,CAAC;IACnB,aAAa,CAAC,EAAE,GAAG,CAAC;IACpB,QAAQ,CAAC,EAAE,GAAG,CAAC;CAChB;AAED,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,OAAO,CAAC;AAM3C,+CAA+C;AAC/C,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAExF;AA4BD;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,IAAI,CAmBnF;AAcD;;;;GAIG;AACH,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAWrG;AA6HD,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3B,MAAM,EAAE,SAAS,EACjB,OAAO,SAAa,EACpB,cAAc,SAAK,EACnB,oBAAoB,UAAO,EAC3B,SAAS,SAAQ,EACjB,UAAU,GAAE,GAAG,EAAO,EACtB,IAAI,GAAE,QAAoB,GACzB,OAAO,CAAC,UAAU,CAAC,CAgNrB"}
|
|
@@ -0,0 +1,449 @@
|
|
|
1
|
+
import * as dc from './design_client.js';
|
|
2
|
+
import { verifyReadback } from './readback_verifier.js';
|
|
3
|
+
function base(client) {
|
|
4
|
+
return (client.auth?.getBaseUrl() || '').replace(/\/$/, '');
|
|
5
|
+
}
|
|
6
|
+
/** 保持 WfpRuleDesign 所需的完整分组 ExpressionBean。 */
|
|
7
|
+
export function buildConditionDisplayTree(tree) {
|
|
8
|
+
return JSON.parse(JSON.stringify(tree));
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* ConditionRule 初次保存时由服务端分配表达式/映射 ID。
|
|
12
|
+
* 编译器生成的这些 ID 只能用于本地树组织;若随请求提交,saveCondition 会返回
|
|
13
|
+
* haveData=false 和空骨架。FormulaBean 自身的 id/businessId 属于用户选择上下文的
|
|
14
|
+
* 实例标识,不能删除。
|
|
15
|
+
*/
|
|
16
|
+
function stripTemporaryConditionIds(tree) {
|
|
17
|
+
delete tree.conditionId;
|
|
18
|
+
delete tree.expressionId;
|
|
19
|
+
delete tree.mapId;
|
|
20
|
+
const visit = (value) => {
|
|
21
|
+
if (!value || typeof value !== 'object')
|
|
22
|
+
return;
|
|
23
|
+
if (Array.isArray(value)) {
|
|
24
|
+
value.forEach(visit);
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
delete value.expressionId;
|
|
28
|
+
delete value.expressionBaseId;
|
|
29
|
+
delete value.dataValueId;
|
|
30
|
+
delete value.elementValue1Id;
|
|
31
|
+
delete value.elementValue2Id;
|
|
32
|
+
for (const child of value.childrens || [])
|
|
33
|
+
visit(child);
|
|
34
|
+
};
|
|
35
|
+
for (const child of tree.childrens || [])
|
|
36
|
+
visit(child);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* 递归收集所有 ESB Rule 条件。
|
|
40
|
+
*
|
|
41
|
+
* 分支条件位于 conditionDetail/otherConditionBranch;循环体本身也可能是
|
|
42
|
+
* MultipleExecution.data.actions,其中包含分支节点。它们都必须先经
|
|
43
|
+
* saveCondition 持久化,不能与 e-builder 的 filterInput 混为一谈。
|
|
44
|
+
*/
|
|
45
|
+
export function collectConditionDetails(node, out) {
|
|
46
|
+
if (!node || typeof node !== 'object')
|
|
47
|
+
return;
|
|
48
|
+
if (Array.isArray(node)) {
|
|
49
|
+
for (const n of node)
|
|
50
|
+
collectConditionDetails(n, out);
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
const d = node.data || {};
|
|
54
|
+
if (d.conditionDetail && typeof d.conditionDetail === 'object')
|
|
55
|
+
out.push(d.conditionDetail);
|
|
56
|
+
for (const key of ['trueBranchActions', 'falseBranchActions']) {
|
|
57
|
+
for (const a of d[key] || [])
|
|
58
|
+
collectConditionDetails(a, out);
|
|
59
|
+
}
|
|
60
|
+
// MultipleExecution 的循环体存放在 data.actions,而非设计根 actions。
|
|
61
|
+
for (const a of d.actions || [])
|
|
62
|
+
collectConditionDetails(a, out);
|
|
63
|
+
for (const ob of d.otherConditionBranch || []) {
|
|
64
|
+
if (ob && typeof ob === 'object') {
|
|
65
|
+
if (ob.conditionDetail && typeof ob.conditionDetail === 'object')
|
|
66
|
+
out.push(ob.conditionDetail);
|
|
67
|
+
for (const a of ob.branchActions || [])
|
|
68
|
+
collectConditionDetails(a, out);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
function hasConditionDetails(design) {
|
|
73
|
+
const details = [];
|
|
74
|
+
collectConditionDetails(design.event, details);
|
|
75
|
+
collectConditionDetails(design.actions || [], details);
|
|
76
|
+
return details.length > 0;
|
|
77
|
+
}
|
|
78
|
+
function responseSceneId(response, fallback) {
|
|
79
|
+
const data = response?.data || {};
|
|
80
|
+
return String(data.sceneId || data.activeVersion || fallback || '');
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* ConditionRule 打开编辑器时读取节点/分支上的顶层 conditionId;它必须与
|
|
84
|
+
* conditionDetail.conditionId 一致。保存接口会生成新的真实 ID,因此保存后
|
|
85
|
+
* 需要同步回填所有持有该临时 ID 的设计节点,不能只更新 conditionDetail。
|
|
86
|
+
*/
|
|
87
|
+
export function replacePersistedConditionId(node, temporaryId, persistedId) {
|
|
88
|
+
if (!node || typeof node !== 'object')
|
|
89
|
+
return;
|
|
90
|
+
if (Array.isArray(node)) {
|
|
91
|
+
for (const item of node)
|
|
92
|
+
replacePersistedConditionId(item, temporaryId, persistedId);
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
if (String(node.conditionId ?? '') === temporaryId)
|
|
96
|
+
node.conditionId = persistedId;
|
|
97
|
+
for (const [key, value] of Object.entries(node)) {
|
|
98
|
+
// conditionDataJson 是 JSON 字符串,禁止替换内部的历史快照。
|
|
99
|
+
if (key !== 'conditionDataJson')
|
|
100
|
+
replacePersistedConditionId(value, temporaryId, persistedId);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Condition 两步法:对设计里每个 Condition 节点先 GET getConditionSet 拿真实 mapBaseId,
|
|
105
|
+
* 再 POST ESB 专用 saveCondition(source=8)拿 conditionKey 回填节点 mapBaseId,
|
|
106
|
+
* 并把 saveCondition 的完整响应({code,data,fail,msg,status})存回 conditionDataJson。
|
|
107
|
+
* 真实数据对照:采购动作流配置详情数据.json 中 conditionDataJson 即后端完整响应;
|
|
108
|
+
* 不经过这两步时 mapBaseId 是编译器本地伪 id,saveDesign 保存主流程会被平台清空条件。
|
|
109
|
+
*/
|
|
110
|
+
async function persistConditionDetails(design, client) {
|
|
111
|
+
const details = [];
|
|
112
|
+
collectConditionDetails(design.event, details);
|
|
113
|
+
collectConditionDetails(design.actions || [], details);
|
|
114
|
+
const errors = [];
|
|
115
|
+
const baseUrl = base(client);
|
|
116
|
+
for (const detail of details) {
|
|
117
|
+
if (!detail.conditionDataJson) {
|
|
118
|
+
errors.push('Condition 节点缺少 conditionDataJson,无法保存条件');
|
|
119
|
+
continue;
|
|
120
|
+
}
|
|
121
|
+
let tree;
|
|
122
|
+
try {
|
|
123
|
+
tree = JSON.parse(detail.conditionDataJson);
|
|
124
|
+
}
|
|
125
|
+
catch {
|
|
126
|
+
errors.push('Condition 节点 conditionDataJson 不是合法 JSON,无法保存条件');
|
|
127
|
+
continue;
|
|
128
|
+
}
|
|
129
|
+
// 1) GET getConditionSet → 真实 mapBaseId(新建规则映射 ID,前端 getMapBaseId 同源)
|
|
130
|
+
let mapBaseId = '';
|
|
131
|
+
try {
|
|
132
|
+
const mbResp = await client.get(`${baseUrl}/api/bs/esb/setting/condition/getConditionSet`);
|
|
133
|
+
const mbData = mbResp?.data;
|
|
134
|
+
if (typeof mbData === 'string')
|
|
135
|
+
mapBaseId = mbData;
|
|
136
|
+
else if (mbData && typeof mbData === 'object')
|
|
137
|
+
mapBaseId = String(mbData.mapBaseId || mbData.conditionKey || mbData.id || '');
|
|
138
|
+
}
|
|
139
|
+
catch (e) {
|
|
140
|
+
errors.push(`getConditionSet 调用异常: ${e?.message || e}`);
|
|
141
|
+
continue;
|
|
142
|
+
}
|
|
143
|
+
if (!mapBaseId) {
|
|
144
|
+
errors.push('getConditionSet 未返回 mapBaseId,无法保存条件');
|
|
145
|
+
continue;
|
|
146
|
+
}
|
|
147
|
+
tree.mapBaseId = mapBaseId;
|
|
148
|
+
tree.source = 8;
|
|
149
|
+
tree.relation = 1;
|
|
150
|
+
// 循环条件根来源固定为 -1;真实触发来源由 customFieldType.source/comId
|
|
151
|
+
// 与 sourceIds 表达。改成事件节点会建出不同于前端的映射记录。
|
|
152
|
+
tree.sourceId = '-1';
|
|
153
|
+
tree.isEdit = false;
|
|
154
|
+
stripTemporaryConditionIds(tree);
|
|
155
|
+
// WfpRuleDesign 的 getExpXmlString 会把完整 ExpressionBean(含嵌套 AND/OR 组)
|
|
156
|
+
// 直接交给 saveCondition;不能拍平 childrens,否则会丢失分组关系。
|
|
157
|
+
if (!Array.isArray(tree.childrens) || tree.childrens.length === 0) {
|
|
158
|
+
errors.push('Condition 节点 childrens 无叶子,无法保存条件');
|
|
159
|
+
continue;
|
|
160
|
+
}
|
|
161
|
+
// 2) POST saveCondition(ESB source=8)
|
|
162
|
+
let resp;
|
|
163
|
+
try {
|
|
164
|
+
resp = await dc.saveCondition(client, tree);
|
|
165
|
+
}
|
|
166
|
+
catch (e) {
|
|
167
|
+
errors.push(`saveCondition 调用异常: ${e?.message || e}`);
|
|
168
|
+
continue;
|
|
169
|
+
}
|
|
170
|
+
const data = resp?.data || {};
|
|
171
|
+
const conditionKey = String(data.conditionKey || '');
|
|
172
|
+
const conditionId = String(data.conditionId || '');
|
|
173
|
+
const mapId = String(data.mapId || '');
|
|
174
|
+
if (resp?.code !== 200 || resp?.status === false || data?.result !== true || data?.haveData !== true || !conditionKey || !conditionId || !mapId) {
|
|
175
|
+
errors.push(`saveCondition 验收失败: code=${resp?.code}, status=${resp?.status}, result=${data?.result}, haveData=${data?.haveData}, conditionKey=${conditionKey || '(empty)'}`);
|
|
176
|
+
continue;
|
|
177
|
+
}
|
|
178
|
+
const sourceIds = Array.isArray(data.sourceIds) ? data.sourceIds.map(String) : [];
|
|
179
|
+
const expectedSourceIds = Array.isArray(detail.sourceIds) ? detail.sourceIds.map(String).filter(Boolean) : [];
|
|
180
|
+
if (sourceIds.length && expectedSourceIds.some((sourceId) => !sourceIds.includes(sourceId))) {
|
|
181
|
+
errors.push(`saveCondition 回显未包含来源节点 ${expectedSourceIds.join(',')}`);
|
|
182
|
+
continue;
|
|
183
|
+
}
|
|
184
|
+
// 3) 回填节点:mapBaseId=conditionKey;conditionDataJson.data 使用完整回显树,
|
|
185
|
+
// 而不是 saveCondition 请求用的平铺数组。前端 setExpresstionBean 会递归读取每个
|
|
186
|
+
// group.childrens;保存响应中的 childrens 可能只有 expressionId 骨架,不能直接使用。
|
|
187
|
+
// - isInitTempalte=true 让 ESB 条件弹窗直接渲染,绕开 getCustomData 缺字段的"暂无数据"。
|
|
188
|
+
const temporaryConditionId = String(detail.conditionId || '');
|
|
189
|
+
detail.mapBaseId = conditionKey;
|
|
190
|
+
if (data.conditionId) {
|
|
191
|
+
detail.conditionId = String(data.conditionId);
|
|
192
|
+
if (temporaryConditionId && temporaryConditionId !== detail.conditionId) {
|
|
193
|
+
replacePersistedConditionId(design, temporaryConditionId, detail.conditionId);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
if (data.conditionCn)
|
|
197
|
+
detail.conditionCn = String(data.conditionCn);
|
|
198
|
+
if (data.mapId)
|
|
199
|
+
detail.mapId = String(data.mapId);
|
|
200
|
+
// haveData=true 时 getExpressionBean 返回服务端实际持久化的完整叶子树;
|
|
201
|
+
// 它含真实 expression/map ID,必须作为下一次编辑的唯一来源。
|
|
202
|
+
let storedTree;
|
|
203
|
+
try {
|
|
204
|
+
const persisted = await dc.getExpressionBean(client, detail.conditionId);
|
|
205
|
+
const persistedData = persisted?.data;
|
|
206
|
+
if (persisted?.code !== 200 || persisted?.status === false || !persistedData || typeof persistedData !== 'object' || !Array.isArray(persistedData.childrens)) {
|
|
207
|
+
errors.push(`getExpressionBean 验收失败: code=${persisted?.code}, status=${persisted?.status}`);
|
|
208
|
+
continue;
|
|
209
|
+
}
|
|
210
|
+
storedTree = buildConditionDisplayTree(persistedData);
|
|
211
|
+
}
|
|
212
|
+
catch (e) {
|
|
213
|
+
errors.push(`getExpressionBean 调用异常: ${e?.message || e}`);
|
|
214
|
+
continue;
|
|
215
|
+
}
|
|
216
|
+
storedTree.sourceId = '-1';
|
|
217
|
+
storedTree.mapBaseId = conditionKey;
|
|
218
|
+
if (data.conditionId)
|
|
219
|
+
storedTree.conditionId = String(data.conditionId);
|
|
220
|
+
if (data.mapId)
|
|
221
|
+
storedTree.mapId = String(data.mapId);
|
|
222
|
+
storedTree.source = 8;
|
|
223
|
+
storedTree.relation = 1;
|
|
224
|
+
detail.conditionDataJson = JSON.stringify({
|
|
225
|
+
code: 200,
|
|
226
|
+
msg: resp?.msg || '接口返回成功',
|
|
227
|
+
status: resp?.status !== false,
|
|
228
|
+
fail: false,
|
|
229
|
+
data: storedTree,
|
|
230
|
+
});
|
|
231
|
+
delete detail.persistSourceId;
|
|
232
|
+
}
|
|
233
|
+
return errors;
|
|
234
|
+
}
|
|
235
|
+
export async function saveWorkflowDraft(design, client, appName = 'AI生成的动作流', appDescription = '', shouldVerifyReadback = true, appModule = 'esb', appSources = [], mode = 'publish') {
|
|
236
|
+
let appId = String(design.appId || '');
|
|
237
|
+
let sceneId = String(design.sceneId || '');
|
|
238
|
+
let secretKey = '';
|
|
239
|
+
let appResponse = null;
|
|
240
|
+
let newAppCreated = false;
|
|
241
|
+
let appVerified = Boolean(appId && sceneId);
|
|
242
|
+
// 步骤 1: 确保应用存在,取 sceneId/secretKey
|
|
243
|
+
if (appId) {
|
|
244
|
+
try {
|
|
245
|
+
const verResp = await dc.getVersionList(client, appId);
|
|
246
|
+
if (verResp?.code === 200) {
|
|
247
|
+
const verData = verResp.data || {};
|
|
248
|
+
const versions = verData.actionFlowVersions || [];
|
|
249
|
+
if (verData.activeVersion)
|
|
250
|
+
sceneId = String(verData.activeVersion);
|
|
251
|
+
if (versions.length)
|
|
252
|
+
secretKey = String(versions[0].secretKey || '');
|
|
253
|
+
appVerified = true;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
catch {
|
|
257
|
+
// 查询失败不阻塞
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
// 修改已有动作流:读取同模式的旧设计,避免残留旧节点。
|
|
261
|
+
if (appVerified && sceneId) {
|
|
262
|
+
try {
|
|
263
|
+
const oldResp = mode === 'stash'
|
|
264
|
+
? await dc.getStashSnapshot(client, appId, sceneId)
|
|
265
|
+
: await dc.getDesign(client, sceneId);
|
|
266
|
+
const oldData = oldResp?.data || {};
|
|
267
|
+
const oldActions = oldData.actions || [];
|
|
268
|
+
const oldIds = oldActions.filter((a) => a?.id).map((a) => String(a.id));
|
|
269
|
+
if (oldIds.length) {
|
|
270
|
+
const existing = Array.isArray(design.deleteActions) ? design.deleteActions : [];
|
|
271
|
+
design.deleteActions = [...new Set([...existing, ...oldIds])];
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
catch {
|
|
275
|
+
// 忽略
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
if (!appVerified) {
|
|
279
|
+
try {
|
|
280
|
+
const orgId = await dc.resolveApplicationOrgId(client);
|
|
281
|
+
appResponse = await dc.createApplication(client, appName, appDescription, 0, orgId, appModule, appSources);
|
|
282
|
+
const code = appResponse?.code;
|
|
283
|
+
const data = appResponse?.data || {};
|
|
284
|
+
if (code === 200 && typeof data === 'object') {
|
|
285
|
+
appId = String(data.id || '');
|
|
286
|
+
if (appId) {
|
|
287
|
+
newAppCreated = true;
|
|
288
|
+
sceneId = String(data.activeVersion || sceneId);
|
|
289
|
+
try {
|
|
290
|
+
const verResp = await dc.getVersionList(client, appId);
|
|
291
|
+
if (verResp?.code === 200) {
|
|
292
|
+
const verData = verResp.data || {};
|
|
293
|
+
const versions = verData.actionFlowVersions || [];
|
|
294
|
+
if (verData.activeVersion)
|
|
295
|
+
sceneId = String(verData.activeVersion);
|
|
296
|
+
if (versions.length)
|
|
297
|
+
secretKey = String(versions[0].secretKey || '');
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
catch {
|
|
301
|
+
// secretKey 缺失不阻塞保存,由后端做兼容。
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
else {
|
|
305
|
+
return { ok: false, appId: '', sceneId: '', msg: `创建应用失败:响应中无 id, data=${JSON.stringify(data)}`, appResponse, saveResponse: null };
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
else {
|
|
309
|
+
return { ok: false, appId: '', sceneId: '', msg: `创建应用失败:code=${code}, msg=${appResponse?.msg || ''}`, appResponse, saveResponse: null };
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
catch (e) {
|
|
313
|
+
return { ok: false, appId: '', sceneId: '', msg: `创建应用异常:${e?.message || e}`, appResponse: null, saveResponse: null };
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
if (!appId) {
|
|
317
|
+
return { ok: false, appId: '', sceneId: '', msg: '无法获取 appId', appResponse, saveResponse: null };
|
|
318
|
+
}
|
|
319
|
+
// 补全 design 平台字段
|
|
320
|
+
design.appId = appId;
|
|
321
|
+
design.sceneId = sceneId;
|
|
322
|
+
design.secretKey = secretKey;
|
|
323
|
+
// 条件规则引用设计器节点。正式发布模式下,先用 saveDesign(不启用)注册节点,
|
|
324
|
+
// 再保存条件,最后用 saveDesign(saveAndStart=true) 发布。整个默认链路不写暂存。
|
|
325
|
+
let registrationResponse = null;
|
|
326
|
+
if (hasConditionDetails(design)) {
|
|
327
|
+
try {
|
|
328
|
+
registrationResponse = mode === 'stash'
|
|
329
|
+
? await dc.saveStashSnapshot(client, design)
|
|
330
|
+
: await dc.saveDesign(client, design, false);
|
|
331
|
+
if (registrationResponse?.code !== 200 || registrationResponse?.status === false) {
|
|
332
|
+
const operation = mode === 'stash' ? '暂存注册' : '正式保存注册';
|
|
333
|
+
return {
|
|
334
|
+
ok: false, appId, sceneId,
|
|
335
|
+
msg: `${operation}失败:code=${registrationResponse?.code}, msg=${registrationResponse?.msg || ''}`,
|
|
336
|
+
appResponse, saveResponse: registrationResponse, readBack: null,
|
|
337
|
+
};
|
|
338
|
+
}
|
|
339
|
+
sceneId = responseSceneId(registrationResponse, sceneId);
|
|
340
|
+
design.sceneId = sceneId;
|
|
341
|
+
}
|
|
342
|
+
catch (e) {
|
|
343
|
+
const operation = mode === 'stash' ? '暂存注册' : '正式保存注册';
|
|
344
|
+
return { ok: false, appId, sceneId, msg: `${operation}异常:${e?.message || e}`, appResponse, saveResponse: null, readBack: null };
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
const conditionErrors = await persistConditionDetails(design, client);
|
|
348
|
+
if (conditionErrors.length) {
|
|
349
|
+
return {
|
|
350
|
+
ok: false, appId, sceneId,
|
|
351
|
+
msg: `Condition 条件保存失败: ${conditionErrors.join('; ')}`,
|
|
352
|
+
appResponse, saveResponse: null, readBack: null,
|
|
353
|
+
};
|
|
354
|
+
}
|
|
355
|
+
// 步骤 2: check 预检
|
|
356
|
+
let checkResponse = null;
|
|
357
|
+
try {
|
|
358
|
+
checkResponse = await dc.checkDesign(client, design);
|
|
359
|
+
if (checkResponse?.code !== 200) {
|
|
360
|
+
return {
|
|
361
|
+
ok: false, appId, sceneId,
|
|
362
|
+
msg: `check预检失败:code=${checkResponse?.code}, msg=${checkResponse?.msg || ''}`,
|
|
363
|
+
appResponse, saveResponse: checkResponse, readBack: null,
|
|
364
|
+
};
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
catch (e) {
|
|
368
|
+
checkResponse = { code: -1, msg: String(e?.message || e) };
|
|
369
|
+
}
|
|
370
|
+
// 步骤 3: 默认正式保存并启用;仅显式 mode=stash 时调用暂存接口。
|
|
371
|
+
let saveResponse;
|
|
372
|
+
try {
|
|
373
|
+
saveResponse = mode === 'stash'
|
|
374
|
+
? await dc.saveStashSnapshot(client, design)
|
|
375
|
+
: await dc.saveDesign(client, design, true);
|
|
376
|
+
if (saveResponse?.code !== 200) {
|
|
377
|
+
const retry = mode === 'stash'
|
|
378
|
+
? await dc.saveStashSnapshot(client, design)
|
|
379
|
+
: await dc.saveDesign(client, design, true);
|
|
380
|
+
if (retry?.code === 200)
|
|
381
|
+
saveResponse = retry;
|
|
382
|
+
}
|
|
383
|
+
const code = saveResponse?.code;
|
|
384
|
+
if (code !== 200) {
|
|
385
|
+
return {
|
|
386
|
+
ok: false, appId, sceneId,
|
|
387
|
+
msg: `${mode === 'stash' ? '暂存' : '保存并启用'}失败:code=${code}, msg=${saveResponse?.msg || ''}`,
|
|
388
|
+
appResponse, saveResponse, readBack: null,
|
|
389
|
+
};
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
catch (e) {
|
|
393
|
+
return { ok: false, appId, sceneId, msg: `${mode === 'stash' ? '暂存' : '保存并启用'}异常:${e?.message || e}`, appResponse, saveResponse: null, checkResponse, readBack: null };
|
|
394
|
+
}
|
|
395
|
+
sceneId = responseSceneId(saveResponse, sceneId);
|
|
396
|
+
design.sceneId = sceneId;
|
|
397
|
+
// 步骤 4: 回读自检
|
|
398
|
+
let readBack = null;
|
|
399
|
+
if (shouldVerifyReadback && appId && sceneId) {
|
|
400
|
+
let lastError = '';
|
|
401
|
+
for (let attempt = 1; attempt <= 2; attempt++) {
|
|
402
|
+
try {
|
|
403
|
+
const rbResp = mode === 'stash'
|
|
404
|
+
? await dc.getStashSnapshot(client, appId, sceneId)
|
|
405
|
+
: await dc.getDesign(client, sceneId);
|
|
406
|
+
if (rbResp?.code !== 200) {
|
|
407
|
+
lastError = `${mode === 'stash' ? 'getStashSnapshot' : 'getDesignBySceneId'} returned code=${rbResp?.code}`;
|
|
408
|
+
continue;
|
|
409
|
+
}
|
|
410
|
+
const rbData = rbResp.data || {};
|
|
411
|
+
const readDesign = typeof rbData === 'object' ? rbData : {};
|
|
412
|
+
const verified = verifyReadback(design, readDesign);
|
|
413
|
+
const debug = verified.ok ? undefined : {
|
|
414
|
+
sentActions: Array.isArray(design.actions) ? design.actions.map((action) => ({ type: action?.type, data: action?.data })) : [],
|
|
415
|
+
readActions: Array.isArray(readDesign.actions) ? readDesign.actions.map((action) => ({ type: action?.type, data: action?.data })) : [],
|
|
416
|
+
};
|
|
417
|
+
readBack = mode === 'stash'
|
|
418
|
+
? { ...verified, stashed: true, attempts: attempt, note: '暂存快照已通过 getStashSnapshot 回读校验,尚未发布正式版本', debug }
|
|
419
|
+
: { ...verified, published: true, enabled: true, attempts: attempt, note: '正式版本已通过 getDesignBySceneId 回读校验并启用', debug };
|
|
420
|
+
break;
|
|
421
|
+
}
|
|
422
|
+
catch (e) {
|
|
423
|
+
lastError = String(e?.message || e);
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
if (readBack === null) {
|
|
427
|
+
readBack = mode === 'stash'
|
|
428
|
+
? { ok: false, stashed: true, attempts: 2, error: lastError || 'getStashSnapshot 未返回可用结果' }
|
|
429
|
+
: { ok: false, published: true, attempts: 2, error: lastError || 'getDesignBySceneId 未返回可用结果' };
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
else {
|
|
433
|
+
readBack = mode === 'stash'
|
|
434
|
+
? { ok: true, stashed: true, note: '暂存已保存;调用方显式跳过 getStashSnapshot 回读校验' }
|
|
435
|
+
: { ok: true, published: true, enabled: true, note: '正式版本已保存并启用;调用方显式跳过回读校验' };
|
|
436
|
+
}
|
|
437
|
+
return {
|
|
438
|
+
ok: true,
|
|
439
|
+
appId,
|
|
440
|
+
sceneId,
|
|
441
|
+
workflowUrl: `${base(client)}/sp/esb/efdesigner?application=${appId}`,
|
|
442
|
+
msg: `${mode === 'stash' ? '暂存成功' : '保存并启用成功'}${newAppCreated ? `(新建应用: ${appName})` : ''}`,
|
|
443
|
+
appResponse,
|
|
444
|
+
saveResponse,
|
|
445
|
+
checkResponse,
|
|
446
|
+
readBack,
|
|
447
|
+
};
|
|
448
|
+
}
|
|
449
|
+
//# sourceMappingURL=save_workflow_draft.js.map
|