weaver-e10-builder 1.0.12-beta → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (217) hide show
  1. package/dist/commands/actionflow.d.ts.map +1 -1
  2. package/dist/commands/actionflow.js +17 -3
  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 +3 -0
  6. package/dist/commands/auth.js.map +1 -1
  7. package/dist/commands/form-association-manage.d.ts +3 -0
  8. package/dist/commands/form-association-manage.d.ts.map +1 -0
  9. package/dist/commands/form-association-manage.js +76 -0
  10. package/dist/commands/form-association-manage.js.map +1 -0
  11. package/dist/commands/form-association.d.ts.map +1 -1
  12. package/dist/commands/form-association.js +29 -25
  13. package/dist/commands/form-association.js.map +1 -1
  14. package/dist/commands/form-button.d.ts.map +1 -1
  15. package/dist/commands/form-button.js +71 -159
  16. package/dist/commands/form-button.js.map +1 -1
  17. package/dist/commands/form-field-linkage.d.ts +3 -0
  18. package/dist/commands/form-field-linkage.d.ts.map +1 -0
  19. package/dist/commands/form-field-linkage.js +300 -0
  20. package/dist/commands/form-field-linkage.js.map +1 -0
  21. package/dist/commands/form-list-columns.d.ts +3 -0
  22. package/dist/commands/form-list-columns.d.ts.map +1 -0
  23. package/dist/commands/form-list-columns.js +50 -0
  24. package/dist/commands/form-list-columns.js.map +1 -0
  25. package/dist/commands/form-list-stats.d.ts +0 -8
  26. package/dist/commands/form-list-stats.d.ts.map +1 -1
  27. package/dist/commands/form-list-stats.js +41 -133
  28. package/dist/commands/form-list-stats.js.map +1 -1
  29. package/dist/commands/form-list.d.ts.map +1 -1
  30. package/dist/commands/form-list.js +2 -126
  31. package/dist/commands/form-list.js.map +1 -1
  32. package/dist/commands/form.d.ts.map +1 -1
  33. package/dist/commands/form.js +116 -2
  34. package/dist/commands/form.js.map +1 -1
  35. package/dist/commands/interface.d.ts +3 -0
  36. package/dist/commands/interface.d.ts.map +1 -0
  37. package/dist/commands/interface.js +51 -0
  38. package/dist/commands/interface.js.map +1 -0
  39. package/dist/commands/menu-permission.d.ts.map +1 -1
  40. package/dist/commands/menu-permission.js +133 -82
  41. package/dist/commands/menu-permission.js.map +1 -1
  42. package/dist/commands/skill.js +2 -2
  43. package/dist/commands/skill.js.map +1 -1
  44. package/dist/commands/update.d.ts +13 -0
  45. package/dist/commands/update.d.ts.map +1 -0
  46. package/dist/commands/update.js +101 -0
  47. package/dist/commands/update.js.map +1 -0
  48. package/dist/commands/workflow-node-empty-handle.d.ts +13 -0
  49. package/dist/commands/workflow-node-empty-handle.d.ts.map +1 -0
  50. package/dist/commands/workflow-node-empty-handle.js +137 -0
  51. package/dist/commands/workflow-node-empty-handle.js.map +1 -0
  52. package/dist/commands/workflow.d.ts.map +1 -1
  53. package/dist/commands/workflow.js +90 -18
  54. package/dist/commands/workflow.js.map +1 -1
  55. package/dist/index.js +8 -0
  56. package/dist/index.js.map +1 -1
  57. package/dist/postinstall.d.ts +2 -0
  58. package/dist/postinstall.d.ts.map +1 -0
  59. package/dist/postinstall.js +17 -0
  60. package/dist/postinstall.js.map +1 -0
  61. package/dist/services/actionflow/command_output.d.ts +4 -0
  62. package/dist/services/actionflow/command_output.d.ts.map +1 -1
  63. package/dist/services/actionflow/command_output.js +44 -0
  64. package/dist/services/actionflow/command_output.js.map +1 -1
  65. package/dist/services/actionflow/component_registry.d.ts.map +1 -1
  66. package/dist/services/actionflow/component_registry.js +5 -1
  67. package/dist/services/actionflow/component_registry.js.map +1 -1
  68. package/dist/services/actionflow/components/action_eb_add.js +1 -1
  69. package/dist/services/actionflow/components/action_eb_add.js.map +1 -1
  70. package/dist/services/actionflow/components/approve_trigger.d.ts +5 -0
  71. package/dist/services/actionflow/components/approve_trigger.d.ts.map +1 -1
  72. package/dist/services/actionflow/components/approve_trigger.js +22 -1
  73. package/dist/services/actionflow/components/approve_trigger.js.map +1 -1
  74. package/dist/services/actionflow/components/approve_trigger_compiler.js +2 -2
  75. package/dist/services/actionflow/components/approve_trigger_compiler.js.map +1 -1
  76. package/dist/services/actionflow/components/custom_trigger.d.ts +9 -0
  77. package/dist/services/actionflow/components/custom_trigger.d.ts.map +1 -0
  78. package/dist/services/actionflow/components/custom_trigger.js +47 -0
  79. package/dist/services/actionflow/components/custom_trigger.js.map +1 -0
  80. package/dist/services/actionflow/components/enquiry_form.d.ts.map +1 -1
  81. package/dist/services/actionflow/components/enquiry_form.js +29 -3
  82. package/dist/services/actionflow/components/enquiry_form.js.map +1 -1
  83. package/dist/services/actionflow/components/event_button.d.ts +3 -0
  84. package/dist/services/actionflow/components/event_button.d.ts.map +1 -0
  85. package/dist/services/actionflow/components/event_button.js +32 -0
  86. package/dist/services/actionflow/components/event_button.js.map +1 -0
  87. package/dist/services/actionflow/components/index.d.ts.map +1 -1
  88. package/dist/services/actionflow/components/index.js +10 -0
  89. package/dist/services/actionflow/components/index.js.map +1 -1
  90. package/dist/services/actionflow/components/inner_mq_listener.d.ts +3 -0
  91. package/dist/services/actionflow/components/inner_mq_listener.d.ts.map +1 -0
  92. package/dist/services/actionflow/components/inner_mq_listener.js +40 -0
  93. package/dist/services/actionflow/components/inner_mq_listener.js.map +1 -0
  94. package/dist/services/actionflow/components/inner_mq_send.d.ts +5 -0
  95. package/dist/services/actionflow/components/inner_mq_send.d.ts.map +1 -0
  96. package/dist/services/actionflow/components/inner_mq_send.js +72 -0
  97. package/dist/services/actionflow/components/inner_mq_send.js.map +1 -0
  98. package/dist/services/actionflow/components/send_message.d.ts.map +1 -1
  99. package/dist/services/actionflow/components/send_message.js +7 -4
  100. package/dist/services/actionflow/components/send_message.js.map +1 -1
  101. package/dist/services/actionflow/context_preflight.d.ts.map +1 -1
  102. package/dist/services/actionflow/context_preflight.js +7 -1
  103. package/dist/services/actionflow/context_preflight.js.map +1 -1
  104. package/dist/services/actionflow/design_client.d.ts +13 -2
  105. package/dist/services/actionflow/design_client.d.ts.map +1 -1
  106. package/dist/services/actionflow/design_client.js +56 -8
  107. package/dist/services/actionflow/design_client.js.map +1 -1
  108. package/dist/services/actionflow/enrich_approve_trigger.d.ts.map +1 -1
  109. package/dist/services/actionflow/enrich_approve_trigger.js +31 -0
  110. package/dist/services/actionflow/enrich_approve_trigger.js.map +1 -1
  111. package/dist/services/actionflow/form_source.d.ts +2 -0
  112. package/dist/services/actionflow/form_source.d.ts.map +1 -1
  113. package/dist/services/actionflow/form_source.js +5 -0
  114. package/dist/services/actionflow/form_source.js.map +1 -1
  115. package/dist/services/actionflow/formula_service.d.ts +1 -1
  116. package/dist/services/actionflow/formula_service.d.ts.map +1 -1
  117. package/dist/services/actionflow/formula_service.js +118 -12
  118. package/dist/services/actionflow/formula_service.js.map +1 -1
  119. package/dist/services/actionflow/functions_catalog.d.ts +2 -1
  120. package/dist/services/actionflow/functions_catalog.d.ts.map +1 -1
  121. package/dist/services/actionflow/functions_catalog.js +2392 -180
  122. package/dist/services/actionflow/functions_catalog.js.map +1 -1
  123. package/dist/services/actionflow/functions_source.d.ts.map +1 -1
  124. package/dist/services/actionflow/functions_source.js +3 -0
  125. package/dist/services/actionflow/functions_source.js.map +1 -1
  126. package/dist/services/actionflow/generation_service.d.ts +11 -0
  127. package/dist/services/actionflow/generation_service.d.ts.map +1 -1
  128. package/dist/services/actionflow/generation_service.js +66 -23
  129. package/dist/services/actionflow/generation_service.js.map +1 -1
  130. package/dist/services/actionflow/plan_constraints.d.ts +5 -0
  131. package/dist/services/actionflow/plan_constraints.d.ts.map +1 -0
  132. package/dist/services/actionflow/plan_constraints.js +54 -0
  133. package/dist/services/actionflow/plan_constraints.js.map +1 -0
  134. package/dist/services/actionflow/preflight_service.d.ts +3 -0
  135. package/dist/services/actionflow/preflight_service.d.ts.map +1 -1
  136. package/dist/services/actionflow/preflight_service.js +152 -8
  137. package/dist/services/actionflow/preflight_service.js.map +1 -1
  138. package/dist/services/actionflow/readback_verifier.d.ts.map +1 -1
  139. package/dist/services/actionflow/readback_verifier.js +63 -2
  140. package/dist/services/actionflow/readback_verifier.js.map +1 -1
  141. package/dist/services/actionflow/save_workflow_draft.d.ts.map +1 -1
  142. package/dist/services/actionflow/save_workflow_draft.js +43 -2
  143. package/dist/services/actionflow/save_workflow_draft.js.map +1 -1
  144. package/dist/services/actionflow/update_service.d.ts +41 -0
  145. package/dist/services/actionflow/update_service.d.ts.map +1 -0
  146. package/dist/services/actionflow/update_service.js +767 -0
  147. package/dist/services/actionflow/update_service.js.map +1 -0
  148. package/dist/services/actionflow/workflow_compiler.d.ts.map +1 -1
  149. package/dist/services/actionflow/workflow_compiler.js +120 -12
  150. package/dist/services/actionflow/workflow_compiler.js.map +1 -1
  151. package/dist/services/esb-interface/document-parser.d.ts +6 -0
  152. package/dist/services/esb-interface/document-parser.d.ts.map +1 -0
  153. package/dist/services/esb-interface/document-parser.js +247 -0
  154. package/dist/services/esb-interface/document-parser.js.map +1 -0
  155. package/dist/services/esb-interface/importer.d.ts +9 -0
  156. package/dist/services/esb-interface/importer.d.ts.map +1 -0
  157. package/dist/services/esb-interface/importer.js +44 -0
  158. package/dist/services/esb-interface/importer.js.map +1 -0
  159. package/dist/services/esb-interface/postman-collection.d.ts +9 -0
  160. package/dist/services/esb-interface/postman-collection.d.ts.map +1 -0
  161. package/dist/services/esb-interface/postman-collection.js +125 -0
  162. package/dist/services/esb-interface/postman-collection.js.map +1 -0
  163. package/dist/services/esb-interface/types.d.ts +91 -0
  164. package/dist/services/esb-interface/types.d.ts.map +1 -0
  165. package/dist/services/esb-interface/types.js +2 -0
  166. package/dist/services/esb-interface/types.js.map +1 -0
  167. package/dist/services/form-association.d.ts +49 -0
  168. package/dist/services/form-association.d.ts.map +1 -0
  169. package/dist/services/form-association.js +279 -0
  170. package/dist/services/form-association.js.map +1 -0
  171. package/dist/services/form-button-position.d.ts +35 -0
  172. package/dist/services/form-button-position.d.ts.map +1 -0
  173. package/dist/services/form-button-position.js +109 -0
  174. package/dist/services/form-button-position.js.map +1 -0
  175. package/dist/services/form-list-columns.d.ts +54 -0
  176. package/dist/services/form-list-columns.d.ts.map +1 -0
  177. package/dist/services/form-list-columns.js +236 -0
  178. package/dist/services/form-list-columns.js.map +1 -0
  179. package/dist/services/form-list-stats.d.ts +44 -0
  180. package/dist/services/form-list-stats.d.ts.map +1 -0
  181. package/dist/services/form-list-stats.js +302 -0
  182. package/dist/services/form-list-stats.js.map +1 -0
  183. package/dist/services/skill-provision.d.ts +6 -1
  184. package/dist/services/skill-provision.d.ts.map +1 -1
  185. package/dist/services/skill-provision.js +12 -2
  186. package/dist/services/skill-provision.js.map +1 -1
  187. package/dist/services/update-check.d.ts +24 -0
  188. package/dist/services/update-check.d.ts.map +1 -0
  189. package/dist/services/update-check.js +108 -0
  190. package/dist/services/update-check.js.map +1 -0
  191. package/package.json +2 -1
  192. package/skill-docs/SKILL.md +29 -107
  193. package/skill-docs/actionflows/references/components/ebuilder/ActionEbAdd.md +61 -39
  194. package/skill-docs/actionflows/references/components/ebuilder/ActionEbDelete.md +23 -21
  195. package/skill-docs/actionflows/references/components/ebuilder/ActionEbUpdate.md +23 -21
  196. package/skill-docs/actionflows/references/components/ebuilder/EnquiryForm.md +101 -75
  197. package/skill-docs/actionflows/references/components/ebuilder/EventButton.md +33 -0
  198. package/skill-docs/actionflows/references/components/logic/Condition.md +23 -23
  199. package/skill-docs/actionflows/references/components/message/InnerMQSend.md +40 -0
  200. package/skill-docs/actionflows/references/components/message/SendMessage.md +2 -2
  201. package/skill-docs/actionflows/references/components/trigger/CustomTrigger.md +45 -0
  202. package/skill-docs/actionflows/references/components/trigger/InnerMQListener.md +40 -0
  203. package/skill-docs/actionflows/references/components/workflow/ApproveTrigger.md +35 -0
  204. package/skill-docs/actionflows/references/condition_rules.md +4 -2
  205. package/skill-docs/actionflows/references/examples/enquiry-form-batch-insert-scene2.json +1043 -1046
  206. package/skill-docs/actionflows/references/trigger_runtime_notes.md +53 -51
  207. package/skill-docs/references/common/guide-plan-template.md +201 -0
  208. package/skill-docs/references/common/ref-cli-commands.md +45 -11
  209. package/skill-docs/references/form/guide-create-form.md +4 -2
  210. package/skill-docs/references/form/guide-field-linkage.md +121 -0
  211. package/skill-docs/references/form/guide-form-association.md +108 -0
  212. package/skill-docs/references/form/guide-form-button.md +54 -0
  213. package/skill-docs/references/form/guide-form-view.md +26 -9
  214. package/skill-docs/references/form/guide-list-columns.md +52 -0
  215. package/skill-docs/references/form/guide-list-stats.md +83 -0
  216. package/skill-docs/references/workflow/guide-workflow-action.md +172 -168
  217. package/skill-docs/references/workflow/guide-workflow.md +16 -2
@@ -0,0 +1,300 @@
1
+ import { AuthSession } from '../core/auth.js';
2
+ import { ApiClient } from '../core/client.js';
3
+ import { genSfId } from '../services/actionflow/id_generator.js';
4
+ /**
5
+ * form field-linkage — 字段联动(FormDataLinkage,跨表带出赋值)。
6
+ *
7
+ * 区别于 form linkage(显隐联动)和 form relate(关联表带出 ffRelateField module:hrm):
8
+ * 字段联动 = 表单字段值改变 → 查询另一张表(按本字段值=数据ID 过滤)→ 带出字段值赋值到本表单字段。
9
+ * 支持单跳(一次直接带出)和多跳链式(多次中转后带出,如 关联客户→客户信息表→客户类型→客户类型表→类型名称)。
10
+ * 背后是一个 ESB FieldLinkage 动作流(触发 + N 个 EnquiryForm 查询 + Output 赋值)。
11
+ *
12
+ * 写: application/save(lightId) → saveDesign(触发+N查询+赋值) → saveFormDataLinkage → preCheck → queryById
13
+ * 读: fullPageQueryByFormId / queryById / fieldlinkage/getFormFields
14
+ */
15
+ const LINKAGE_API = '/api/ebuilder/form/form/linkage';
16
+ const ESB_APP_API = '/api/bs/esb/setting/application';
17
+ const ESB_DESIGN_API = '/api/bs/esb/setting/flow/design';
18
+ const FIELD_LINKAGE_API = '/api/bs/esb/setting/fieldlinkage';
19
+ const FIELD_LINKAGE_LIGHT_ID = '941997121054621697';
20
+ async function getFormId(client, baseUrl, appId, objId) {
21
+ const list = await client.get(`${baseUrl}/api/bs/ebuilder/form/obj/getList/${appId}?apid=${appId}`, { ebbusinessid: appId });
22
+ const f = (list?.data || []).find((x) => String(x.id) === String(objId));
23
+ if (!f?.formId)
24
+ throw new Error(`无法获取 formId,请确认 objId=${objId}`);
25
+ return { formId: String(f.formId), formName: f.formName || f.objName || f.name || '' };
26
+ }
27
+ async function getFormFields(client, baseUrl, objId, userId, tenantKey) {
28
+ const res = await client.post(`${baseUrl}/api/ebuilder/form/dataset/v1/getFields`, { objId, userid: userId, tenantKey, isReturnDetail: 'y' });
29
+ return res?.data?.mainFields || [];
30
+ }
31
+ function findFieldId(fields, name) {
32
+ const f = fields.find((x) => x.fieldName === name && /^\d+$/.test(String(x.fieldId)));
33
+ if (!f)
34
+ throw new Error(`字段 "${name}" 未找到`);
35
+ return f;
36
+ }
37
+ export function registerFormFieldLinkageCommands(form, program) {
38
+ const fl = form.command('field-linkage').description('字段联动(跨表带出赋值):list / read / fields / add');
39
+ fl.command('list').description('列出表单下所有字段联动').argument('<appId>').argument('<objId>')
40
+ .action(async (appId, objId) => {
41
+ const opts = program.opts();
42
+ const auth = await AuthSession.fromOptions(opts);
43
+ if (!auth)
44
+ process.exit(1);
45
+ const client = new ApiClient(auth);
46
+ const baseUrl = auth.getBaseUrl();
47
+ const { formId } = await getFormId(client, baseUrl, appId, objId);
48
+ const res = await client.post(`${baseUrl}${LINKAGE_API}/fullPageQueryByFormId?apid=${appId}`, { formId, module: 'ebuilderform', linkageTypeList: ['template', 'sql'], customParam: { appId, objId }, pageNo: 1, pageSize: 50 }, { ebbusinessid: formId });
49
+ if (res?.code !== 200 || !res?.status) {
50
+ console.error(`查询失败: ${res?.msg}`);
51
+ process.exit(1);
52
+ }
53
+ const records = res?.data?.records || [];
54
+ if (opts.json) {
55
+ console.log(JSON.stringify(records, null, 2));
56
+ return;
57
+ }
58
+ console.log(`共 ${res?.data?.total ?? records.length} 条字段联动:`);
59
+ for (const r of records) {
60
+ const en = r.linkageState ? '启用' : '停用';
61
+ const inF = (r.monitorActions || []).flatMap((a) => (a.monitorFields || []).map((m) => m.targetName)).join(',');
62
+ const outF = (r.dataSources || []).flatMap((d) => (d.outFields || []).map((o) => o.content)).join(',');
63
+ console.log(` [${r.id}] ${r.linkageName} (${en})`);
64
+ console.log(` 触发: ${inF || '—'} → 带出: ${outF || '—'}`);
65
+ }
66
+ });
67
+ fl.command('delete').description('删除字段联动(支持批量)').argument('<appId>').argument('<objId>').argument('<linkageIds...>')
68
+ .action(async (appId, objId, linkageIds) => {
69
+ const opts = program.opts();
70
+ const auth = await AuthSession.fromOptions(opts);
71
+ if (!auth)
72
+ process.exit(1);
73
+ const client = new ApiClient(auth);
74
+ const baseUrl = auth.getBaseUrl();
75
+ const { formId } = await getFormId(client, baseUrl, appId, objId);
76
+ const res = await client.post(`${baseUrl}${LINKAGE_API}/deleteFormDataLinkage?apid=${appId}`, {
77
+ idList: linkageIds, formId, module: 'ebuilderform', linkageTypeList: ['template', 'sql'], customParam: { appId, objId },
78
+ }, { ebbusinessid: formId });
79
+ if (res?.code !== 200 || !res?.status) {
80
+ console.error(`删除失败: ${res?.msg}`);
81
+ process.exit(1);
82
+ }
83
+ const deleted = res?.data || [];
84
+ console.log(opts.json ? JSON.stringify({ success: true, deleted }) : `已删除 ${deleted.length} 条字段联动: ${deleted.join(', ')}`);
85
+ });
86
+ fl.command('read').description('回读单条字段联动').argument('<appId>').argument('<objId>').argument('<linkageId>')
87
+ .action(async (appId, objId, linkageId) => {
88
+ const opts = program.opts();
89
+ const auth = await AuthSession.fromOptions(opts);
90
+ if (!auth)
91
+ process.exit(1);
92
+ const client = new ApiClient(auth);
93
+ const baseUrl = auth.getBaseUrl();
94
+ const { formId } = await getFormId(client, baseUrl, appId, objId);
95
+ const res = await client.post(`${baseUrl}${LINKAGE_API}/queryById?apid=${appId}`, { id: linkageId, formId, module: 'ebuilderform', customParam: { appId, objId } }, { ebbusinessid: formId });
96
+ if (res?.code !== 200 || !res?.status) {
97
+ console.error(`查询失败: ${res?.msg}`);
98
+ process.exit(1);
99
+ }
100
+ const d = res?.data;
101
+ if (opts.json) {
102
+ console.log(JSON.stringify(d, null, 2));
103
+ return;
104
+ }
105
+ console.log(`[${d.id}] ${d.linkageName} (${d.linkageState ? '启用' : '停用'})`);
106
+ for (const a of (d.monitorActions || [])) {
107
+ const mf = (a.monitorFields || []).map((m) => `${m.targetName}(${m.targetField})`).join(', ');
108
+ console.log(` 触发(${a.actionName}): ${mf}`);
109
+ }
110
+ for (const ds of (d.dataSources || [])) {
111
+ const inF = (ds.inFields || []).map((f) => f.id).join(',');
112
+ const outF = (ds.outFields || []).map((f) => `${f.content}(${f.id})`).join(',');
113
+ console.log(` 数据源: ${ds.dataSourceName} (ESB:${ds.dataSourceId})`);
114
+ console.log(` inFields: ${inF || '—'} → outFields: ${outF || '—'}`);
115
+ }
116
+ });
117
+ fl.command('fields').description('查源表单可带出字段').argument('<appId>').argument('<formId>')
118
+ .action(async (appId, formId) => {
119
+ const opts = program.opts();
120
+ const auth = await AuthSession.fromOptions(opts);
121
+ if (!auth)
122
+ process.exit(1);
123
+ const client = new ApiClient(auth);
124
+ const baseUrl = auth.getBaseUrl();
125
+ const res = await client.get(`${baseUrl}${FIELD_LINKAGE_API}/getFormFields?module=ebuilderform&formId=${formId}&appId=${appId}`, { ebbusinessid: appId });
126
+ if (res?.code !== 200 || !res?.status) {
127
+ console.error(`查询失败: ${res?.msg}`);
128
+ process.exit(1);
129
+ }
130
+ const fields = res?.data || [];
131
+ if (opts.json) {
132
+ console.log(JSON.stringify(fields, null, 2));
133
+ return;
134
+ }
135
+ console.log(`共 ${fields.length} 个可带出字段:`);
136
+ for (const f of fields)
137
+ console.log(` ${f.id || f.fieldId} ${f.showName || f.fieldName} (${f.componentKey || f.fieldKey})`);
138
+ });
139
+ // ─── add(支持单跳和多跳链式)───
140
+ fl.command('add').description('新增字段联动。--hops 多跳链式(objId:字段名,objId:字段名,...),或 --source-form/--query-field 单跳')
141
+ .argument('<appId>').argument('<objId>')
142
+ .requiredOption('--trigger <字段名>', '本表触发字段名')
143
+ .requiredOption('--target <字段名>', '本表目标字段名(被赋值)')
144
+ .option('--hops <list>', '多跳链式:objId:字段名,objId:字段名,...(每跳查一张表带出一个字段,前一跳的输出喂下一跳的过滤)')
145
+ .option('--source-form <objId>', '单跳:查询目标表单 objId(与 --query-field 配合)')
146
+ .option('--query-field <字段名>', '单跳:目标表要带出的字段名')
147
+ .option('--name <联动名>', '联动名称', '')
148
+ .action(async (appId, objId, cmdOpts) => {
149
+ const opts = program.opts();
150
+ const auth = await AuthSession.fromOptions(opts);
151
+ if (!auth)
152
+ process.exit(1);
153
+ const client = new ApiClient(auth);
154
+ const baseUrl = auth.getBaseUrl();
155
+ const { formId: selfFormId, formName: selfFormName } = await getFormId(client, baseUrl, appId, objId);
156
+ const selfFields = await getFormFields(client, baseUrl, objId, auth.userId, auth.tenantKey);
157
+ const triggerField = findFieldId(selfFields, cmdOpts.trigger);
158
+ const targetField = findFieldId(selfFields, cmdOpts.target);
159
+ // 解析 hops(多跳)或单跳
160
+ let hops;
161
+ if (cmdOpts.hops) {
162
+ const pairs = cmdOpts.hops.split(',').map(s => s.trim()).filter(Boolean);
163
+ hops = [];
164
+ for (const pair of pairs) {
165
+ const [objId2, fieldName] = pair.split(':').map(s => s.trim());
166
+ if (!objId2 || !fieldName) {
167
+ console.error(`--hops 格式错误: ${pair}(应为 objId:字段名)`);
168
+ process.exit(1);
169
+ }
170
+ const { formId: sfFormId, formName: sfFormName } = await getFormId(client, baseUrl, appId, objId2);
171
+ const sfFields = await getFormFields(client, baseUrl, objId2, auth.userId, auth.tenantKey);
172
+ const qf = findFieldId(sfFields, fieldName);
173
+ hops.push({ srcFormObjId: objId2, srcFormId: sfFormId, srcFormName: sfFormName, queryFieldId: qf.fieldId, queryFieldName: qf.fieldName });
174
+ }
175
+ }
176
+ else if (cmdOpts.sourceForm && cmdOpts.queryField) {
177
+ const { formId: sfFormId, formName: sfFormName } = await getFormId(client, baseUrl, appId, cmdOpts.sourceForm);
178
+ const sfFields = await getFormFields(client, baseUrl, cmdOpts.sourceForm, auth.userId, auth.tenantKey);
179
+ const qf = findFieldId(sfFields, cmdOpts.queryField);
180
+ hops = [{ srcFormObjId: cmdOpts.sourceForm, srcFormId: sfFormId, srcFormName: sfFormName, queryFieldId: qf.fieldId, queryFieldName: qf.fieldName }];
181
+ }
182
+ else {
183
+ console.error('需要 --hops 或 --source-form/--query-field');
184
+ process.exit(1);
185
+ }
186
+ // orgId
187
+ const formRes = await client.post(`${baseUrl}/api/ebuilder/form/form/formmanage/getForm?apid=${appId}`, { module: 'ebuilderform', form: { id: selfFormId }, baseSettingPartType: 'basic', customParam: { appId, objId } }, { ebbusinessid: selfFormId });
188
+ const orgId = String(formRes?.data?.form?.orgId || '');
189
+ const lastHop = hops[hops.length - 1];
190
+ const linkageName = cmdOpts.name || `${selfFormName}.${cmdOpts.trigger}→${lastHop.srcFormName}.${lastHop.queryFieldName}`;
191
+ console.error(` 联动: ${cmdOpts.trigger}(${triggerField.fieldId}) → ${hops.map(h => `${h.srcFormName}.${h.queryFieldName}(${h.queryFieldId})`).join(' → ')} → 填${cmdOpts.target}(${targetField.fieldId})`);
192
+ // 1. application/save
193
+ const appRes = await client.post(`${baseUrl}${ESB_APP_API}/save`, { id: genSfId(), name: linkageName, canDelete: false, lightId: FIELD_LINKAGE_LIGHT_ID, initData: '', orgId }, { ebbusinessid: appId });
194
+ if (appRes?.code !== 200 || !appRes?.status) {
195
+ console.error(`建 ESB app 失败: ${appRes?.msg}`);
196
+ process.exit(1);
197
+ }
198
+ const esbAppId = String(appRes?.data?.id || '');
199
+ const sceneId = String(appRes?.data?.activeVersion || '');
200
+ console.error(` ESB app: ${esbAppId} scene: ${sceneId}`);
201
+ // 2. saveDesign(FieldLinkage + N EnquiryForm chained + Output)
202
+ const design = buildSaveDesign({ esbAppId, sceneId, lightId: FIELD_LINKAGE_LIGHT_ID, appName: linkageName, selfFormId, selfFormName, appId, orgId, triggerFieldId: triggerField.fieldId, triggerFieldName: triggerField.fieldName, triggerFieldKey: triggerField.fieldKey || '', selfFields, hops, targetFieldId: targetField.fieldId, targetFieldKey: targetField.fieldKey || '' });
203
+ const designRes = await client.post(`${baseUrl}${ESB_DESIGN_API}/saveDesign`, design, { ebbusinessid: esbAppId });
204
+ if (designRes?.code !== 200 || !designRes?.status) {
205
+ console.error(`saveDesign 失败: ${designRes?.msg}`);
206
+ process.exit(1);
207
+ }
208
+ console.error(` ESB 设计已保存(${hops.length} 查询 + 1 赋值)`);
209
+ // 3. saveFormDataLinkage
210
+ const linkagePayload = {
211
+ formId: selfFormId,
212
+ fdEffect: { formId: selfFormId, effectModule: 'ebuilderform', effectType: 'form', effectName: '当前表单', optionList: [{ effectValue: selfFormId, effectName: '当前表单' }] },
213
+ linkageModule: 'ebuilderform', linkageName, linkageState: true, linkageType: 'template',
214
+ linkageExt: { subFormLikeType: 'addSubForm', subFormAddType: 'override', effectContent: '', fissionState: 1 },
215
+ monitorActions: [{ actionType: 'changeField', actionName: '值改变时', monitorFields: [{ targetField: triggerField.fieldId, targetName: `主表.${cmdOpts.trigger}`, fieldObj: { dataKey: triggerField.fieldKey || '', groupName: '表单字段', address: '主表', addressType: 'form', groupId: 'formField', name: `主表.${cmdOpts.trigger}`, descType: triggerField.fieldKey || '', id: triggerField.fieldId, content: `主表.${cmdOpts.trigger}`, desc: '' } }] }],
216
+ dataSources: [{ menuKey: '1', sourceName: '联动设置1', linkageType: 'esb', dataMappings: [], sourceEsb: { configType: 'SIMPLE', parameters: [{ targetField: triggerField.fieldId, targetName: cmdOpts.trigger }] }, dataSourceId: esbAppId, dataSourceName: `${linkageName}-联动设置1` }],
217
+ needSqlCompress: 1, customParam: { appId, objId },
218
+ };
219
+ const linkRes = await client.post(`${baseUrl}${LINKAGE_API}/saveFormDataLinkage?apid=${appId}`, linkagePayload, { ebbusinessid: selfFormId });
220
+ if (linkRes?.code !== 200 || !linkRes?.status) {
221
+ console.error(`saveFormDataLinkage 失败: ${linkRes?.msg}`);
222
+ process.exit(1);
223
+ }
224
+ const linkageId = String(linkRes?.data?.id || '');
225
+ console.error(` 联动已绑定: ${linkageId}`);
226
+ // 4. preCheck + 5. queryById
227
+ await client.post(`${baseUrl}${LINKAGE_API}/preCheck?apid=${appId}`, { module: 'ebuilderform', formId: selfFormId, linkageIds: [linkageId], customParam: { appId, objId } }, { ebbusinessid: selfFormId });
228
+ const rb = await client.post(`${baseUrl}${LINKAGE_API}/queryById?apid=${appId}`, { id: linkageId, formId: selfFormId, module: 'ebuilderform', customParam: { appId, objId } }, { ebbusinessid: selfFormId });
229
+ const ds = (rb?.data?.dataSources || [])[0] || {};
230
+ const inF = (ds.inFields || []).map((f) => f.id).join(',');
231
+ const outF = (ds.outFields || []).map((f) => `${f.content}(${f.id})`).join(',');
232
+ console.log(opts.json ? JSON.stringify({ success: true, linkageId, esbAppId, inFields: inF, outFields: outF }) : `字段联动已创建: [${linkageId}] ${cmdOpts.trigger}→${lastHop.queryFieldName} in:${inF} out:${outF}`);
233
+ });
234
+ }
235
+ // ─── saveDesign(FieldLinkage 触发 + N EnquiryForm 链式查询 + Output 赋值)───
236
+ function buildSaveDesign(p) {
237
+ const eventId = genSfId();
238
+ const formDataTrigger = `FormData.${p.selfFormId}.${p.triggerFieldId}`;
239
+ const selfFormFields = p.selfFields.filter((f) => /^\d+$/.test(String(f.fieldId))).map((f) => ({ id: f.fieldId, orderNum: 1, paramName: f.dataKey || f.fieldKey || '', showName: f.fieldName, paramType: 'string', multipleSelect: f.multiSelect === true || f.multiSelect === 'true', componentKey: f.fieldKey || '', required: false }));
240
+ // 构建 N 个 EnquiryForm(链式)
241
+ const enquiryActions = [];
242
+ let prevWId = eventId; // 前一个 action 的 wId(EnquiryForm[0] 的 source = event)
243
+ for (let i = 0; i < p.hops.length; i++) {
244
+ const hop = p.hops[i];
245
+ const eqWId = genSfId();
246
+ const isFormRef = i === 0; // 第一跳过滤引用本表触发字段(form field),后续跳引用前一跳查询结果(query result)
247
+ // 过滤值引用
248
+ const filterValue = isFormRef
249
+ ? { paramKey: `${p.selfFormId}.${p.triggerFieldId}`, paramName: p.triggerFieldId, showName: p.triggerFieldName, paramType: 'string', dataType: 'node', arrs: false, paramTypeString: 'STRING', dataTypeSting: 'NODE', paramId: p.triggerFieldId, name: p.triggerFieldName, source: eventId, value: formDataTrigger, type: '3', formulaType: 'string', frontId: p.triggerFieldId, config: { paramKey: `${p.selfFormId}.${p.triggerFieldId}`, paramType: 'string', parentName: `${p.selfFormName}.${p.triggerFieldName}`, newParentName: `${p.selfFormName}.${p.triggerFieldName}`, comId: eventId, isMultCom: false, tableName: '表单数据', fieldInfo: { tablePrimaryKey: 'FormData', paramKey: `${p.selfFormId}.${p.triggerFieldId}` } }, applicationId: p.esbAppId, fieldType: 'string' }
250
+ : (() => {
251
+ const prevHop = p.hops[i - 1];
252
+ const bizId = genSfId();
253
+ const pk = `${prevHop.srcFormObjId}[].field_${prevHop.queryFieldId}`;
254
+ return { paramKey: pk, paramName: `field_${prevHop.queryFieldId}`, showName: prevHop.queryFieldName, paramType: 'string', dataType: 'attribute', arrs: false, paramTypeString: 'STRING', dataTypeSting: 'ATTRIBUTE', formulaId: '0', name: prevHop.queryFieldName, source: prevWId, value: `FormData.${prevHop.srcFormObjId}[${bizId}].field_${prevHop.queryFieldId}`, type: '3', formulaType: 'string', config: { paramKey: pk, paramType: 'string', parentName: `${prevHop.srcFormName}[].${prevHop.queryFieldName}`, newParentName: `${prevHop.srcFormName}[].${prevHop.queryFieldName}`, comId: prevWId, isMultCom: false, tableName: '表单数据', fieldInfo: { tablePrimaryKey: 'FormData', paramKey: pk }, switchType: 'assign' }, applicationId: p.esbAppId, fieldType: 'string' };
255
+ })();
256
+ enquiryActions.push({
257
+ id: eqWId, wId: eqWId, nodeType: 'Normal', comType: 'EnquiryForm', type: 'EnquiryForm',
258
+ previousId: prevWId, parentId: '0', name: '设置查询数据', isAdd: true, isOpen: false, attr: { icon: 'Icon-Data-preprocessing' },
259
+ data: {
260
+ currentApplication: p.esbAppId,
261
+ person: { type: '8', name: '', value: `textarea#${genSfId()}#`, formulaType: 'string', applicationId: p.esbAppId, config: { paramType: 'string', switchType: 'assign' }, childs: [{ id: genSfId(), type: '9', name: '{userid}', value: '{userid}', fieldType: 'string', formulaType: 'string', config: { paramType: 'string' }, applicationId: p.esbAppId }] },
262
+ conditionFormula: '',
263
+ dataSource: { id: hop.srcFormObjId, text: hop.srcFormName, type: 'LOGIC', groupId: 'weaver-ebuilder-form-service', isPhysical: true, usage: 'all', detailTable: false, objType: 'physical', module: 'ebuilder', appId: p.appId, isFormModuleSelected: true, enquiryId: -1 },
264
+ filterInput: { key: genSfId(), relationship: '1', isParent: true, isNewFilter: true, parentNode: '', datas: [{ isParent: false, parentNode: '', id: '5', fieldName: 'id', fieldType: 'String', optionType: '', text: '数据ID', objId: hop.srcFormObjId, compType: 'Text', type: 'condition', multiSelect: 'false', formInfo: { fieldId: '5' }, module: 'ebuilderform', mainField: true, subTableId: '', dbFieldType: 'Number', conditions: { func: 'eq', value: filterValue, text: filterValue.showName, isEsb: true, esbAssign: { wId: eqWId, textarea: false, withoutDftNum: true } } }], version: 1, filterIsNull: false, rootStr: `( 数据ID 等于 '${filterValue.showName}' )` },
265
+ authorityFlag: '0', opType: 'list',
266
+ queryFields: [{ id: `field_${hop.queryFieldId}`, content: hop.queryFieldName, parseMark: true, type: 'Ebuilder', fieldGroup: { name: hop.srcFormName, id: hop.srcFormObjId }, dbFieldType: 'NUMBER', otherParams: { objType: 'physical' }, formId: hop.srcFormObjId }],
267
+ type: 'EventButton', applicationId: p.esbAppId,
268
+ },
269
+ ignoreFlowCheck: true,
270
+ branchs: [], multKey: '', multName: '',
271
+ ...(i > 0 ? { sources: [{ wId: prevWId }] } : {}),
272
+ });
273
+ prevWId = eqWId;
274
+ }
275
+ // Output(赋值:最后一跳的查询结果 → 本表目标字段)
276
+ const outWId = genSfId();
277
+ const lastHop = p.hops[p.hops.length - 1];
278
+ const outBizId = genSfId();
279
+ const outParamKey = `${lastHop.srcFormObjId}[].field_${lastHop.queryFieldId}`;
280
+ const outputAction = {
281
+ id: outWId, wId: outWId, nodeType: 'Normal', comType: 'Output', type: 'Output',
282
+ previousId: prevWId, parentId: '0', name: '设置赋值字段', isAdd: true, isOpen: false, componentName: '终止', attr: { icon: 'Icon-termination-1' }, isControl: true,
283
+ data: {
284
+ outputStatus: '1', pageAction: '0', reminder: '0', fixedData: [], triggerFlag: false, reminderMsgFormula: '', nextAction: false, customOutputData: '', currentApplication: p.esbAppId,
285
+ fieldLinkCustomParamSetting: {
286
+ customId: '', formType: 'output', businessModule: '',
287
+ tableList: [{ id: genSfId(), formId: p.selfFormId, showName: p.selfFormName, orderNum: 0, main: true, isMain: true, fields: [{ id: genSfId(), paramName: '', showName: '', paramType: 'string', isRequired: false, fieldComments: '', skipNull: '0', assignFieldId: p.targetFieldId, fieldPath: `${p.selfFormId}.${p.targetFieldId}`, fieldType: 'Ebuilder', formulaValue: { paramKey: outParamKey, paramName: `field_${lastHop.queryFieldId}`, showName: lastHop.queryFieldName, paramType: 'string', dataType: 'attribute', arrs: false, paramTypeString: 'STRING', dataTypeSting: 'ATTRIBUTE', formulaId: '0', name: lastHop.queryFieldName, source: prevWId, value: `FormData.${lastHop.srcFormObjId}[${outBizId}].field_${lastHop.queryFieldId}`, type: '3', formulaType: 'string', config: { paramKey: outParamKey, paramType: 'string', parentName: `${lastHop.srcFormName}[].${lastHop.queryFieldName}`, newParentName: `${lastHop.srcFormName}[].${lastHop.queryFieldName}`, comId: prevWId, isMultCom: false, tableName: '表单数据', fieldInfo: { tablePrimaryKey: 'FormData', paramKey: outParamKey }, switchType: 'assign' }, switchType: 'assign' } }] }],
288
+ deleteTableIds: [], appId: p.esbAppId,
289
+ }, applicationId: p.esbAppId,
290
+ },
291
+ canDelete: false, options: { type: 'Output', name: '设置赋值字段', canDelete: false }, sources: [{ wId: prevWId }], ignoreFlowCheck: true,
292
+ };
293
+ return {
294
+ ajaxUrl: '/api/bs/esb/setting/flow/design/saveDesign', saveAndStart: true, appId: p.esbAppId, sceneId: p.sceneId,
295
+ event: { id: eventId, wId: eventId, nodeType: 'Normal', comType: 'FieldLinkage', type: 'FieldLinkage', previousId: '0', parentId: '0', isAdd: true, isOpen: true, attr: { icon: 'Icon-trigger03' }, isControl: true, name: '字段联动触发', canEdit: false, canDelete: false, triggerType: 'SystemTrigger', data: { ownForm: [{ id: p.selfFormId, name: p.selfFormName }], ownModule: 'ebuilderform', ownApplication: [{ id: p.appId, name: p.appId }], formFields: [{ id: genSfId(), formId: p.selfFormId, showName: p.selfFormName, orderNum: 0, fields: selfFormFields, main: true }] } },
296
+ actions: [...enquiryActions, outputAction],
297
+ addIds: [], deleteActions: [], version: 0, delCheckMsg: [], addCheckMsg: [], assistLayer: '{"nodes":[],"layout":{}}', versionConfig: '{}', saveNewVersion: false, lightId: p.lightId, initData: '', secretKey: '', operateType: '', appName: p.appName,
298
+ };
299
+ }
300
+ //# sourceMappingURL=form-field-linkage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form-field-linkage.js","sourceRoot":"","sources":["../../src/commands/form-field-linkage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerListColumnsCommand(form: Command, program: Command): void;
3
+ //# sourceMappingURL=form-list-columns.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form-list-columns.d.ts","sourceRoot":"","sources":["../../src/commands/form-list-columns.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAkChF"}
@@ -0,0 +1,50 @@
1
+ import { readFileSync } from 'node:fs';
2
+ import { AuthSession } from '../core/auth.js';
3
+ import { ApiClient } from '../core/client.js';
4
+ import { ListColumnsService, parseColumnSpecs } from '../services/form-list-columns.js';
5
+ export function registerListColumnsCommand(form, program) {
6
+ form.command('list-columns').description('查看/批量追加、移除或设置台账显示列,保存后回读校验')
7
+ .argument('<objId>', '表单 objId').argument('<appId>', '应用 ID').argument('<listId>', '台账视图 ID')
8
+ .option('--add <fieldId...>', '批量追加字段,已存在则复用')
9
+ .option('--remove <fieldId...>', '批量移除业务显示列')
10
+ .option('--set <json|@file>', '按数组完整设置业务列顺序与属性;隐藏主键自动保留')
11
+ .option('--terminal <t>', '终端:pc / mobile', 'pc')
12
+ .option('--pc-only', '明确仅 PC 使用;移动端读取失败时允许继续')
13
+ .option('--json', 'JSON 输出')
14
+ .action(async (objId, appId, listId, raw) => {
15
+ try {
16
+ if (!['pc', 'mobile'].includes(raw.terminal))
17
+ throw new Error('--terminal 仅支持 pc/mobile');
18
+ const specs = raw.set === undefined ? undefined : parseColumnSpecs(JSON.parse((raw.set.startsWith('@') ? readFileSync(raw.set.slice(1), 'utf8') : raw.set).replace(/^\uFEFF/, '')));
19
+ if (specs !== undefined && (raw.add || raw.remove))
20
+ throw new Error('--set 不能与 --add/--remove 混用');
21
+ const opts = program.opts();
22
+ const auth = await AuthSession.fromOptions(opts);
23
+ if (!auth)
24
+ throw new Error('无法加载认证');
25
+ const service = new ListColumnsService(new ApiClient(auth), auth.getBaseUrl(), appId, objId, listId);
26
+ const isJson = raw.json || opts.json;
27
+ if (specs === undefined && !raw.add && !raw.remove) {
28
+ const columns = (await service.config(raw.terminal.toUpperCase())).tableField || [];
29
+ if (isJson)
30
+ console.log(JSON.stringify(columns, null, 2));
31
+ else {
32
+ console.log(`台账 ${listId} 显示列 [${raw.terminal}] (${columns.length}):`);
33
+ for (const c of columns)
34
+ console.log(` ${c.id} ${c.text || c.name || ''} ${c.type || ''} ${c.hidden ? '[隐藏]' : ''}`);
35
+ }
36
+ return;
37
+ }
38
+ const result = await service.save({ add: raw.add, remove: raw.remove, set: specs, terminal: raw.terminal, pcOnly: raw.pcOnly });
39
+ if (isJson)
40
+ console.log(JSON.stringify(result, null, 2));
41
+ else
42
+ console.log(result.unchanged ? '显示列配置未变化,无需保存' : `显示列已批量保存并回读校验 [${raw.terminal}];${result.columns.length} 列(含隐藏主键)${result.otherTerminalPreserved ? ',另一终端配置保持不变' : ',未校验移动端'}`);
43
+ }
44
+ catch (error) {
45
+ console.error(error.message);
46
+ process.exitCode = 1;
47
+ }
48
+ });
49
+ }
50
+ //# sourceMappingURL=form-list-columns.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form-list-columns.js","sourceRoot":"","sources":["../../src/commands/form-list-columns.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,3 @@
1
1
  import { Command } from 'commander';
2
- /**
3
- * 台账顶部统计(list-stats)命令。
4
- * 走 saveNListConfig config.listStatistics:
5
- * - 阶段1:千分位 / 单位(万/亿) / 小数位 / 5 种聚合(sum/count/avg/max/min)
6
- * - 阶段2:条件统计 —— rootdata 直接发明文 JSON 条件树(读回也是明文,无需 LZW 编码,
7
- * 同事 e10-list-view skill 实证)
8
- * 平台 statisticsList 是 upsert 语义:删除需标 operation:DELETE(实测 splice 不删、DELETE 删)。
9
- */
10
2
  export declare function registerListStatsCommand(form: Command, program: Command): void;
11
3
  //# sourceMappingURL=form-list-stats.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"form-list-stats.d.ts","sourceRoot":"","sources":["../../src/commands/form-list-stats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CA6G9E"}
1
+ {"version":3,"file":"form-list-stats.d.ts","sourceRoot":"","sources":["../../src/commands/form-list-stats.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAoC9E"}