weaver-e10-builder 1.0.11-beta → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/actionflow.d.ts.map +1 -1
- package/dist/commands/actionflow.js +17 -3
- package/dist/commands/actionflow.js.map +1 -1
- package/dist/commands/auth.d.ts.map +1 -1
- package/dist/commands/auth.js +16 -0
- package/dist/commands/auth.js.map +1 -1
- package/dist/commands/form-association-manage.d.ts +3 -0
- package/dist/commands/form-association-manage.d.ts.map +1 -0
- package/dist/commands/form-association-manage.js +76 -0
- package/dist/commands/form-association-manage.js.map +1 -0
- package/dist/commands/form-association.d.ts.map +1 -1
- package/dist/commands/form-association.js +29 -25
- package/dist/commands/form-association.js.map +1 -1
- package/dist/commands/form-button.d.ts.map +1 -1
- package/dist/commands/form-button.js +71 -159
- package/dist/commands/form-button.js.map +1 -1
- package/dist/commands/form-field-linkage.d.ts +3 -0
- package/dist/commands/form-field-linkage.d.ts.map +1 -0
- package/dist/commands/form-field-linkage.js +300 -0
- package/dist/commands/form-field-linkage.js.map +1 -0
- package/dist/commands/form-list-columns.d.ts +3 -0
- package/dist/commands/form-list-columns.d.ts.map +1 -0
- package/dist/commands/form-list-columns.js +50 -0
- package/dist/commands/form-list-columns.js.map +1 -0
- package/dist/commands/form-list-permission.d.ts.map +1 -1
- package/dist/commands/form-list-permission.js +130 -15
- package/dist/commands/form-list-permission.js.map +1 -1
- package/dist/commands/form-list-stats.d.ts +0 -8
- package/dist/commands/form-list-stats.d.ts.map +1 -1
- package/dist/commands/form-list-stats.js +41 -133
- package/dist/commands/form-list-stats.js.map +1 -1
- package/dist/commands/form-list.d.ts.map +1 -1
- package/dist/commands/form-list.js +2 -126
- package/dist/commands/form-list.js.map +1 -1
- package/dist/commands/form-nlist.d.ts +22 -0
- package/dist/commands/form-nlist.d.ts.map +1 -0
- package/dist/commands/form-nlist.js +179 -0
- package/dist/commands/form-nlist.js.map +1 -0
- package/dist/commands/form-serial-mark.d.ts +0 -15
- package/dist/commands/form-serial-mark.d.ts.map +1 -1
- package/dist/commands/form-serial-mark.js +604 -137
- package/dist/commands/form-serial-mark.js.map +1 -1
- package/dist/commands/form.d.ts.map +1 -1
- package/dist/commands/form.js +207 -2
- package/dist/commands/form.js.map +1 -1
- package/dist/commands/interface.d.ts +3 -0
- package/dist/commands/interface.d.ts.map +1 -0
- package/dist/commands/interface.js +51 -0
- package/dist/commands/interface.js.map +1 -0
- package/dist/commands/menu-permission.d.ts.map +1 -1
- package/dist/commands/menu-permission.js +133 -82
- package/dist/commands/menu-permission.js.map +1 -1
- package/dist/commands/skill.d.ts +3 -0
- package/dist/commands/skill.d.ts.map +1 -0
- package/dist/commands/skill.js +112 -0
- package/dist/commands/skill.js.map +1 -0
- package/dist/commands/update.d.ts +13 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +101 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/workflow-condition.d.ts.map +1 -1
- package/dist/commands/workflow-condition.js +3 -1
- package/dist/commands/workflow-condition.js.map +1 -1
- package/dist/commands/workflow-node-empty-handle.d.ts +13 -0
- package/dist/commands/workflow-node-empty-handle.d.ts.map +1 -0
- package/dist/commands/workflow-node-empty-handle.js +137 -0
- package/dist/commands/workflow-node-empty-handle.js.map +1 -0
- package/dist/commands/workflow.d.ts.map +1 -1
- package/dist/commands/workflow.js +101 -25
- package/dist/commands/workflow.js.map +1 -1
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -1
- package/dist/postinstall.d.ts +2 -0
- package/dist/postinstall.d.ts.map +1 -0
- package/dist/postinstall.js +17 -0
- package/dist/postinstall.js.map +1 -0
- package/dist/services/actionflow/command_output.d.ts +4 -0
- package/dist/services/actionflow/command_output.d.ts.map +1 -1
- package/dist/services/actionflow/command_output.js +44 -0
- package/dist/services/actionflow/command_output.js.map +1 -1
- package/dist/services/actionflow/component_registry.d.ts.map +1 -1
- package/dist/services/actionflow/component_registry.js +5 -1
- package/dist/services/actionflow/component_registry.js.map +1 -1
- package/dist/services/actionflow/components/action_eb_add.js +1 -1
- package/dist/services/actionflow/components/action_eb_add.js.map +1 -1
- package/dist/services/actionflow/components/approve_trigger.d.ts +5 -0
- package/dist/services/actionflow/components/approve_trigger.d.ts.map +1 -1
- package/dist/services/actionflow/components/approve_trigger.js +22 -1
- package/dist/services/actionflow/components/approve_trigger.js.map +1 -1
- package/dist/services/actionflow/components/approve_trigger_compiler.js +2 -2
- package/dist/services/actionflow/components/approve_trigger_compiler.js.map +1 -1
- package/dist/services/actionflow/components/custom_trigger.d.ts +9 -0
- package/dist/services/actionflow/components/custom_trigger.d.ts.map +1 -0
- package/dist/services/actionflow/components/custom_trigger.js +47 -0
- package/dist/services/actionflow/components/custom_trigger.js.map +1 -0
- package/dist/services/actionflow/components/enquiry_form.d.ts.map +1 -1
- package/dist/services/actionflow/components/enquiry_form.js +29 -3
- package/dist/services/actionflow/components/enquiry_form.js.map +1 -1
- package/dist/services/actionflow/components/event_button.d.ts +3 -0
- package/dist/services/actionflow/components/event_button.d.ts.map +1 -0
- package/dist/services/actionflow/components/event_button.js +32 -0
- package/dist/services/actionflow/components/event_button.js.map +1 -0
- package/dist/services/actionflow/components/index.d.ts.map +1 -1
- package/dist/services/actionflow/components/index.js +10 -0
- package/dist/services/actionflow/components/index.js.map +1 -1
- package/dist/services/actionflow/components/inner_mq_listener.d.ts +3 -0
- package/dist/services/actionflow/components/inner_mq_listener.d.ts.map +1 -0
- package/dist/services/actionflow/components/inner_mq_listener.js +40 -0
- package/dist/services/actionflow/components/inner_mq_listener.js.map +1 -0
- package/dist/services/actionflow/components/inner_mq_send.d.ts +5 -0
- package/dist/services/actionflow/components/inner_mq_send.d.ts.map +1 -0
- package/dist/services/actionflow/components/inner_mq_send.js +72 -0
- package/dist/services/actionflow/components/inner_mq_send.js.map +1 -0
- package/dist/services/actionflow/components/send_message.d.ts.map +1 -1
- package/dist/services/actionflow/components/send_message.js +7 -4
- package/dist/services/actionflow/components/send_message.js.map +1 -1
- package/dist/services/actionflow/context_preflight.d.ts.map +1 -1
- package/dist/services/actionflow/context_preflight.js +7 -1
- package/dist/services/actionflow/context_preflight.js.map +1 -1
- package/dist/services/actionflow/design_client.d.ts +13 -2
- package/dist/services/actionflow/design_client.d.ts.map +1 -1
- package/dist/services/actionflow/design_client.js +56 -8
- package/dist/services/actionflow/design_client.js.map +1 -1
- package/dist/services/actionflow/enrich_approve_trigger.d.ts.map +1 -1
- package/dist/services/actionflow/enrich_approve_trigger.js +31 -0
- package/dist/services/actionflow/enrich_approve_trigger.js.map +1 -1
- package/dist/services/actionflow/form_source.d.ts +2 -0
- package/dist/services/actionflow/form_source.d.ts.map +1 -1
- package/dist/services/actionflow/form_source.js +5 -0
- package/dist/services/actionflow/form_source.js.map +1 -1
- package/dist/services/actionflow/formula_service.d.ts +1 -1
- package/dist/services/actionflow/formula_service.d.ts.map +1 -1
- package/dist/services/actionflow/formula_service.js +118 -12
- package/dist/services/actionflow/formula_service.js.map +1 -1
- package/dist/services/actionflow/functions_catalog.d.ts +2 -1
- package/dist/services/actionflow/functions_catalog.d.ts.map +1 -1
- package/dist/services/actionflow/functions_catalog.js +2392 -180
- package/dist/services/actionflow/functions_catalog.js.map +1 -1
- package/dist/services/actionflow/functions_source.d.ts.map +1 -1
- package/dist/services/actionflow/functions_source.js +3 -0
- package/dist/services/actionflow/functions_source.js.map +1 -1
- package/dist/services/actionflow/generation_service.d.ts +11 -0
- package/dist/services/actionflow/generation_service.d.ts.map +1 -1
- package/dist/services/actionflow/generation_service.js +66 -23
- package/dist/services/actionflow/generation_service.js.map +1 -1
- package/dist/services/actionflow/plan_constraints.d.ts +5 -0
- package/dist/services/actionflow/plan_constraints.d.ts.map +1 -0
- package/dist/services/actionflow/plan_constraints.js +54 -0
- package/dist/services/actionflow/plan_constraints.js.map +1 -0
- package/dist/services/actionflow/preflight_service.d.ts +3 -0
- package/dist/services/actionflow/preflight_service.d.ts.map +1 -1
- package/dist/services/actionflow/preflight_service.js +152 -8
- package/dist/services/actionflow/preflight_service.js.map +1 -1
- package/dist/services/actionflow/readback_verifier.d.ts.map +1 -1
- package/dist/services/actionflow/readback_verifier.js +63 -2
- package/dist/services/actionflow/readback_verifier.js.map +1 -1
- package/dist/services/actionflow/save_workflow_draft.d.ts.map +1 -1
- package/dist/services/actionflow/save_workflow_draft.js +43 -2
- package/dist/services/actionflow/save_workflow_draft.js.map +1 -1
- package/dist/services/actionflow/update_service.d.ts +41 -0
- package/dist/services/actionflow/update_service.d.ts.map +1 -0
- package/dist/services/actionflow/update_service.js +767 -0
- package/dist/services/actionflow/update_service.js.map +1 -0
- package/dist/services/actionflow/workflow_compiler.d.ts.map +1 -1
- package/dist/services/actionflow/workflow_compiler.js +120 -12
- package/dist/services/actionflow/workflow_compiler.js.map +1 -1
- package/dist/services/condition-rules.d.ts.map +1 -1
- package/dist/services/condition-rules.js +3 -1
- package/dist/services/condition-rules.js.map +1 -1
- package/dist/services/esb-interface/document-parser.d.ts +6 -0
- package/dist/services/esb-interface/document-parser.d.ts.map +1 -0
- package/dist/services/esb-interface/document-parser.js +247 -0
- package/dist/services/esb-interface/document-parser.js.map +1 -0
- package/dist/services/esb-interface/importer.d.ts +9 -0
- package/dist/services/esb-interface/importer.d.ts.map +1 -0
- package/dist/services/esb-interface/importer.js +44 -0
- package/dist/services/esb-interface/importer.js.map +1 -0
- package/dist/services/esb-interface/postman-collection.d.ts +9 -0
- package/dist/services/esb-interface/postman-collection.d.ts.map +1 -0
- package/dist/services/esb-interface/postman-collection.js +125 -0
- package/dist/services/esb-interface/postman-collection.js.map +1 -0
- package/dist/services/esb-interface/types.d.ts +91 -0
- package/dist/services/esb-interface/types.d.ts.map +1 -0
- package/dist/services/esb-interface/types.js +2 -0
- package/dist/services/esb-interface/types.js.map +1 -0
- package/dist/services/form-association.d.ts +49 -0
- package/dist/services/form-association.d.ts.map +1 -0
- package/dist/services/form-association.js +279 -0
- package/dist/services/form-association.js.map +1 -0
- package/dist/services/form-button-position.d.ts +35 -0
- package/dist/services/form-button-position.d.ts.map +1 -0
- package/dist/services/form-button-position.js +109 -0
- package/dist/services/form-button-position.js.map +1 -0
- package/dist/services/form-create.d.ts.map +1 -1
- package/dist/services/form-create.js +4 -1
- package/dist/services/form-create.js.map +1 -1
- package/dist/services/form-list-columns.d.ts +54 -0
- package/dist/services/form-list-columns.d.ts.map +1 -0
- package/dist/services/form-list-columns.js +236 -0
- package/dist/services/form-list-columns.js.map +1 -0
- package/dist/services/form-list-stats.d.ts +44 -0
- package/dist/services/form-list-stats.d.ts.map +1 -0
- package/dist/services/form-list-stats.js +302 -0
- package/dist/services/form-list-stats.js.map +1 -0
- package/dist/services/form-nlist.d.ts +42 -0
- package/dist/services/form-nlist.d.ts.map +1 -0
- package/dist/services/form-nlist.js +332 -0
- package/dist/services/form-nlist.js.map +1 -0
- package/dist/services/skill-provision.d.ts +23 -0
- package/dist/services/skill-provision.d.ts.map +1 -0
- package/dist/services/skill-provision.js +96 -0
- package/dist/services/skill-provision.js.map +1 -0
- package/dist/services/update-check.d.ts +24 -0
- package/dist/services/update-check.d.ts.map +1 -0
- package/dist/services/update-check.js +108 -0
- package/dist/services/update-check.js.map +1 -0
- package/dist/services/workflow-initiator.js +3 -3
- package/dist/services/workflow-initiator.js.map +1 -1
- package/package.json +5 -2
- package/skill-docs/SKILL.md +263 -0
- package/skill-docs/actionflows/references/components/calendar/MeetingCreate.md +17 -0
- package/skill-docs/actionflows/references/components/calendar/ScheduleCreate.md +17 -0
- package/skill-docs/actionflows/references/components/document/AttachmentCopy.md +17 -0
- package/skill-docs/actionflows/references/components/document/AttachmentMove.md +17 -0
- package/skill-docs/actionflows/references/components/document/DocumentCopy.md +17 -0
- package/skill-docs/actionflows/references/components/document/DocumentDelete.md +17 -0
- package/skill-docs/actionflows/references/components/document/DocumentEdit.md +17 -0
- package/skill-docs/actionflows/references/components/document/DocumentMove.md +17 -0
- package/skill-docs/actionflows/references/components/document/DocumentPermissionChange.md +17 -0
- package/skill-docs/actionflows/references/components/document/DocumentRenewal.md +17 -0
- package/skill-docs/actionflows/references/components/document/DocumentRevert.md +17 -0
- package/skill-docs/actionflows/references/components/document/DocumentSave.md +17 -0
- package/skill-docs/actionflows/references/components/document/DocumentSubscription.md +17 -0
- package/skill-docs/actionflows/references/components/document/DocumentSubscriptionApprove.md +17 -0
- package/skill-docs/actionflows/references/components/document/DocumentSubscriptionSendBack.md +17 -0
- package/skill-docs/actionflows/references/components/document/DocumentSubscriptionWithdraw.md +17 -0
- package/skill-docs/actionflows/references/components/document/FileFolderSave.md +17 -0
- package/skill-docs/actionflows/references/components/document/GetAttachmentInfo.md +17 -0
- package/skill-docs/actionflows/references/components/document/GetDocumentInfo.md +17 -0
- package/skill-docs/actionflows/references/components/document/ModifyDocumentStatus.md +17 -0
- package/skill-docs/actionflows/references/components/document/ReplaceAttachment.md +17 -0
- package/skill-docs/actionflows/references/components/document/UpdatePrintNum.md +17 -0
- package/skill-docs/actionflows/references/components/ebuilder/ActionEbAdd.md +61 -0
- package/skill-docs/actionflows/references/components/ebuilder/ActionEbDelete.md +23 -0
- package/skill-docs/actionflows/references/components/ebuilder/ActionEbRecover.md +17 -0
- package/skill-docs/actionflows/references/components/ebuilder/ActionEbSaveVersion.md +17 -0
- package/skill-docs/actionflows/references/components/ebuilder/ActionEbUpdate.md +23 -0
- package/skill-docs/actionflows/references/components/ebuilder/DateTrigger.md +17 -0
- package/skill-docs/actionflows/references/components/ebuilder/EbGetDataById.md +17 -0
- package/skill-docs/actionflows/references/components/ebuilder/EnquiryForm.md +101 -0
- package/skill-docs/actionflows/references/components/ebuilder/EventButton.md +33 -0
- package/skill-docs/actionflows/references/components/ebuilder/EventFormData.md +17 -0
- package/skill-docs/actionflows/references/components/ebuilder/TimeBatchTrigger.md +17 -0
- package/skill-docs/actionflows/references/components/logic/Condition.md +23 -0
- package/skill-docs/actionflows/references/components/logic/LogicFlowSet.md +17 -0
- package/skill-docs/actionflows/references/components/logic/MultipleExecution.md +38 -0
- package/skill-docs/actionflows/references/components/logic/Output.md +17 -0
- package/skill-docs/actionflows/references/components/message/InnerMQSend.md +40 -0
- package/skill-docs/actionflows/references/components/message/SendMessage.md +17 -0
- package/skill-docs/actionflows/references/components/personnel/AlterPersonStatus.md +30 -0
- package/skill-docs/actionflows/references/components/personnel/HrmEmployeeUpdate.md +32 -0
- package/skill-docs/actionflows/references/components/personnel/PersonnelOnboarding.md +34 -0
- package/skill-docs/actionflows/references/components/trigger/CustomTrigger.md +45 -0
- package/skill-docs/actionflows/references/components/trigger/InnerMQListener.md +40 -0
- package/skill-docs/actionflows/references/components/trigger/SimpleScheduler.md +17 -0
- package/skill-docs/actionflows/references/components/workflow/ApproveAddSign.md +17 -0
- package/skill-docs/actionflows/references/components/workflow/ApproveAgreeRejectApply.md +17 -0
- package/skill-docs/actionflows/references/components/workflow/ApproveCommit.md +17 -0
- package/skill-docs/actionflows/references/components/workflow/ApproveCompletelyDelete.md +17 -0
- package/skill-docs/actionflows/references/components/workflow/ApproveConsulTurnTodo.md +17 -0
- package/skill-docs/actionflows/references/components/workflow/ApproveCreate.md +17 -0
- package/skill-docs/actionflows/references/components/workflow/ApproveDelete.md +17 -0
- package/skill-docs/actionflows/references/components/workflow/ApproveDoCirculate.md +17 -0
- package/skill-docs/actionflows/references/components/workflow/ApproveDoForward.md +17 -0
- package/skill-docs/actionflows/references/components/workflow/ApproveDoTurnTodo.md +17 -0
- package/skill-docs/actionflows/references/components/workflow/ApproveEntrust.md +17 -0
- package/skill-docs/actionflows/references/components/workflow/ApproveIntervention.md +17 -0
- package/skill-docs/actionflows/references/components/workflow/ApproveMandatoryArchiving.md +17 -0
- package/skill-docs/actionflows/references/components/workflow/ApproveManualCC.md +17 -0
- package/skill-docs/actionflows/references/components/workflow/ApproveRefuseRejectApply.md +17 -0
- package/skill-docs/actionflows/references/components/workflow/ApproveRejectApply.md +17 -0
- package/skill-docs/actionflows/references/components/workflow/ApproveSave.md +17 -0
- package/skill-docs/actionflows/references/components/workflow/ApproveSendBack.md +17 -0
- package/skill-docs/actionflows/references/components/workflow/ApproveShareEntry.md +17 -0
- package/skill-docs/actionflows/references/components/workflow/ApproveTrigger.md +84 -0
- package/skill-docs/actionflows/references/components/workflow/ApproveWithdraw.md +17 -0
- package/skill-docs/actionflows/references/components/workflow/WorkFlowDocEmpowerment.md +17 -0
- package/skill-docs/actionflows/references/components/workflow/WorkflowToDoc.md +17 -0
- package/skill-docs/actionflows/references/condition_rules.md +99 -0
- package/skill-docs/actionflows/references/examples/enquiry-form-batch-insert-scene2.json +1043 -0
- package/skill-docs/actionflows/references/function_rules.md +13 -0
- package/skill-docs/actionflows/references/trigger_runtime_notes.md +53 -0
- package/skill-docs/assets/sample/.claude/settings.local.json +8 -0
- package/skill-docs/assets/sample/api/formApi.js +510 -0
- package/skill-docs/assets/sample/config/config.js +0 -0
- package/skill-docs/assets/sample/config/configLoad.js +0 -0
- package/skill-docs/assets/sample/config/configLoad_default.js +0 -0
- package/skill-docs/assets/sample/config/config_default.js +0 -0
- package/skill-docs/assets/sample/entry.js +22 -0
- package/skill-docs/assets/sample/eslint.config.cjs +48 -0
- package/skill-docs/assets/sample/memo.md +0 -0
- package/skill-docs/assets/sample/readme.js +8 -0
- package/skill-docs/references/auth/guide-auth.md +88 -0
- package/skill-docs/references/coding/guide-edit-backfill.md +189 -0
- package/skill-docs/references/coding/guide-form-crud.md +262 -0
- package/skill-docs/references/coding/guide-page-code.md +224 -0
- package/skill-docs/references/coding/guide-page-export.md +119 -0
- package/skill-docs/references/coding/ref-compile-rules.md +106 -0
- package/skill-docs/references/common/guide-plan-template.md +201 -0
- package/skill-docs/references/common/ref-cli-commands.md +320 -0
- package/skill-docs/references/components/@weapp-Button.md +104 -0
- package/skill-docs/references/components/base-Badge.md +100 -0
- package/skill-docs/references/components/base-Dialog.md +358 -0
- package/skill-docs/references/components/base-Empty.md +58 -0
- package/skill-docs/references/components/base-Tag.md +112 -0
- package/skill-docs/references/components/display-Alert.md +64 -0
- package/skill-docs/references/components/display-Avatar.md +150 -0
- package/skill-docs/references/components/display-Calendar.md +263 -0
- package/skill-docs/references/components/display-Carousel.md +115 -0
- package/skill-docs/references/components/display-Collapse.md +299 -0
- package/skill-docs/references/components/display-FilePreview.md +49 -0
- package/skill-docs/references/components/display-Icon.md +66 -0
- package/skill-docs/references/components/display-List.md +320 -0
- package/skill-docs/references/components/display-Pagination.md +41 -0
- package/skill-docs/references/components/display-Spin.md +34 -0
- package/skill-docs/references/components/display-Steps.md +89 -0
- package/skill-docs/references/components/display-Table.md +160 -0
- package/skill-docs/references/components/display-Title.md +117 -0
- package/skill-docs/references/components/form-Checkbox.md +161 -0
- package/skill-docs/references/components/form-DepartmentBrowser-api.md +52 -0
- package/skill-docs/references/components/form-EmployeeBrowser-api.md +51 -0
- package/skill-docs/references/components/form-EmployeeBrowser.md +51 -0
- package/skill-docs/references/components/form-Input.md +123 -0
- package/skill-docs/references/components/form-Radio.md +145 -0
- package/skill-docs/references/components/form-Select.md +191 -0
- package/skill-docs/references/components/form-Switch.md +46 -0
- package/skill-docs/references/components/form-Upload.md +53 -0
- package/skill-docs/references/components/generic-Echarts.md +102 -0
- package/skill-docs/references/form/guide-create-form.md +409 -0
- package/skill-docs/references/form/guide-ebuilder-filter.md +73 -0
- package/skill-docs/references/form/guide-ebuilder-scope.md +82 -0
- package/skill-docs/references/form/guide-field-linkage.md +121 -0
- package/skill-docs/references/form/guide-form-association.md +108 -0
- package/skill-docs/references/form/guide-form-button.md +54 -0
- package/skill-docs/references/form/guide-form-data.md +48 -0
- package/skill-docs/references/form/guide-form-formula-functions.md +297 -0
- package/skill-docs/references/form/guide-form-linkage.md +185 -0
- package/skill-docs/references/form/guide-form-view-permission.md +38 -0
- package/skill-docs/references/form/guide-form-view.md +284 -0
- package/skill-docs/references/form/guide-list-columns.md +52 -0
- package/skill-docs/references/form/guide-list-stats.md +83 -0
- package/skill-docs/references/form/style-templates.md +44 -0
- package/skill-docs/references/hrm/guide-matrix.md +103 -0
- package/skill-docs/references/menu/system-menus.md +63 -0
- package/skill-docs/references/workflow/guide-workflow-action.md +172 -0
- package/skill-docs/references/workflow/guide-workflow-condition.md +405 -0
- package/skill-docs/references/workflow/guide-workflow.md +402 -0
- package/skill-docs/references/workflow/operator-matrix.md +74 -0
|
@@ -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
|
+
```
|