weaver-work-cli 0.1.23 → 0.1.25
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/README.md +33 -3
- package/dist/core/output.js +53 -1
- package/dist/internal/e10/auth/commands.js +210 -17
- package/dist/internal/e10/auth/crypto.js +52 -12
- package/dist/internal/e10/auth/xiaoe.js +117 -35
- package/dist/internal/e10/context.js +3 -3
- package/dist/internal/e10/request-runtime.js +46 -4
- package/dist/shortcuts/caizhilian/file-upload/metadata.js +124 -0
- package/dist/shortcuts/caizhilian/file-upload/multipart.js +47 -0
- package/dist/shortcuts/caizhilian/file-upload/protocol.js +116 -0
- package/dist/shortcuts/caizhilian/file-upload/receipt.js +37 -0
- package/dist/shortcuts/caizhilian/host.js +13 -5
- package/dist/shortcuts/caizhilian/operations/handlers/file-upload.js +72 -179
- package/dist/shortcuts/caizhilian/operations/handlers/fileops.js +67 -1
- package/dist/shortcuts/caizhilian/operations/handlers/folder.js +701 -4
- package/dist/shortcuts/caizhilian/operations/handlers/setting-attach.js +198 -0
- package/dist/shortcuts/caizhilian/operations/registry.js +5 -1
- package/dist/shortcuts/caizhilian/operations/shared.js +32 -0
- package/dist/shortcuts/caizhilian/operations/specs.js +67 -0
- package/dist/shortcuts/workflow/continuation.js +14 -9
- package/dist/shortcuts/workflow/endpoints.js +11 -1
- package/dist/shortcuts/workflow/index.js +55 -1
- package/dist/shortcuts/workflow/operations/flow-status.js +63 -0
- package/dist/shortcuts/workflow/operations/form.js +1822 -547
- package/dist/shortcuts/workflow/operations/read.js +414 -13
- package/dist/shortcuts/workflow/operations/shared.js +28 -0
- package/dist/shortcuts/workflow/operations/write.js +5 -5
- package/dist/shortcuts/workflow/operations.js +8 -6
- package/dist/shortcuts/workflow/stdout-compact.js +33 -0
- package/docs/caizhilian.md +12 -5
- package/docs/e10-auth.md +25 -3
- package/node_modules/@napi-rs/keyring/LICENSE +21 -0
- package/node_modules/@napi-rs/keyring/README.md +19 -0
- package/node_modules/@napi-rs/keyring/index.d.ts +166 -0
- package/node_modules/@napi-rs/keyring/index.js +514 -0
- package/node_modules/@napi-rs/keyring/keytar.d.ts +53 -0
- package/node_modules/@napi-rs/keyring/keytar.js +26 -0
- package/node_modules/@napi-rs/keyring/package.json +125 -0
- package/node_modules/@napi-rs/keyring-darwin-arm64/README.md +3 -0
- package/node_modules/@napi-rs/keyring-darwin-arm64/keyring.darwin-arm64.node +0 -0
- package/node_modules/@napi-rs/keyring-darwin-arm64/package.json +32 -0
- package/node_modules/commander/LICENSE +22 -0
- package/node_modules/commander/Readme.md +1149 -0
- package/node_modules/commander/esm.mjs +16 -0
- package/node_modules/commander/index.js +24 -0
- package/node_modules/commander/lib/argument.js +149 -0
- package/node_modules/commander/lib/command.js +2662 -0
- package/node_modules/commander/lib/error.js +39 -0
- package/node_modules/commander/lib/help.js +709 -0
- package/node_modules/commander/lib/option.js +367 -0
- package/node_modules/commander/lib/suggestSimilar.js +101 -0
- package/node_modules/commander/package-support.json +16 -0
- package/node_modules/commander/package.json +82 -0
- package/node_modules/commander/typings/esm.d.mts +3 -0
- package/node_modules/commander/typings/index.d.ts +1045 -0
- package/package.json +5 -1
- package/skills/weaver-e10-builder/SKILL.md +281 -0
- package/skills/weaver-e10-builder/_catalog.md +94 -0
- package/skills/weaver-e10-builder/actionflows/CONTEXT.md +71 -0
- package/skills/weaver-e10-builder/actionflows/SKILL.md +176 -0
- package/skills/weaver-e10-builder/actionflows/docs/adr/0001-generated-actionflow-cleanup-identity.md +5 -0
- package/skills/weaver-e10-builder/actionflows/docs/adr/0002-preserve-existing-actionflow-on-update.md +36 -0
- package/skills/weaver-e10-builder/actionflows/references/components/calendar/MeetingCreate.md +19 -0
- package/skills/weaver-e10-builder/actionflows/references/components/calendar/ScheduleCreate.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/database/DMLExecute.md +38 -0
- package/skills/weaver-e10-builder/actionflows/references/components/document/AttachmentCopy.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/document/AttachmentMove.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/document/DocumentCopy.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/document/DocumentDelete.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/document/DocumentEdit.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/document/DocumentMove.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/document/DocumentPermissionChange.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/document/DocumentRenewal.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/document/DocumentRevert.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/document/DocumentSave.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/document/DocumentSubscription.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/document/DocumentSubscriptionApprove.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/document/DocumentSubscriptionSendBack.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/document/DocumentSubscriptionWithdraw.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/document/FileFolderSave.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/document/GetAttachmentInfo.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/document/GetDocumentInfo.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/document/ModifyDocumentStatus.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/document/ReplaceAttachment.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/document/UpdatePrintNum.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/ebuilder/ActionEbAdd.md +100 -0
- package/skills/weaver-e10-builder/actionflows/references/components/ebuilder/ActionEbDelete.md +23 -0
- package/skills/weaver-e10-builder/actionflows/references/components/ebuilder/ActionEbRecover.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/ebuilder/ActionEbSaveVersion.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/ebuilder/ActionEbUpdate.md +67 -0
- package/skills/weaver-e10-builder/actionflows/references/components/ebuilder/DateTrigger.md +32 -0
- package/skills/weaver-e10-builder/actionflows/references/components/ebuilder/EbGetDataById.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/ebuilder/EnquiryForm.md +107 -0
- package/skills/weaver-e10-builder/actionflows/references/components/ebuilder/EventButton.md +33 -0
- package/skills/weaver-e10-builder/actionflows/references/components/ebuilder/EventFormData.md +19 -0
- package/skills/weaver-e10-builder/actionflows/references/components/ebuilder/TimeBatchTrigger.md +19 -0
- package/skills/weaver-e10-builder/actionflows/references/components/http/Http.md +77 -0
- package/skills/weaver-e10-builder/actionflows/references/components/logic/Condition.md +23 -0
- package/skills/weaver-e10-builder/actionflows/references/components/logic/LogicFlowSet.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/logic/MultipleExecution.md +38 -0
- package/skills/weaver-e10-builder/actionflows/references/components/logic/Output.md +37 -0
- package/skills/weaver-e10-builder/actionflows/references/components/message/InnerMQSend.md +50 -0
- package/skills/weaver-e10-builder/actionflows/references/components/message/SendMessage.md +30 -0
- package/skills/weaver-e10-builder/actionflows/references/components/personnel/AlterPersonStatus.md +30 -0
- package/skills/weaver-e10-builder/actionflows/references/components/personnel/HrmEmployeeUpdate.md +34 -0
- package/skills/weaver-e10-builder/actionflows/references/components/personnel/PersonnelAlterType.md +38 -0
- package/skills/weaver-e10-builder/actionflows/references/components/personnel/PersonnelOnboarding.md +36 -0
- package/skills/weaver-e10-builder/actionflows/references/components/serverless/ServerlessAction.md +42 -0
- package/skills/weaver-e10-builder/actionflows/references/components/trigger/CustomTrigger.md +82 -0
- package/skills/weaver-e10-builder/actionflows/references/components/trigger/InnerMQListener.md +41 -0
- package/skills/weaver-e10-builder/actionflows/references/components/trigger/SimpleScheduler.md +19 -0
- package/skills/weaver-e10-builder/actionflows/references/components/trigger/WebHookTrigger.md +91 -0
- package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveAddSign.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveAgreeRejectApply.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveCommit.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveConsulTurnTodo.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveCreate.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveDelete.md +19 -0
- package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveDoCirculate.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveDoForward.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveDoTurnTodo.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveEntrust.md +19 -0
- package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveIntervention.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveMandatoryArchiving.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveManualCC.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveRefuseRejectApply.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveRejectApply.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveSave.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveSendBack.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveShareEntry.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveTrigger.md +99 -0
- package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveWithdraw.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/workflow/WorkFlowDocEmpowerment.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/workflow/WorkflowToDoc.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/condition_rules.md +100 -0
- package/skills/weaver-e10-builder/actionflows/references/dynamic_capability_matrix.md +39 -0
- package/skills/weaver-e10-builder/actionflows/references/dynamic_resources.md +41 -0
- package/skills/weaver-e10-builder/actionflows/references/examples/enquiry-form-batch-insert-scene2.json +1043 -0
- package/skills/weaver-e10-builder/actionflows/references/function_rules.md +15 -0
- package/skills/weaver-e10-builder/actionflows/references/trigger_runtime_notes.md +53 -0
- package/skills/weaver-e10-builder/assets/dom-structure/Bar.json +341 -0
- package/skills/weaver-e10-builder/assets/dom-structure/BarStack.json +341 -0
- package/skills/weaver-e10-builder/assets/dom-structure/Bubble.json +323 -0
- package/skills/weaver-e10-builder/assets/dom-structure/Calendar.json +515 -0
- package/skills/weaver-e10-builder/assets/dom-structure/Circular.json +337 -0
- package/skills/weaver-e10-builder/assets/dom-structure/CollapsePanel.json +289 -0
- package/skills/weaver-e10-builder/assets/dom-structure/Comment.json +617 -0
- package/skills/weaver-e10-builder/assets/dom-structure/CountDown.json +755 -0
- package/skills/weaver-e10-builder/assets/dom-structure/DigitalPanel.json +191 -0
- package/skills/weaver-e10-builder/assets/dom-structure/EbButton.json +387 -0
- package/skills/weaver-e10-builder/assets/dom-structure/FastCreate.json +242 -0
- package/skills/weaver-e10-builder/assets/dom-structure/Gauge.json +282 -0
- package/skills/weaver-e10-builder/assets/dom-structure/HBar.json +336 -0
- package/skills/weaver-e10-builder/assets/dom-structure/HBarStack.json +337 -0
- package/skills/weaver-e10-builder/assets/dom-structure/Line.json +341 -0
- package/skills/weaver-e10-builder/assets/dom-structure/NList.json +712 -0
- package/skills/weaver-e10-builder/assets/dom-structure/NavBar.json +274 -0
- package/skills/weaver-e10-builder/assets/dom-structure/NavPanel.json +390 -0
- package/skills/weaver-e10-builder/assets/dom-structure/NewTab.json +606 -0
- package/skills/weaver-e10-builder/assets/dom-structure/Nightingale.json +336 -0
- package/skills/weaver-e10-builder/assets/dom-structure/PageHeader.json +205 -0
- package/skills/weaver-e10-builder/assets/dom-structure/Picture.json +209 -0
- package/skills/weaver-e10-builder/assets/dom-structure/Pie.json +338 -0
- package/skills/weaver-e10-builder/assets/dom-structure/ProgressChart.json +299 -0
- package/skills/weaver-e10-builder/assets/dom-structure/SearchGlobal.json +628 -0
- package/skills/weaver-e10-builder/assets/dom-structure/Slide.json +489 -0
- package/skills/weaver-e10-builder/assets/dom-structure/Treemap.json +324 -0
- package/skills/weaver-e10-builder/assets/factory/chart-dimensions.json +536 -0
- package/skills/weaver-e10-builder/assets/factory/example-btn-progress-collapse-configured.json +2515 -0
- package/skills/weaver-e10-builder/assets/factory/example-configured-2.json +13805 -0
- package/skills/weaver-e10-builder/assets/factory/example-configured.json +6735 -0
- package/skills/weaver-e10-builder/assets/factory/factory-bar-stack.json +326 -0
- package/skills/weaver-e10-builder/assets/factory/factory-bar.json +222 -0
- package/skills/weaver-e10-builder/assets/factory/factory-bubble.json +322 -0
- package/skills/weaver-e10-builder/assets/factory/factory-calendar.json +325 -0
- package/skills/weaver-e10-builder/assets/factory/factory-circular.json +320 -0
- package/skills/weaver-e10-builder/assets/factory/factory-collapse-panel.json +132 -0
- package/skills/weaver-e10-builder/assets/factory/factory-comment.json +388 -0
- package/skills/weaver-e10-builder/assets/factory/factory-count-down.json +198 -0
- package/skills/weaver-e10-builder/assets/factory/factory-digital-panel.json +108 -0
- package/skills/weaver-e10-builder/assets/factory/factory-eb-button.json +150 -0
- package/skills/weaver-e10-builder/assets/factory/factory-fast-create.json +62 -0
- package/skills/weaver-e10-builder/assets/factory/factory-gauge.json +312 -0
- package/skills/weaver-e10-builder/assets/factory/factory-h-bar-stack.json +328 -0
- package/skills/weaver-e10-builder/assets/factory/factory-h-bar.json +326 -0
- package/skills/weaver-e10-builder/assets/factory/factory-line.json +212 -0
- package/skills/weaver-e10-builder/assets/factory/factory-nav-bar.json +167 -0
- package/skills/weaver-e10-builder/assets/factory/factory-nav-menu.json +144 -0
- package/skills/weaver-e10-builder/assets/factory/factory-nav-panel.json +338 -0
- package/skills/weaver-e10-builder/assets/factory/factory-new-tab.json +163 -0
- package/skills/weaver-e10-builder/assets/factory/factory-nightingale.json +312 -0
- package/skills/weaver-e10-builder/assets/factory/factory-nlist.json +112 -0
- package/skills/weaver-e10-builder/assets/factory/factory-page-header.json +171 -0
- package/skills/weaver-e10-builder/assets/factory/factory-picture.json +169 -0
- package/skills/weaver-e10-builder/assets/factory/factory-pie.json +212 -0
- package/skills/weaver-e10-builder/assets/factory/factory-progress-chart.json +162 -0
- package/skills/weaver-e10-builder/assets/factory/factory-search-global.json +104 -0
- package/skills/weaver-e10-builder/assets/factory/factory-slide.json +164 -0
- package/skills/weaver-e10-builder/assets/factory/factory-treemap.json +322 -0
- package/skills/weaver-e10-builder/assets/icons.db +0 -0
- package/skills/weaver-e10-builder/assets/sample/.claude/settings.local.json +8 -0
- package/skills/weaver-e10-builder/assets/sample/api/formApi.js +510 -0
- package/skills/weaver-e10-builder/assets/sample/config/config.js +0 -0
- package/skills/weaver-e10-builder/assets/sample/config/configLoad.js +0 -0
- package/skills/weaver-e10-builder/assets/sample/config/configLoad_default.js +0 -0
- package/skills/weaver-e10-builder/assets/sample/config/config_default.js +0 -0
- package/skills/weaver-e10-builder/assets/sample/entry.js +22 -0
- package/skills/weaver-e10-builder/assets/sample/eslint.config.cjs +48 -0
- package/skills/weaver-e10-builder/assets/sample/memo.md +0 -0
- package/skills/weaver-e10-builder/assets/sample/readme.js +8 -0
- package/skills/weaver-e10-builder/references/app/guide-app-publish.md +92 -0
- package/skills/weaver-e10-builder/references/auth/guide-auth.md +88 -0
- package/skills/weaver-e10-builder/references/coding/guide-edit-backfill.md +189 -0
- package/skills/weaver-e10-builder/references/coding/guide-form-crud.md +262 -0
- package/skills/weaver-e10-builder/references/coding/guide-page-code.md +244 -0
- package/skills/weaver-e10-builder/references/coding/guide-page-export.md +119 -0
- package/skills/weaver-e10-builder/references/coding/ref-compile-rules.md +130 -0
- package/skills/weaver-e10-builder/references/common/guide-plan-template.md +164 -0
- package/skills/weaver-e10-builder/references/common/map.md +153 -0
- package/skills/weaver-e10-builder/references/common/ref-cli-commands.md +635 -0
- package/skills/weaver-e10-builder/references/components/@weapp-Button.md +104 -0
- package/skills/weaver-e10-builder/references/components/base-Badge.md +100 -0
- package/skills/weaver-e10-builder/references/components/base-Dialog.md +358 -0
- package/skills/weaver-e10-builder/references/components/base-Empty.md +58 -0
- package/skills/weaver-e10-builder/references/components/base-Tag.md +112 -0
- package/skills/weaver-e10-builder/references/components/display-Alert.md +64 -0
- package/skills/weaver-e10-builder/references/components/display-Avatar.md +150 -0
- package/skills/weaver-e10-builder/references/components/display-Calendar.md +263 -0
- package/skills/weaver-e10-builder/references/components/display-Carousel.md +115 -0
- package/skills/weaver-e10-builder/references/components/display-Collapse.md +299 -0
- package/skills/weaver-e10-builder/references/components/display-FilePreview.md +49 -0
- package/skills/weaver-e10-builder/references/components/display-Icon.md +66 -0
- package/skills/weaver-e10-builder/references/components/display-List.md +320 -0
- package/skills/weaver-e10-builder/references/components/display-Pagination.md +41 -0
- package/skills/weaver-e10-builder/references/components/display-Spin.md +34 -0
- package/skills/weaver-e10-builder/references/components/display-Steps.md +89 -0
- package/skills/weaver-e10-builder/references/components/display-Table.md +160 -0
- package/skills/weaver-e10-builder/references/components/display-Title.md +117 -0
- package/skills/weaver-e10-builder/references/components/form-Checkbox.md +161 -0
- package/skills/weaver-e10-builder/references/components/form-DepartmentBrowser-api.md +52 -0
- package/skills/weaver-e10-builder/references/components/form-EmployeeBrowser-api.md +51 -0
- package/skills/weaver-e10-builder/references/components/form-EmployeeBrowser.md +51 -0
- package/skills/weaver-e10-builder/references/components/form-Input.md +123 -0
- package/skills/weaver-e10-builder/references/components/form-Radio.md +145 -0
- package/skills/weaver-e10-builder/references/components/form-Select.md +191 -0
- package/skills/weaver-e10-builder/references/components/form-Switch.md +46 -0
- package/skills/weaver-e10-builder/references/components/form-Upload.md +53 -0
- package/skills/weaver-e10-builder/references/components/generic-Echarts.md +102 -0
- package/skills/weaver-e10-builder/references/ebuilder-designer/guide-designer-components.md +130 -0
- package/skills/weaver-e10-builder/references/ebuilder-designer/guide-designer-css.md +127 -0
- package/skills/weaver-e10-builder/references/ebuilder-designer/guide-designer-factory.md +460 -0
- package/skills/weaver-e10-builder/references/ebuilder-designer/guide-designer-version.md +111 -0
- package/skills/weaver-e10-builder/references/ebuilder-designer/guide-designer.md +288 -0
- package/skills/weaver-e10-builder/references/esb-interface/guide-import.md +34 -0
- package/skills/weaver-e10-builder/references/form/guide-create-form.md +248 -0
- package/skills/weaver-e10-builder/references/form/guide-ebuilder-filter.md +73 -0
- package/skills/weaver-e10-builder/references/form/guide-ebuilder-scope.md +82 -0
- package/skills/weaver-e10-builder/references/form/guide-field-linkage.md +123 -0
- package/skills/weaver-e10-builder/references/form/guide-form-archive-permission.md +175 -0
- package/skills/weaver-e10-builder/references/form/guide-form-association.md +124 -0
- package/skills/weaver-e10-builder/references/form/guide-form-button.md +169 -0
- package/skills/weaver-e10-builder/references/form/guide-form-data.md +78 -0
- package/skills/weaver-e10-builder/references/form/guide-form-formula-functions.md +343 -0
- package/skills/weaver-e10-builder/references/form/guide-form-layout-incremental.md +90 -0
- package/skills/weaver-e10-builder/references/form/guide-form-layout-planning.md +68 -0
- package/skills/weaver-e10-builder/references/form/guide-form-linkage.md +269 -0
- package/skills/weaver-e10-builder/references/form/guide-form-message.md +74 -0
- package/skills/weaver-e10-builder/references/form/guide-form-physical-table.md +146 -0
- package/skills/weaver-e10-builder/references/form/guide-form-serial-mark.md +47 -0
- package/skills/weaver-e10-builder/references/form/guide-form-sub-detail.md +82 -0
- package/skills/weaver-e10-builder/references/form/guide-form-view-permission.md +38 -0
- package/skills/weaver-e10-builder/references/form/guide-form-view.md +371 -0
- package/skills/weaver-e10-builder/references/form/guide-formula-linkage.md +281 -0
- package/skills/weaver-e10-builder/references/form/guide-list-columns.md +52 -0
- package/skills/weaver-e10-builder/references/form/guide-list-custom-text.md +52 -0
- package/skills/weaver-e10-builder/references/form/guide-list-stats.md +136 -0
- package/skills/weaver-e10-builder/references/form/guide-virtual-form.md +156 -0
- package/skills/weaver-e10-builder/references/form/ref-form-fields.md +293 -0
- package/skills/weaver-e10-builder/references/form/style-templates.md +97 -0
- package/skills/weaver-e10-builder/references/hrm/guide-matrix.md +245 -0
- package/skills/weaver-e10-builder/references/hrm/guide-org-employee.md +155 -0
- package/skills/weaver-e10-builder/references/menu/system-menus.md +75 -0
- package/skills/weaver-e10-builder/references/report/add-dataset-registration-guide.md +139 -0
- package/skills/weaver-e10-builder/references/report/ai-report-workflow.md +412 -0
- package/skills/weaver-e10-builder/references/report/api-report-build-fast-path.md +275 -0
- package/skills/weaver-e10-builder/references/report/app-datasource-lookup-guide.md +230 -0
- package/skills/weaver-e10-builder/references/report/cell-config-echo-guide.md +163 -0
- package/skills/weaver-e10-builder/references/report/cell-transform-guide.md +147 -0
- package/skills/weaver-e10-builder/references/report/condition-format-guide.md +140 -0
- package/skills/weaver-e10-builder/references/report/cross-dataset-filter-guide.md +304 -0
- package/skills/weaver-e10-builder/references/report/dataset-query-filter-guide.md +235 -0
- package/skills/weaver-e10-builder/references/report/dataset-sidebar-ops-guide.md +280 -0
- package/skills/weaver-e10-builder/references/report/dataset-table-field-contract-guide.md +339 -0
- package/skills/weaver-e10-builder/references/report/datasource-metadata-guide.md +365 -0
- package/skills/weaver-e10-builder/references/report/datasource-selection-and-parent-filter-guide.md +148 -0
- package/skills/weaver-e10-builder/references/report/date-range-query-reference.md +102 -0
- package/skills/weaver-e10-builder/references/report/default-header-style-guide.md +70 -0
- package/skills/weaver-e10-builder/references/report/designer-blank-prevention-guide.md +111 -0
- package/skills/weaver-e10-builder/references/report/event-hreflink-guide.md +184 -0
- package/skills/weaver-e10-builder/references/report/field-bind-exact-match-guide.md +208 -0
- package/skills/weaver-e10-builder/references/report/formula-cell-api-guide.md +258 -0
- package/skills/weaver-e10-builder/references/report/guide-report-build.md +131 -0
- package/skills/weaver-e10-builder/references/report/guide-report-modify.md +100 -0
- package/skills/weaver-e10-builder/references/report/guide-report-multisource.md +143 -0
- package/skills/weaver-e10-builder/references/report/guide-report-query.md +98 -0
- package/skills/weaver-e10-builder/references/report/hidden-row-and-header-merge-guide.md +100 -0
- package/skills/weaver-e10-builder/references/report/layout-showlocation-freeze-guide.md +167 -0
- package/skills/weaver-e10-builder/references/report/preaggregate-auto-disable-guide.md +107 -0
- package/skills/weaver-e10-builder/references/report/query-condition-api-guide.md +890 -0
- package/skills/weaver-e10-builder/references/report/ref-report-commands.md +122 -0
- package/skills/weaver-e10-builder/references/report/ref-report-pitfalls.md +226 -0
- package/skills/weaver-e10-builder/references/report/report-baseinfo-defaults-guide.md +117 -0
- package/skills/weaver-e10-builder/references/report/report-building-guide.md +511 -0
- package/skills/weaver-e10-builder/references/report/report-config-schema.md +445 -0
- package/skills/weaver-e10-builder/references/report/report-create-modes-guide.md +182 -0
- package/skills/weaver-e10-builder/references/report/report-data-model.md +447 -0
- package/skills/weaver-e10-builder/references/report/report-delivery-contract.md +101 -0
- package/skills/weaver-e10-builder/references/report/report-designer-feature-map.md +500 -0
- package/skills/weaver-e10-builder/references/report/report-internal-error-guide.md +78 -0
- package/skills/weaver-e10-builder/references/report/report-knowledge-base.md +389 -0
- package/skills/weaver-e10-builder/references/report/report-lifecycle-api-guide.md +392 -0
- package/skills/weaver-e10-builder/references/report/report-list-page-ops-guide.md +191 -0
- package/skills/weaver-e10-builder/references/report/report-permission-guide.md +365 -0
- package/skills/weaver-e10-builder/references/report/report-requirement-analysis-template.md +202 -0
- package/skills/weaver-e10-builder/references/report/report-self-check-guide.md +164 -0
- package/skills/weaver-e10-builder/references/report/safe-partial-save-guide.md +151 -0
- package/skills/weaver-e10-builder/references/report/snowflake-id-precision-guide.md +84 -0
- package/skills/weaver-e10-builder/references/report/spec-build-schema.md +294 -0
- package/skills/weaver-e10-builder/references/report/targeted-fix-guide.md +97 -0
- package/skills/weaver-e10-builder/references/report/user-request-scope-only-guide.md +82 -0
- package/skills/weaver-e10-builder/references/workflow/guide-function-management.md +154 -0
- package/skills/weaver-e10-builder/references/workflow/guide-opinion-settings.md +126 -0
- package/skills/weaver-e10-builder/references/workflow/guide-workflow-action.md +174 -0
- package/skills/weaver-e10-builder/references/workflow/guide-workflow-auth-resp.md +224 -0
- package/skills/weaver-e10-builder/references/workflow/guide-workflow-condition.md +447 -0
- package/skills/weaver-e10-builder/references/workflow/guide-workflow-node-layout.md +181 -0
- package/skills/weaver-e10-builder/references/workflow/guide-workflow-odoc-setting.md +248 -0
- package/skills/weaver-e10-builder/references/workflow/guide-workflow-odoc.md +68 -0
- package/skills/weaver-e10-builder/references/workflow/guide-workflow.md +527 -0
- package/skills/weaver-e10-builder/references/workflow/operator-matrix.md +76 -0
- package/skills/weaver-e10-caizhilian/SKILL.md +14 -4
- package/skills/weaver-e10-caizhilian/references/file-upload.md +100 -295
- package/skills/weaver-e10-caizhilian/references/files.md +15 -0
- package/skills/weaver-e10-caizhilian/references/folder.md +31 -3
- package/skills/weaver-e10-caizhilian/references/setting-attach.md +48 -3
- package/skills/weaver-e10-caizhilian/references/source-manifest.json +634 -25
- package/skills/weaver-e10-jiuchuanhui/SKILL.md +9 -1
- package/skills/weaver-e10-shared/SKILL.md +19 -5
- package/skills/weaver-e10-shared/references/e10-auth-and-session.md +25 -5
- package/skills/weaver-e10-workflow/SKILL.md +28 -47
- package/skills/weaver-e10-workflow/references/source-manifest.json +46 -36
- package/skills/weaver-e10-workflow/references/workflow-batch.md +2 -4
- package/skills/weaver-e10-workflow/references/workflow-create.md +261 -86
- package/skills/weaver-e10-workflow/references/workflow-edit.md +2 -1
- package/skills/weaver-e10-workflow/references/workflow-memory.md +3 -6
- package/skills/weaver-e10-workflow/references/workflow-operate.md +2 -1
- package/skills/weaver-e10-workflow/references/workflow-query.md +11 -9
- package/skills/weaver-e10-workflow/references/workflow-share.md +2 -0
|
@@ -669,11 +669,13 @@ async function planPermissionAdd(args, env, action) {
|
|
|
669
669
|
}
|
|
670
670
|
await checkSetFolderPermission(env, folderId, action);
|
|
671
671
|
await checkDocPermissionAuth(env, folderId, permissionType, action);
|
|
672
|
+
const body = buildFolderPermissionAddBody(folderId, permissionType, objType, args);
|
|
673
|
+
body.seclevel = parseSeclevelArgs(args);
|
|
672
674
|
return {
|
|
673
675
|
folderId,
|
|
674
676
|
permissionType,
|
|
675
677
|
objType,
|
|
676
|
-
body
|
|
678
|
+
body,
|
|
677
679
|
};
|
|
678
680
|
}
|
|
679
681
|
const permissionAddHandler = {
|
|
@@ -859,11 +861,13 @@ async function permissionDetail(args, env) {
|
|
|
859
861
|
}
|
|
860
862
|
// ── caizhilian.folder.permission.sync-setting ─────────────
|
|
861
863
|
const SYNC_FOLDER_SETTING_PATH = '/api/doc/folderSetting/syncFolderSetting';
|
|
864
|
+
const SYNC_TIMEOUT_MS = 120_000;
|
|
862
865
|
function planSyncSetting(args) {
|
|
863
866
|
const folderId = requireId(args.id, '文件夹 ID');
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
+
if (typeof args.keepOldSettingForAllFolders !== 'boolean') {
|
|
868
|
+
throw caizhilianValidationError('field_required', 'keepOldSettingForAllFolders 必填:true 表示保留原有管理员设置,false 表示不保留');
|
|
869
|
+
}
|
|
870
|
+
const keepOldSettingForAllFolders = args.keepOldSettingForAllFolders;
|
|
867
871
|
return {
|
|
868
872
|
folderId,
|
|
869
873
|
keepOldSettingForAllFolders,
|
|
@@ -904,6 +908,356 @@ const permissionSyncSettingHandler = {
|
|
|
904
908
|
path: SYNC_FOLDER_SETTING_PATH,
|
|
905
909
|
body: plan.body,
|
|
906
910
|
operation: action,
|
|
911
|
+
timeoutMs: SYNC_TIMEOUT_MS,
|
|
912
|
+
});
|
|
913
|
+
const data = asRecord(response);
|
|
914
|
+
assertToleratedBusinessSuccess(data, action);
|
|
915
|
+
const existChildFolder = asRecord(data.data).existChildFolder ?? false;
|
|
916
|
+
return caizhilianSuccess(action, { existChildFolder });
|
|
917
|
+
},
|
|
918
|
+
};
|
|
919
|
+
function planSyncMaintain(args) {
|
|
920
|
+
const folderId = requireId(args.id, '文件夹 ID');
|
|
921
|
+
if (typeof args.keepOldSettingForAllFolders !== 'boolean') {
|
|
922
|
+
throw caizhilianValidationError('field_required', 'keepOldSettingForAllFolders 必填:true 表示保留原有文件夹维护设置,false 表示不保留');
|
|
923
|
+
}
|
|
924
|
+
const keepOldSettingForAllFolders = args.keepOldSettingForAllFolders;
|
|
925
|
+
return {
|
|
926
|
+
folderId,
|
|
927
|
+
keepOldSettingForAllFolders,
|
|
928
|
+
body: {
|
|
929
|
+
type: 'newCreateFolderPremisstion',
|
|
930
|
+
id: folderId,
|
|
931
|
+
keepOldShare: true,
|
|
932
|
+
keepOldSettingForAllFolders,
|
|
933
|
+
},
|
|
934
|
+
};
|
|
935
|
+
}
|
|
936
|
+
const PERMISSION_SYNC_MAINTAIN_APPLY = 'caizhilian.folder.permission.sync-maintain.apply';
|
|
937
|
+
const permissionSyncMaintainHandler = {
|
|
938
|
+
targetKeys: ['id'],
|
|
939
|
+
async prepare(args, env) {
|
|
940
|
+
const action = 'caizhilian.folder.permission.sync-maintain';
|
|
941
|
+
const plan = planSyncMaintain(args);
|
|
942
|
+
const lease = await issueWriteLease(env, PERMISSION_SYNC_MAINTAIN_APPLY, args, {
|
|
943
|
+
id: plan.folderId,
|
|
944
|
+
keepOldSettingForAllFolders: plan.keepOldSettingForAllFolders,
|
|
945
|
+
body_fingerprint: fingerprint(plan.body),
|
|
946
|
+
});
|
|
947
|
+
return caizhilianPrepared(action, {
|
|
948
|
+
id: plan.folderId,
|
|
949
|
+
keepOldSettingForAllFolders: plan.keepOldSettingForAllFolders,
|
|
950
|
+
request: { method: 'POST', path: SYNC_FOLDER_SETTING_PATH, body: plan.body },
|
|
951
|
+
}, lease);
|
|
952
|
+
},
|
|
953
|
+
async apply(args, env, lease) {
|
|
954
|
+
const action = PERMISSION_SYNC_MAINTAIN_APPLY;
|
|
955
|
+
const plan = planSyncMaintain(args);
|
|
956
|
+
const expected = typeof lease.body_fingerprint === 'string' ? lease.body_fingerprint : '';
|
|
957
|
+
if (expected && expected !== fingerprint(plan.body)) {
|
|
958
|
+
throw caizhilianValidationError('plan_changed', `${action} 的请求体与 prepare 时不一致,请重新执行 prepare`);
|
|
959
|
+
}
|
|
960
|
+
const response = await env.host.request({
|
|
961
|
+
method: 'POST',
|
|
962
|
+
path: SYNC_FOLDER_SETTING_PATH,
|
|
963
|
+
body: plan.body,
|
|
964
|
+
operation: action,
|
|
965
|
+
timeoutMs: SYNC_TIMEOUT_MS,
|
|
966
|
+
});
|
|
967
|
+
const data = asRecord(response);
|
|
968
|
+
assertToleratedBusinessSuccess(data, action);
|
|
969
|
+
const existChildFolder = asRecord(data.data).existChildFolder ?? false;
|
|
970
|
+
return caizhilianSuccess(action, { existChildFolder });
|
|
971
|
+
},
|
|
972
|
+
};
|
|
973
|
+
// ── caizhilian.folder.permission.sync-download ────────────
|
|
974
|
+
const PERMISSION_SYNC_DOWNLOAD_APPLY = 'caizhilian.folder.permission.sync-download.apply';
|
|
975
|
+
const DOWNLOAD_AUTH_LABELS = {
|
|
976
|
+
true: '允许所有人下载',
|
|
977
|
+
user: '允许以下人员下载',
|
|
978
|
+
false: '不允许下载',
|
|
979
|
+
};
|
|
980
|
+
const permissionSyncDownloadHandler = {
|
|
981
|
+
targetKeys: ['id'],
|
|
982
|
+
async prepare(args, env) {
|
|
983
|
+
const action = 'caizhilian.folder.permission.sync-download';
|
|
984
|
+
const folderId = requireId(args.id, '文件夹 ID');
|
|
985
|
+
// 先查询当前下载权限设置
|
|
986
|
+
const downloadAuth = await fetchFolderPermissionAuth(env, folderId, 'downloadPremisstion', action);
|
|
987
|
+
if (downloadAuth === null) {
|
|
988
|
+
throw caizhilianValidationError('permission_not_found', '无法获取当前文件夹的下载权限设置');
|
|
989
|
+
}
|
|
990
|
+
const downloadAuthLabel = DOWNLOAD_AUTH_LABELS[downloadAuth] ?? downloadAuth;
|
|
991
|
+
// 根据 downloadAuth 决定 keepOldSettingForAllFolders
|
|
992
|
+
let keepOldSettingForAllFolders;
|
|
993
|
+
if (downloadAuth === 'user') {
|
|
994
|
+
// 允许以下人员下载时,需要确认是否保留原有设置
|
|
995
|
+
if (typeof args.keepOldSettingForAllFolders !== 'boolean') {
|
|
996
|
+
throw caizhilianValidationError('field_required', '当前下载权限为"允许以下人员下载",keepOldSettingForAllFolders 必填:true 表示保留原有下载权限设置,false 表示不保留');
|
|
997
|
+
}
|
|
998
|
+
keepOldSettingForAllFolders = args.keepOldSettingForAllFolders;
|
|
999
|
+
}
|
|
1000
|
+
else {
|
|
1001
|
+
// 允许所有人下载 或 不允许下载时,不需要确认,传空字符串
|
|
1002
|
+
keepOldSettingForAllFolders = '';
|
|
1003
|
+
}
|
|
1004
|
+
const body = {
|
|
1005
|
+
type: 'folderDocIsDown',
|
|
1006
|
+
id: folderId,
|
|
1007
|
+
keepOldShare: true,
|
|
1008
|
+
keepOldSettingForAllFolders,
|
|
1009
|
+
};
|
|
1010
|
+
const lease = await issueWriteLease(env, PERMISSION_SYNC_DOWNLOAD_APPLY, args, {
|
|
1011
|
+
id: folderId,
|
|
1012
|
+
download_auth: downloadAuth,
|
|
1013
|
+
keepOldSettingForAllFolders,
|
|
1014
|
+
body_fingerprint: fingerprint(body),
|
|
1015
|
+
});
|
|
1016
|
+
return caizhilianPrepared(action, {
|
|
1017
|
+
id: folderId,
|
|
1018
|
+
download_auth: downloadAuth,
|
|
1019
|
+
download_auth_label: downloadAuthLabel,
|
|
1020
|
+
keepOldSettingForAllFolders,
|
|
1021
|
+
request: { method: 'POST', path: SYNC_FOLDER_SETTING_PATH, body },
|
|
1022
|
+
}, lease);
|
|
1023
|
+
},
|
|
1024
|
+
async apply(args, env, lease) {
|
|
1025
|
+
const action = PERMISSION_SYNC_DOWNLOAD_APPLY;
|
|
1026
|
+
const folderId = requireId(args.id, '文件夹 ID');
|
|
1027
|
+
// 重新查询下载权限以确认
|
|
1028
|
+
const downloadAuth = await fetchFolderPermissionAuth(env, folderId, 'downloadPremisstion', action);
|
|
1029
|
+
if (downloadAuth === null) {
|
|
1030
|
+
throw caizhilianValidationError('permission_not_found', '无法获取当前文件夹的下载权限设置');
|
|
1031
|
+
}
|
|
1032
|
+
// 根据 downloadAuth 决定 keepOldSettingForAllFolders
|
|
1033
|
+
let keepOldSettingForAllFolders;
|
|
1034
|
+
if (downloadAuth === 'user') {
|
|
1035
|
+
if (typeof args.keepOldSettingForAllFolders !== 'boolean') {
|
|
1036
|
+
throw caizhilianValidationError('field_required', '当前下载权限为"允许以下人员下载",keepOldSettingForAllFolders 必填:true 表示保留原有下载权限设置,false 表示不保留');
|
|
1037
|
+
}
|
|
1038
|
+
keepOldSettingForAllFolders = args.keepOldSettingForAllFolders;
|
|
1039
|
+
}
|
|
1040
|
+
else {
|
|
1041
|
+
keepOldSettingForAllFolders = '';
|
|
1042
|
+
}
|
|
1043
|
+
const body = {
|
|
1044
|
+
type: 'folderDocIsDown',
|
|
1045
|
+
id: folderId,
|
|
1046
|
+
keepOldShare: true,
|
|
1047
|
+
keepOldSettingForAllFolders,
|
|
1048
|
+
};
|
|
1049
|
+
// 校验请求体是否与 prepare 时一致
|
|
1050
|
+
const expected = typeof lease.body_fingerprint === 'string' ? lease.body_fingerprint : '';
|
|
1051
|
+
if (expected && expected !== fingerprint(body)) {
|
|
1052
|
+
throw caizhilianValidationError('plan_changed', `${action} 的请求体与 prepare 时不一致,请重新执行 prepare`);
|
|
1053
|
+
}
|
|
1054
|
+
const response = await env.host.request({
|
|
1055
|
+
method: 'POST',
|
|
1056
|
+
path: SYNC_FOLDER_SETTING_PATH,
|
|
1057
|
+
body,
|
|
1058
|
+
operation: action,
|
|
1059
|
+
timeoutMs: SYNC_TIMEOUT_MS,
|
|
1060
|
+
});
|
|
1061
|
+
const data = asRecord(response);
|
|
1062
|
+
assertToleratedBusinessSuccess(data, action);
|
|
1063
|
+
const existChildFolder = asRecord(data.data).existChildFolder ?? false;
|
|
1064
|
+
return caizhilianSuccess(action, { existChildFolder });
|
|
1065
|
+
},
|
|
1066
|
+
};
|
|
1067
|
+
// ── caizhilian.folder.permission.sync-delete ─────────────
|
|
1068
|
+
const PERMISSION_SYNC_DELETE_APPLY = 'caizhilian.folder.permission.sync-delete.apply';
|
|
1069
|
+
const DELETE_AUTH_LABELS = {
|
|
1070
|
+
true: '允许完全控制权限人员删除文档',
|
|
1071
|
+
user: '允许以下人员删除文档',
|
|
1072
|
+
};
|
|
1073
|
+
const permissionSyncDeleteHandler = {
|
|
1074
|
+
targetKeys: ['id'],
|
|
1075
|
+
async prepare(args, env) {
|
|
1076
|
+
const action = 'caizhilian.folder.permission.sync-delete';
|
|
1077
|
+
const folderId = requireId(args.id, '文件夹 ID');
|
|
1078
|
+
// 先查询当前删除权限设置
|
|
1079
|
+
const deleteAuth = await fetchFolderPermissionAuth(env, folderId, 'deletePremisstion', action);
|
|
1080
|
+
if (deleteAuth === null) {
|
|
1081
|
+
throw caizhilianValidationError('permission_not_found', '无法获取当前文件夹的删除权限设置');
|
|
1082
|
+
}
|
|
1083
|
+
const deleteAuthLabel = DELETE_AUTH_LABELS[deleteAuth] ?? deleteAuth;
|
|
1084
|
+
// 根据 deleteAuth 决定 keepOldSettingForAllFolders
|
|
1085
|
+
let keepOldSettingForAllFolders;
|
|
1086
|
+
if (deleteAuth === 'user') {
|
|
1087
|
+
// 允许以下人员删除文档时,需要确认是否保留原有设置
|
|
1088
|
+
if (typeof args.keepOldSettingForAllFolders !== 'boolean') {
|
|
1089
|
+
throw caizhilianValidationError('field_required', '当前删除权限为"允许以下人员删除文档",keepOldSettingForAllFolders 必填:true 表示保留原有删除权限设置,false 表示不保留');
|
|
1090
|
+
}
|
|
1091
|
+
keepOldSettingForAllFolders = args.keepOldSettingForAllFolders;
|
|
1092
|
+
}
|
|
1093
|
+
else {
|
|
1094
|
+
// 允许完全控制权限人员删除文档时,不需要确认,传空字符串
|
|
1095
|
+
keepOldSettingForAllFolders = '';
|
|
1096
|
+
}
|
|
1097
|
+
const body = {
|
|
1098
|
+
type: 'folderDocIsDelete',
|
|
1099
|
+
id: folderId,
|
|
1100
|
+
keepOldShare: true,
|
|
1101
|
+
keepOldSettingForAllFolders,
|
|
1102
|
+
};
|
|
1103
|
+
const lease = await issueWriteLease(env, PERMISSION_SYNC_DELETE_APPLY, args, {
|
|
1104
|
+
id: folderId,
|
|
1105
|
+
delete_auth: deleteAuth,
|
|
1106
|
+
keepOldSettingForAllFolders,
|
|
1107
|
+
body_fingerprint: fingerprint(body),
|
|
1108
|
+
});
|
|
1109
|
+
return caizhilianPrepared(action, {
|
|
1110
|
+
id: folderId,
|
|
1111
|
+
delete_auth: deleteAuth,
|
|
1112
|
+
delete_auth_label: deleteAuthLabel,
|
|
1113
|
+
keepOldSettingForAllFolders,
|
|
1114
|
+
request: { method: 'POST', path: SYNC_FOLDER_SETTING_PATH, body },
|
|
1115
|
+
}, lease);
|
|
1116
|
+
},
|
|
1117
|
+
async apply(args, env, lease) {
|
|
1118
|
+
const action = PERMISSION_SYNC_DELETE_APPLY;
|
|
1119
|
+
const folderId = requireId(args.id, '文件夹 ID');
|
|
1120
|
+
// 重新查询删除权限以确认
|
|
1121
|
+
const deleteAuth = await fetchFolderPermissionAuth(env, folderId, 'deletePremisstion', action);
|
|
1122
|
+
if (deleteAuth === null) {
|
|
1123
|
+
throw caizhilianValidationError('permission_not_found', '无法获取当前文件夹的删除权限设置');
|
|
1124
|
+
}
|
|
1125
|
+
// 根据 deleteAuth 决定 keepOldSettingForAllFolders
|
|
1126
|
+
let keepOldSettingForAllFolders;
|
|
1127
|
+
if (deleteAuth === 'user') {
|
|
1128
|
+
if (typeof args.keepOldSettingForAllFolders !== 'boolean') {
|
|
1129
|
+
throw caizhilianValidationError('field_required', '当前删除权限为"允许以下人员删除文档",keepOldSettingForAllFolders 必填:true 表示保留原有删除权限设置,false 表示不保留');
|
|
1130
|
+
}
|
|
1131
|
+
keepOldSettingForAllFolders = args.keepOldSettingForAllFolders;
|
|
1132
|
+
}
|
|
1133
|
+
else {
|
|
1134
|
+
keepOldSettingForAllFolders = '';
|
|
1135
|
+
}
|
|
1136
|
+
const body = {
|
|
1137
|
+
type: 'folderDocIsDelete',
|
|
1138
|
+
id: folderId,
|
|
1139
|
+
keepOldShare: true,
|
|
1140
|
+
keepOldSettingForAllFolders,
|
|
1141
|
+
};
|
|
1142
|
+
// 校验请求体是否与 prepare 时一致
|
|
1143
|
+
const expected = typeof lease.body_fingerprint === 'string' ? lease.body_fingerprint : '';
|
|
1144
|
+
if (expected && expected !== fingerprint(body)) {
|
|
1145
|
+
throw caizhilianValidationError('plan_changed', `${action} 的请求体与 prepare 时不一致,请重新执行 prepare`);
|
|
1146
|
+
}
|
|
1147
|
+
const response = await env.host.request({
|
|
1148
|
+
method: 'POST',
|
|
1149
|
+
path: SYNC_FOLDER_SETTING_PATH,
|
|
1150
|
+
body,
|
|
1151
|
+
operation: action,
|
|
1152
|
+
timeoutMs: SYNC_TIMEOUT_MS,
|
|
1153
|
+
});
|
|
1154
|
+
const data = asRecord(response);
|
|
1155
|
+
assertToleratedBusinessSuccess(data, action);
|
|
1156
|
+
const existChildFolder = asRecord(data.data).existChildFolder ?? false;
|
|
1157
|
+
return caizhilianSuccess(action, { existChildFolder });
|
|
1158
|
+
},
|
|
1159
|
+
};
|
|
1160
|
+
// ── caizhilian.folder.permission.sync-copy ───────────────
|
|
1161
|
+
const PERMISSION_SYNC_COPY_APPLY = 'caizhilian.folder.permission.sync-copy.apply';
|
|
1162
|
+
function planSyncCopy(args) {
|
|
1163
|
+
const folderId = requireId(args.id, '文件夹 ID');
|
|
1164
|
+
if (typeof args.keepOldSettingForAllFolders !== 'boolean') {
|
|
1165
|
+
throw caizhilianValidationError('field_required', 'keepOldSettingForAllFolders 必填:true 表示保留原有复制权限设置,false 表示不保留');
|
|
1166
|
+
}
|
|
1167
|
+
return {
|
|
1168
|
+
folderId,
|
|
1169
|
+
keepOldSettingForAllFolders: args.keepOldSettingForAllFolders,
|
|
1170
|
+
body: {
|
|
1171
|
+
type: 'copyPermission',
|
|
1172
|
+
id: folderId,
|
|
1173
|
+
keepOldShare: true,
|
|
1174
|
+
keepOldSettingForAllFolders: args.keepOldSettingForAllFolders,
|
|
1175
|
+
},
|
|
1176
|
+
};
|
|
1177
|
+
}
|
|
1178
|
+
const permissionSyncCopyHandler = {
|
|
1179
|
+
targetKeys: ['id', 'keepOldSettingForAllFolders'],
|
|
1180
|
+
async prepare(args, env) {
|
|
1181
|
+
const action = 'caizhilian.folder.permission.sync-copy';
|
|
1182
|
+
const plan = planSyncCopy(args);
|
|
1183
|
+
const lease = await issueWriteLease(env, PERMISSION_SYNC_COPY_APPLY, args, {
|
|
1184
|
+
id: plan.folderId,
|
|
1185
|
+
keepOldSettingForAllFolders: plan.keepOldSettingForAllFolders,
|
|
1186
|
+
body_fingerprint: fingerprint(plan.body),
|
|
1187
|
+
});
|
|
1188
|
+
return caizhilianPrepared(action, {
|
|
1189
|
+
id: plan.folderId,
|
|
1190
|
+
keepOldSettingForAllFolders: plan.keepOldSettingForAllFolders,
|
|
1191
|
+
request: { method: 'POST', path: SYNC_FOLDER_SETTING_PATH, body: plan.body },
|
|
1192
|
+
}, lease);
|
|
1193
|
+
},
|
|
1194
|
+
async apply(args, env, lease) {
|
|
1195
|
+
const action = PERMISSION_SYNC_COPY_APPLY;
|
|
1196
|
+
const plan = planSyncCopy(args);
|
|
1197
|
+
const expected = typeof lease.body_fingerprint === 'string' ? lease.body_fingerprint : '';
|
|
1198
|
+
if (expected && expected !== fingerprint(plan.body)) {
|
|
1199
|
+
throw caizhilianValidationError('plan_changed', `${action} 的请求体与 prepare 时不一致,请重新执行 prepare`);
|
|
1200
|
+
}
|
|
1201
|
+
const response = await env.host.request({
|
|
1202
|
+
method: 'POST',
|
|
1203
|
+
path: SYNC_FOLDER_SETTING_PATH,
|
|
1204
|
+
body: plan.body,
|
|
1205
|
+
operation: action,
|
|
1206
|
+
timeoutMs: SYNC_TIMEOUT_MS,
|
|
1207
|
+
});
|
|
1208
|
+
const data = asRecord(response);
|
|
1209
|
+
assertToleratedBusinessSuccess(data, action);
|
|
1210
|
+
const existChildFolder = asRecord(data.data).existChildFolder ?? false;
|
|
1211
|
+
return caizhilianSuccess(action, { existChildFolder });
|
|
1212
|
+
},
|
|
1213
|
+
};
|
|
1214
|
+
// ── caizhilian.folder.permission.sync-create ─────────────
|
|
1215
|
+
const PERMISSION_SYNC_CREATE_APPLY = 'caizhilian.folder.permission.sync-create.apply';
|
|
1216
|
+
function planSyncCreate(args) {
|
|
1217
|
+
const folderId = requireId(args.id, '文件夹 ID');
|
|
1218
|
+
if (typeof args.keepOldSettingForAllFolders !== 'boolean') {
|
|
1219
|
+
throw caizhilianValidationError('field_required', 'keepOldSettingForAllFolders 必填:true 表示保留原有新建文档权限设置,false 表示不保留');
|
|
1220
|
+
}
|
|
1221
|
+
return {
|
|
1222
|
+
folderId,
|
|
1223
|
+
keepOldSettingForAllFolders: args.keepOldSettingForAllFolders,
|
|
1224
|
+
body: {
|
|
1225
|
+
type: 'newCreateDocPremisstion',
|
|
1226
|
+
id: folderId,
|
|
1227
|
+
keepOldShare: true,
|
|
1228
|
+
keepOldSettingForAllFolders: args.keepOldSettingForAllFolders,
|
|
1229
|
+
},
|
|
1230
|
+
};
|
|
1231
|
+
}
|
|
1232
|
+
const permissionSyncCreateHandler = {
|
|
1233
|
+
targetKeys: ['id', 'keepOldSettingForAllFolders'],
|
|
1234
|
+
async prepare(args, env) {
|
|
1235
|
+
const action = 'caizhilian.folder.permission.sync-create';
|
|
1236
|
+
const plan = planSyncCreate(args);
|
|
1237
|
+
const lease = await issueWriteLease(env, PERMISSION_SYNC_CREATE_APPLY, args, {
|
|
1238
|
+
id: plan.folderId,
|
|
1239
|
+
keepOldSettingForAllFolders: plan.keepOldSettingForAllFolders,
|
|
1240
|
+
body_fingerprint: fingerprint(plan.body),
|
|
1241
|
+
});
|
|
1242
|
+
return caizhilianPrepared(action, {
|
|
1243
|
+
id: plan.folderId,
|
|
1244
|
+
keepOldSettingForAllFolders: plan.keepOldSettingForAllFolders,
|
|
1245
|
+
request: { method: 'POST', path: SYNC_FOLDER_SETTING_PATH, body: plan.body },
|
|
1246
|
+
}, lease);
|
|
1247
|
+
},
|
|
1248
|
+
async apply(args, env, lease) {
|
|
1249
|
+
const action = PERMISSION_SYNC_CREATE_APPLY;
|
|
1250
|
+
const plan = planSyncCreate(args);
|
|
1251
|
+
const expected = typeof lease.body_fingerprint === 'string' ? lease.body_fingerprint : '';
|
|
1252
|
+
if (expected && expected !== fingerprint(plan.body)) {
|
|
1253
|
+
throw caizhilianValidationError('plan_changed', `${action} 的请求体与 prepare 时不一致,请重新执行 prepare`);
|
|
1254
|
+
}
|
|
1255
|
+
const response = await env.host.request({
|
|
1256
|
+
method: 'POST',
|
|
1257
|
+
path: SYNC_FOLDER_SETTING_PATH,
|
|
1258
|
+
body: plan.body,
|
|
1259
|
+
operation: action,
|
|
1260
|
+
timeoutMs: SYNC_TIMEOUT_MS,
|
|
907
1261
|
});
|
|
908
1262
|
const data = asRecord(response);
|
|
909
1263
|
assertToleratedBusinessSuccess(data, action);
|
|
@@ -911,6 +1265,341 @@ const permissionSyncSettingHandler = {
|
|
|
911
1265
|
return caizhilianSuccess(action, { existChildFolder });
|
|
912
1266
|
},
|
|
913
1267
|
};
|
|
1268
|
+
// ── caizhilian.folder.permission.sync-move ───────────────
|
|
1269
|
+
const PERMISSION_SYNC_MOVE_APPLY = 'caizhilian.folder.permission.sync-move.apply';
|
|
1270
|
+
function planSyncMove(args) {
|
|
1271
|
+
const folderId = requireId(args.id, '文件夹 ID');
|
|
1272
|
+
if (typeof args.keepOldSettingForAllFolders !== 'boolean') {
|
|
1273
|
+
throw caizhilianValidationError('field_required', 'keepOldSettingForAllFolders 必填:true 表示保留原有移动权限设置,false 表示不保留');
|
|
1274
|
+
}
|
|
1275
|
+
return {
|
|
1276
|
+
folderId,
|
|
1277
|
+
keepOldSettingForAllFolders: args.keepOldSettingForAllFolders,
|
|
1278
|
+
body: {
|
|
1279
|
+
type: 'movePermission',
|
|
1280
|
+
id: folderId,
|
|
1281
|
+
keepOldShare: true,
|
|
1282
|
+
keepOldSettingForAllFolders: args.keepOldSettingForAllFolders,
|
|
1283
|
+
},
|
|
1284
|
+
};
|
|
1285
|
+
}
|
|
1286
|
+
const permissionSyncMoveHandler = {
|
|
1287
|
+
targetKeys: ['id', 'keepOldSettingForAllFolders'],
|
|
1288
|
+
async prepare(args, env) {
|
|
1289
|
+
const action = 'caizhilian.folder.permission.sync-move';
|
|
1290
|
+
const plan = planSyncMove(args);
|
|
1291
|
+
const lease = await issueWriteLease(env, PERMISSION_SYNC_MOVE_APPLY, args, {
|
|
1292
|
+
id: plan.folderId,
|
|
1293
|
+
keepOldSettingForAllFolders: plan.keepOldSettingForAllFolders,
|
|
1294
|
+
body_fingerprint: fingerprint(plan.body),
|
|
1295
|
+
});
|
|
1296
|
+
return caizhilianPrepared(action, {
|
|
1297
|
+
id: plan.folderId,
|
|
1298
|
+
keepOldSettingForAllFolders: plan.keepOldSettingForAllFolders,
|
|
1299
|
+
request: { method: 'POST', path: SYNC_FOLDER_SETTING_PATH, body: plan.body },
|
|
1300
|
+
}, lease);
|
|
1301
|
+
},
|
|
1302
|
+
async apply(args, env, lease) {
|
|
1303
|
+
const action = PERMISSION_SYNC_MOVE_APPLY;
|
|
1304
|
+
const plan = planSyncMove(args);
|
|
1305
|
+
const expected = typeof lease.body_fingerprint === 'string' ? lease.body_fingerprint : '';
|
|
1306
|
+
if (expected && expected !== fingerprint(plan.body)) {
|
|
1307
|
+
throw caizhilianValidationError('plan_changed', `${action} 的请求体与 prepare 时不一致,请重新执行 prepare`);
|
|
1308
|
+
}
|
|
1309
|
+
const response = await env.host.request({
|
|
1310
|
+
method: 'POST',
|
|
1311
|
+
path: SYNC_FOLDER_SETTING_PATH,
|
|
1312
|
+
body: plan.body,
|
|
1313
|
+
operation: action,
|
|
1314
|
+
timeoutMs: SYNC_TIMEOUT_MS,
|
|
1315
|
+
});
|
|
1316
|
+
const data = asRecord(response);
|
|
1317
|
+
assertToleratedBusinessSuccess(data, action);
|
|
1318
|
+
const existChildFolder = asRecord(data.data).existChildFolder ?? false;
|
|
1319
|
+
return caizhilianSuccess(action, { existChildFolder });
|
|
1320
|
+
},
|
|
1321
|
+
};
|
|
1322
|
+
// ── caizhilian.folder.permission.sync-participant ─────────
|
|
1323
|
+
const PERMISSION_SYNC_PARTICIPANT_APPLY = 'caizhilian.folder.permission.sync-participant.apply';
|
|
1324
|
+
const PROGRESS_POLL_PATH = '/api/doc/docCommon/getProgressByCache';
|
|
1325
|
+
const PROGRESS_POLL_INTERVAL_MS = 2_000;
|
|
1326
|
+
const PROGRESS_POLL_TIMEOUT_MS = 300_000;
|
|
1327
|
+
function planSyncParticipant(args) {
|
|
1328
|
+
const folderId = requireId(args.id, '文件夹 ID');
|
|
1329
|
+
const syncToFolderDocs = args.sync_to_folder_docs === true;
|
|
1330
|
+
const syncToAllFolders = args.sync_to_all_folders === true;
|
|
1331
|
+
const syncToAllSubFolderDocs = args.sync_to_all_sub_folder_docs === true;
|
|
1332
|
+
// 至少选择一个同步选项
|
|
1333
|
+
if (!syncToFolderDocs && !syncToAllFolders && !syncToAllSubFolderDocs) {
|
|
1334
|
+
throw caizhilianValidationError('field_required', '至少选择一个同步选项:sync_to_folder_docs(同步到当前文件夹历史文档)、sync_to_all_folders(同步到下级文件夹)、sync_to_all_sub_folder_docs(同步到下级文件夹历史文档)');
|
|
1335
|
+
}
|
|
1336
|
+
// 选中的选项对应的 keepOld 参数必填(默认 true)
|
|
1337
|
+
const keepOldSettingForFolderDocs = syncToFolderDocs
|
|
1338
|
+
? (typeof args.keep_old_for_folder_docs === 'boolean' ? args.keep_old_for_folder_docs : true)
|
|
1339
|
+
: true;
|
|
1340
|
+
const keepOldSettingForAllFolders = syncToAllFolders
|
|
1341
|
+
? (typeof args.keep_old_for_all_folders === 'boolean' ? args.keep_old_for_all_folders : true)
|
|
1342
|
+
: true;
|
|
1343
|
+
const keepOldSettingForAllSubFolderDocs = syncToAllSubFolderDocs
|
|
1344
|
+
? (typeof args.keep_old_for_all_sub_folder_docs === 'boolean' ? args.keep_old_for_all_sub_folder_docs : true)
|
|
1345
|
+
: true;
|
|
1346
|
+
return {
|
|
1347
|
+
folderId,
|
|
1348
|
+
syncToFolderDocs,
|
|
1349
|
+
syncToAllFolders,
|
|
1350
|
+
syncToAllSubFolderDocs,
|
|
1351
|
+
keepOldSettingForFolderDocs,
|
|
1352
|
+
keepOldSettingForAllFolders,
|
|
1353
|
+
keepOldSettingForAllSubFolderDocs,
|
|
1354
|
+
body: {
|
|
1355
|
+
type: 'folderDefaultParticipants',
|
|
1356
|
+
id: folderId,
|
|
1357
|
+
syncToFolderDocs,
|
|
1358
|
+
syncToAllFolders,
|
|
1359
|
+
syncToAllSubFolderDocs,
|
|
1360
|
+
keepOldSettingForFolderDocs,
|
|
1361
|
+
keepOldSettingForAllFolders,
|
|
1362
|
+
keepOldSettingForAllSubFolderDocs,
|
|
1363
|
+
},
|
|
1364
|
+
};
|
|
1365
|
+
}
|
|
1366
|
+
function buildSyncScopeLabels(plan) {
|
|
1367
|
+
const labels = [];
|
|
1368
|
+
if (plan.syncToFolderDocs)
|
|
1369
|
+
labels.push('同步到当前文件夹内的历史文档');
|
|
1370
|
+
if (plan.syncToAllFolders)
|
|
1371
|
+
labels.push('同步到所有下级文件夹');
|
|
1372
|
+
if (plan.syncToAllSubFolderDocs)
|
|
1373
|
+
labels.push('同步到所有下级文件夹内的历史文档');
|
|
1374
|
+
return labels;
|
|
1375
|
+
}
|
|
1376
|
+
function buildSyncKeepOldLabels(plan) {
|
|
1377
|
+
const labels = {};
|
|
1378
|
+
if (plan.syncToFolderDocs) {
|
|
1379
|
+
labels['历史文档'] = plan.keepOldSettingForFolderDocs ? '保留' : '不保留';
|
|
1380
|
+
}
|
|
1381
|
+
if (plan.syncToAllFolders) {
|
|
1382
|
+
labels['下级文件夹'] = plan.keepOldSettingForAllFolders ? '保留' : '不保留';
|
|
1383
|
+
}
|
|
1384
|
+
if (plan.syncToAllSubFolderDocs) {
|
|
1385
|
+
labels['下级文件夹历史文档'] = plan.keepOldSettingForAllSubFolderDocs ? '保留' : '不保留';
|
|
1386
|
+
}
|
|
1387
|
+
return labels;
|
|
1388
|
+
}
|
|
1389
|
+
const permissionSyncParticipantHandler = {
|
|
1390
|
+
targetKeys: ['id'],
|
|
1391
|
+
async prepare(args, env) {
|
|
1392
|
+
const action = 'caizhilian.folder.permission.sync-participant';
|
|
1393
|
+
const plan = planSyncParticipant(args);
|
|
1394
|
+
const lease = await issueWriteLease(env, PERMISSION_SYNC_PARTICIPANT_APPLY, args, {
|
|
1395
|
+
id: plan.folderId,
|
|
1396
|
+
body_fingerprint: fingerprint(plan.body),
|
|
1397
|
+
});
|
|
1398
|
+
return caizhilianPrepared(action, {
|
|
1399
|
+
id: plan.folderId,
|
|
1400
|
+
sync_scope: buildSyncScopeLabels(plan),
|
|
1401
|
+
keep_old_settings: buildSyncKeepOldLabels(plan),
|
|
1402
|
+
request: { method: 'POST', path: SYNC_FOLDER_SETTING_PATH, body: plan.body },
|
|
1403
|
+
}, lease);
|
|
1404
|
+
},
|
|
1405
|
+
async apply(args, env, lease) {
|
|
1406
|
+
const action = PERMISSION_SYNC_PARTICIPANT_APPLY;
|
|
1407
|
+
const plan = planSyncParticipant(args);
|
|
1408
|
+
const expected = typeof lease.body_fingerprint === 'string' ? lease.body_fingerprint : '';
|
|
1409
|
+
if (expected && expected !== fingerprint(plan.body)) {
|
|
1410
|
+
throw caizhilianValidationError('plan_changed', `${action} 的请求体与 prepare 时不一致,请重新执行 prepare`);
|
|
1411
|
+
}
|
|
1412
|
+
const response = await env.host.request({
|
|
1413
|
+
method: 'POST',
|
|
1414
|
+
path: SYNC_FOLDER_SETTING_PATH,
|
|
1415
|
+
body: plan.body,
|
|
1416
|
+
operation: action,
|
|
1417
|
+
timeoutMs: SYNC_TIMEOUT_MS,
|
|
1418
|
+
});
|
|
1419
|
+
const data = asRecord(response);
|
|
1420
|
+
assertToleratedBusinessSuccess(data, action);
|
|
1421
|
+
const responseData = asRecord(data.data);
|
|
1422
|
+
const existChildFolder = responseData.existChildFolder ?? false;
|
|
1423
|
+
const existChildDocument = responseData.existChildDocument ?? false;
|
|
1424
|
+
const asyncKey = typeof responseData.asynchronousExecutionKey === 'string'
|
|
1425
|
+
? responseData.asynchronousExecutionKey
|
|
1426
|
+
: '';
|
|
1427
|
+
// 如果是异步执行,轮询进度
|
|
1428
|
+
if (asyncKey) {
|
|
1429
|
+
const deadline = Date.now() + PROGRESS_POLL_TIMEOUT_MS;
|
|
1430
|
+
let progress = 0;
|
|
1431
|
+
while (Date.now() < deadline) {
|
|
1432
|
+
await new Promise((resolve) => setTimeout(resolve, PROGRESS_POLL_INTERVAL_MS));
|
|
1433
|
+
try {
|
|
1434
|
+
const progressResponse = await env.host.request({
|
|
1435
|
+
method: 'GET',
|
|
1436
|
+
path: PROGRESS_POLL_PATH,
|
|
1437
|
+
query: { uuid: asyncKey, moduleKey: 'synchronizeFolderSettings' },
|
|
1438
|
+
operation: action,
|
|
1439
|
+
});
|
|
1440
|
+
const progressData = asRecord(progressResponse);
|
|
1441
|
+
if (typeof progressData.data === 'number') {
|
|
1442
|
+
progress = progressData.data;
|
|
1443
|
+
}
|
|
1444
|
+
if (progress >= 100)
|
|
1445
|
+
break;
|
|
1446
|
+
}
|
|
1447
|
+
catch {
|
|
1448
|
+
// 忽略轮询错误,继续重试
|
|
1449
|
+
}
|
|
1450
|
+
}
|
|
1451
|
+
if (progress < 100) {
|
|
1452
|
+
throw caizhilianValidationError('timeout', `同步进度超时(${PROGRESS_POLL_TIMEOUT_MS / 1000}秒),当前进度 ${progress}%,请稍后重试`);
|
|
1453
|
+
}
|
|
1454
|
+
}
|
|
1455
|
+
return caizhilianSuccess(action, { existChildFolder, existChildDocument, asyncKey });
|
|
1456
|
+
},
|
|
1457
|
+
};
|
|
1458
|
+
// ── caizhilian.folder.permission.sync-default-share ───────
|
|
1459
|
+
const PERMISSION_SYNC_DEFAULT_SHARE_APPLY = 'caizhilian.folder.permission.sync-default-share.apply';
|
|
1460
|
+
function planSyncDefaultShare(args) {
|
|
1461
|
+
const folderId = requireId(args.id, '文件夹 ID');
|
|
1462
|
+
const syncToFolderDocs = args.sync_to_folder_docs === true;
|
|
1463
|
+
const syncToAllFolders = args.sync_to_all_folders === true;
|
|
1464
|
+
const syncToAllSubFolderDocs = args.sync_to_all_sub_folder_docs === true;
|
|
1465
|
+
// 至少选择一个同步选项
|
|
1466
|
+
if (!syncToFolderDocs && !syncToAllFolders && !syncToAllSubFolderDocs) {
|
|
1467
|
+
throw caizhilianValidationError('field_required', '至少选择一个同步选项:sync_to_folder_docs(同步到当前文件夹历史文档)、sync_to_all_folders(同步到下级文件夹)、sync_to_all_sub_folder_docs(同步到下级文件夹历史文档)');
|
|
1468
|
+
}
|
|
1469
|
+
// 选中的选项对应的 keepOld 参数必填(默认 true)
|
|
1470
|
+
const keepOldSettingForFolderDocs = syncToFolderDocs
|
|
1471
|
+
? (typeof args.keep_old_default_share_for_folder_docs === 'boolean' ? args.keep_old_default_share_for_folder_docs : true)
|
|
1472
|
+
: true;
|
|
1473
|
+
const keepOldNotDefShareForFolderDocs = syncToFolderDocs
|
|
1474
|
+
? (typeof args.keep_old_non_default_share_for_folder_docs === 'boolean' ? args.keep_old_non_default_share_for_folder_docs : true)
|
|
1475
|
+
: true;
|
|
1476
|
+
const keepOldSettingForAllFolders = syncToAllFolders
|
|
1477
|
+
? (typeof args.keep_old_default_share_for_all_folders === 'boolean' ? args.keep_old_default_share_for_all_folders : true)
|
|
1478
|
+
: true;
|
|
1479
|
+
const keepOldSettingForAllSubFolderDocs = syncToAllSubFolderDocs
|
|
1480
|
+
? (typeof args.keep_old_default_share_for_sub_folder_docs === 'boolean' ? args.keep_old_default_share_for_sub_folder_docs : true)
|
|
1481
|
+
: true;
|
|
1482
|
+
const keepOldNotDefShareForAllSubFolderDocs = syncToAllSubFolderDocs
|
|
1483
|
+
? (typeof args.keep_old_non_default_share_for_sub_folder_docs === 'boolean' ? args.keep_old_non_default_share_for_sub_folder_docs : true)
|
|
1484
|
+
: true;
|
|
1485
|
+
return {
|
|
1486
|
+
folderId,
|
|
1487
|
+
syncToFolderDocs,
|
|
1488
|
+
syncToAllFolders,
|
|
1489
|
+
syncToAllSubFolderDocs,
|
|
1490
|
+
keepOldSettingForFolderDocs,
|
|
1491
|
+
keepOldNotDefShareForFolderDocs,
|
|
1492
|
+
keepOldSettingForAllFolders,
|
|
1493
|
+
keepOldSettingForAllSubFolderDocs,
|
|
1494
|
+
keepOldNotDefShareForAllSubFolderDocs,
|
|
1495
|
+
body: {
|
|
1496
|
+
type: 'folderDefaultShare',
|
|
1497
|
+
id: folderId,
|
|
1498
|
+
syncToFolderDocs,
|
|
1499
|
+
syncToAllFolders,
|
|
1500
|
+
syncToAllSubFolderDocs,
|
|
1501
|
+
keepOldSettingForFolderDocs,
|
|
1502
|
+
keepOldNotDefShareForFolderDocs,
|
|
1503
|
+
keepOldSettingForAllFolders,
|
|
1504
|
+
keepOldSettingForAllSubFolderDocs,
|
|
1505
|
+
keepOldNotDefShareForAllSubFolderDocs,
|
|
1506
|
+
},
|
|
1507
|
+
};
|
|
1508
|
+
}
|
|
1509
|
+
function buildDefaultShareSyncScopeLabels(plan) {
|
|
1510
|
+
const labels = [];
|
|
1511
|
+
if (plan.syncToFolderDocs)
|
|
1512
|
+
labels.push('同步到当前文件夹内的历史文档');
|
|
1513
|
+
if (plan.syncToAllFolders)
|
|
1514
|
+
labels.push('同步到所有下级文件夹');
|
|
1515
|
+
if (plan.syncToAllSubFolderDocs)
|
|
1516
|
+
labels.push('同步到所有下级文件夹内的历史文档');
|
|
1517
|
+
return labels;
|
|
1518
|
+
}
|
|
1519
|
+
function buildDefaultShareSyncKeepOldLabels(plan) {
|
|
1520
|
+
const labels = {};
|
|
1521
|
+
if (plan.syncToFolderDocs) {
|
|
1522
|
+
labels['历史文档-默认共享人'] = plan.keepOldSettingForFolderDocs ? '保留' : '不保留';
|
|
1523
|
+
labels['历史文档-非默认共享人'] = plan.keepOldNotDefShareForFolderDocs ? '保留' : '不保留';
|
|
1524
|
+
}
|
|
1525
|
+
if (plan.syncToAllFolders) {
|
|
1526
|
+
labels['下级文件夹-默认共享人'] = plan.keepOldSettingForAllFolders ? '保留' : '不保留';
|
|
1527
|
+
}
|
|
1528
|
+
if (plan.syncToAllSubFolderDocs) {
|
|
1529
|
+
labels['下级文件夹历史文档-默认共享人'] = plan.keepOldSettingForAllSubFolderDocs ? '保留' : '不保留';
|
|
1530
|
+
labels['下级文件夹历史文档-非默认共享人'] = plan.keepOldNotDefShareForAllSubFolderDocs ? '保留' : '不保留';
|
|
1531
|
+
}
|
|
1532
|
+
return labels;
|
|
1533
|
+
}
|
|
1534
|
+
const permissionSyncDefaultShareHandler = {
|
|
1535
|
+
targetKeys: ['id'],
|
|
1536
|
+
async prepare(args, env) {
|
|
1537
|
+
const action = 'caizhilian.folder.permission.sync-default-share';
|
|
1538
|
+
const plan = planSyncDefaultShare(args);
|
|
1539
|
+
const lease = await issueWriteLease(env, PERMISSION_SYNC_DEFAULT_SHARE_APPLY, args, {
|
|
1540
|
+
id: plan.folderId,
|
|
1541
|
+
body_fingerprint: fingerprint(plan.body),
|
|
1542
|
+
});
|
|
1543
|
+
return caizhilianPrepared(action, {
|
|
1544
|
+
id: plan.folderId,
|
|
1545
|
+
sync_scope: buildDefaultShareSyncScopeLabels(plan),
|
|
1546
|
+
keep_old_settings: buildDefaultShareSyncKeepOldLabels(plan),
|
|
1547
|
+
request: { method: 'POST', path: SYNC_FOLDER_SETTING_PATH, body: plan.body },
|
|
1548
|
+
}, lease);
|
|
1549
|
+
},
|
|
1550
|
+
async apply(args, env, lease) {
|
|
1551
|
+
const action = PERMISSION_SYNC_DEFAULT_SHARE_APPLY;
|
|
1552
|
+
const plan = planSyncDefaultShare(args);
|
|
1553
|
+
const expected = typeof lease.body_fingerprint === 'string' ? lease.body_fingerprint : '';
|
|
1554
|
+
if (expected && expected !== fingerprint(plan.body)) {
|
|
1555
|
+
throw caizhilianValidationError('plan_changed', `${action} 的请求体与 prepare 时不一致,请重新执行 prepare`);
|
|
1556
|
+
}
|
|
1557
|
+
const response = await env.host.request({
|
|
1558
|
+
method: 'POST',
|
|
1559
|
+
path: SYNC_FOLDER_SETTING_PATH,
|
|
1560
|
+
body: plan.body,
|
|
1561
|
+
operation: action,
|
|
1562
|
+
timeoutMs: SYNC_TIMEOUT_MS,
|
|
1563
|
+
});
|
|
1564
|
+
const data = asRecord(response);
|
|
1565
|
+
assertToleratedBusinessSuccess(data, action);
|
|
1566
|
+
const responseData = asRecord(data.data);
|
|
1567
|
+
const existChildFolder = responseData.existChildFolder ?? false;
|
|
1568
|
+
const existChildDocument = responseData.existChildDocument ?? false;
|
|
1569
|
+
const asyncKey = typeof responseData.asynchronousExecutionKey === 'string'
|
|
1570
|
+
? responseData.asynchronousExecutionKey
|
|
1571
|
+
: '';
|
|
1572
|
+
// 如果是异步执行,轮询进度
|
|
1573
|
+
if (asyncKey) {
|
|
1574
|
+
const deadline = Date.now() + PROGRESS_POLL_TIMEOUT_MS;
|
|
1575
|
+
let progress = 0;
|
|
1576
|
+
while (Date.now() < deadline) {
|
|
1577
|
+
await new Promise((resolve) => setTimeout(resolve, PROGRESS_POLL_INTERVAL_MS));
|
|
1578
|
+
try {
|
|
1579
|
+
const progressResponse = await env.host.request({
|
|
1580
|
+
method: 'GET',
|
|
1581
|
+
path: PROGRESS_POLL_PATH,
|
|
1582
|
+
query: { uuid: asyncKey, moduleKey: 'synchronizeFolderSettings' },
|
|
1583
|
+
operation: action,
|
|
1584
|
+
});
|
|
1585
|
+
const progressData = asRecord(progressResponse);
|
|
1586
|
+
if (typeof progressData.data === 'number') {
|
|
1587
|
+
progress = progressData.data;
|
|
1588
|
+
}
|
|
1589
|
+
if (progress >= 100)
|
|
1590
|
+
break;
|
|
1591
|
+
}
|
|
1592
|
+
catch {
|
|
1593
|
+
// 忽略轮询错误,继续重试
|
|
1594
|
+
}
|
|
1595
|
+
}
|
|
1596
|
+
if (progress < 100) {
|
|
1597
|
+
throw caizhilianValidationError('timeout', `同步进度超时(${PROGRESS_POLL_TIMEOUT_MS / 1000}秒),当前进度 ${progress}%,请稍后重试`);
|
|
1598
|
+
}
|
|
1599
|
+
}
|
|
1600
|
+
return caizhilianSuccess(action, { existChildFolder, existChildDocument, asyncKey });
|
|
1601
|
+
},
|
|
1602
|
+
};
|
|
914
1603
|
// ── caizhilian.folder.permission.query ────────────────────
|
|
915
1604
|
async function permissionQuery(args, env) {
|
|
916
1605
|
const action = 'caizhilian.folder.permission.query';
|
|
@@ -1019,6 +1708,14 @@ export const caizhilianFolderHandlers = {
|
|
|
1019
1708
|
'caizhilian.folder.permission.set-auth': permissionSetAuthHandler,
|
|
1020
1709
|
'caizhilian.folder.permission.detail': { execute: permissionDetail },
|
|
1021
1710
|
'caizhilian.folder.permission.sync-setting': permissionSyncSettingHandler,
|
|
1711
|
+
'caizhilian.folder.permission.sync-maintain': permissionSyncMaintainHandler,
|
|
1712
|
+
'caizhilian.folder.permission.sync-download': permissionSyncDownloadHandler,
|
|
1713
|
+
'caizhilian.folder.permission.sync-delete': permissionSyncDeleteHandler,
|
|
1714
|
+
'caizhilian.folder.permission.sync-copy': permissionSyncCopyHandler,
|
|
1715
|
+
'caizhilian.folder.permission.sync-create': permissionSyncCreateHandler,
|
|
1716
|
+
'caizhilian.folder.permission.sync-move': permissionSyncMoveHandler,
|
|
1717
|
+
'caizhilian.folder.permission.sync-participant': permissionSyncParticipantHandler,
|
|
1718
|
+
'caizhilian.folder.permission.sync-default-share': permissionSyncDefaultShareHandler,
|
|
1022
1719
|
'caizhilian.folder.permission.query': { execute: permissionQuery },
|
|
1023
1720
|
'caizhilian.folder.query-by-permission': { execute: queryFoldersByPermission },
|
|
1024
1721
|
};
|