weaver-work-cli 0.1.24 → 0.1.26
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 +30 -21
- package/dist/cmd/root.js +1 -0
- package/dist/core/output.js +53 -1
- package/dist/core/runtime-agent.js +19 -0
- package/dist/internal/e10/auth/commands.js +58 -23
- package/dist/internal/e10/auth/crypto.js +52 -12
- package/dist/internal/e10/auth/xiaoe.js +145 -53
- package/dist/internal/e10/context.js +5 -27
- package/dist/shortcuts/archive-oa/constants.js +66 -0
- package/dist/shortcuts/archive-oa/continuation.js +70 -0
- package/dist/shortcuts/archive-oa/errors.js +53 -0
- package/dist/shortcuts/archive-oa/host.js +157 -0
- package/dist/shortcuts/archive-oa/index.js +225 -0
- package/dist/shortcuts/archive-oa/manifest.js +62 -0
- package/dist/shortcuts/archive-oa/operations/borrow-car.js +159 -0
- package/dist/shortcuts/archive-oa/operations/borrow-url.js +108 -0
- package/dist/shortcuts/archive-oa/operations/confirm.js +48 -0
- package/dist/shortcuts/archive-oa/operations/contract.js +120 -0
- package/dist/shortcuts/archive-oa/operations/locate.js +50 -0
- package/dist/shortcuts/archive-oa/operations/registry.js +40 -0
- package/dist/shortcuts/archive-oa/operations/shared.js +181 -0
- package/dist/shortcuts/archive-oa/operations/types.js +45 -0
- package/dist/shortcuts/archive-oa/operations.js +13 -0
- package/dist/shortcuts/caizhilian/operations/handlers/fileops.js +67 -1
- package/dist/shortcuts/caizhilian/operations/handlers/setting-attach.js +198 -0
- package/dist/shortcuts/caizhilian/operations/shared.js +32 -0
- package/dist/shortcuts/caizhilian/operations/specs.js +15 -0
- package/dist/shortcuts/index.js +2 -0
- package/dist/shortcuts/invoice/host.js +2 -1
- package/dist/shortcuts/invoice/manifest.js +111 -0
- package/dist/shortcuts/invoice/operations/issuing-qys.js +361 -0
- package/dist/shortcuts/invoice/operations/issuing.js +5 -5
- package/dist/shortcuts/invoice/operations/registry.js +4 -0
- package/dist/shortcuts/workflow/endpoints.js +11 -0
- package/dist/shortcuts/workflow/host.js +2 -2
- package/dist/shortcuts/workflow/index.js +25 -1
- package/dist/shortcuts/workflow/operations/chatscene.js +270 -0
- package/dist/shortcuts/workflow/operations/form.js +2128 -244
- package/dist/shortcuts/workflow/operations/read.js +186 -41
- package/dist/shortcuts/workflow/operations/shared.js +25 -0
- package/dist/shortcuts/workflow/operations/sign-input.js +106 -0
- package/dist/shortcuts/workflow/operations/write.js +9 -1
- package/dist/shortcuts/workflow/stdout-compact.js +41 -0
- package/docs/archive-oa.md +79 -0
- package/docs/caizhilian.md +4 -3
- package/docs/e10-auth.md +13 -5
- 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/skill-template/business-info.json +16 -0
- package/skill-template/domains/archive-oa.md +19 -0
- package/skill-template/domains/yepiaotong.md +2 -2
- package/skills/weaver-e10-archive-oa/SKILL.md +159 -0
- package/skills/weaver-e10-archive-oa/references/archive-locate.md +49 -0
- package/skills/weaver-e10-archive-oa/references/borrow-car.md +76 -0
- package/skills/weaver-e10-archive-oa/references/borrow-flow.md +53 -0
- package/skills/weaver-e10-archive-oa/references/contract-search.md +63 -0
- package/skills/weaver-e10-archive-oa/references/disabled-capabilities.md +29 -0
- package/skills/weaver-e10-archive-oa/references/qys-contract-search.md +47 -0
- package/skills/weaver-e10-archive-oa/references/source-manifest.json +400 -0
- package/skills/weaver-e10-builder/SKILL.md +303 -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 +43 -16
- package/skills/weaver-e10-caizhilian/references/agent-entry.md +7 -3
- package/skills/weaver-e10-caizhilian/references/collaboration.md +5 -3
- package/skills/weaver-e10-caizhilian/references/document.md +33 -11
- package/skills/weaver-e10-caizhilian/references/file-collection.md +4 -3
- package/skills/weaver-e10-caizhilian/references/file-upload.md +2 -3
- package/skills/weaver-e10-caizhilian/references/files.md +23 -2
- package/skills/weaver-e10-caizhilian/references/folder.md +48 -16
- package/skills/weaver-e10-caizhilian/references/setting-attach.md +61 -42
- package/skills/weaver-e10-caizhilian/references/setting-backup.md +13 -51
- package/skills/weaver-e10-caizhilian/references/setting-encrypt.md +20 -51
- package/skills/weaver-e10-caizhilian/references/setting-storage.md +82 -147
- package/skills/weaver-e10-caizhilian/references/source-manifest.json +99 -1
- package/skills/weaver-e10-caizhilian/references/withheld.md +20 -44
- package/skills/weaver-e10-shared/SKILL.md +24 -18
- package/skills/weaver-e10-shared/references/e10-auth-and-session.md +16 -15
- package/skills/weaver-e10-shared/references/non-interactive-environment.md +10 -10
- package/skills/weaver-e10-workflow/SKILL.md +23 -44
- package/skills/weaver-e10-workflow/references/source-manifest.json +40 -25
- package/skills/weaver-e10-workflow/references/workflow-create.md +278 -85
- package/skills/weaver-e10-workflow/references/workflow-edit.md +1 -1
- package/skills/weaver-e10-workflow/references/workflow-memory.md +1 -4
- package/skills/weaver-e10-workflow/references/workflow-query.md +2 -2
- package/skills/weaver-e10-yepiaotong/SKILL.md +10 -7
- package/skills/weaver-e10-yepiaotong/references/invoice-issuing-examples.md +49 -1
- package/skills/weaver-e10-yepiaotong/references/invoice-issuing-qys-ledger.md +66 -0
- package/skills/weaver-e10-yepiaotong/references/invoice-reim.md +59 -36
- package/skills/weaver-e10-yepiaotong/references/reim-api-reference.md +54 -509
- package/skills/weaver-e10-yepiaotong/references/reim-examples.md +182 -345
- package/skills/weaver-e10-yepiaotong/references/reim-expense-subject-rules.md +4 -5
- package/skills/weaver-e10-yepiaotong/references/reim-form-fill-rules.md +153 -345
- package/skills/weaver-e10-yepiaotong/references/reim-phone-subsidy-rules.md +5 -5
- package/skills/weaver-e10-yepiaotong/references/reim-workflow.md +182 -154
- package/skills/weaver-e10-yepiaotong/references/source-manifest.json +96 -0
- package/skills/weaver-e10-yepiaotong/references/reim-fast-path.md +0 -119
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# 鉴权与多环境管理
|
|
2
|
+
|
|
3
|
+
> e10-cli 支持多环境 Profile 切换,auth 文件和 config 按环境隔离存储。
|
|
4
|
+
|
|
5
|
+
## 目录结构
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
~/.e10-cli/
|
|
9
|
+
├── profile ← 当前激活的 profile 名
|
|
10
|
+
└── profiles/
|
|
11
|
+
├── yunteams/
|
|
12
|
+
│ ├── auth ← 加密的认证凭证
|
|
13
|
+
│ └── config.json ← baseUrl + passportUrl
|
|
14
|
+
└── mulinquan/
|
|
15
|
+
├── auth
|
|
16
|
+
└── config.json
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## 命令参考
|
|
20
|
+
|
|
21
|
+
### 登录认证
|
|
22
|
+
|
|
23
|
+
| 命令 | 说明 |
|
|
24
|
+
|------|------|
|
|
25
|
+
| `e10-cli auth set --eteamsid <id> --base-url <url>` | 直接写入 ETEAMSID(**当前唯一可用方式**)。ETEAMSID 从浏览器 DevTools → Application → Cookies 复制。自动解析 userId + tenantKey |
|
|
26
|
+
| `e10-cli auth status` | 查看当前登录状态(含 profile 名、cookie 有效性) |
|
|
27
|
+
|
|
28
|
+
> ⚠️ `e10-cli auth login`(浏览器 OIDC 登录)**暂未实现,已禁用**,执行会提示"开发中"。当前一律用 `auth set`。
|
|
29
|
+
|
|
30
|
+
### Profile 管理
|
|
31
|
+
|
|
32
|
+
| 命令 | 说明 |
|
|
33
|
+
|------|------|
|
|
34
|
+
| `e10-cli auth profile list` | 列出本地所有 Profile |
|
|
35
|
+
| `e10-cli auth profile current` | 查看当前激活的 Profile |
|
|
36
|
+
| `e10-cli auth profile use <name>` | 切换到指定 Profile(不存在则自动创建) |
|
|
37
|
+
|
|
38
|
+
**单次覆盖**:所有命令支持 `--profile <name>` 临时用指定 profile(auth + config baseUrl),不切换全局激活态:
|
|
39
|
+
```bash
|
|
40
|
+
e10-cli --profile e-cology form list <appId> # 只用这一次,不改变当前环境
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## 典型用法
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
# 在 yunteams 环境登录
|
|
47
|
+
e10-cli auth set --eteamsid "PCACCOUNT_xxx" --base-url "https://weapp.yunteams.cn"
|
|
48
|
+
# → 自动创建/切换到 profile: yunteams
|
|
49
|
+
|
|
50
|
+
# 切到 mulinquan
|
|
51
|
+
e10-cli auth set --eteamsid "PCACCOUNT_yyy" --base-url "https://weapp.mulinquan.cn"
|
|
52
|
+
# → 自动创建/切换到 profile: mulinquan
|
|
53
|
+
|
|
54
|
+
# 查看所有环境
|
|
55
|
+
e10-cli auth profile list
|
|
56
|
+
|
|
57
|
+
# 切回 yunteams
|
|
58
|
+
e10-cli auth profile use yunteams
|
|
59
|
+
|
|
60
|
+
# 查看当前
|
|
61
|
+
e10-cli auth status
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## 全局选项
|
|
65
|
+
|
|
66
|
+
| 选项 | 说明 |
|
|
67
|
+
|------|------|
|
|
68
|
+
| `--auth <path>` | 临时指定 auth 文件路径(覆盖 profile) |
|
|
69
|
+
| `--base-url <url>` | 临时指定平台地址 |
|
|
70
|
+
| `--json` | JSON 格式输出 |
|
|
71
|
+
|
|
72
|
+
## Profile 命名规则
|
|
73
|
+
|
|
74
|
+
`auth set` 时根据 `baseUrl` 域名自动生成 profile 名:
|
|
75
|
+
- `https://weapp.yunteams.cn` → `yunteams`
|
|
76
|
+
- `https://weapp.mulinquan.cn` → `mulinquan`
|
|
77
|
+
|
|
78
|
+
也可用 `auth profile use <自定义名>` 手动创建命名。
|
|
79
|
+
|
|
80
|
+
## 凭证加密
|
|
81
|
+
|
|
82
|
+
Auth 文件使用 AES-256-GCM 加密存储,密钥存于 **OS keychain**(每机一把动态密钥,源码不含密钥),headless 无 keychain 后端时回退到 `~/.e10-cli/.key`(0600)。详见 `core/crypto.ts`。格式:
|
|
83
|
+
```json
|
|
84
|
+
{ "enc": true, "v": 1, "data": "<base64>" }
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
> 与 `e10-login` 共用同一 keychain 条目(service=`e10-cli`/account=`auth-key`),auth 文件在 e10-cli 与 e10-login 间互通——用任一登录后另一个可直接用。
|
|
88
|
+
> ⚠️ 从硬编码密钥迁移到动态密钥后,旧版 auth 文件无法解密,需重新登录(`auth login` 或 `auth set --eteamsid`)。
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
# 编辑回显指南
|
|
2
|
+
|
|
3
|
+
编辑已有数据时,需要将表单数据加载回表单控件中。`getSimpleData` 对特殊类型统一返回 ID,可直接用于表单回显,但选择器组件需要额外提取 name 信息。
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 核心流程
|
|
8
|
+
|
|
9
|
+
### 第一步:加载时同时获取两份数据
|
|
10
|
+
|
|
11
|
+
```js
|
|
12
|
+
// loadData 中用 Promise.all 同时获取两份数据
|
|
13
|
+
function loadData() {
|
|
14
|
+
Promise.all([
|
|
15
|
+
getSimpleData(OBJ_ID, USER_ID),
|
|
16
|
+
getAllData(OBJ_ID, USER_ID),
|
|
17
|
+
]).then(function ([simpleRows, allRows]) {
|
|
18
|
+
setData(withDisplayNames(simpleRows, statusMap));
|
|
19
|
+
setRawData(allRows); // 保存原始数据用于编辑回显
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
### 第二步:编辑按钮点击时回填表单
|
|
25
|
+
|
|
26
|
+
```js
|
|
27
|
+
function handleEdit(rowData) {
|
|
28
|
+
var dataId = rowData._raw.id; // Table 回调的 rowData 有 _raw,不是 getSimpleData 返回的行
|
|
29
|
+
|
|
30
|
+
// 1. 从 rawData(原始接口数据) 中查找对应记录
|
|
31
|
+
var rawEntry = rawData.find(function (r) {
|
|
32
|
+
return r.mainTable && r.mainTable.id && r.mainTable.id.fieldValue === dataId;
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
// 2. 用 getSimpleData 的值填充表单(所有特殊字段已是 ID,可直接用)
|
|
36
|
+
var editForm = {};
|
|
37
|
+
Object.keys(emptyForm).forEach(function (key) {
|
|
38
|
+
editForm[key] = rowData._raw[key] || '';
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
// 3. 从 rawEntry.mainTable 中提取 name 信息(选择器组件需要 [{id, name}] 格式)
|
|
42
|
+
var newSelectedPerson = [];
|
|
43
|
+
var newSelectedDept = [];
|
|
44
|
+
var newUploadedFiles = [];
|
|
45
|
+
|
|
46
|
+
if (rawEntry && rawEntry.mainTable) {
|
|
47
|
+
Object.keys(rawEntry.mainTable).forEach(function (key) {
|
|
48
|
+
var val = rawEntry.mainTable[key];
|
|
49
|
+
if (!val) return;
|
|
50
|
+
|
|
51
|
+
if (Array.isArray(val) && val.length > 0) {
|
|
52
|
+
var fieldId = val[0].fieldId;
|
|
53
|
+
var fieldType = val[0].fieldType;
|
|
54
|
+
|
|
55
|
+
if (fieldId === F.person) {
|
|
56
|
+
newSelectedPerson = val.map(function (v) {
|
|
57
|
+
return { id: v.fieldOptionId, name: v.fieldOptionName };
|
|
58
|
+
});
|
|
59
|
+
} else if (fieldId === F.dept) {
|
|
60
|
+
newSelectedDept = val.map(function (v) {
|
|
61
|
+
return { id: v.fieldOptionId, name: v.fieldOptionName };
|
|
62
|
+
});
|
|
63
|
+
} else if (fieldId === F.attachment) {
|
|
64
|
+
newUploadedFiles = val.map(function (v) {
|
|
65
|
+
return { fileid: v.fieldOptionId, name: v.fieldOptionName };
|
|
66
|
+
});
|
|
67
|
+
} else if (fieldType === 'Select' || fieldType === 'RadioBox' || fieldType === 'CheckBox') {
|
|
68
|
+
// getSimpleData 已返回 ID,此处从 rawEntry 再次确认(多选时覆盖)
|
|
69
|
+
editForm[fieldId] = val.map(function (v) { return v.fieldOptionId; }).join(',');
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// 4. 一次性设置所有状态
|
|
76
|
+
setForm(editForm);
|
|
77
|
+
setSelectedPerson(newSelectedPerson);
|
|
78
|
+
setSelectedDept(newSelectedDept);
|
|
79
|
+
setUploadedFiles(newUploadedFiles);
|
|
80
|
+
setModalVisible(true);
|
|
81
|
+
}
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
## 关键点总结
|
|
87
|
+
|
|
88
|
+
| 要点 | 说明 |
|
|
89
|
+
|------|------|
|
|
90
|
+
| `getAllData` 返回结构中 `id` 在 `mainTable` 内部 | 查找原始记录必须是 `r.mainTable.id.fieldValue`,**不能**写成 `r.id.fieldValue` |
|
|
91
|
+
| `Browser`(人员/部门) 的 `value` | 需要 `[{id, name}]` 格式 |
|
|
92
|
+
| `Upload`(附件) 的 `data` | 需要 `[{fileid, name}]` 格式 |
|
|
93
|
+
| `Select` 下拉框的 `value` | 需要匹配 `fieldOptionId`(即 `opt.valueKey`),不能是显示名 |
|
|
94
|
+
| Table 的 `onRowClick` 回调 | `rowData._raw` 引用了原始数据行,`rowData._raw.id` 是 dataId |
|
|
95
|
+
| 表单字段值来源 | 从 `getSimpleData` 取值(已是 ID),选择器显示名从 `getAllData` 提取 |
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## getSimpleData vs getAllData 结构对比
|
|
100
|
+
|
|
101
|
+
### getSimpleData 返回(扁平,纯 ID,用于写入)
|
|
102
|
+
|
|
103
|
+
```json
|
|
104
|
+
[
|
|
105
|
+
{
|
|
106
|
+
"1290462231772995585": "张三", // Text:直接就是值
|
|
107
|
+
"1290462231772995586": "1290462231772995612", // Select:选项 ID
|
|
108
|
+
"1290462231772995589": "2765550234448235905", // Employee:用户 ID
|
|
109
|
+
"id": "1290469928435908609"
|
|
110
|
+
}
|
|
111
|
+
]
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
所有特殊字段统一返回 `fieldOptionId`(纯 ID),直接用于 `formToSave`。
|
|
115
|
+
|
|
116
|
+
### getAllData 返回(含名称,用于展示/回显)
|
|
117
|
+
|
|
118
|
+
```json
|
|
119
|
+
{
|
|
120
|
+
"mainTable": {
|
|
121
|
+
"sjhfa391": { // ← key 是随机哈希,不是 fieldId!
|
|
122
|
+
"fieldId": "1290462231772995590",
|
|
123
|
+
"fieldType": "Text",
|
|
124
|
+
"fieldValue": "13800138000"
|
|
125
|
+
},
|
|
126
|
+
"zssj98f9d": [{ // ← Employee 是数组!
|
|
127
|
+
"fieldId": "1290462231772995589",
|
|
128
|
+
"fieldType": "Employee",
|
|
129
|
+
"fieldOptionId": "2765550234448235905",
|
|
130
|
+
"fieldOptionName": "张三"
|
|
131
|
+
}],
|
|
132
|
+
"bm1d630": [{ // ← Select 也是数组!
|
|
133
|
+
"fieldId": "1290462231772995586",
|
|
134
|
+
"fieldType": "Select",
|
|
135
|
+
"fieldOptionId": "1290462231772995612",
|
|
136
|
+
"fieldOptionName": "技术部"
|
|
137
|
+
}],
|
|
138
|
+
"id": { // ← 只有 id 的 key 是 "id"
|
|
139
|
+
"fieldId": "5",
|
|
140
|
+
"fieldType": "Text",
|
|
141
|
+
"fieldValue": "1290469928435908609"
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
### 三个关键规则
|
|
148
|
+
|
|
149
|
+
| 规则 | 说明 |
|
|
150
|
+
|------|------|
|
|
151
|
+
| **key 是随机哈希** | `mainTable` 的 key(如 `sjhfa391`)是随机字符串,**不能**用 `mainTable[fieldId]` 直接取值 |
|
|
152
|
+
| **只能用 fieldId 匹配** | 必须遍历 `Object.values(mainTable)`,通过 `val.fieldId` 或 `val[0].fieldId` 匹配目标字段 |
|
|
153
|
+
| **数组 vs 对象** | Employee / Select / FileComponent / RadioBox / CheckBox → **数组** `[{...}]`;Text / Number / DateComponent → **对象** `{...}` |
|
|
154
|
+
| **只有 id 是 deterministic** | 数据行 ID 的 key 固定为 `"id"`,可直接用 `mainTable.id.fieldValue` |
|
|
155
|
+
|
|
156
|
+
### 字段值 → 组件 props 映射表
|
|
157
|
+
|
|
158
|
+
> 这是整个编辑回显最容易出错的一步。getAllData 中的字段形状各不相同,映射到组件 props 的方式也不同。
|
|
159
|
+
|
|
160
|
+
| 字段类型 | getAllData 中的形状 | 目标组件 | 需要的 props 格式 | 映射方式 |
|
|
161
|
+
|---------|-------------------|---------|-----------------|---------|
|
|
162
|
+
| Employee | `[{fieldOptionId, fieldOptionName}]` | `Browser` | `value={[{id, name}]}` | `v.fieldOptionId → id`,`v.fieldOptionName → name` |
|
|
163
|
+
| Department | `[{fieldOptionId, fieldOptionName}]` | `Browser` | `value={[{id, name}]}` | 同上 |
|
|
164
|
+
| FileComponent | `[{fieldOptionId, fieldOptionName}]` | `Upload` | `data={[{fileid, name}]}` | `v.fieldOptionId → fileid`,`v.fieldOptionName → name` |
|
|
165
|
+
| Select(单选) | `[{fieldOptionId}]` | `<select>` | `value="fieldOptionId"` | 取 `val[0].fieldOptionId` |
|
|
166
|
+
| Select(多选) | `[{...}, {...}]` → 多个 | `<select multiple>` | 逗号分隔串 | `val.map(...).join(',')` |
|
|
167
|
+
| Text / Number | `{fieldValue}` | `<input>` | `value="fieldValue"` | 直接用 `getSimpleData` 的值 |
|
|
168
|
+
|
|
169
|
+
### 正确的字段提取方式
|
|
170
|
+
|
|
171
|
+
```js
|
|
172
|
+
// 查找 mainTable 中 fieldId 匹配的字段值
|
|
173
|
+
function findField(mainTable, targetFieldId) {
|
|
174
|
+
var keys = Object.keys(mainTable);
|
|
175
|
+
for (var i = 0; i < keys.length; i++) {
|
|
176
|
+
var val = mainTable[keys[i]];
|
|
177
|
+
if (!val) continue;
|
|
178
|
+
// 数组类型(Employee/Select 等)取 val[0].fieldId
|
|
179
|
+
if (Array.isArray(val) && val.length > 0 && val[0].fieldId === targetFieldId) {
|
|
180
|
+
return val;
|
|
181
|
+
}
|
|
182
|
+
// 普通类型(Text/DateComponent 等)取 val.fieldId
|
|
183
|
+
if (!Array.isArray(val) && val.fieldId === targetFieldId) {
|
|
184
|
+
return val;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
return null;
|
|
188
|
+
}
|
|
189
|
+
```
|
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
# 表单数据操作指南
|
|
2
|
+
|
|
3
|
+
Ebuilder 项目没有后端,但可以通过读写 Ebuilder 的表单来实现数据交互。所有 CRUD 接口已实现在 `/api/formApi.js` 中。
|
|
4
|
+
|
|
5
|
+
> 应用已注册的表单信息及字段用 `e10-cli form read <objId> --app-id <appId> --out fields.json` 导出(机器可读 JSON),为空说明还没注册。
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 〇、非对称设计(读写分离)
|
|
10
|
+
|
|
11
|
+
**这是整份指南最核心的概念,每次写表单页面之前必须理解。**
|
|
12
|
+
|
|
13
|
+
`getSimpleData` 对所有特殊类型(Select / RadioBox / CheckBox / Employee / Department / FileComponent)**统一返回 ID**(`fieldOptionId`)。好处是写入简单——直接拿 ID 原样写入,不用做任何转换。代价是展示麻烦——ID 是长数字,用户完全看不懂。
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
写入路径(简单):getSimpleData → form 直接用 ID → saveFormData/updateFormData
|
|
17
|
+
展示路径(复杂):getSimpleData → ID → 映射为名称 → 表格渲染
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
**不同字段类型,名称来源不同**:
|
|
21
|
+
|
|
22
|
+
| 字段类型 | getSimpleData 返回值 | 名称来源 |
|
|
23
|
+
|---------|---------------------|---------|
|
|
24
|
+
| 普通文本/数字/日期 | `"名称"` / `123` / `"2026-01-01"` | 直接展示 |
|
|
25
|
+
| Select / RadioBox / CheckBox | `"1283421826353889337"`(ID) | `getFieldOptions` 映射 `valueKey → name` |
|
|
26
|
+
| Employee / Department | `"5140559860850691459"`(用户ID) | `getAllData` 提取 `fieldOptionName` |
|
|
27
|
+
| FileComponent | `"fileid1,fileid2"`(文件ID串) | 上传组件的 `name` 字段 |
|
|
28
|
+
|
|
29
|
+
> **铁律:表格里永远不要直接渲染 `row[字段ID]`。** 用户看到一列长数字 = 你漏掉了名称转换。
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## 一、四个 API 的职责
|
|
34
|
+
|
|
35
|
+
| API | 职责 |
|
|
36
|
+
|-----|------|
|
|
37
|
+
| `getAllData` | 做源(含 `fieldOptionName`,用于提取名称信息) |
|
|
38
|
+
| `getSimpleData` | 做读写(纯 ID,不含名称) |
|
|
39
|
+
| `withDisplayNames` | 做展示(ID → 名称转换) |
|
|
40
|
+
| `getFieldOptions` | 做下拉(拿 `valueKey` + `name`) |
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## 二、核心规则:读取用 ID,展示用名称
|
|
45
|
+
|
|
46
|
+
**最容易出错的点,每次编码前务必理解:**
|
|
47
|
+
|
|
48
|
+
`getSimpleData` 对所有特殊类型(Select/RadioBox/CheckBox/Employee/Department/FileComponent)**统一返回 ID**(`fieldOptionId`),读写一致。
|
|
49
|
+
|
|
50
|
+
> 写完代码逐条自检,90% 的 bug 都是这几个:
|
|
51
|
+
> 1. `if (row[roomField] === '101')` — Select 字段值是 `fieldOptionId`(长数字如 `"1283421826353889337"`),永远不等于选项名称
|
|
52
|
+
> 2. `{row[empField]}` 直接渲染 — Employee/Department 返回的是长数字 ID,人名需从 `getAllData` 提取 `fieldOptionName`
|
|
53
|
+
> 3. 表格里直接显示 `row[fieldId]` — 用户看到一列长数字。展示用 `withDisplayNames()`
|
|
54
|
+
|
|
55
|
+
- **写入保存** → 直接用 `getSimpleData` 的返回值,所有字段都是 ID,无需转换
|
|
56
|
+
- **表格展示** → 用 `withDisplayNames()` 把 ID 转成名称,否则用户看到的是数字
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## 三、读取表单数据
|
|
61
|
+
|
|
62
|
+
### 3.1 getSimpleData — 获取简单格式数据
|
|
63
|
+
|
|
64
|
+
```js
|
|
65
|
+
import { getSimpleData } from '../api/formApi.js';
|
|
66
|
+
const CONFIG = {
|
|
67
|
+
objId: '12556432068......',
|
|
68
|
+
userId: TEAMS.currentUser.id
|
|
69
|
+
};
|
|
70
|
+
const data = await getSimpleData(CONFIG.objId, CONFIG.userId);
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
返回格式:
|
|
74
|
+
```js
|
|
75
|
+
[
|
|
76
|
+
{
|
|
77
|
+
"4765111450482898127": "具体的数据内容",
|
|
78
|
+
"4765111450482898155": "具体的数据内容",
|
|
79
|
+
"id":"1259017552222814208" // 表单数据固有的数据ID字段,fieldId固定为"id"
|
|
80
|
+
},
|
|
81
|
+
{.....}
|
|
82
|
+
]
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
`getSimpleData` 返回的是扁平对象,字段 ID 作为 key 直接挂载在行上,**没有 `_raw` 层**。直接用 `item[字段ID]` 访问。
|
|
86
|
+
|
|
87
|
+
> 注意:Table 组件的 `onRowClick` 回调参数中会带 `_raw`(引用原始数据行),仅在编辑回显等场景通过回调参数访问,不要主动去构造 `_raw`。
|
|
88
|
+
|
|
89
|
+
### 3.2 withDisplayNames — ID → 名称转换(表格展示用)
|
|
90
|
+
|
|
91
|
+
用于在表格中把 Select/Employee/Department 等字段的 ID 转成可读名称。
|
|
92
|
+
|
|
93
|
+
推荐写法:
|
|
94
|
+
```js
|
|
95
|
+
import { getSimpleData, withDisplayNames, getFieldOptions } from '../api/formApi.js';
|
|
96
|
+
|
|
97
|
+
function TemplatePage() {
|
|
98
|
+
const [data, setData] = useState([]);
|
|
99
|
+
const [loading, setLoading] = useState(true);
|
|
100
|
+
|
|
101
|
+
useEffect(function () {
|
|
102
|
+
Promise.all([
|
|
103
|
+
getSimpleData(CONFIG.objId, CONFIG.userId),
|
|
104
|
+
// 为每个需要展示名称的 Select 字段调用 getFieldOptions
|
|
105
|
+
getFieldOptions(F.status, OBJ_ID),
|
|
106
|
+
]).then(function ([rows, statusOpts]) {
|
|
107
|
+
setData(withDisplayNames(rows, { [F.status]: statusOpts }));
|
|
108
|
+
}).catch(function () {})
|
|
109
|
+
.finally(function () { setLoading(false); });
|
|
110
|
+
}, []);
|
|
111
|
+
// ......
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### 3.3 getFieldOptions — 获取选项列表
|
|
115
|
+
|
|
116
|
+
动态获取 Select/RadioBox/CheckBox 字段的可选值:
|
|
117
|
+
|
|
118
|
+
```js
|
|
119
|
+
import { getFieldOptions } from './api/formApi.js';
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
返回结构:
|
|
123
|
+
```js
|
|
124
|
+
[
|
|
125
|
+
{
|
|
126
|
+
"valueKey": "1263421826353889337",
|
|
127
|
+
"name": "已入职"
|
|
128
|
+
},{
|
|
129
|
+
"valueKey": "1263421826353889338",
|
|
130
|
+
"name": "已离职"
|
|
131
|
+
}
|
|
132
|
+
]
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
## 四、字段类型对应组件
|
|
138
|
+
|
|
139
|
+
`form read --out fields.json` 导出的字段列表会告诉你每个字段的类型和 ID,有一些特殊的类型你必须选用对应的组件进行输入:
|
|
140
|
+
|
|
141
|
+
| 字段类型 | 对应组件 |
|
|
142
|
+
|---------|---------|
|
|
143
|
+
| Employee | `Browser` — 人员选择框(`module="hrm" type="resource"`) |
|
|
144
|
+
| Department | `Browser` — 部门选择框(`module="hrm" type="department"`) |
|
|
145
|
+
| FileComponent | `Upload` — 文件上传(参考 `references/components/form-Upload.md`) |
|
|
146
|
+
|
|
147
|
+
---
|
|
148
|
+
|
|
149
|
+
## 五、数据写入
|
|
150
|
+
|
|
151
|
+
### 5.1 formData 格式
|
|
152
|
+
|
|
153
|
+
**一定是字段 ID 作为 key 的格式**,字段 ID 是纯数字组成的字符串,不包含任何其他符号。必须对照 `form read --out fields.json` 导出的字段来写,不要自己编造。
|
|
154
|
+
|
|
155
|
+
```
|
|
156
|
+
{
|
|
157
|
+
"4765111450482898127": "数据内容1",
|
|
158
|
+
"4765111450482898155": "数据内容2"
|
|
159
|
+
}
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
### 5.2 三个写接口
|
|
163
|
+
|
|
164
|
+
**新增:**
|
|
165
|
+
```js
|
|
166
|
+
export async function saveFormData(objId, formData, userId)
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
**更新(多一个 dataId 参数):**
|
|
170
|
+
```js
|
|
171
|
+
export async function updateFormData(objId, formData, dataId, userId)
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
**删除:**
|
|
175
|
+
```js
|
|
176
|
+
export async function deleteFormData(objId, dataId, userId)
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
### 5.3 调用方式
|
|
180
|
+
|
|
181
|
+
```js
|
|
182
|
+
if (editingId) {
|
|
183
|
+
promise = updateFormData(OBJ_ID, formToSave, editingId, USER_ID);
|
|
184
|
+
} else {
|
|
185
|
+
promise = saveFormData(OBJ_ID, formToSave, USER_ID);
|
|
186
|
+
}
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
### 5.4 写入时直接使用 form 的值(已全部为 ID)
|
|
190
|
+
|
|
191
|
+
`getSimpleData` 对所有特殊类型(Select/Employee/Department/FileComponent)统一返回 ID。编辑保存时无需跳过任何字段,`form` 中的值可直接写入。
|
|
192
|
+
|
|
193
|
+
```js
|
|
194
|
+
var formToSave = {};
|
|
195
|
+
|
|
196
|
+
// 所有字段统一处理,getSimpleData 已返回 ID
|
|
197
|
+
Object.keys(form).forEach(function (key) {
|
|
198
|
+
var val = form[key];
|
|
199
|
+
if (val !== '' && val !== null && val !== undefined) {
|
|
200
|
+
formToSave[key] = val;
|
|
201
|
+
}
|
|
202
|
+
});
|
|
203
|
+
|
|
204
|
+
// 用户操作选择器时用新值覆盖
|
|
205
|
+
if (selectedPerson.length > 0) {
|
|
206
|
+
formToSave[F.person] = selectedPerson[0].id;
|
|
207
|
+
}
|
|
208
|
+
if (selectedDept.length > 0) {
|
|
209
|
+
formToSave[F.dept] = selectedDept[0].id;
|
|
210
|
+
}
|
|
211
|
+
if (uploadedFiles.length > 0) {
|
|
212
|
+
formToSave[F.attachment] = uploadedFiles.map(function (f) { return f.fileid; }).join(',');
|
|
213
|
+
}
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
---
|
|
217
|
+
|
|
218
|
+
## 六、三个高频编码错误
|
|
219
|
+
|
|
220
|
+
编写 Ebuilder 页面时,以下三个错误非常高发,生成代码前务必检查:
|
|
221
|
+
|
|
222
|
+
### 错误 1:数据访问用错层级
|
|
223
|
+
|
|
224
|
+
`getSimpleData` 返回的每一行直接用 `item[字段ID]`,**没有 `_raw` 层**。
|
|
225
|
+
|
|
226
|
+
```js
|
|
227
|
+
// 错误
|
|
228
|
+
var title = item._raw[F.title];
|
|
229
|
+
|
|
230
|
+
// 正确
|
|
231
|
+
var title = item[F.title];
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
### 错误 2:Select 字段用名称做判断
|
|
235
|
+
|
|
236
|
+
`getSimpleData` 对 Select/RadioBox/CheckBox 字段返回的是**选项 ID**(`fieldOptionId`,即 `valueKey`),如 `"1283421826353889337"`,不是显示名称。
|
|
237
|
+
|
|
238
|
+
```js
|
|
239
|
+
// 错误
|
|
240
|
+
if (item[F.status] === '已完成') { ... } // 显示名称永远不匹配
|
|
241
|
+
|
|
242
|
+
// 正确
|
|
243
|
+
if (item[F.status] === '1283421826353889337') { ... } // 用选项 ID
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
**表格中显示名称**请使用 `withDisplayNames()`,不要在表格列渲染时逐行查 ID。
|
|
247
|
+
|
|
248
|
+
### 错误 3:React state 直接修改
|
|
249
|
+
|
|
250
|
+
直接修改对象属性再 `setForm` 不会触发 React 重新渲染。
|
|
251
|
+
|
|
252
|
+
```js
|
|
253
|
+
// 错误
|
|
254
|
+
form[F.name] = value;
|
|
255
|
+
setForm(form);
|
|
256
|
+
|
|
257
|
+
// 正确
|
|
258
|
+
var newForm = {};
|
|
259
|
+
Object.keys(form).forEach(function (k) { newForm[k] = form[k]; });
|
|
260
|
+
newForm[F.name] = value;
|
|
261
|
+
setForm(newForm);
|
|
262
|
+
```
|