weaver-e10-builder 1.5.15 → 1.6.0
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/auth.d.ts.map +1 -1
- package/dist/commands/auth.js +4 -2
- package/dist/commands/auth.js.map +1 -1
- package/dist/commands/form-add-detail-table.d.ts.map +1 -1
- package/dist/commands/form-add-detail-table.js +37 -17
- package/dist/commands/form-add-detail-table.js.map +1 -1
- package/dist/commands/form-ebuilder-scope.d.ts +21 -0
- package/dist/commands/form-ebuilder-scope.d.ts.map +1 -1
- package/dist/commands/form-ebuilder-scope.js +41 -8
- package/dist/commands/form-ebuilder-scope.js.map +1 -1
- package/dist/commands/form-layout-code-reviewed.d.ts +3 -0
- package/dist/commands/form-layout-code-reviewed.d.ts.map +1 -0
- package/dist/commands/form-layout-code-reviewed.js +61 -0
- package/dist/commands/form-layout-code-reviewed.js.map +1 -0
- package/dist/commands/form-layout-describe.d.ts +3 -0
- package/dist/commands/form-layout-describe.d.ts.map +1 -0
- package/dist/commands/form-layout-describe.js +58 -0
- package/dist/commands/form-layout-describe.js.map +1 -0
- package/dist/commands/form-layout-diff.d.ts +3 -0
- package/dist/commands/form-layout-diff.d.ts.map +1 -0
- package/dist/commands/form-layout-diff.js +48 -0
- package/dist/commands/form-layout-diff.js.map +1 -0
- package/dist/commands/form-layout-document.d.ts +3 -0
- package/dist/commands/form-layout-document.d.ts.map +1 -0
- package/dist/commands/form-layout-document.js +81 -0
- package/dist/commands/form-layout-document.js.map +1 -0
- package/dist/commands/form-layout-edit.d.ts +3 -0
- package/dist/commands/form-layout-edit.d.ts.map +1 -0
- package/dist/commands/form-layout-edit.js +51 -0
- package/dist/commands/form-layout-edit.js.map +1 -0
- package/dist/commands/form-layout-init-reviewed.d.ts +3 -0
- package/dist/commands/form-layout-init-reviewed.d.ts.map +1 -0
- package/dist/commands/form-layout-init-reviewed.js +78 -0
- package/dist/commands/form-layout-init-reviewed.js.map +1 -0
- package/dist/commands/form-layout-restore.d.ts.map +1 -1
- package/dist/commands/form-layout-restore.js +23 -0
- package/dist/commands/form-layout-restore.js.map +1 -1
- package/dist/commands/form-layout-template-catalog.d.ts +3 -0
- package/dist/commands/form-layout-template-catalog.d.ts.map +1 -0
- package/dist/commands/form-layout-template-catalog.js +45 -0
- package/dist/commands/form-layout-template-catalog.js.map +1 -0
- package/dist/commands/form-list-custom.d.ts +5 -0
- package/dist/commands/form-list-custom.d.ts.map +1 -0
- package/dist/commands/form-list-custom.js +24 -0
- package/dist/commands/form-list-custom.js.map +1 -0
- package/dist/commands/form-list-search-group.d.ts.map +1 -1
- package/dist/commands/form-list-search-group.js +101 -7
- package/dist/commands/form-list-search-group.js.map +1 -1
- package/dist/commands/form-list.d.ts.map +1 -1
- package/dist/commands/form-list.js +45 -1
- package/dist/commands/form-list.js.map +1 -1
- package/dist/commands/form-permission.d.ts.map +1 -1
- package/dist/commands/form-permission.js +10 -8
- package/dist/commands/form-permission.js.map +1 -1
- package/dist/commands/form.d.ts.map +1 -1
- package/dist/commands/form.js +87 -8
- package/dist/commands/form.js.map +1 -1
- package/dist/commands/menu.d.ts.map +1 -1
- package/dist/commands/menu.js +98 -1
- package/dist/commands/menu.js.map +1 -1
- package/dist/commands/report-cell.d.ts +3 -0
- package/dist/commands/report-cell.d.ts.map +1 -0
- package/dist/commands/report-cell.js +365 -0
- package/dist/commands/report-cell.js.map +1 -0
- package/dist/commands/wf-form.d.ts +2 -0
- package/dist/commands/wf-form.d.ts.map +1 -1
- package/dist/commands/wf-form.js +10 -9
- package/dist/commands/wf-form.js.map +1 -1
- package/dist/commands/workflow-base-command.js +1 -1
- package/dist/commands/workflow-base-command.js.map +1 -1
- package/dist/commands/workflow-basic-info.d.ts +5 -0
- package/dist/commands/workflow-basic-info.d.ts.map +1 -0
- package/dist/commands/workflow-basic-info.js +47 -0
- package/dist/commands/workflow-basic-info.js.map +1 -0
- package/dist/commands/workflow-create-workflow.d.ts.map +1 -1
- package/dist/commands/workflow-create-workflow.js +49 -83
- package/dist/commands/workflow-create-workflow.js.map +1 -1
- package/dist/commands/workflow-function-settings.d.ts.map +1 -1
- package/dist/commands/workflow-function-settings.js +3 -2
- package/dist/commands/workflow-function-settings.js.map +1 -1
- package/dist/commands/workflow.d.ts.map +1 -1
- package/dist/commands/workflow.js +19 -37
- package/dist/commands/workflow.js.map +1 -1
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -1
- package/dist/services/actionflow/components/action_eb_add.d.ts.map +1 -1
- package/dist/services/actionflow/components/action_eb_add.js +12 -5
- package/dist/services/actionflow/components/action_eb_add.js.map +1 -1
- package/dist/services/actionflow/components/action_eb_add_compiler.d.ts.map +1 -1
- package/dist/services/actionflow/components/action_eb_add_compiler.js +5 -0
- package/dist/services/actionflow/components/action_eb_add_compiler.js.map +1 -1
- package/dist/services/actionflow/components/action_eb_delete.d.ts +6 -1
- package/dist/services/actionflow/components/action_eb_delete.d.ts.map +1 -1
- package/dist/services/actionflow/components/action_eb_delete.js +23 -5
- package/dist/services/actionflow/components/action_eb_delete.js.map +1 -1
- package/dist/services/actionflow/components/action_eb_delete_compiler.d.ts.map +1 -1
- package/dist/services/actionflow/components/action_eb_delete_compiler.js +22 -0
- package/dist/services/actionflow/components/action_eb_delete_compiler.js.map +1 -1
- package/dist/services/actionflow/components/action_eb_update.d.ts.map +1 -1
- package/dist/services/actionflow/components/action_eb_update.js +13 -4
- package/dist/services/actionflow/components/action_eb_update.js.map +1 -1
- package/dist/services/actionflow/components/action_eb_update_compiler.d.ts.map +1 -1
- package/dist/services/actionflow/components/action_eb_update_compiler.js +9 -2
- package/dist/services/actionflow/components/action_eb_update_compiler.js.map +1 -1
- package/dist/services/actionflow/components/date_trigger.js +2 -2
- package/dist/services/actionflow/components/date_trigger.js.map +1 -1
- package/dist/services/actionflow/components/enquiry_form.d.ts.map +1 -1
- package/dist/services/actionflow/components/enquiry_form.js +11 -10
- package/dist/services/actionflow/components/enquiry_form.js.map +1 -1
- package/dist/services/actionflow/components/event_button.js +1 -1
- package/dist/services/actionflow/components/event_button.js.map +1 -1
- package/dist/services/actionflow/components/form_data_builder.d.ts +29 -1
- package/dist/services/actionflow/components/form_data_builder.d.ts.map +1 -1
- package/dist/services/actionflow/components/form_data_builder.js +67 -3
- package/dist/services/actionflow/components/form_data_builder.js.map +1 -1
- package/dist/services/actionflow/components/time_batch_trigger.js +2 -2
- package/dist/services/actionflow/components/time_batch_trigger.js.map +1 -1
- package/dist/services/actionflow/form_source.d.ts +44 -1
- package/dist/services/actionflow/form_source.d.ts.map +1 -1
- package/dist/services/actionflow/form_source.js +231 -5
- package/dist/services/actionflow/form_source.js.map +1 -1
- package/dist/services/actionflow/preflight_service.d.ts +8 -0
- package/dist/services/actionflow/preflight_service.d.ts.map +1 -1
- package/dist/services/actionflow/preflight_service.js +120 -14
- package/dist/services/actionflow/preflight_service.js.map +1 -1
- package/dist/services/actionflow/system_params.d.ts.map +1 -1
- package/dist/services/actionflow/system_params.js +4 -1
- package/dist/services/actionflow/system_params.js.map +1 -1
- package/dist/services/actionflow/trigger_common.d.ts.map +1 -1
- package/dist/services/actionflow/trigger_common.js +12 -3
- package/dist/services/actionflow/trigger_common.js.map +1 -1
- package/dist/services/actionflow/workflow_compiler.d.ts.map +1 -1
- package/dist/services/actionflow/workflow_compiler.js +117 -40
- package/dist/services/actionflow/workflow_compiler.js.map +1 -1
- package/dist/services/form-field-build.d.ts +13 -0
- package/dist/services/form-field-build.d.ts.map +1 -1
- package/dist/services/form-field-build.js +18 -0
- package/dist/services/form-field-build.js.map +1 -1
- package/dist/services/form-field-dataset.d.ts +101 -0
- package/dist/services/form-field-dataset.d.ts.map +1 -0
- package/dist/services/form-field-dataset.js +180 -0
- package/dist/services/form-field-dataset.js.map +1 -0
- package/dist/services/form-field-template.d.ts +15 -10
- package/dist/services/form-field-template.d.ts.map +1 -1
- package/dist/services/form-field-template.js +30 -15
- package/dist/services/form-field-template.js.map +1 -1
- package/dist/services/form-layout-code-reviewed.d.ts +32 -0
- package/dist/services/form-layout-code-reviewed.d.ts.map +1 -0
- package/dist/services/form-layout-code-reviewed.js +101 -0
- package/dist/services/form-layout-code-reviewed.js.map +1 -0
- package/dist/services/form-layout-describe.d.ts +4 -0
- package/dist/services/form-layout-describe.d.ts.map +1 -0
- package/dist/services/form-layout-describe.js +107 -0
- package/dist/services/form-layout-describe.js.map +1 -0
- package/dist/services/form-layout-diff.d.ts +37 -0
- package/dist/services/form-layout-diff.d.ts.map +1 -0
- package/dist/services/form-layout-diff.js +232 -0
- package/dist/services/form-layout-diff.js.map +1 -0
- package/dist/services/form-layout-document-apply.d.ts +23 -0
- package/dist/services/form-layout-document-apply.d.ts.map +1 -0
- package/dist/services/form-layout-document-apply.js +82 -0
- package/dist/services/form-layout-document-apply.js.map +1 -0
- package/dist/services/form-layout-document.d.ts +13 -0
- package/dist/services/form-layout-document.d.ts.map +1 -0
- package/dist/services/form-layout-document.js +228 -0
- package/dist/services/form-layout-document.js.map +1 -0
- package/dist/services/form-layout-edit.d.ts +21 -0
- package/dist/services/form-layout-edit.d.ts.map +1 -0
- package/dist/services/form-layout-edit.js +103 -0
- package/dist/services/form-layout-edit.js.map +1 -0
- package/dist/services/form-layout-init-plan.d.ts +54 -0
- package/dist/services/form-layout-init-plan.d.ts.map +1 -0
- package/dist/services/form-layout-init-plan.js +211 -0
- package/dist/services/form-layout-init-plan.js.map +1 -0
- package/dist/services/form-layout-insert.d.ts +22 -0
- package/dist/services/form-layout-insert.d.ts.map +1 -1
- package/dist/services/form-layout-insert.js +88 -8
- package/dist/services/form-layout-insert.js.map +1 -1
- package/dist/services/form-layout-source/review.d.ts +4 -0
- package/dist/services/form-layout-source/review.d.ts.map +1 -0
- package/dist/services/form-layout-source/review.js +54 -0
- package/dist/services/form-layout-source/review.js.map +1 -0
- package/dist/services/form-layout-template-advanced.d.ts +5 -0
- package/dist/services/form-layout-template-advanced.d.ts.map +1 -1
- package/dist/services/form-layout-template-advanced.js +17 -1
- package/dist/services/form-layout-template-advanced.js.map +1 -1
- package/dist/services/form-layout-template-catalog.d.ts +13 -0
- package/dist/services/form-layout-template-catalog.d.ts.map +1 -0
- package/dist/services/form-layout-template-catalog.js +27 -0
- package/dist/services/form-layout-template-catalog.js.map +1 -0
- package/dist/services/form-layout-template-flow.d.ts +1 -1
- package/dist/services/form-layout-template-flow.d.ts.map +1 -1
- package/dist/services/form-layout-template-flow.js.map +1 -1
- package/dist/services/form-layout-template-verification.d.ts +34 -0
- package/dist/services/form-layout-template-verification.d.ts.map +1 -0
- package/dist/services/form-layout-template-verification.js +124 -0
- package/dist/services/form-layout-template-verification.js.map +1 -0
- package/dist/services/form-list-search-custom.d.ts +25 -0
- package/dist/services/form-list-search-custom.d.ts.map +1 -0
- package/dist/services/form-list-search-custom.js +98 -0
- package/dist/services/form-list-search-custom.js.map +1 -0
- package/dist/services/form-list-search-group.d.ts +36 -2
- package/dist/services/form-list-search-group.d.ts.map +1 -1
- package/dist/services/form-list-search-group.js +89 -10
- package/dist/services/form-list-search-group.js.map +1 -1
- package/dist/services/form-list-search.d.ts +1 -0
- package/dist/services/form-list-search.d.ts.map +1 -1
- package/dist/services/form-list-search.js +5 -2
- package/dist/services/form-list-search.js.map +1 -1
- package/dist/services/form-permission-archive.d.ts +15 -2
- package/dist/services/form-permission-archive.d.ts.map +1 -1
- package/dist/services/form-permission-archive.js +22 -3
- package/dist/services/form-permission-archive.js.map +1 -1
- package/dist/services/form-physical-table.d.ts +17 -0
- package/dist/services/form-physical-table.d.ts.map +1 -1
- package/dist/services/form-physical-table.js +19 -0
- package/dist/services/form-physical-table.js.map +1 -1
- package/dist/services/form-style-template.d.ts +3 -3
- package/dist/services/form-style-template.d.ts.map +1 -1
- package/dist/services/form-style-template.js +18 -13
- package/dist/services/form-style-template.js.map +1 -1
- package/dist/services/form-sub-detail.d.ts +11 -0
- package/dist/services/form-sub-detail.d.ts.map +1 -1
- package/dist/services/form-sub-detail.js +23 -0
- package/dist/services/form-sub-detail.js.map +1 -1
- package/dist/services/menu-catalog.d.ts +11 -0
- package/dist/services/menu-catalog.d.ts.map +1 -1
- package/dist/services/menu-catalog.js +32 -0
- package/dist/services/menu-catalog.js.map +1 -1
- package/dist/services/report/cell-edit.d.ts +53 -0
- package/dist/services/report/cell-edit.d.ts.map +1 -0
- package/dist/services/report/cell-edit.js +137 -0
- package/dist/services/report/cell-edit.js.map +1 -0
- package/dist/services/report/cell-event.d.ts +28 -0
- package/dist/services/report/cell-event.d.ts.map +1 -0
- package/dist/services/report/cell-event.js +71 -0
- package/dist/services/report/cell-event.js.map +1 -0
- package/dist/services/report/cell-filter.d.ts +46 -0
- package/dist/services/report/cell-filter.d.ts.map +1 -0
- package/dist/services/report/cell-filter.js +153 -0
- package/dist/services/report/cell-filter.js.map +1 -0
- package/dist/services/workflow-basic-info.d.ts +27 -0
- package/dist/services/workflow-basic-info.d.ts.map +1 -0
- package/dist/services/workflow-basic-info.js +170 -0
- package/dist/services/workflow-basic-info.js.map +1 -0
- package/dist/services/workflow-function-management.d.ts +1 -1
- package/dist/services/workflow-function-settings.d.ts +1 -0
- package/dist/services/workflow-function-settings.d.ts.map +1 -1
- package/dist/services/workflow-function-settings.js +10 -2
- package/dist/services/workflow-function-settings.js.map +1 -1
- package/dist/services/workflow-watermark-template.d.ts +8 -0
- package/dist/services/workflow-watermark-template.d.ts.map +1 -0
- package/dist/services/workflow-watermark-template.js +78 -0
- package/dist/services/workflow-watermark-template.js.map +1 -0
- package/package.json +1 -1
- package/skill-docs/SKILL.md +24 -19
- package/skill-docs/_catalog.md +108 -106
- package/skill-docs/actionflows/references/components/ebuilder/ActionEbDelete.md +60 -3
- package/skill-docs/actionflows/references/components/ebuilder/EventButton.md +35 -33
- package/skill-docs/references/common/capability-boundaries.md +20 -1
- package/skill-docs/references/common/guide-plan-template.md +29 -3
- package/skill-docs/references/common/map.md +11 -7
- package/skill-docs/references/common/ref-cli-commands.md +710 -695
- package/skill-docs/references/form/guide-browser-definition.md +57 -13
- package/skill-docs/references/form/guide-create-form.md +258 -258
- package/skill-docs/references/form/guide-form-archive-permission.md +5 -2
- package/skill-docs/references/form/guide-form-layout-incremental.md +6 -4
- package/skill-docs/references/form/guide-form-view.md +423 -374
- package/skill-docs/references/form/layout/code-block/code-block-guide.md +153 -0
- package/skill-docs/references/form/layout/code-block/controls.md +60 -0
- package/skill-docs/references/form/layout/code-block/coverage.md +32 -0
- package/skill-docs/references/form/layout/code-block/details.md +57 -0
- package/skill-docs/references/form/layout/code-block/events-validation.md +42 -0
- package/skill-docs/references/form/layout/code-block/foundations-fields.md +56 -0
- package/skill-docs/references/form/layout/code-block/layout-css.md +116 -0
- package/skill-docs/references/form/layout/code-block/recipes.md +164 -0
- package/skill-docs/references/form/layout/code-block/troubleshooting.md +49 -0
- package/skill-docs/references/form/layout/code-block/ui-global.md +47 -0
- package/skill-docs/references/form/layout/document.md +39 -0
- package/skill-docs/references/form/layout/incremental.md +133 -0
- package/skill-docs/references/form/layout/initialization.md +39 -0
- package/skill-docs/references/form/layout/inspect-edit.md +76 -0
- package/skill-docs/references/form/layout/layout-overview.md +67 -0
- package/skill-docs/references/form/layout/management.md +64 -0
- package/skill-docs/references/form/layout/planning.md +76 -0
- package/skill-docs/references/form/layout/source-restoration.md +388 -0
- package/skill-docs/references/form/layout/template/advanced-css.md +167 -0
- package/skill-docs/references/form/layout/template/advanced.md +318 -0
- package/skill-docs/references/form/layout/template/easy.md +64 -0
- package/skill-docs/references/form/layout/template/flow.md +30 -0
- package/skill-docs/references/form/layout/template/template-guide.md +56 -0
- package/skill-docs/references/form/layout/workflow-layout.md +44 -0
- package/skill-docs/references/form/ref-form-fields.md +303 -301
- package/skill-docs/references/report/cross-dataset-filter-guide.md +33 -19
- package/skill-docs/references/report/event-hreflink-guide.md +30 -0
- package/skill-docs/references/report/ref-report-commands.md +14 -0
- package/skill-docs/references/report/report-designer-feature-map.md +2 -2
- package/skill-docs/references/workflow/guide-function-settings.md +112 -55
- package/skill-docs/references/workflow/guide-workflow-node-layout.md +189 -187
- package/skill-docs/references/workflow/guide-workflow.md +632 -630
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { businessData, environmentOrigin, fieldsHash, layoutRoute, layoutSaveBody, readLayoutContext, snapshotHash } from './form-layout-io.js';
|
|
2
|
+
import { compareFormLayoutValues, previewFormLayoutDocument } from './form-layout-document.js';
|
|
3
|
+
import { assert, clone, digest } from './form-layout-source/schema.js';
|
|
4
|
+
function canonical(layout) {
|
|
5
|
+
const value = clone(layout);
|
|
6
|
+
delete value.updateTimeStamp;
|
|
7
|
+
delete value.formId;
|
|
8
|
+
delete value.pageLayoutEncodes;
|
|
9
|
+
delete value.formStyleEncodes;
|
|
10
|
+
for (const page of value.pageLayouts || [])
|
|
11
|
+
for (const key of ['updateTime', 'updateTimeStamp', 'pageVersion'])
|
|
12
|
+
delete page[key];
|
|
13
|
+
return value;
|
|
14
|
+
}
|
|
15
|
+
/** One save request at most. A lost response is resolved by independent readback, never a retry. */
|
|
16
|
+
export async function applyFormLayoutDocument(client, baseUrl, target, document, reviewed) {
|
|
17
|
+
assert(reviewed?.schemaVersion === 'e10.layout-document-diff/v1', '需要 document diff 保存的完整差异报告');
|
|
18
|
+
assert(document?.schemaVersion === 'e10.layout-document/v1', '需要完整布局文档');
|
|
19
|
+
assert(reviewed.origin === environmentOrigin(baseUrl) && document.origin === reviewed.origin, '文档所属环境与当前环境不同');
|
|
20
|
+
assert(digest(reviewed.target) === digest(target) && digest(document.target) === digest(target), '文档目标与命令目标不同');
|
|
21
|
+
assert(reviewed.documentHash === digest(document), '文档在差异预览后发生变化,请重新 document diff');
|
|
22
|
+
assert(reviewed.canApply && Array.isArray(reviewed.changes) && !reviewed.issues?.length, '差异报告存在冲突,不能应用');
|
|
23
|
+
const current = await readLayoutContext(client, baseUrl, target);
|
|
24
|
+
const beforeHash = snapshotHash(current.snapshot);
|
|
25
|
+
assert(beforeHash === document.snapshotHash && beforeHash === reviewed.snapshotHash, '[LAYOUT_SNAPSHOT_CHANGED] 布局快照在文档导出或预览后变化,请重新导出');
|
|
26
|
+
assert(fieldsHash(current.fields) === document.fieldHash, '[LAYOUT_FIELDS_CHANGED] 字段定义已变化,请重新导出');
|
|
27
|
+
const preview = previewFormLayoutDocument(current, document);
|
|
28
|
+
assert(preview.canApply && preview.formLayoutId === reviewed.formLayoutId &&
|
|
29
|
+
preview.documentHash === reviewed.documentHash && digest(preview.changes) === digest(reviewed.changes), '当前完整布局差异与已审阅报告不一致,请重新 document diff');
|
|
30
|
+
if (!preview.changes.length)
|
|
31
|
+
return { saved: true, saveAccepted: null, mutationStarted: false,
|
|
32
|
+
recoveredAfterUnknownResult: false, verifiedChanges: 0, fullLayoutVerified: true, differences: [],
|
|
33
|
+
documentHash: preview.documentHash, beforeSnapshotHash: beforeHash, afterSnapshotHash: beforeHash };
|
|
34
|
+
const planned = clone(current.snapshot);
|
|
35
|
+
planned.formLayout = clone(document.formLayout);
|
|
36
|
+
let error;
|
|
37
|
+
let saveAccepted = null;
|
|
38
|
+
try {
|
|
39
|
+
const response = await client.post(`${baseUrl}${layoutRoute(target, 'saveFormAndLayout')}`, layoutSaveBody(target, planned, true), { ebbusinessid: target.formId });
|
|
40
|
+
saveAccepted = false;
|
|
41
|
+
businessData(response, '保存完整布局文档', false);
|
|
42
|
+
saveAccepted = true;
|
|
43
|
+
}
|
|
44
|
+
catch (caught) {
|
|
45
|
+
error = caught.message;
|
|
46
|
+
}
|
|
47
|
+
const differences = [];
|
|
48
|
+
let afterHash;
|
|
49
|
+
let verifiedChanges = 0;
|
|
50
|
+
let fullLayoutVerified = false;
|
|
51
|
+
try {
|
|
52
|
+
const after = await readLayoutContext(client, baseUrl, target);
|
|
53
|
+
afterHash = snapshotHash(after.snapshot);
|
|
54
|
+
const postDiff = compareFormLayoutValues(canonical(document.formLayout), canonical(after.snapshot.formLayout));
|
|
55
|
+
differences.push(...postDiff);
|
|
56
|
+
if (fieldsHash(after.fields) !== fieldsHash(current.fields))
|
|
57
|
+
differences.push({ path: 'fields.businessConfiguration',
|
|
58
|
+
before: fieldsHash(current.fields), after: fieldsHash(after.fields) });
|
|
59
|
+
if (digest(after.snapshot.form) !== digest(current.snapshot.form))
|
|
60
|
+
differences.push({ path: 'form.businessConfiguration',
|
|
61
|
+
before: digest(current.snapshot.form), after: digest(after.snapshot.form) });
|
|
62
|
+
fullLayoutVerified = differences.length === 0;
|
|
63
|
+
if (fullLayoutVerified)
|
|
64
|
+
verifiedChanges = preview.changes.length;
|
|
65
|
+
else
|
|
66
|
+
for (const change of preview.changes) {
|
|
67
|
+
let actual = after.snapshot.formLayout;
|
|
68
|
+
for (const segment of change.segments || [])
|
|
69
|
+
actual = actual?.[segment];
|
|
70
|
+
if (digest(actual ?? null) === digest(change.after))
|
|
71
|
+
verifiedChanges++;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
catch (caught) {
|
|
75
|
+
differences.push({ path: 'independentReadback', before: 'READABLE', after: caught.message });
|
|
76
|
+
}
|
|
77
|
+
return { saved: fullLayoutVerified, saveAccepted, mutationStarted: true,
|
|
78
|
+
recoveredAfterUnknownResult: !!error && fullLayoutVerified, verifiedChanges, fullLayoutVerified,
|
|
79
|
+
differences: differences.slice(0, 10000), documentHash: preview.documentHash, beforeSnapshotHash: beforeHash,
|
|
80
|
+
...(afterHash ? { afterSnapshotHash: afterHash } : {}), ...(error ? { error } : {}) };
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=form-layout-document-apply.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form-layout-document-apply.js","sourceRoot":"","sources":["../../src/services/form-layout-document-apply.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { LayoutContext, LayoutTarget } from './form-layout-source/types.js';
|
|
2
|
+
export interface LayoutDocument {
|
|
3
|
+
schemaVersion: 'e10.layout-document/v1';
|
|
4
|
+
target: LayoutTarget;
|
|
5
|
+
origin: string;
|
|
6
|
+
snapshotHash: string;
|
|
7
|
+
fieldHash: string;
|
|
8
|
+
formLayout: any;
|
|
9
|
+
}
|
|
10
|
+
export declare function exportFormLayoutDocument(context: LayoutContext): LayoutDocument;
|
|
11
|
+
export declare function compareFormLayoutValues(before: any, after: any): any[];
|
|
12
|
+
export declare function previewFormLayoutDocument(context: LayoutContext, input: unknown): any;
|
|
13
|
+
//# sourceMappingURL=form-layout-document.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form-layout-document.d.ts","sourceRoot":"","sources":["../../src/services/form-layout-document.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAGjF,MAAM,WAAW,cAAc;IAC7B,aAAa,EAAE,wBAAwB,CAAC;IACxC,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,GAAG,CAAC;CACjB;AACD,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,aAAa,GAAG,cAAc,CAI/E;AAuHD,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,GAAG,GAAG,EAAE,CAItE;AACD,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,OAAO,GAAG,GAAG,CA+CrF"}
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
import { associatedField, flattenComponents } from './form-layout-source/binding.js';
|
|
2
|
+
import { fieldsHash, snapshotHash } from './form-layout-io.js';
|
|
3
|
+
import { clone, digest } from './form-layout-source/schema.js';
|
|
4
|
+
import { assertDesignerReadableLayoutCode } from './form-code.js';
|
|
5
|
+
export function exportFormLayoutDocument(context) {
|
|
6
|
+
return { schemaVersion: 'e10.layout-document/v1', target: clone(context.target), origin: context.origin,
|
|
7
|
+
snapshotHash: snapshotHash(context.snapshot), fieldHash: fieldsHash(context.fields),
|
|
8
|
+
formLayout: clone(context.snapshot.formLayout) };
|
|
9
|
+
}
|
|
10
|
+
function id(value) { return value === undefined || value === null ? '' : String(value); }
|
|
11
|
+
function coordinate(value) { return typeof value === 'string' && !/^\d+$/.test(value) ? NaN : Number(value); }
|
|
12
|
+
function validPoint(row, col, rows, columns) {
|
|
13
|
+
const r = coordinate(row), c = coordinate(col);
|
|
14
|
+
return Number.isInteger(r) && Number.isInteger(c) && r >= 0 && c >= 0 && r < rows && c < columns;
|
|
15
|
+
}
|
|
16
|
+
function inspectStructure(layout, fields) {
|
|
17
|
+
const issues = [];
|
|
18
|
+
const pages = layout?.pageLayouts;
|
|
19
|
+
if (!Array.isArray(pages) || !pages.length)
|
|
20
|
+
return ['formLayout.pageLayouts 必须是非空数组'];
|
|
21
|
+
const fieldIds = new Set(fields.map(field => id(field.fieldId)));
|
|
22
|
+
const pageIds = new Set();
|
|
23
|
+
const terminals = new Set();
|
|
24
|
+
for (let pi = 0; pi < pages.length; pi++) {
|
|
25
|
+
const page = pages[pi], prefix = `pageLayouts[${pi}]`;
|
|
26
|
+
if (!page || typeof page !== 'object') {
|
|
27
|
+
issues.push(`${prefix} 必须是对象`);
|
|
28
|
+
continue;
|
|
29
|
+
}
|
|
30
|
+
const pageId = id(page.pageId);
|
|
31
|
+
if (!pageId || pageIds.has(pageId))
|
|
32
|
+
issues.push(`${prefix} pageId 缺失或重复`);
|
|
33
|
+
pageIds.add(pageId);
|
|
34
|
+
const terminal = id(page.terminalType);
|
|
35
|
+
if (!terminal || terminals.has(terminal))
|
|
36
|
+
issues.push(`${prefix} terminalType 缺失或重复`);
|
|
37
|
+
terminals.add(terminal);
|
|
38
|
+
if (!Array.isArray(page.comps)) {
|
|
39
|
+
issues.push(`${prefix}.comps 必须是数组`);
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
const comps = flattenComponents(page.comps), byId = new Map();
|
|
43
|
+
for (const comp of comps) {
|
|
44
|
+
const compId = id(comp?.id);
|
|
45
|
+
if (!compId || byId.has(compId))
|
|
46
|
+
issues.push(`${prefix} 组件 ID 缺失或重复 ${compId}`);
|
|
47
|
+
else
|
|
48
|
+
byId.set(compId, comp);
|
|
49
|
+
const fieldId = associatedField(comp);
|
|
50
|
+
if (fieldId && !fieldIds.has(fieldId) && comp.type !== 'InternalTitle' && comp.type !== 'DetailTable')
|
|
51
|
+
issues.push(`${prefix} 组件 ${compId} 引用不存在的字段 ${fieldId}`);
|
|
52
|
+
}
|
|
53
|
+
if (page.layoutType !== 'EXCEL')
|
|
54
|
+
continue;
|
|
55
|
+
const workbook = page.config?.workbook;
|
|
56
|
+
if (!workbook || typeof workbook !== 'object' || Array.isArray(workbook) || !workbook.Sheet1) {
|
|
57
|
+
issues.push(`${prefix} 缺少表格式主 workbook`);
|
|
58
|
+
continue;
|
|
59
|
+
}
|
|
60
|
+
const detailByNode = new Map(comps.filter(comp => comp.type === 'DetailTable' && comp.config?.excel?.nodeId)
|
|
61
|
+
.map(comp => [id(comp.config.excel.nodeId), id(comp.id)]));
|
|
62
|
+
const linkedCells = new Map();
|
|
63
|
+
for (const [name, sheet] of Object.entries(workbook)) {
|
|
64
|
+
const label = `${prefix}.config.workbook[${JSON.stringify(name)}]`;
|
|
65
|
+
if (!sheet || !Array.isArray(sheet.rows) || !Array.isArray(sheet.columns) || !Array.isArray(sheet.cells) || !Array.isArray(sheet.spans)) {
|
|
66
|
+
issues.push(`${label} 缺少 rows/columns/cells/spans 数组`);
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
const rows = coordinate(sheet.rowCount), columns = coordinate(sheet.columnCount);
|
|
70
|
+
if (!Number.isInteger(rows) || !Number.isInteger(columns) || rows < sheet.rows.length || columns < sheet.columns.length ||
|
|
71
|
+
rows < 1 || columns < 1 || rows > 2000 || columns > 256)
|
|
72
|
+
issues.push(`${label} rowCount/columnCount 无效或小于行列尺寸数组`);
|
|
73
|
+
for (const [axis, entries] of [['rows', sheet.rows], ['columns', sheet.columns]])
|
|
74
|
+
for (let i = 0; i < entries.length; i++)
|
|
75
|
+
if (!Number.isFinite(Number(entries[i]?.size)) || Number(entries[i].size) <= 0)
|
|
76
|
+
issues.push(`${label}.${axis}[${i}].size 必须大于 0`);
|
|
77
|
+
const occupied = new Set();
|
|
78
|
+
const identicalSpans = new Set();
|
|
79
|
+
for (let si = 0; si < sheet.spans.length; si++) {
|
|
80
|
+
const span = sheet.spans[si];
|
|
81
|
+
const row = coordinate(span?.row), col = coordinate(span?.col);
|
|
82
|
+
const height = coordinate(span?.rowCount), width = coordinate(span?.colCount);
|
|
83
|
+
if (!validPoint(row, col, rows, columns) || !Number.isInteger(height) || !Number.isInteger(width) ||
|
|
84
|
+
height < 1 || width < 1 || row + height > rows || col + width > columns) {
|
|
85
|
+
issues.push(`${label}.spans[${si}] 范围无效`);
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
88
|
+
const signature = `${row},${col},${height},${width}`;
|
|
89
|
+
if (identicalSpans.has(signature))
|
|
90
|
+
continue;
|
|
91
|
+
identicalSpans.add(signature);
|
|
92
|
+
for (let r = row; r < row + height; r++)
|
|
93
|
+
for (let c = col; c < col + width; c++) {
|
|
94
|
+
const key = `${r},${c}`;
|
|
95
|
+
if (occupied.has(key))
|
|
96
|
+
issues.push(`${label}.spans 合并区域重叠 ${key}`);
|
|
97
|
+
occupied.add(key);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
const cells = new Set();
|
|
101
|
+
for (let ci = 0; ci < sheet.cells.length; ci++) {
|
|
102
|
+
const cell = sheet.cells[ci], row = coordinate(cell?.row), col = coordinate(cell?.col);
|
|
103
|
+
if (!validPoint(row, col, rows, columns)) {
|
|
104
|
+
issues.push(`${label}.cells[${ci}] 坐标越界`);
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
const key = `${row},${col}`;
|
|
108
|
+
if (cells.has(key))
|
|
109
|
+
issues.push(`${label}.cells 重复坐标 ${key}`);
|
|
110
|
+
cells.add(key);
|
|
111
|
+
const compId = id(cell?.style?.cellType?.comId);
|
|
112
|
+
if (!compId)
|
|
113
|
+
continue;
|
|
114
|
+
const comp = byId.get(compId);
|
|
115
|
+
if (!comp)
|
|
116
|
+
issues.push(`${label}.cells[${ci}] 引用不存在的组件 ${compId}`);
|
|
117
|
+
else {
|
|
118
|
+
if (cell.style.cellType.type && cell.style.cellType.type !== comp.type)
|
|
119
|
+
issues.push(`${label}.cells[${ci}] 组件类型与 ${compId} 不一致`);
|
|
120
|
+
const owner = id(comp.config?.excel?.parent);
|
|
121
|
+
const expectedSheet = owner === 'ROOT' ? 'Sheet1' : detailByNode.get(owner);
|
|
122
|
+
if (expectedSheet !== name)
|
|
123
|
+
issues.push(`${label}.cells[${ci}] 组件 ${compId} 属于其他网格`);
|
|
124
|
+
if (coordinate(comp.config?.excel?.row) !== row || coordinate(comp.config?.excel?.col) !== col)
|
|
125
|
+
issues.push(`${label}.cells[${ci}] 与组件 ${compId} 坐标不一致`);
|
|
126
|
+
const matches = linkedCells.get(compId) || [];
|
|
127
|
+
matches.push({ sheet: name, row, col });
|
|
128
|
+
linkedCells.set(compId, matches);
|
|
129
|
+
}
|
|
130
|
+
if (sheet.spans.some((span) => row >= coordinate(span.row) && row < coordinate(span.row) + coordinate(span.rowCount) &&
|
|
131
|
+
col >= coordinate(span.col) && col < coordinate(span.col) + coordinate(span.colCount) &&
|
|
132
|
+
(row !== coordinate(span.row) || col !== coordinate(span.col))) && compId)
|
|
133
|
+
issues.push(`${label}.cells[${ci}] 组件位于合并区域非左上角`);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
for (const comp of comps.filter(comp => comp.config?.excel)) {
|
|
137
|
+
const count = linkedCells.get(id(comp.id))?.length || 0;
|
|
138
|
+
if (count !== 1)
|
|
139
|
+
issues.push(`${prefix} 组件 ${id(comp.id)} 对应 ${count} 个网格单元格`);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
return [...new Set(issues)];
|
|
143
|
+
}
|
|
144
|
+
function compare(before, after, path, segments, changes, limit) {
|
|
145
|
+
if (changes.length >= limit)
|
|
146
|
+
return;
|
|
147
|
+
if (digest(before === undefined ? null : before) === digest(after === undefined ? null : after))
|
|
148
|
+
return;
|
|
149
|
+
if (before && after && typeof before === 'object' && typeof after === 'object' && Array.isArray(before) === Array.isArray(after)) {
|
|
150
|
+
const keys = Array.isArray(before) ? Array.from({ length: Math.max(before.length, after.length) }, (_, i) => String(i)) :
|
|
151
|
+
[...new Set([...Object.keys(before), ...Object.keys(after)])].sort();
|
|
152
|
+
for (const key of keys) {
|
|
153
|
+
const next = Array.isArray(before) ? `${path}[${key}]` : `${path}.${key}`;
|
|
154
|
+
compare(before[key], after[key], next, [...segments, key], changes, limit);
|
|
155
|
+
if (changes.length >= limit)
|
|
156
|
+
break;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
else
|
|
160
|
+
changes.push({ path, segments, before: before ?? null, after: after ?? null });
|
|
161
|
+
}
|
|
162
|
+
export function compareFormLayoutValues(before, after) {
|
|
163
|
+
const changes = [];
|
|
164
|
+
compare(before, after, 'formLayout', [], changes, 10000);
|
|
165
|
+
return changes;
|
|
166
|
+
}
|
|
167
|
+
export function previewFormLayoutDocument(context, input) {
|
|
168
|
+
const issues = [];
|
|
169
|
+
if (!input || typeof input !== 'object' || Array.isArray(input))
|
|
170
|
+
throw new Error('布局文档必须是对象');
|
|
171
|
+
const doc = input;
|
|
172
|
+
if (doc.schemaVersion !== 'e10.layout-document/v1' || Object.keys(doc).some(key => !['schemaVersion', 'target', 'origin', 'snapshotHash', 'fieldHash', 'formLayout'].includes(key)))
|
|
173
|
+
throw new Error('布局文档版本或外层属性无效');
|
|
174
|
+
if (!doc.target || typeof doc.target !== 'object' || Array.isArray(doc.target) ||
|
|
175
|
+
typeof doc.origin !== 'string' || typeof doc.snapshotHash !== 'string' || typeof doc.fieldHash !== 'string')
|
|
176
|
+
throw new Error('布局文档缺少目标、环境或快照指纹');
|
|
177
|
+
if (digest(doc.target) !== digest(context.target))
|
|
178
|
+
issues.push('文档目标与当前查询目标不同');
|
|
179
|
+
if (doc.origin !== context.origin)
|
|
180
|
+
issues.push('文档所属环境与当前环境不同');
|
|
181
|
+
const currentHash = snapshotHash(context.snapshot);
|
|
182
|
+
if (doc.snapshotHash !== currentHash)
|
|
183
|
+
issues.push('布局快照已变化,请重新导出文档');
|
|
184
|
+
if (doc.fieldHash !== fieldsHash(context.fields))
|
|
185
|
+
issues.push('字段定义已变化,请重新导出文档');
|
|
186
|
+
const source = context.snapshot.formLayout, draft = doc.formLayout;
|
|
187
|
+
if (!draft || typeof draft !== 'object' || Array.isArray(draft))
|
|
188
|
+
issues.push('formLayout 必须是对象');
|
|
189
|
+
else {
|
|
190
|
+
for (const property of ['id', 'multipleLayoutId', 'updateTimeStamp'])
|
|
191
|
+
if (id(draft[property]) !== id(source[property]))
|
|
192
|
+
issues.push(`formLayout.${property} 是受保护的布局身份或版本信息`);
|
|
193
|
+
for (const property of ['formId', 'pageLayoutEncodes', 'formStyleEncodes'])
|
|
194
|
+
if (digest(draft[property] ?? null) !== digest(source[property] ?? null))
|
|
195
|
+
issues.push(`formLayout.${property} 是受保护的表单身份或派生信息`);
|
|
196
|
+
if (!Array.isArray(draft.pageLayouts) || draft.pageLayouts.length !== source.pageLayouts.length)
|
|
197
|
+
issues.push('pageLayouts 页面数量不可改变');
|
|
198
|
+
else
|
|
199
|
+
for (let i = 0; i < source.pageLayouts.length; i++) {
|
|
200
|
+
const old = source.pageLayouts[i], page = draft.pageLayouts[i];
|
|
201
|
+
for (const property of ['id', 'pageId', 'layoutType', 'terminalType', 'module', 'createTime', 'updateTime',
|
|
202
|
+
'creator', 'tenantKey', 'deleteType', 'pageVersion', 'ecodeVersion'])
|
|
203
|
+
if (id(page?.[property]) !== id(old?.[property]))
|
|
204
|
+
issues.push(`pageLayouts[${i}].${property} 是受保护的页面身份或版本信息`);
|
|
205
|
+
if (page?.sourceCode?.ecode !== old?.sourceCode?.ecode) {
|
|
206
|
+
try {
|
|
207
|
+
assertDesignerReadableLayoutCode(page?.sourceCode?.ecode);
|
|
208
|
+
}
|
|
209
|
+
catch (error) {
|
|
210
|
+
issues.push(`pageLayouts[${i}].sourceCode.ecode ${error.message}`);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
const baselineIssues = inspectStructure(source, context.fields);
|
|
216
|
+
const draftIssues = inspectStructure(draft, context.fields);
|
|
217
|
+
const baselineSet = new Set(baselineIssues);
|
|
218
|
+
const introducedIssues = draftIssues.filter(issue => !baselineSet.has(issue));
|
|
219
|
+
issues.push(...introducedIssues);
|
|
220
|
+
const changes = compareFormLayoutValues(source, draft);
|
|
221
|
+
if (changes.length >= 10000)
|
|
222
|
+
issues.push('差异超过 10000 项,请缩小本次编辑范围');
|
|
223
|
+
return { schemaVersion: 'e10.layout-document-diff/v1', target: context.target, origin: context.origin,
|
|
224
|
+
snapshotHash: currentHash, documentHash: digest(doc), formLayoutId: id(source.id),
|
|
225
|
+
changes, changeCount: changes.length, baselineIssues, introducedIssues, issues, canApply: issues.length === 0,
|
|
226
|
+
mutationStarted: false };
|
|
227
|
+
}
|
|
228
|
+
//# sourceMappingURL=form-layout-document.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form-layout-document.js","sourceRoot":"","sources":["../../src/services/form-layout-document.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { type LayoutClient } from './form-layout-io.js';
|
|
2
|
+
import { type LayoutDiffConfig } from './form-layout-diff.js';
|
|
3
|
+
import type { LayoutTarget } from './form-layout-source/types.js';
|
|
4
|
+
export interface ApplyLayoutEditResult {
|
|
5
|
+
saved: boolean;
|
|
6
|
+
saveAccepted: boolean | null;
|
|
7
|
+
mutationStarted: boolean;
|
|
8
|
+
recoveredAfterUnknownResult: boolean;
|
|
9
|
+
verifiedChanges: number;
|
|
10
|
+
differences: Array<{
|
|
11
|
+
path: string;
|
|
12
|
+
expected: any;
|
|
13
|
+
actual: any;
|
|
14
|
+
}>;
|
|
15
|
+
beforeSnapshotHash: string;
|
|
16
|
+
afterSnapshotHash?: string;
|
|
17
|
+
error?: string;
|
|
18
|
+
}
|
|
19
|
+
/** Save one reviewed edit against a fresh, identical snapshot; never retry an uncertain POST. */
|
|
20
|
+
export declare function applyFormLayoutEdit(client: LayoutClient, baseUrl: string, target: LayoutTarget, terminal: 'PC' | 'MOBILE', config: LayoutDiffConfig, reviewed: any): Promise<ApplyLayoutEditResult>;
|
|
21
|
+
//# sourceMappingURL=form-layout-edit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form-layout-edit.d.ts","sourceRoot":"","sources":["../../src/services/form-layout-edit.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAyB,KAAK,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAErF,OAAO,KAAK,EAAiB,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAoCjF,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,OAAO,CAAC;IAAC,YAAY,EAAE,OAAO,GAAG,IAAI,CAAC;IAAC,eAAe,EAAE,OAAO,CAAC;IAAC,2BAA2B,EAAE,OAAO,CAAC;IAC7G,eAAe,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,GAAG,CAAC;QAAC,MAAM,EAAE,GAAG,CAAA;KAAE,CAAC,CAAC;IAC1F,kBAAkB,EAAE,MAAM,CAAC;IAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACxE;AAED,iGAAiG;AACjG,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EACnG,QAAQ,EAAE,IAAI,GAAG,QAAQ,EAAE,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,GAAG,GAAG,OAAO,CAAC,qBAAqB,CAAC,CA+CpG"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { businessData, environmentOrigin, fieldsHash, layoutRoute, layoutSaveBody, readLayoutContext, snapshotHash } from './form-layout-io.js';
|
|
2
|
+
import { previewFormLayoutDiff } from './form-layout-diff.js';
|
|
3
|
+
import { assert, clone, digest } from './form-layout-source/schema.js';
|
|
4
|
+
import { flattenComponents } from './form-layout-source/binding.js';
|
|
5
|
+
function resolveNativePath(snapshot, path) {
|
|
6
|
+
const compMatch = /^pageLayouts\[(\d+)\]\.comps\[id=("(?:[^"\\]|\\.)*")\]\.config\.excel\.(row|col)$/.exec(path);
|
|
7
|
+
if (compMatch) {
|
|
8
|
+
const page = snapshot.formLayout.pageLayouts[Number(compMatch[1])];
|
|
9
|
+
const id = JSON.parse(compMatch[2]);
|
|
10
|
+
const matches = flattenComponents(page?.comps || []).filter((comp) => String(comp.id) === id);
|
|
11
|
+
assert(matches.length === 1 && matches[0].config?.excel, `组件差异路径不唯一或不存在:${path}`);
|
|
12
|
+
return { owner: matches[0].config.excel, key: compMatch[3] };
|
|
13
|
+
}
|
|
14
|
+
const match = /^pageLayouts\[(\d+)\]\.config\.workbook\[("(?:[^"\\]|\\.)*")\]\.(rows|columns|cells)\[(\d+)\]\.(size|type|row|col|style\.(?:backColor|foreColor|font|textDecoration|hAlign|vAlign|wordWrap|textIndent|borderTop|borderRight|borderBottom|borderLeft))$/.exec(path);
|
|
15
|
+
assert(match, `差异路径不受支持:${path}`);
|
|
16
|
+
const [, pageIndex, sheetJson, collection, index, suffix] = match;
|
|
17
|
+
const page = snapshot.formLayout.pageLayouts[Number(pageIndex)];
|
|
18
|
+
const sheet = page?.config?.workbook?.[JSON.parse(sheetJson)];
|
|
19
|
+
const entry = sheet?.[collection]?.[Number(index)];
|
|
20
|
+
assert(entry, `差异路径目标不存在:${path}`);
|
|
21
|
+
if (suffix.startsWith('style.')) {
|
|
22
|
+
assert(collection === 'cells', `样式路径目标不是单元格:${path}`);
|
|
23
|
+
return { owner: entry.style ??= {}, key: suffix.slice(6) };
|
|
24
|
+
}
|
|
25
|
+
assert(collection === 'cells' ? ['row', 'col'].includes(suffix) : ['size', 'type'].includes(suffix), `差异路径属性与目标不匹配:${path}`);
|
|
26
|
+
return { owner: entry, key: suffix };
|
|
27
|
+
}
|
|
28
|
+
function normalized(value) { return value === undefined ? null : value; }
|
|
29
|
+
function expectedChanges(snapshot, changes) {
|
|
30
|
+
const next = clone(snapshot);
|
|
31
|
+
for (const item of changes) {
|
|
32
|
+
const { owner, key } = resolveNativePath(next, item.path);
|
|
33
|
+
assert(digest(normalized(owner[key])) === digest(item.before), `差异旧值已变化:${item.path}`);
|
|
34
|
+
if (item.after === null)
|
|
35
|
+
delete owner[key];
|
|
36
|
+
else
|
|
37
|
+
owner[key] = clone(item.after);
|
|
38
|
+
}
|
|
39
|
+
return next;
|
|
40
|
+
}
|
|
41
|
+
/** Save one reviewed edit against a fresh, identical snapshot; never retry an uncertain POST. */
|
|
42
|
+
export async function applyFormLayoutEdit(client, baseUrl, target, terminal, config, reviewed) {
|
|
43
|
+
assert(reviewed?.schemaVersion === 'e10.layout-diff/v1', '需要 diff 命令保存的差异报告');
|
|
44
|
+
assert(reviewed.origin === environmentOrigin(baseUrl), '预览所属系统与当前环境不同');
|
|
45
|
+
assert(digest(reviewed.target) === digest(target), '预览目标与命令目标不同');
|
|
46
|
+
assert(reviewed.terminal === terminal, '预览终端与命令终端不同');
|
|
47
|
+
assert(reviewed.configHash === digest(config), '配置在预览后发生变化,请重新预览');
|
|
48
|
+
assert(reviewed.canApply && Array.isArray(reviewed.changes) && !reviewed.issues?.length, '预览存在冲突,不能应用');
|
|
49
|
+
const current = await readLayoutContext(client, baseUrl, target);
|
|
50
|
+
const hash = snapshotHash(current.snapshot);
|
|
51
|
+
assert(hash === reviewed.snapshotHash, '[LAYOUT_SNAPSHOT_CHANGED] 布局快照在预览后发生变化,请重新 diff');
|
|
52
|
+
assert(fieldsHash(current.fields) === reviewed.layout?.fieldHash, '[LAYOUT_FIELDS_CHANGED] 字段在预览后发生变化,请重新 diff');
|
|
53
|
+
const actualPreview = previewFormLayoutDiff(current, terminal, config);
|
|
54
|
+
assert(actualPreview.canApply && digest(actualPreview.changes) === digest(reviewed.changes) &&
|
|
55
|
+
actualPreview.pageId === reviewed.pageId && actualPreview.layout.id === reviewed.layout?.id &&
|
|
56
|
+
actualPreview.layout.multipleLayoutId === reviewed.layout?.multipleLayoutId, '当前差异与已审阅报告不一致,请重新 diff');
|
|
57
|
+
const planned = expectedChanges(current.snapshot, actualPreview.changes);
|
|
58
|
+
if (!actualPreview.changes.length)
|
|
59
|
+
return { saved: true, saveAccepted: null, mutationStarted: false,
|
|
60
|
+
recoveredAfterUnknownResult: false, verifiedChanges: 0, differences: [], beforeSnapshotHash: hash, afterSnapshotHash: hash };
|
|
61
|
+
let error;
|
|
62
|
+
let saveAccepted = null;
|
|
63
|
+
try {
|
|
64
|
+
const response = await client.post(`${baseUrl}${layoutRoute(target, 'saveFormAndLayout')}`, layoutSaveBody(target, planned, true), { ebbusinessid: target.formId });
|
|
65
|
+
saveAccepted = false;
|
|
66
|
+
businessData(response, '保存布局调整', false);
|
|
67
|
+
saveAccepted = true;
|
|
68
|
+
}
|
|
69
|
+
catch (caught) {
|
|
70
|
+
error = caught.message;
|
|
71
|
+
}
|
|
72
|
+
const differences = [];
|
|
73
|
+
let afterHash;
|
|
74
|
+
let verifiedChanges = 0;
|
|
75
|
+
try {
|
|
76
|
+
const after = await readLayoutContext(client, baseUrl, target);
|
|
77
|
+
afterHash = snapshotHash(after.snapshot);
|
|
78
|
+
if (fieldsHash(after.fields) !== fieldsHash(current.fields))
|
|
79
|
+
differences.push({ path: 'fields.businessConfiguration', expected: fieldsHash(current.fields), actual: fieldsHash(after.fields) });
|
|
80
|
+
for (const item of actualPreview.changes) {
|
|
81
|
+
let actual;
|
|
82
|
+
try {
|
|
83
|
+
const { owner, key } = resolveNativePath(after.snapshot, item.path);
|
|
84
|
+
actual = normalized(owner[key]);
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
actual = 'PATH_NOT_FOUND';
|
|
88
|
+
}
|
|
89
|
+
if (digest(actual) === digest(item.after))
|
|
90
|
+
verifiedChanges++;
|
|
91
|
+
else
|
|
92
|
+
differences.push({ path: item.path, expected: item.after, actual });
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
catch (caught) {
|
|
96
|
+
differences.push({ path: 'independentReadback', expected: 'READABLE', actual: caught.message });
|
|
97
|
+
}
|
|
98
|
+
return { saved: differences.length === 0, saveAccepted, mutationStarted: true,
|
|
99
|
+
recoveredAfterUnknownResult: !!error && differences.length === 0,
|
|
100
|
+
verifiedChanges, differences, beforeSnapshotHash: hash, ...(afterHash ? { afterSnapshotHash: afterHash } : {}),
|
|
101
|
+
...(error ? { error } : {}) };
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=form-layout-edit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form-layout-edit.js","sourceRoot":"","sources":["../../src/services/form-layout-edit.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { type LayoutClient } from './form-layout-io.js';
|
|
2
|
+
import type { LayoutContext, LayoutTarget } from './form-layout-source/types.js';
|
|
3
|
+
import { type EasyTemplateEvidence, type TemplateEvidence } from './form-layout-template-verification.js';
|
|
4
|
+
export interface LayoutInitOptions {
|
|
5
|
+
styleTemplate?: string;
|
|
6
|
+
easyTemplate?: string;
|
|
7
|
+
readOnly?: boolean;
|
|
8
|
+
required?: boolean;
|
|
9
|
+
disableEdit?: boolean;
|
|
10
|
+
singleRow?: boolean;
|
|
11
|
+
generateCollapse?: boolean;
|
|
12
|
+
fields?: LayoutInitFieldOption[];
|
|
13
|
+
}
|
|
14
|
+
export interface LayoutInitFieldOption {
|
|
15
|
+
fieldId: string;
|
|
16
|
+
readOnly?: boolean;
|
|
17
|
+
required?: boolean;
|
|
18
|
+
disableEdit?: boolean;
|
|
19
|
+
singleRow?: boolean;
|
|
20
|
+
display?: boolean;
|
|
21
|
+
show?: boolean;
|
|
22
|
+
}
|
|
23
|
+
export interface LayoutInitPlan {
|
|
24
|
+
schemaVersion: 'e10.layout-init-plan/v1';
|
|
25
|
+
target: LayoutTarget;
|
|
26
|
+
origin: string;
|
|
27
|
+
snapshotHash: string;
|
|
28
|
+
fieldHash: string;
|
|
29
|
+
configHash: string;
|
|
30
|
+
optionsHash: string;
|
|
31
|
+
layoutId: string;
|
|
32
|
+
layoutMultiId: string;
|
|
33
|
+
layoutName: string;
|
|
34
|
+
layoutType: string;
|
|
35
|
+
template: {
|
|
36
|
+
id: string;
|
|
37
|
+
name: string;
|
|
38
|
+
};
|
|
39
|
+
overrides: Record<string, boolean>;
|
|
40
|
+
templateEvidence?: TemplateEvidence | EasyTemplateEvidence;
|
|
41
|
+
fieldOverrides: LayoutInitFieldOption[];
|
|
42
|
+
configCount: number;
|
|
43
|
+
componentCountBefore: number;
|
|
44
|
+
pageCountBefore: number;
|
|
45
|
+
affectedAreas: string[];
|
|
46
|
+
mutationStarted: false;
|
|
47
|
+
}
|
|
48
|
+
export declare function prepareLayoutInit(client: LayoutClient, baseUrl: string, target: LayoutTarget, options: LayoutInitOptions): Promise<{
|
|
49
|
+
context: LayoutContext;
|
|
50
|
+
plan: LayoutInitPlan;
|
|
51
|
+
configs: any[];
|
|
52
|
+
}>;
|
|
53
|
+
export declare function applyLayoutInit(client: LayoutClient, baseUrl: string, target: LayoutTarget, options: LayoutInitOptions, reviewed: LayoutInitPlan): Promise<any>;
|
|
54
|
+
//# sourceMappingURL=form-layout-init-plan.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form-layout-init-plan.d.ts","sourceRoot":"","sources":["../../src/services/form-layout-init-plan.ts"],"names":[],"mappings":"AACA,OAAO,EAAgF,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGtI,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAEjF,OAAO,EACL,KAAK,oBAAoB,EAAE,KAAK,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAKnG,MAAM,WAAW,iBAAiB;IAChC,aAAa,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAC7G,SAAS,CAAC,EAAE,OAAO,CAAC;IAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,qBAAqB,EAAE,CAAC;CACnF;AACD,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAC/E,SAAS,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAC;CACxD;AACD,MAAM,WAAW,cAAc;IAC7B,aAAa,EAAE,yBAAyB,CAAC;IAAC,MAAM,EAAE,YAAY,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAC/E,YAAY,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IACjF,QAAQ,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAChF,QAAQ,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3E,gBAAgB,CAAC,EAAE,gBAAgB,GAAG,oBAAoB,CAAC;IAC3D,cAAc,EAAE,qBAAqB,EAAE,CAAC;IACxC,WAAW,EAAE,MAAM,CAAC;IAAC,oBAAoB,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,CAAC;IAC3E,aAAa,EAAE,MAAM,EAAE,CAAC;IAAC,eAAe,EAAE,KAAK,CAAC;CACjD;AAGD,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EACjG,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,aAAa,CAAC;IAAC,IAAI,EAAE,cAAc,CAAC;IAAC,OAAO,EAAE,GAAG,EAAE,CAAA;CAAE,CAAC,CAqGvG;AAED,wBAAsB,eAAe,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAC/F,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,CAkEpE"}
|