weaver-e10-builder 1.6.13 → 1.6.14

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 (185) hide show
  1. package/dist/cli-register.d.ts.map +1 -1
  2. package/dist/cli-register.js +14 -2
  3. package/dist/cli-register.js.map +1 -1
  4. package/dist/commands/actionflow.d.ts.map +1 -1
  5. package/dist/commands/actionflow.js +4 -0
  6. package/dist/commands/actionflow.js.map +1 -1
  7. package/dist/commands/designer-event.d.ts +3 -0
  8. package/dist/commands/designer-event.d.ts.map +1 -0
  9. package/dist/commands/designer-event.js +106 -0
  10. package/dist/commands/designer-event.js.map +1 -0
  11. package/dist/commands/designer-source.d.ts +3 -0
  12. package/dist/commands/designer-source.d.ts.map +1 -0
  13. package/dist/commands/designer-source.js +51 -0
  14. package/dist/commands/designer-source.js.map +1 -0
  15. package/dist/commands/form-browser-scope-rules.d.ts +2 -1
  16. package/dist/commands/form-browser-scope-rules.d.ts.map +1 -1
  17. package/dist/commands/form-browser-scope-rules.js +8 -4
  18. package/dist/commands/form-browser-scope-rules.js.map +1 -1
  19. package/dist/commands/form-browser-scope-tree.js +1 -1
  20. package/dist/commands/form-browser-scope-tree.js.map +1 -1
  21. package/dist/commands/form-field-linkage.d.ts.map +1 -1
  22. package/dist/commands/form-field-linkage.js +6 -11
  23. package/dist/commands/form-field-linkage.js.map +1 -1
  24. package/dist/commands/form-layout-detail-settings.d.ts +3 -0
  25. package/dist/commands/form-layout-detail-settings.d.ts.map +1 -0
  26. package/dist/commands/form-layout-detail-settings.js +36 -0
  27. package/dist/commands/form-layout-detail-settings.js.map +1 -0
  28. package/dist/commands/form-list-columns.d.ts.map +1 -1
  29. package/dist/commands/form-list-columns.js +178 -5
  30. package/dist/commands/form-list-columns.js.map +1 -1
  31. package/dist/commands/form-list-config.d.ts.map +1 -1
  32. package/dist/commands/form-list-config.js +81 -5
  33. package/dist/commands/form-list-config.js.map +1 -1
  34. package/dist/commands/form-list-event.d.ts.map +1 -1
  35. package/dist/commands/form-list-event.js +2 -1
  36. package/dist/commands/form-list-event.js.map +1 -1
  37. package/dist/commands/form-list-hierarchy.d.ts.map +1 -1
  38. package/dist/commands/form-list-hierarchy.js +2 -1
  39. package/dist/commands/form-list-hierarchy.js.map +1 -1
  40. package/dist/commands/form-list-utils.d.ts.map +1 -1
  41. package/dist/commands/form-list-utils.js +4 -3
  42. package/dist/commands/form-list-utils.js.map +1 -1
  43. package/dist/commands/form-list.d.ts.map +1 -1
  44. package/dist/commands/form-list.js +2 -1
  45. package/dist/commands/form-list.js.map +1 -1
  46. package/dist/commands/form-nlist.d.ts.map +1 -1
  47. package/dist/commands/form-nlist.js +77 -0
  48. package/dist/commands/form-nlist.js.map +1 -1
  49. package/dist/commands/form-permission.d.ts.map +1 -1
  50. package/dist/commands/form-permission.js +743 -77
  51. package/dist/commands/form-permission.js.map +1 -1
  52. package/dist/commands/page-combination.d.ts +3 -0
  53. package/dist/commands/page-combination.d.ts.map +1 -0
  54. package/dist/commands/page-combination.js +86 -0
  55. package/dist/commands/page-combination.js.map +1 -0
  56. package/dist/commands/page-permission.d.ts +3 -0
  57. package/dist/commands/page-permission.d.ts.map +1 -0
  58. package/dist/commands/page-permission.js +46 -0
  59. package/dist/commands/page-permission.js.map +1 -0
  60. package/dist/services/actionflow/components/action_eb_update.d.ts.map +1 -1
  61. package/dist/services/actionflow/components/action_eb_update.js +7 -0
  62. package/dist/services/actionflow/components/action_eb_update.js.map +1 -1
  63. package/dist/services/actionflow/components/enquiry_form.js +1 -1
  64. package/dist/services/actionflow/components/enquiry_form.js.map +1 -1
  65. package/dist/services/actionflow/components/form_data_builder.d.ts.map +1 -1
  66. package/dist/services/actionflow/components/form_data_builder.js +19 -3
  67. package/dist/services/actionflow/components/form_data_builder.js.map +1 -1
  68. package/dist/services/actionflow/context_discovery.d.ts +2 -0
  69. package/dist/services/actionflow/context_discovery.d.ts.map +1 -1
  70. package/dist/services/actionflow/context_discovery.js +32 -4
  71. package/dist/services/actionflow/context_discovery.js.map +1 -1
  72. package/dist/services/actionflow/context_preflight.d.ts.map +1 -1
  73. package/dist/services/actionflow/context_preflight.js +20 -3
  74. package/dist/services/actionflow/context_preflight.js.map +1 -1
  75. package/dist/services/actionflow/formula_service.d.ts.map +1 -1
  76. package/dist/services/actionflow/formula_service.js +5 -8
  77. package/dist/services/actionflow/formula_service.js.map +1 -1
  78. package/dist/services/actionflow/preflight_service.d.ts +8 -0
  79. package/dist/services/actionflow/preflight_service.d.ts.map +1 -1
  80. package/dist/services/actionflow/preflight_service.js +80 -13
  81. package/dist/services/actionflow/preflight_service.js.map +1 -1
  82. package/dist/services/actionflow/workflow_compiler.d.ts +1 -1
  83. package/dist/services/actionflow/workflow_compiler.d.ts.map +1 -1
  84. package/dist/services/actionflow/workflow_compiler.js +27 -13
  85. package/dist/services/actionflow/workflow_compiler.js.map +1 -1
  86. package/dist/services/designer-event.d.ts +54 -0
  87. package/dist/services/designer-event.d.ts.map +1 -0
  88. package/dist/services/designer-event.js +312 -0
  89. package/dist/services/designer-event.js.map +1 -0
  90. package/dist/services/designer-source.d.ts +46 -0
  91. package/dist/services/designer-source.d.ts.map +1 -0
  92. package/dist/services/designer-source.js +145 -0
  93. package/dist/services/designer-source.js.map +1 -0
  94. package/dist/services/field-identity.d.ts +3 -0
  95. package/dist/services/field-identity.d.ts.map +1 -0
  96. package/dist/services/field-identity.js +8 -0
  97. package/dist/services/field-identity.js.map +1 -0
  98. package/dist/services/form-layout-detail-advanced.d.ts +10 -0
  99. package/dist/services/form-layout-detail-advanced.d.ts.map +1 -0
  100. package/dist/services/form-layout-detail-advanced.js +134 -0
  101. package/dist/services/form-layout-detail-advanced.js.map +1 -0
  102. package/dist/services/form-layout-detail-settings.d.ts +151 -0
  103. package/dist/services/form-layout-detail-settings.d.ts.map +1 -0
  104. package/dist/services/form-layout-detail-settings.js +131 -0
  105. package/dist/services/form-layout-detail-settings.js.map +1 -0
  106. package/dist/services/form-list-columns.d.ts.map +1 -1
  107. package/dist/services/form-list-columns.js +2 -1
  108. package/dist/services/form-list-columns.js.map +1 -1
  109. package/dist/services/form-list-config.d.ts +36 -1
  110. package/dist/services/form-list-config.d.ts.map +1 -1
  111. package/dist/services/form-list-config.js +252 -23
  112. package/dist/services/form-list-config.js.map +1 -1
  113. package/dist/services/form-list-fields.d.ts +3 -1
  114. package/dist/services/form-list-fields.d.ts.map +1 -1
  115. package/dist/services/form-list-fields.js +95 -16
  116. package/dist/services/form-list-fields.js.map +1 -1
  117. package/dist/services/form-list-search-group.d.ts.map +1 -1
  118. package/dist/services/form-list-search-group.js +3 -2
  119. package/dist/services/form-list-search-group.js.map +1 -1
  120. package/dist/services/form-list-search.d.ts.map +1 -1
  121. package/dist/services/form-list-search.js +3 -13
  122. package/dist/services/form-list-search.js.map +1 -1
  123. package/dist/services/form-list-table-fields.d.ts +58 -0
  124. package/dist/services/form-list-table-fields.d.ts.map +1 -0
  125. package/dist/services/form-list-table-fields.js +265 -0
  126. package/dist/services/form-list-table-fields.js.map +1 -0
  127. package/dist/services/form-nlist-field-attrs.d.ts +43 -0
  128. package/dist/services/form-nlist-field-attrs.d.ts.map +1 -0
  129. package/dist/services/form-nlist-field-attrs.js +170 -0
  130. package/dist/services/form-nlist-field-attrs.js.map +1 -0
  131. package/dist/services/form-nlist.d.ts.map +1 -1
  132. package/dist/services/form-nlist.js +4 -3
  133. package/dist/services/form-nlist.js.map +1 -1
  134. package/dist/services/form-permission-edit.d.ts +115 -0
  135. package/dist/services/form-permission-edit.d.ts.map +1 -0
  136. package/dist/services/form-permission-edit.js +552 -0
  137. package/dist/services/form-permission-edit.js.map +1 -0
  138. package/dist/services/matrix-condition.d.ts +0 -30
  139. package/dist/services/matrix-condition.d.ts.map +1 -1
  140. package/dist/services/matrix-condition.js +3 -2
  141. package/dist/services/matrix-condition.js.map +1 -1
  142. package/dist/services/page-combination.d.ts +58 -0
  143. package/dist/services/page-combination.d.ts.map +1 -0
  144. package/dist/services/page-combination.js +296 -0
  145. package/dist/services/page-combination.js.map +1 -0
  146. package/dist/services/page-permission.d.ts +74 -0
  147. package/dist/services/page-permission.d.ts.map +1 -0
  148. package/dist/services/page-permission.js +287 -0
  149. package/dist/services/page-permission.js.map +1 -0
  150. package/dist/services/report/verify.d.ts.map +1 -1
  151. package/dist/services/report/verify.js +1 -7
  152. package/dist/services/report/verify.js.map +1 -1
  153. package/package.json +1 -1
  154. package/skill-docs/SKILL.md +14 -4
  155. package/skill-docs/_catalog.md +7 -0
  156. package/skill-docs/actionflows/SKILL.md +7 -3
  157. package/skill-docs/actionflows/references/components/ebuilder/ActionEbAdd.md +5 -1
  158. package/skill-docs/actionflows/references/components/ebuilder/ActionEbUpdate.md +5 -1
  159. package/skill-docs/actionflows/references/components/ebuilder/EnquiryForm.md +2 -0
  160. package/skill-docs/references/common/ref-cli-commands.md +20 -5
  161. package/skill-docs/references/ebuilder-designer/events/actions-integration.md +88 -0
  162. package/skill-docs/references/ebuilder-designer/events/actions-interaction.md +108 -0
  163. package/skill-docs/references/ebuilder-designer/events/guide-events.md +57 -0
  164. package/skill-docs/references/ebuilder-designer/guide-designer.md +296 -288
  165. package/skill-docs/references/ebuilder-designer/guide-page-combination.md +142 -0
  166. package/skill-docs/references/ebuilder-designer/guide-page-permission.md +145 -0
  167. package/skill-docs/references/ebuilder-designer/page-source/page-source-guide.md +129 -0
  168. package/skill-docs/references/ebuilder-designer/page-source/sdk-chart.md +49 -0
  169. package/skill-docs/references/ebuilder-designer/page-source/sdk-coverage.json +372 -0
  170. package/skill-docs/references/ebuilder-designer/page-source/sdk-date.md +54 -0
  171. package/skill-docs/references/ebuilder-designer/page-source/sdk-dialogs.md +279 -0
  172. package/skill-docs/references/ebuilder-designer/page-source/sdk-form.md +255 -0
  173. package/skill-docs/references/ebuilder-designer/page-source/sdk-foundations.md +401 -0
  174. package/skill-docs/references/ebuilder-designer/page-source/sdk-index.md +34 -0
  175. package/skill-docs/references/ebuilder-designer/page-source/sdk-list.md +297 -0
  176. package/skill-docs/references/ebuilder-designer/page-source/sdk-native.md +193 -0
  177. package/skill-docs/references/ebuilder-designer/page-source/sdk-navigation.md +156 -0
  178. package/skill-docs/references/ebuilder-designer/page-source/sdk-other.md +242 -0
  179. package/skill-docs/references/ebuilder-designer/page-source/sdk-refresh.md +132 -0
  180. package/skill-docs/references/ebuilder-designer/page-source/sdk-sql.md +39 -0
  181. package/skill-docs/references/form/guide-form-permission.md +185 -0
  182. package/skill-docs/references/form/guide-form-view.md +725 -624
  183. package/skill-docs/references/form/layout/detail-advanced.md +124 -0
  184. package/skill-docs/references/form/layout/detail-settings.md +106 -0
  185. package/skill-docs/references/form/layout/layout-overview.md +2 -0
@@ -0,0 +1,54 @@
1
+ import type { ApiClient } from '../core/client.js';
2
+ type Client = Pick<ApiClient, 'get' | 'post' | 'postMultipart'>;
3
+ export type EventScope = {
4
+ compId?: string;
5
+ collection?: string;
6
+ itemId?: string;
7
+ };
8
+ export declare const EVENT_OPEN_MODES: {
9
+ '4': string;
10
+ '0': string;
11
+ '5': string;
12
+ '1': string;
13
+ '7': string;
14
+ };
15
+ export declare const EVENT_ACTIONS: Record<string, {
16
+ label: string;
17
+ key?: string;
18
+ }>;
19
+ export declare function eventTarget(layout: any, scope: EventScope): any;
20
+ export declare function validateEventGroups(groups: any): void;
21
+ export declare function compileEventJs(code: string): any;
22
+ export declare function eventCondition(spec: any): any;
23
+ export declare function compileEventAction(input: any, layout: any, previous?: any, depth?: number): any;
24
+ export declare function patchDesignerEvent(layouts: any[], scope: EventScope, terminal: string, trigger: string, operation: 'set' | 'remove' | 'enable', input: any): any;
25
+ export declare function mutateDesignerEvent(client: Client, base: string, pageId: string, scope: EventScope, terminal: string, trigger: string, op: 'set' | 'remove' | 'enable', input: any, apply: boolean): Promise<{
26
+ saved: boolean;
27
+ changed: boolean;
28
+ pageId: string;
29
+ terminal: string;
30
+ trigger: string;
31
+ scope: EventScope;
32
+ layouts: any;
33
+ } | {
34
+ saved: boolean;
35
+ changed: boolean;
36
+ pageId: string;
37
+ terminal: string;
38
+ trigger: string;
39
+ scope: EventScope;
40
+ layouts?: undefined;
41
+ }>;
42
+ export declare function createRefreshCondition(client: Client, base: string, compId: string, sqlWhere: string, apply: boolean): Promise<{
43
+ saved: boolean;
44
+ compId: string;
45
+ sqlWhere: string;
46
+ id?: undefined;
47
+ } | {
48
+ saved: boolean;
49
+ id: string;
50
+ compId: string;
51
+ sqlWhere: string;
52
+ }>;
53
+ export {};
54
+ //# sourceMappingURL=designer-event.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"designer-event.d.ts","sourceRoot":"","sources":["../../src/services/designer-event.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAMnD,KAAK,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,KAAK,GAAG,MAAM,GAAG,eAAe,CAAC,CAAC;AAChE,MAAM,MAAM,UAAU,GAAG;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AACnF,eAAO,MAAM,gBAAgB;;;;;;CAAqE,CAAC;AACnG,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,CASzE,CAAC;AAiBF,wBAAgB,WAAW,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,UAAU,OAQzD;AACD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,GAAG,QAQ9C;AACD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,OAI1C;AACD,wBAAgB,cAAc,CAAC,IAAI,EAAE,GAAG,GAAG,GAAG,CAe7C;AAOD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,CAAC,EAAE,GAAG,EAAE,KAAK,SAAI,GAAG,GAAG,CAwD1F;AAcD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,EAAE,KAAK,EAAE,GAAG,OAoB1J;AACD,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO;;;;;;;;;;;;;;;;GAcxM;AACD,wBAAsB,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO;;;;;;;;;;GAM1H"}
@@ -0,0 +1,312 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import { createRequire } from 'node:module';
3
+ import { lzwCompress } from '../core/lzw.js';
4
+ import { readSourceLayouts } from './designer-source.js';
5
+ const require = createRequire(import.meta.url);
6
+ const Babel = require('../../ecodecmd/src/lib/@babel/standalone@7.5.5/babel.js');
7
+ const uid = () => randomUUID().replace(/-/g, '');
8
+ export const EVENT_OPEN_MODES = { '4': '当前页面', '0': '新窗口', '5': '弹出窗口', '1': '右侧滑出', '7': '右侧推出' };
9
+ export const EVENT_ACTIONS = {
10
+ NewPage: { label: '打开页面', key: 'linkInfo' }, RefreshComp: { label: '刷新组件', key: 'refreshInfo' }, ClosePage: { label: '关闭页面' },
11
+ IF: { label: '条件控制', key: 'conditionData' }, JsCode: { label: 'JavaScript', key: 'jsCode' },
12
+ ShowHideComponent: { label: '显示/隐藏组件', key: 'displayComs' }, ShowMenu: { label: '显示菜单', key: 'menuInfo' },
13
+ ScanUpload: { label: '扫描上传', key: 'scanUploadInfo' }, CopyLink: { label: '复制链接' },
14
+ LoginAuthentication: { label: '身份识别', key: 'loginAuthenticationInfo' }, EsbFlow: { label: '执行 ESB', key: 'esbFlow' },
15
+ ExecLogicFlow: { label: '执行逻辑流', key: 'execLogicFlow' }, OpenWeComSession: { label: '打开企业微信会话', key: 'openWeComSession' },
16
+ StartSignAction: { label: '发起签署', key: 'startSignAction' }, ReportPrint: { label: '报表打印' }, ReportExport: { label: '报表导出' },
17
+ CreateReportShot: { label: '生成报表快照' }, ViewReportShot: { label: '查看报表快照' },
18
+ };
19
+ function check(value, message) { if (!value)
20
+ throw new Error(message); }
21
+ function object(v, allowed) { check(v && typeof v === 'object' && !Array.isArray(v), '配置必须为对象'); if (allowed)
22
+ check(Object.keys(v).every(k => allowed.includes(k)), '配置包含未知属性'); }
23
+ function response(r, label) { check(r?.code === 200 && r.status === true && r.fail !== true && r.data !== undefined && r.data !== false, `${label}失败:${r?.msg || '无效响应'}`); return r.data; }
24
+ function stable(v) { return Array.isArray(v) ? v.map(stable) : v && typeof v === 'object' ? Object.fromEntries(Object.keys(v).sort().map(k => [k, stable(v[k])])) : v; }
25
+ const same = (a, b) => JSON.stringify(stable(a)) === JSON.stringify(stable(b));
26
+ function savedComps(comps) {
27
+ const value = clone(comps);
28
+ for (const c of value) {
29
+ if (c.type === 'NList' && c.config) {
30
+ delete c.config._fieldUsageLastChangeId;
31
+ delete c.config._fieldUsageUpdateTime;
32
+ }
33
+ // The platform materializes the default when a component receives its first event.
34
+ if (c.config?.layout && c.config.layout.hidden === undefined)
35
+ c.config.layout.hidden = false;
36
+ }
37
+ return value;
38
+ }
39
+ const clone = (x) => structuredClone(x);
40
+ const eventNames = { CLICK: '单击', DIDMOUNT: '加载完成' };
41
+ export function eventTarget(layout, scope) {
42
+ if (!scope.compId) {
43
+ check(!scope.collection && !scope.itemId, '子项必须指定组件');
44
+ return layout.config ||= {};
45
+ }
46
+ const matches = layout.comps.filter((c) => String(c.id) === scope.compId);
47
+ check(matches.length === 1, '组件不属于该终端或未唯一匹配');
48
+ const config = matches[0].config ||= {};
49
+ if (!scope.collection) {
50
+ check(!scope.itemId, '子项需要 collection');
51
+ return config;
52
+ }
53
+ check(['menuConfig', 'btnGroup', 'navMenus', 'newButtons'].includes(scope.collection) && scope.itemId, '子项集合或 ID 无效');
54
+ const items = config[scope.collection];
55
+ check(Array.isArray(items), '组件没有指定子项集合');
56
+ const rows = items.filter((x) => String(x.id) === scope.itemId);
57
+ check(rows.length === 1, '子项未唯一匹配');
58
+ return rows[0];
59
+ }
60
+ export function validateEventGroups(groups) {
61
+ check(Array.isArray(groups) && groups.every(Array.isArray), 'eventGroup 必须为双层数组');
62
+ const seen = new Set();
63
+ for (const entry of groups.flat()) {
64
+ check(entry && typeof entry.type === 'string' && entry.id, '事件类型或 ID 缺失');
65
+ check(!seen.has(entry.type), '同一触发事件最多配置一条');
66
+ seen.add(entry.type);
67
+ check(Array.isArray(entry.events) && entry.events.length <= 1, '每种触发事件最多一个动作');
68
+ }
69
+ }
70
+ export function compileEventJs(code) {
71
+ check(typeof code === 'string', 'JavaScript code 必须为字符串');
72
+ try {
73
+ return Babel.transform(code, { filename: 'event.js', sourceType: 'script', parserOpts: { allowReturnOutsideFunction: true }, presets: ['es2015', 'react', ['stage-2', { decoratorsLegacy: true, loose: true }]], plugins: ['proposal-object-rest-spread', 'proposal-optional-chaining'] }).code;
74
+ }
75
+ catch (e) {
76
+ throw new Error(`事件 JavaScript 编译失败:${e.message}`);
77
+ }
78
+ }
79
+ export function eventCondition(spec) {
80
+ let count = 0;
81
+ const build = (n, parent, depth) => {
82
+ check(depth <= 12 && ++count <= 500, '条件树过深或过大');
83
+ const key = uid();
84
+ if (n?.rules !== undefined) {
85
+ object(n, ['logic', 'rules']);
86
+ check(['and', 'or'].includes(n.logic) && Array.isArray(n.rules) && n.rules.length, '条件组需 and/or 和非空 rules');
87
+ // This event condition protocol uses 1 = AND, 0 = OR (different from other scopes).
88
+ return { key, relationship: n.logic === 'and' ? '1' : '0', isParent: true, parentNode: parent, datas: n.rules.map((r) => build(r, key, depth + 1)) };
89
+ }
90
+ object(n, ['left', 'operator', 'right']);
91
+ check(typeof n.left === 'string' && n.left, '条件 left 需平台表达式或文字');
92
+ check(['eq', 'gt'].includes(n.operator), '当前事件规则结构化条件支持 eq/gt;其他操作符需补充本入口依据');
93
+ check(typeof n.right === 'string', '条件 right 必须为字符串');
94
+ return { isParent: false, parentNode: parent, id: `Custom_${uid()}`, fieldName: 'customField', fieldType: 'String', text: n.left, objId: '', optionType: '', compType: 'Text', formatType: '', opts: [], type: 'condition', conditions: { func: n.operator, value: n.right, type: '', text: '', isEsb: false }, refObjId: '', key };
95
+ };
96
+ return build(spec.rules !== undefined ? spec : { logic: 'and', rules: [spec] }, '', 0);
97
+ }
98
+ function conditionText(tree) {
99
+ if (tree.isParent)
100
+ return `(${tree.datas.map(conditionText).join(tree.relationship === '1' ? ' AND ' : ' OR ')})`;
101
+ return `${tree.text} ${tree.conditions.func === 'gt' ? '大于' : '等于'} ${JSON.stringify(tree.conditions.value)}`;
102
+ }
103
+ function requireComp(layout, id) { check(typeof id === 'string' && layout.comps.some((c) => String(c.id) === id), `目标组件 ${id} 不属于本终端`); }
104
+ function realObjects(rows, label, minimum = 1) { check(Array.isArray(rows) && rows.length >= minimum && rows.every((x) => x && typeof x.id === 'string' && x.id), `${label}需要真实浏览对象数组`); }
105
+ export function compileEventAction(input, layout, previous, depth = 0) {
106
+ check(depth <= 8, '菜单子事件嵌套过深');
107
+ object(input, ['type', 'enabled', 'config']);
108
+ const descriptor = EVENT_ACTIONS[input.type];
109
+ check(descriptor, '不支持该事件动作类型');
110
+ if (input.enabled !== undefined)
111
+ check(typeof input.enabled === 'boolean', 'enabled 必须为布尔值');
112
+ const a = { id: previous?.id || uid(), type: input.type, enable: input.enabled ?? true };
113
+ const config = clone(input.config ?? {});
114
+ if (!descriptor.key) {
115
+ check(Object.keys(config).length === 0, '此动作不接收 config');
116
+ return a;
117
+ }
118
+ if (input.type === 'JsCode') {
119
+ object(config, ['code']);
120
+ a.jsCode = { code: config.code, compiledCode: compileEventJs(config.code) };
121
+ return a;
122
+ }
123
+ if (input.type === 'IF') {
124
+ object(config, ['mode', 'title', 'content', 'confirmText', 'cancelText', 'condition']);
125
+ check(['rule', 'dialog'].includes(config.mode), '条件 mode 只能为 rule/dialog');
126
+ a.conditionData = { conditionType: config.mode === 'rule' ? 'Rule' : 'Dialog', conditionTitle: config.title ?? '确认', conditionContent: config.content ?? '', confirmBtnText: config.confirmText ?? '是', cancelBtnText: config.cancelText ?? '否' };
127
+ if (config.mode === 'rule') {
128
+ check(config.condition, '规则模式需要 condition');
129
+ a.conditionData.conditions = eventCondition(config.condition);
130
+ a.conditionData.conditionsText = conditionText(a.conditionData.conditions);
131
+ }
132
+ return a;
133
+ }
134
+ if (input.type === 'ShowHideComponent') {
135
+ check(Array.isArray(config) && config.length, '显示隐藏 config 为非空数组');
136
+ for (const item of config) {
137
+ object(item, ['id', 'display', 'children']);
138
+ requireComp(layout, item.id);
139
+ check(['show', 'hide', 'switchover'].includes(item.display), 'display 需 show/hide/switchover');
140
+ if (item.children !== undefined) {
141
+ check(Array.isArray(item.children), 'children 需数组');
142
+ for (const child of item.children) {
143
+ check(child.id && ['show', 'hide', 'switchover'].includes(child.display), '子项显示设置无效');
144
+ const parent = layout.comps.find((c) => c.id === item.id);
145
+ check(['menuConfig', 'btnGroup', 'navMenus', 'newButtons'].some(k => parent.config?.[k]?.some((x) => x.id === child.id)), '显示隐藏子项不属于目标组件');
146
+ }
147
+ }
148
+ }
149
+ a.displayComs = config;
150
+ return a;
151
+ }
152
+ object(config);
153
+ if (input.type === 'NewPage') {
154
+ check(config.page && typeof config.page.pageId === 'string' && config.page.pageName && config.page.pageType && config.page.appid, 'linkInfo 需真实 page 对象');
155
+ check(['0', '1', '4', '5', '7'].includes(String(config.openMode)), '打开方式仅支持本入口 0/1/4/5/7');
156
+ if (config.paramsMode !== undefined)
157
+ check(['1', '2'].includes(String(config.paramsMode)), 'paramsMode 仅接受 1/2');
158
+ check(config.params === undefined || Array.isArray(config.params), 'params 需要数组');
159
+ for (const p of config.params || [])
160
+ check(p.name && p.type === 'fixed' && typeof p.value === 'string', '本轮打开页面参数支持 name/value/type:fixed');
161
+ if (config.isBlankClose !== undefined)
162
+ check(typeof config.isBlankClose === 'boolean', 'isBlankClose 必须为布尔值');
163
+ }
164
+ else if (input.type === 'RefreshComp') {
165
+ check(Array.isArray(config.selectedCom) && config.selectedCom.length, '刷新需要 selectedCom');
166
+ config.selectedCom.forEach((id) => requireComp(layout, id));
167
+ if (config.conditionSet?.type === 'sql_where')
168
+ check(config.conditionSet.data?.condition && config.conditionSet.data?.sourceId, 'SQL 刷新条件需要已创建的 condition ID 和数据源 ID');
169
+ for (const k of ['filterIsNull', 'isOverrideFilter'])
170
+ if (config[k] !== undefined)
171
+ check(typeof config[k] === 'boolean', `${k} 必须为布尔值`);
172
+ }
173
+ else if (input.type === 'ShowMenu') {
174
+ check(['dropDownMenu', 'footerMenu'].includes(config.menuType), 'menuType 需 dropDownMenu/footerMenu');
175
+ check(['vertical', 'horizontal'].includes(config.displayMode), 'displayMode 需 vertical/horizontal');
176
+ check(Array.isArray(config.menuItems), 'menuItems 需数组');
177
+ for (const m of config.menuItems) {
178
+ m.id ||= uid();
179
+ check(typeof m.menuName === 'string' && m.menuName, '菜单项需要 menuName');
180
+ if (m.action !== undefined) {
181
+ check(!m.menuEvent, '菜单项 action 与 menuEvent 二选一');
182
+ const child = compileEventAction(m.action, layout, undefined, depth + 1);
183
+ m.menuEvent = [[{ type: 'CLICK', name: '单击', id: uid(), disableDelete: true, events: [child] }]];
184
+ delete m.action;
185
+ }
186
+ validateEventGroups(m.menuEvent || []);
187
+ }
188
+ }
189
+ else if (input.type === 'ScanUpload') {
190
+ realObjects(config.deviceType, '设备类型');
191
+ realObjects(config.useDevice, '扫描设备');
192
+ for (const k of ['deviceTypeSelect', 'dataProcess', 'fileType', 'uploadPathSelect', 'scanFileNameType'])
193
+ check(typeof config[k] === 'string', `扫描设置缺少 ${k}`);
194
+ if (config.actionFlow?.length)
195
+ realObjects(config.actionFlow, '动作流');
196
+ for (const k of ['isMerge', 'isAutoCheck', 'isParallel'])
197
+ if (config[k] !== undefined)
198
+ check(typeof config[k] === 'boolean', `${k} 需布尔值`);
199
+ }
200
+ else if (input.type === 'LoginAuthentication') {
201
+ realObjects(config.deviceType, '识别类型');
202
+ realObjects(config.useDevice, '识别设备');
203
+ }
204
+ else if (input.type === 'EsbFlow') {
205
+ realObjects(config.esbData, 'ESB');
206
+ check(config.params && Array.isArray(config.params.tableList), 'ESB 需要完整输入表结构 params.tableList');
207
+ }
208
+ else if (input.type === 'ExecLogicFlow') {
209
+ realObjects(config.data, '前端逻辑流');
210
+ check(config.data.every((x) => x.type === 'FRONTEND'), '只能绑定前端逻辑流');
211
+ check(Array.isArray(config.inputParams), 'inputParams 需数组');
212
+ }
213
+ else if (input.type === 'OpenWeComSession') {
214
+ check(typeof config.chatidInput === 'string' && config.chatidInputType === 'fixvalue' && config.useridsType === 'fixvalue', '当前企业微信输入支持 fixvalue');
215
+ realObjects(config.userids, '会话人员', 0);
216
+ check(typeof config.chatidOutput === 'string', 'chatidOutput 需变量名字符串');
217
+ }
218
+ else if (input.type === 'StartSignAction') {
219
+ // Only the empty selector was captured; do not invent the nonempty target serialization.
220
+ throw new Error('签署动作目前仅可查询、保留、删除或启停;需非空签署设置保存报文后才能新增/替换');
221
+ }
222
+ a[descriptor.key] = config;
223
+ return a;
224
+ }
225
+ function pairScope(layouts, primary, target, scope) {
226
+ if (!scope.compId || primary.id === target.id)
227
+ return scope;
228
+ const comp = primary.comps.find((c) => c.id === scope.compId);
229
+ check(comp?.refCompId, '组件缺少另一终端配对');
230
+ check(target.comps.some((c) => c.id === comp.refCompId && c.refCompId === comp.id), '组件跨端引用未互相匹配');
231
+ return { ...scope, compId: comp.refCompId };
232
+ }
233
+ function remapAction(input, primary, target) {
234
+ const next = clone(input);
235
+ const map = (id) => { const c = primary.comps.find((x) => x.id === id); check(c?.refCompId && target.comps.some((x) => x.id === c.refCompId), `目标组件 ${id} 无跨端配对`); return c.refCompId; };
236
+ if (next.type === 'RefreshComp')
237
+ next.config.selectedCom = next.config.selectedCom.map(map);
238
+ if (next.type === 'ShowHideComponent')
239
+ next.config.forEach((x) => { x.id = map(x.id); });
240
+ return next;
241
+ }
242
+ export function patchDesignerEvent(layouts, scope, terminal, trigger, operation, input) {
243
+ check(['pc', 'mobile', 'both'].includes(terminal), 'terminal 需 pc/mobile/both');
244
+ check(eventNames[trigger], '仅支持 CLICK/DIDMOUNT');
245
+ const next = clone(layouts), primary = next.find((l) => l.terminalType === (terminal === 'mobile' ? 'MOBILE' : 'PC'));
246
+ check(primary, '缺少目标终端');
247
+ const targets = terminal === 'both' ? next.filter((l) => ['PC', 'MOBILE'].includes(l.terminalType)) : [primary];
248
+ if (terminal === 'both')
249
+ check(targets.length === 2, 'both 需要完整 PC/MOBILE 两端');
250
+ for (const layout of targets) {
251
+ const target = eventTarget(layout, pairScope(next, primary, layout, scope)), groups = target.eventGroup || [];
252
+ validateEventGroups(groups);
253
+ const entries = groups.flat(), hits = entries.filter((e) => e.type === trigger);
254
+ check(hits.length <= 1, '事件重复,不能按类型唯一定位');
255
+ if (operation === 'remove') {
256
+ check(hits.length === 1, '没有对应事件');
257
+ target.eventGroup = groups.map((g) => g.filter(e => e.type !== trigger)).filter((g) => g.length);
258
+ }
259
+ else if (operation === 'enable') {
260
+ check(hits.length === 1 && hits[0].events.length === 1, '没有对应动作');
261
+ check(typeof input === 'boolean', '启停需布尔值');
262
+ hits[0].events[0].enable = input;
263
+ }
264
+ else {
265
+ const actionInput = layout.id === primary.id ? input : remapAction(input, primary, layout);
266
+ const old = hits[0];
267
+ const action = compileEventAction(actionInput, layout, old?.events[0]);
268
+ const entry = { ...(old || {}), id: old?.id || uid(), type: trigger, name: eventNames[trigger], disableDelete: old?.disableDelete ?? false, events: [action], actionDesc: EVENT_ACTIONS[action.type].label };
269
+ if (old)
270
+ target.eventGroup = groups.map((g) => g.map(e => e.type === trigger ? entry : e));
271
+ else
272
+ target.eventGroup = groups.length ? groups.map((g, i) => i === 0 ? [...g, entry] : g) : [[entry]];
273
+ }
274
+ validateEventGroups(target.eventGroup);
275
+ }
276
+ return next;
277
+ }
278
+ export async function mutateDesignerEvent(client, base, pageId, scope, terminal, trigger, op, input, apply) {
279
+ check(/^[1-9]\d*$/.test(pageId), 'pageId 必须为正整数字符串');
280
+ const infoUrl = `${base}/api/bs/ebuilder/designer/layout/page/info?pageId=${pageId}`;
281
+ const info = response(await client.get(infoUrl), '读取页面');
282
+ check(info.module === 'EB_PAGE' && String(info.pageId || info.id) === pageId && info.allowEdit === true && !info.isLock, '页面身份、编辑权限或软锁状态不允许保存');
283
+ const before = await readSourceLayouts(client, base, pageId), after = patchDesignerEvent(before, scope, terminal, trigger, op, input);
284
+ const changed = !same(before, after);
285
+ if (!apply || !changed)
286
+ return { saved: apply, changed, pageId, terminal, trigger, scope, layouts: after };
287
+ check(same(before, await readSourceLayouts(client, base, pageId)), '布局已变化,停止覆盖');
288
+ const latestInfo = response(await client.get(infoUrl), '检查编辑状态');
289
+ check(latestInfo.allowEdit === true && !latestInfo.isLock, '页面编辑状态变化');
290
+ response(await client.post(`${base}/api/bs/ebuilder/designer/layout/save?pageId=${pageId}`, lzwCompress(JSON.stringify(after)), { 'content-type': 'application/json;charset=UTF-8', ebbusinessid: pageId }), '保存事件');
291
+ const readback = await readSourceLayouts(client, base, pageId);
292
+ check(readback.length === after.length, '保存后布局集合变化');
293
+ for (const l of after) {
294
+ const actual = readback.find((x) => String(x.id) === String(l.id));
295
+ check(actual && same(savedComps(l.comps), savedComps(actual.comps)) && same(l.config, actual.config) && same(l.sourceCode, actual.sourceCode), '事件保存后回读不一致,请检查实际状态');
296
+ }
297
+ const unlock = await client.post(`${base}/api/bs/ebuilder/designer/layout/lock?pageId=${pageId}&isLock=false`, {});
298
+ check(unlock?.code === 200 && unlock.status === true, '事件已保存,但释放本次软锁失败');
299
+ return { saved: true, changed: true, pageId, terminal, trigger, scope };
300
+ }
301
+ export async function createRefreshCondition(client, base, compId, sqlWhere, apply) {
302
+ check(/^[a-fA-F0-9]{32}$/.test(compId) && typeof sqlWhere === 'string' && sqlWhere.trim(), '需要真实组件 ID 及非空 SQL WHERE');
303
+ if (!apply)
304
+ return { saved: false, compId, sqlWhere };
305
+ const form = new FormData();
306
+ form.set('compId', compId);
307
+ form.set('conditionValue', lzwCompress(sqlWhere));
308
+ const id = response(await client.postMultipart(`${base}/api/ebuilder/designer/comssdk/condition/create`, form), '创建刷新条件');
309
+ check(typeof id === 'string' && /^[1-9]\d*$/.test(id), '条件 ID 无效');
310
+ return { saved: true, id, compId, sqlWhere };
311
+ }
312
+ //# sourceMappingURL=designer-event.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"designer-event.js","sourceRoot":"","sources":["../../src/services/designer-event.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ import type { ApiClient } from '../core/client.js';
2
+ type Client = Pick<ApiClient, 'get' | 'post'>;
3
+ export declare function decodePageSource(layout: any): any;
4
+ export declare function compilePageJs(source: string): string;
5
+ /** Structural validation only; selectors and property support are checked in the browser. */
6
+ export declare function validatePageCss(source: string): void;
7
+ export declare function patchPageSource(layouts: any[], pageId: string, terminal: string, change: {
8
+ js?: string;
9
+ css?: string;
10
+ }): {
11
+ layouts: any[];
12
+ code: any;
13
+ layoutId: string;
14
+ };
15
+ export declare function readSourceLayouts(client: Client, base: string, pageId: string): Promise<any[]>;
16
+ export declare function readPageSource(client: Client, base: string, pageId: string, terminal: string): Promise<{
17
+ pageId: string;
18
+ layoutId: any;
19
+ terminal: string;
20
+ ecodeId: any;
21
+ ecodeVersion: any;
22
+ code: any;
23
+ }>;
24
+ export declare function writePageSource(client: Client, base: string, pageId: string, terminal: string, change: {
25
+ js?: string;
26
+ css?: string;
27
+ }, apply: boolean): Promise<{
28
+ saved: boolean;
29
+ changed: boolean;
30
+ pageId: string;
31
+ terminal: string;
32
+ layoutId: string;
33
+ code: any;
34
+ response?: undefined;
35
+ } | {
36
+ saved: boolean;
37
+ changed: boolean;
38
+ pageId: string;
39
+ terminal: string;
40
+ layoutId: string;
41
+ response: any;
42
+ code: any;
43
+ }>;
44
+ export declare function readPageSdkCatalog(client: Client, base: string): Promise<any[]>;
45
+ export {};
46
+ //# sourceMappingURL=designer-source.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"designer-source.d.ts","sourceRoot":"","sources":["../../src/services/designer-source.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAKnD,KAAK,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,KAAK,GAAG,MAAM,CAAC,CAAC;AAM9C,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,GAAG,GAAG,GAAG,CAQjD;AACD,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAepD;AACD,6FAA6F;AAC7F,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,QAY7C;AACD,wBAAgB,eAAe,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE;IAAE,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE;;;;EAmBtH;AACD,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,kBAKnF;AACD,wBAAsB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;;;;;;;GAIlG;AACD,wBAAsB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE;IAAE,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,KAAK,EAAE,OAAO;;;;;;;;;;;;;;;;GAuB1J;AACD,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,kBAGpE"}
@@ -0,0 +1,145 @@
1
+ import { createRequire } from 'node:module';
2
+ import { lzwCompress } from '../core/lzw.js';
3
+ import { parseLayoutJson } from './form-layout-source/json.js';
4
+ const require = createRequire(import.meta.url);
5
+ const Babel = require('../../ecodecmd/src/lib/@babel/standalone@7.5.5/babel.js');
6
+ function check(v, msg) { if (!v)
7
+ throw new Error(msg); }
8
+ function result(r, name) { check(r?.code === 200 && r.status === true && r.fail !== true && r.data !== undefined && r.data !== false, `${name}失败:${r?.msg || '无效响应'}`); return r.data; }
9
+ function pageIdentity(id) { check(/^[1-9]\d*$/.test(id), 'pageId 必须是正整数字符串'); }
10
+ function stable(v) { return Array.isArray(v) ? v.map(stable) : v && typeof v === 'object' ? Object.fromEntries(Object.keys(v).sort().map(k => [k, stable(v[k])])) : v; }
11
+ const same = (a, b) => JSON.stringify(stable(a)) === JSON.stringify(stable(b));
12
+ export function decodePageSource(layout) {
13
+ const encoded = layout.sourceCode?.ecode;
14
+ if (!encoded)
15
+ return { js: { content: '', compiledContent: '' }, css: { content: '', compiledContent: '' } };
16
+ check(typeof encoded === 'string', 'ecode 不是编码字符串');
17
+ const decoded = parseLayoutJson(decodeURI(encoded));
18
+ check(decoded && typeof decoded === 'object' && !Array.isArray(decoded), 'ecode 结构无效');
19
+ for (const lang of ['js', 'css'])
20
+ check(decoded[lang] && typeof decoded[lang].content === 'string' && typeof decoded[lang].compiledContent === 'string', `源码缺少完整 ${lang} 内容`);
21
+ return decoded;
22
+ }
23
+ export function compilePageJs(source) {
24
+ if (!source.trim())
25
+ return '';
26
+ let body;
27
+ try {
28
+ // Compile as a module first: exports become assignments on this layout module's exports,
29
+ // while their functions retain the current pageSdk closure when invoked later.
30
+ body = Babel.transform(source, {
31
+ filename: 'index.js', sourceType: 'module', parserOpts: { allowReturnOutsideFunction: true },
32
+ presets: ['es2015', 'react', ['stage-2', { decoratorsLegacy: true, loose: true }]],
33
+ plugins: ['proposal-object-rest-spread', 'proposal-optional-chaining'],
34
+ }).code;
35
+ }
36
+ catch (e) {
37
+ throw new Error(`页面 JavaScript 编译失败:${e.message}`);
38
+ }
39
+ check(!/\bexports\.load\s*=/.test(body) && !/\bexports\[\s*['"]load['"]\s*\]\s*=/.test(body), 'load 是页面运行入口保留导出名');
40
+ body = body.replace(/^"use strict";\s*/, '');
41
+ return `(function () {\n "use strict";\n window.weappEcodesdk.jsonp.export("\${appId}", "index.js", function () {\n var exports = {};\n var require = window.weappEcodesdk.jsonp.require.bind(null, "\${appId}", "index.js");\n Object.defineProperty(exports, "__esModule", { value: true });\n exports.load = function(pageId) {\n var ebSdk = window.ebuilderSDK;\n var pageSdk = window.ebuilderSDK && window.ebuilderSDK.getPageSDK && window.ebuilderSDK.getPageSDK(pageId);\n${body}\n };\n return exports;\n });\n})();`;
42
+ }
43
+ /** Structural validation only; selectors and property support are checked in the browser. */
44
+ export function validatePageCss(source) {
45
+ const stack = [];
46
+ let quote = '';
47
+ let comment = false;
48
+ for (let i = 0; i < source.length; i++) {
49
+ const c = source[i], next = source[i + 1];
50
+ if (comment) {
51
+ if (c === '*' && next === '/') {
52
+ comment = false;
53
+ i++;
54
+ }
55
+ continue;
56
+ }
57
+ if (quote) {
58
+ if (c === '\\')
59
+ i++;
60
+ else if (c === quote)
61
+ quote = '';
62
+ continue;
63
+ }
64
+ if (c === '/' && next === '*') {
65
+ comment = true;
66
+ i++;
67
+ continue;
68
+ }
69
+ if (c === '"' || c === "'") {
70
+ quote = c;
71
+ continue;
72
+ }
73
+ if ('{(['.includes(c))
74
+ stack.push(c);
75
+ else if ('})]'.includes(c))
76
+ check(stack.pop() === { '}': '{', ')': '(', ']': '[' }[c], 'CSS 括号不匹配');
77
+ }
78
+ check(!quote && !comment && stack.length === 0, 'CSS 字符串、注释或括号未闭合');
79
+ }
80
+ export function patchPageSource(layouts, pageId, terminal, change) {
81
+ pageIdentity(pageId);
82
+ check(['PC', 'MOBILE'].includes(terminal), 'terminal 仅支持 pc/mobile');
83
+ check(Object.keys(change).length > 0 && (change.js !== undefined || change.css !== undefined), '至少提供 JS 或 CSS;空字符串用于显式清空');
84
+ check(layouts.length > 0 && layouts.every(l => String(l.pageId) === pageId && l.id && Array.isArray(l.comps)), '布局身份或组件结构不完整');
85
+ const hits = layouts.filter(l => l.terminalType === terminal);
86
+ check(hits.length === 1, '终端布局未唯一匹配');
87
+ const next = structuredClone(layouts), target = next.find(l => l.id === hits[0].id);
88
+ const code = decodePageSource(target);
89
+ if (change.js !== undefined) {
90
+ check(typeof change.js === 'string', 'js 必须为字符串');
91
+ code.js = { ...code.js, content: change.js, compiledContent: compilePageJs(change.js), pageId: `if (${pageId} == String(props.pageId))`, name: 'index', state: 'n' };
92
+ }
93
+ if (change.css !== undefined) {
94
+ check(typeof change.css === 'string', 'css 必须为字符串');
95
+ validatePageCss(change.css);
96
+ // No inferred scoping: keep CSS explicit. A caller can scope to the actual page/comp root.
97
+ code.css = { ...code.css, content: change.css, compiledContent: change.css, name: 'index', state: 'n' };
98
+ }
99
+ target.sourceCode = { ...target.sourceCode, ecode: encodeURI(JSON.stringify(code)) };
100
+ check(same(decodePageSource(target), code), '源码编码往返校验失败');
101
+ return { layouts: next, code, layoutId: String(target.id) };
102
+ }
103
+ export async function readSourceLayouts(client, base, pageId) {
104
+ pageIdentity(pageId);
105
+ const layouts = result(await client.get(`${base}/api/bs/ebuilder/designer/layout/list?pageId=${pageId}&returnCusComp=true`), '读取页面布局');
106
+ check(Array.isArray(layouts) && layouts.length > 0 && layouts.every(l => String(l.pageId) === pageId && l.id && Array.isArray(l.comps)), '页面布局不完整或身份不一致');
107
+ return layouts;
108
+ }
109
+ export async function readPageSource(client, base, pageId, terminal) {
110
+ const layouts = await readSourceLayouts(client, base, pageId);
111
+ const hits = layouts.filter(l => l.terminalType === terminal);
112
+ check(hits.length === 1, '终端布局未唯一匹配');
113
+ return { pageId, layoutId: hits[0].id, terminal, ecodeId: hits[0].ecodeId, ecodeVersion: hits[0].ecodeVersion, code: decodePageSource(hits[0]) };
114
+ }
115
+ export async function writePageSource(client, base, pageId, terminal, change, apply) {
116
+ pageIdentity(pageId);
117
+ const info = result(await client.get(`${base}/api/bs/ebuilder/designer/layout/page/info?pageId=${pageId}`), '读取页面信息');
118
+ check(info.module === 'EB_PAGE' && String(info.pageId || info.id) === pageId, '该命令仅用于 EB 普通页面源码');
119
+ check(info.allowEdit === true && !info.isLock, '页面不可编辑或已锁定;先处理设计器会话,勿覆盖他人的编辑');
120
+ const before = await readSourceLayouts(client, base, pageId), patched = patchPageSource(before, pageId, terminal, change);
121
+ const changed = !same(before, patched.layouts);
122
+ if (!apply || !changed)
123
+ return { saved: apply, changed, pageId, terminal, layoutId: patched.layoutId, code: patched.code };
124
+ const latest = await readSourceLayouts(client, base, pageId);
125
+ check(same(before, latest), '预检期间布局发生变化,停止覆盖,请重新读取');
126
+ const currentInfo = result(await client.get(`${base}/api/bs/ebuilder/designer/layout/page/info?pageId=${pageId}`), '检查编辑状态');
127
+ check(currentInfo.allowEdit === true && !currentInfo.isLock, '预检期间页面编辑状态变化,停止覆盖');
128
+ const response = result(await client.post(`${base}/api/bs/ebuilder/designer/layout/save?pageId=${pageId}`, lzwCompress(JSON.stringify(patched.layouts)), { 'content-type': 'application/json;charset=UTF-8', ebbusinessid: pageId }), '保存页面源码');
129
+ const after = await readSourceLayouts(client, base, pageId);
130
+ check(after.length === before.length && after.every(l => before.some(x => String(x.id) === String(l.id))), '保存后终端布局集合变化');
131
+ for (const expected of patched.layouts) {
132
+ const actual = after.find(l => String(l.id) === String(expected.id));
133
+ check(same(actual.comps, expected.comps) && same(actual.config, expected.config), '源码保存后组件或布局配置变化,请核对实际状态');
134
+ check(same(actual.sourceCode, expected.sourceCode), '源码或编译产物回读不一致,请核对实际状态');
135
+ }
136
+ const unlock = await client.post(`${base}/api/bs/ebuilder/designer/layout/lock?pageId=${pageId}&isLock=false`, {});
137
+ check(unlock?.code === 200 && unlock.status === true, '源码已保存且回读一致,但释放本次保存软锁失败;请查询编辑状态');
138
+ return { saved: true, changed: true, pageId, terminal, layoutId: patched.layoutId, response, code: decodePageSource(after.find(l => String(l.id) === patched.layoutId)) };
139
+ }
140
+ export async function readPageSdkCatalog(client, base) {
141
+ const categories = result(await client.get(`${base}/api/ebuilder/designer/function/listWithCategory?module=EB_PAGE&isCustom=false`), '读取页面 SDK 文档');
142
+ check(Array.isArray(categories) && categories.every(c => Array.isArray(c.functions)), '页面 SDK 文档结构不完整');
143
+ return categories;
144
+ }
145
+ //# sourceMappingURL=designer-source.js.map