weaver-e10-builder 1.1.9 → 1.2.3
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 +9 -20
- package/dist/commands/actionflow.d.ts.map +1 -1
- package/dist/commands/actionflow.js +58 -0
- package/dist/commands/actionflow.js.map +1 -1
- package/dist/commands/app.d.ts.map +1 -1
- package/dist/commands/app.js +17 -5
- package/dist/commands/app.js.map +1 -1
- package/dist/commands/auth.d.ts.map +1 -1
- package/dist/commands/auth.js +9 -2
- package/dist/commands/auth.js.map +1 -1
- package/dist/commands/designer.d.ts.map +1 -1
- package/dist/commands/designer.js +22 -1
- package/dist/commands/designer.js.map +1 -1
- package/dist/commands/form-add-detail-table.d.ts.map +1 -1
- package/dist/commands/form-add-detail-table.js +127 -7
- package/dist/commands/form-add-detail-table.js.map +1 -1
- package/dist/commands/form-ebuilder-columns.d.ts +7 -0
- package/dist/commands/form-ebuilder-columns.d.ts.map +1 -1
- package/dist/commands/form-ebuilder-columns.js +2 -24
- package/dist/commands/form-ebuilder-columns.js.map +1 -1
- package/dist/commands/form-field-props.d.ts +3 -0
- package/dist/commands/form-field-props.d.ts.map +1 -0
- package/dist/commands/form-field-props.js +242 -0
- package/dist/commands/form-field-props.js.map +1 -0
- package/dist/commands/form-formula.d.ts.map +1 -1
- package/dist/commands/form-formula.js +35 -11
- package/dist/commands/form-formula.js.map +1 -1
- package/dist/commands/form-layout-init.d.ts +0 -7
- package/dist/commands/form-layout-init.d.ts.map +1 -1
- package/dist/commands/form-layout-init.js +23 -39
- package/dist/commands/form-layout-init.js.map +1 -1
- package/dist/commands/form-nlist.d.ts +1 -1
- package/dist/commands/form-nlist.d.ts.map +1 -1
- package/dist/commands/form-nlist.js +5 -3
- package/dist/commands/form-nlist.js.map +1 -1
- package/dist/commands/form-serial-mark.d.ts.map +1 -1
- package/dist/commands/form-serial-mark.js +134 -42
- package/dist/commands/form-serial-mark.js.map +1 -1
- package/dist/commands/form-virtual.d.ts +3 -0
- package/dist/commands/form-virtual.d.ts.map +1 -0
- package/dist/commands/form-virtual.js +197 -0
- package/dist/commands/form-virtual.js.map +1 -0
- package/dist/commands/form.d.ts +3 -0
- package/dist/commands/form.d.ts.map +1 -1
- package/dist/commands/form.js +356 -129
- package/dist/commands/form.js.map +1 -1
- package/dist/commands/interface.js +1 -1
- package/dist/commands/interface.js.map +1 -1
- package/dist/commands/report-admin.d.ts +5 -0
- package/dist/commands/report-admin.d.ts.map +1 -0
- package/dist/commands/report-admin.js +420 -0
- package/dist/commands/report-admin.js.map +1 -0
- package/dist/commands/report-query.d.ts +3 -0
- package/dist/commands/report-query.d.ts.map +1 -0
- package/dist/commands/report-query.js +314 -0
- package/dist/commands/report-query.js.map +1 -0
- package/dist/commands/report-validate.d.ts +3 -0
- package/dist/commands/report-validate.d.ts.map +1 -0
- package/dist/commands/report-validate.js +719 -0
- package/dist/commands/report-validate.js.map +1 -0
- package/dist/commands/report.d.ts +12 -0
- package/dist/commands/report.d.ts.map +1 -0
- package/dist/commands/report.js +666 -0
- package/dist/commands/report.js.map +1 -0
- package/dist/commands/wf-form.d.ts +34 -0
- package/dist/commands/wf-form.d.ts.map +1 -1
- package/dist/commands/wf-form.js +303 -127
- package/dist/commands/wf-form.js.map +1 -1
- package/dist/commands/workflow-advanced.d.ts.map +1 -1
- package/dist/commands/workflow-advanced.js +109 -90
- package/dist/commands/workflow-advanced.js.map +1 -1
- package/dist/commands/workflow-auth-resp.d.ts +8 -0
- package/dist/commands/workflow-auth-resp.d.ts.map +1 -0
- package/dist/commands/workflow-auth-resp.js +629 -0
- package/dist/commands/workflow-auth-resp.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-create-auth-resp.d.ts +4 -0
- package/dist/commands/workflow-create-auth-resp.d.ts.map +1 -0
- package/dist/commands/workflow-create-auth-resp.js +204 -0
- package/dist/commands/workflow-create-auth-resp.js.map +1 -0
- package/dist/commands/workflow-node-assign-flow.d.ts +3 -0
- package/dist/commands/workflow-node-assign-flow.d.ts.map +1 -0
- package/dist/commands/workflow-node-assign-flow.js +342 -0
- package/dist/commands/workflow-node-assign-flow.js.map +1 -0
- package/dist/commands/workflow-node-overtime.d.ts.map +1 -1
- package/dist/commands/workflow-node-overtime.js +125 -92
- package/dist/commands/workflow-node-overtime.js.map +1 -1
- package/dist/commands/workflow-node-reject.d.ts +52 -0
- package/dist/commands/workflow-node-reject.d.ts.map +1 -1
- package/dist/commands/workflow-node-reject.js +134 -63
- package/dist/commands/workflow-node-reject.js.map +1 -1
- package/dist/commands/workflow-node-sign.d.ts.map +1 -1
- package/dist/commands/workflow-node-sign.js +14 -7
- package/dist/commands/workflow-node-sign.js.map +1 -1
- package/dist/commands/workflow-node-validate.d.ts +6 -0
- package/dist/commands/workflow-node-validate.d.ts.map +1 -1
- package/dist/commands/workflow-node-validate.js +143 -21
- package/dist/commands/workflow-node-validate.js.map +1 -1
- package/dist/commands/workflow-node.d.ts +2 -0
- package/dist/commands/workflow-node.d.ts.map +1 -1
- package/dist/commands/workflow-node.js +434 -165
- package/dist/commands/workflow-node.js.map +1 -1
- package/dist/commands/workflow-numbering.d.ts.map +1 -1
- package/dist/commands/workflow-numbering.js +73 -34
- package/dist/commands/workflow-numbering.js.map +1 -1
- package/dist/commands/workflow-operator-sign.d.ts +10 -0
- package/dist/commands/workflow-operator-sign.d.ts.map +1 -1
- package/dist/commands/workflow-operator-sign.js +40 -53
- package/dist/commands/workflow-operator-sign.js.map +1 -1
- package/dist/commands/workflow-plan-range.d.ts +10 -0
- package/dist/commands/workflow-plan-range.d.ts.map +1 -1
- package/dist/commands/workflow-plan-range.js +15 -54
- package/dist/commands/workflow-plan-range.js.map +1 -1
- package/dist/commands/workflow-segment.d.ts.map +1 -1
- package/dist/commands/workflow-segment.js +22 -14
- package/dist/commands/workflow-segment.js.map +1 -1
- package/dist/commands/workflow.d.ts.map +1 -1
- package/dist/commands/workflow.js +13 -69
- package/dist/commands/workflow.js.map +1 -1
- package/dist/core/auth.js +1 -1
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -1
- package/dist/services/actionflow/build_workflow_draft.d.ts +6 -0
- package/dist/services/actionflow/build_workflow_draft.d.ts.map +1 -1
- package/dist/services/actionflow/build_workflow_draft.js +63 -4
- package/dist/services/actionflow/build_workflow_draft.js.map +1 -1
- package/dist/services/actionflow/calendar_mapper.d.ts +2 -2
- package/dist/services/actionflow/calendar_mapper.d.ts.map +1 -1
- package/dist/services/actionflow/calendar_mapper.js +33 -13
- package/dist/services/actionflow/calendar_mapper.js.map +1 -1
- package/dist/services/actionflow/components/action_eb_add.d.ts.map +1 -1
- package/dist/services/actionflow/components/action_eb_add.js +13 -1
- package/dist/services/actionflow/components/action_eb_add.js.map +1 -1
- package/dist/services/actionflow/components/action_eb_delete.js +2 -2
- package/dist/services/actionflow/components/action_eb_delete.js.map +1 -1
- package/dist/services/actionflow/components/action_eb_recover.js +2 -2
- package/dist/services/actionflow/components/action_eb_recover.js.map +1 -1
- package/dist/services/actionflow/components/action_eb_save_version.js +2 -2
- package/dist/services/actionflow/components/action_eb_save_version.js.map +1 -1
- package/dist/services/actionflow/components/action_eb_update.d.ts.map +1 -1
- package/dist/services/actionflow/components/action_eb_update.js +15 -3
- package/dist/services/actionflow/components/action_eb_update.js.map +1 -1
- package/dist/services/actionflow/components/action_eb_update_compiler.js +5 -5
- package/dist/services/actionflow/components/action_eb_update_compiler.js.map +1 -1
- package/dist/services/actionflow/components/approve_create.d.ts.map +1 -1
- package/dist/services/actionflow/components/approve_create.js +5 -2
- package/dist/services/actionflow/components/approve_create.js.map +1 -1
- package/dist/services/actionflow/components/approve_trigger.d.ts.map +1 -1
- package/dist/services/actionflow/components/approve_trigger.js +5 -0
- package/dist/services/actionflow/components/approve_trigger.js.map +1 -1
- package/dist/services/actionflow/components/assign_var.d.ts +12 -0
- package/dist/services/actionflow/components/assign_var.d.ts.map +1 -0
- package/dist/services/actionflow/components/assign_var.js +133 -0
- package/dist/services/actionflow/components/assign_var.js.map +1 -0
- package/dist/services/actionflow/components/date_trigger.d.ts.map +1 -1
- package/dist/services/actionflow/components/date_trigger.js +14 -1
- package/dist/services/actionflow/components/date_trigger.js.map +1 -1
- package/dist/services/actionflow/components/dml_execute.d.ts.map +1 -1
- package/dist/services/actionflow/components/dml_execute.js +18 -10
- package/dist/services/actionflow/components/dml_execute.js.map +1 -1
- package/dist/services/actionflow/components/document_actions.js +5 -5
- package/dist/services/actionflow/components/document_actions.js.map +1 -1
- package/dist/services/actionflow/components/eb_get_data_by_id.d.ts.map +1 -1
- package/dist/services/actionflow/components/eb_get_data_by_id.js +8 -6
- package/dist/services/actionflow/components/eb_get_data_by_id.js.map +1 -1
- package/dist/services/actionflow/components/enquiry_form.d.ts.map +1 -1
- package/dist/services/actionflow/components/enquiry_form.js +28 -9
- package/dist/services/actionflow/components/enquiry_form.js.map +1 -1
- package/dist/services/actionflow/components/hrm_actions.d.ts.map +1 -1
- package/dist/services/actionflow/components/hrm_actions.js +34 -13
- package/dist/services/actionflow/components/hrm_actions.js.map +1 -1
- package/dist/services/actionflow/components/index.d.ts.map +1 -1
- package/dist/services/actionflow/components/index.js +12 -3
- package/dist/services/actionflow/components/index.js.map +1 -1
- package/dist/services/actionflow/components/inner_mq_send.d.ts.map +1 -1
- package/dist/services/actionflow/components/inner_mq_send.js +43 -4
- package/dist/services/actionflow/components/inner_mq_send.js.map +1 -1
- package/dist/services/actionflow/components/meeting_create.js +9 -9
- package/dist/services/actionflow/components/meeting_create.js.map +1 -1
- package/dist/services/actionflow/components/multiple_execution.d.ts.map +1 -1
- package/dist/services/actionflow/components/multiple_execution.js +83 -4
- package/dist/services/actionflow/components/multiple_execution.js.map +1 -1
- package/dist/services/actionflow/components/output.d.ts +3 -2
- package/dist/services/actionflow/components/output.d.ts.map +1 -1
- package/dist/services/actionflow/components/output.js +33 -0
- package/dist/services/actionflow/components/output.js.map +1 -1
- package/dist/services/actionflow/components/schedule_create.js +10 -10
- package/dist/services/actionflow/components/schedule_create.js.map +1 -1
- package/dist/services/actionflow/components/send_message.js +1 -1
- package/dist/services/actionflow/components/send_message.js.map +1 -1
- package/dist/services/actionflow/components/simple_scheduler.d.ts.map +1 -1
- package/dist/services/actionflow/components/simple_scheduler.js +42 -9
- package/dist/services/actionflow/components/simple_scheduler.js.map +1 -1
- package/dist/services/actionflow/components/time_batch_trigger.d.ts.map +1 -1
- package/dist/services/actionflow/components/time_batch_trigger.js +43 -13
- package/dist/services/actionflow/components/time_batch_trigger.js.map +1 -1
- package/dist/services/actionflow/components/workflow_actions.d.ts +0 -1
- package/dist/services/actionflow/components/workflow_actions.d.ts.map +1 -1
- package/dist/services/actionflow/components/workflow_actions.js +21 -27
- package/dist/services/actionflow/components/workflow_actions.js.map +1 -1
- package/dist/services/actionflow/context_preflight.d.ts +30 -1
- package/dist/services/actionflow/context_preflight.d.ts.map +1 -1
- package/dist/services/actionflow/context_preflight.js +175 -2
- package/dist/services/actionflow/context_preflight.js.map +1 -1
- package/dist/services/actionflow/design_client.d.ts +4 -0
- package/dist/services/actionflow/design_client.d.ts.map +1 -1
- package/dist/services/actionflow/design_client.js +10 -0
- package/dist/services/actionflow/design_client.js.map +1 -1
- package/dist/services/actionflow/dynamic_resources.d.ts +7 -1
- package/dist/services/actionflow/dynamic_resources.d.ts.map +1 -1
- package/dist/services/actionflow/dynamic_resources.js +74 -10
- package/dist/services/actionflow/dynamic_resources.js.map +1 -1
- package/dist/services/actionflow/enrich_approve_trigger.d.ts.map +1 -1
- package/dist/services/actionflow/enrich_approve_trigger.js +18 -3
- package/dist/services/actionflow/enrich_approve_trigger.js.map +1 -1
- package/dist/services/actionflow/form_source.d.ts +35 -0
- package/dist/services/actionflow/form_source.d.ts.map +1 -1
- package/dist/services/actionflow/form_source.js +50 -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 +186 -13
- package/dist/services/actionflow/formula_service.js.map +1 -1
- package/dist/services/actionflow/generation_service.d.ts.map +1 -1
- package/dist/services/actionflow/generation_service.js +18 -2
- package/dist/services/actionflow/generation_service.js.map +1 -1
- package/dist/services/actionflow/preflight_service.d.ts +1 -1
- package/dist/services/actionflow/preflight_service.d.ts.map +1 -1
- package/dist/services/actionflow/preflight_service.js +168 -5
- package/dist/services/actionflow/preflight_service.js.map +1 -1
- package/dist/services/actionflow/save_workflow_draft.d.ts +8 -0
- package/dist/services/actionflow/save_workflow_draft.d.ts.map +1 -1
- package/dist/services/actionflow/save_workflow_draft.js +6 -2
- package/dist/services/actionflow/save_workflow_draft.js.map +1 -1
- package/dist/services/actionflow/update_service.d.ts +6 -0
- package/dist/services/actionflow/update_service.d.ts.map +1 -1
- package/dist/services/actionflow/update_service.js +125 -7
- package/dist/services/actionflow/update_service.js.map +1 -1
- package/dist/services/actionflow/workflow_compiler.d.ts.map +1 -1
- package/dist/services/actionflow/workflow_compiler.js +17 -9
- package/dist/services/actionflow/workflow_compiler.js.map +1 -1
- package/dist/services/browser.d.ts +34 -0
- package/dist/services/browser.d.ts.map +1 -0
- package/dist/services/browser.js +57 -0
- package/dist/services/browser.js.map +1 -0
- package/dist/services/esb-interface/document-parser.d.ts +5 -0
- package/dist/services/esb-interface/document-parser.d.ts.map +1 -1
- package/dist/services/esb-interface/document-parser.js +117 -1
- package/dist/services/esb-interface/document-parser.js.map +1 -1
- package/dist/services/esb-interface/importer.d.ts.map +1 -1
- package/dist/services/esb-interface/importer.js +7 -2
- package/dist/services/esb-interface/importer.js.map +1 -1
- package/dist/services/field-props-data.d.ts +56 -0
- package/dist/services/field-props-data.d.ts.map +1 -0
- package/dist/services/field-props-data.js +732 -0
- package/dist/services/field-props-data.js.map +1 -0
- package/dist/services/form-create.d.ts +2 -1
- package/dist/services/form-create.d.ts.map +1 -1
- package/dist/services/form-create.js.map +1 -1
- package/dist/services/form-ebuilder-columns.d.ts +50 -0
- package/dist/services/form-ebuilder-columns.d.ts.map +1 -0
- package/dist/services/form-ebuilder-columns.js +68 -0
- package/dist/services/form-ebuilder-columns.js.map +1 -0
- package/dist/services/form-edit-base.d.ts +45 -0
- package/dist/services/form-edit-base.d.ts.map +1 -0
- package/dist/services/form-edit-base.js +76 -0
- package/dist/services/form-edit-base.js.map +1 -0
- package/dist/services/form-field-drop.d.ts +70 -0
- package/dist/services/form-field-drop.d.ts.map +1 -0
- package/dist/services/form-field-drop.js +118 -0
- package/dist/services/form-field-drop.js.map +1 -0
- package/dist/services/form-field-patch.d.ts +47 -0
- package/dist/services/form-field-patch.d.ts.map +1 -0
- package/dist/services/form-field-patch.js +88 -0
- package/dist/services/form-field-patch.js.map +1 -0
- package/dist/services/form-nlist.d.ts +1 -0
- package/dist/services/form-nlist.d.ts.map +1 -1
- package/dist/services/form-nlist.js +32 -5
- package/dist/services/form-nlist.js.map +1 -1
- package/dist/services/form-style-template.d.ts +17 -0
- package/dist/services/form-style-template.d.ts.map +1 -0
- package/dist/services/form-style-template.js +102 -0
- package/dist/services/form-style-template.js.map +1 -0
- package/dist/services/form-sub-detail.d.ts +51 -3
- package/dist/services/form-sub-detail.d.ts.map +1 -1
- package/dist/services/form-sub-detail.js +183 -20
- package/dist/services/form-sub-detail.js.map +1 -1
- package/dist/services/form-virtual.d.ts +60 -0
- package/dist/services/form-virtual.d.ts.map +1 -0
- package/dist/services/form-virtual.js +331 -0
- package/dist/services/form-virtual.js.map +1 -0
- package/dist/services/formula-detail.d.ts +68 -5
- package/dist/services/formula-detail.d.ts.map +1 -1
- package/dist/services/formula-detail.js +110 -44
- package/dist/services/formula-detail.js.map +1 -1
- package/dist/services/report/analyze.d.ts +67 -0
- package/dist/services/report/analyze.d.ts.map +1 -0
- package/dist/services/report/analyze.js +173 -0
- package/dist/services/report/analyze.js.map +1 -0
- package/dist/services/report/build.d.ts +166 -0
- package/dist/services/report/build.d.ts.map +1 -0
- package/dist/services/report/build.js +520 -0
- package/dist/services/report/build.js.map +1 -0
- package/dist/services/report/constants.d.ts +145 -0
- package/dist/services/report/constants.d.ts.map +1 -0
- package/dist/services/report/constants.js +250 -0
- package/dist/services/report/constants.js.map +1 -0
- package/dist/services/report/dataset.d.ts +73 -0
- package/dist/services/report/dataset.d.ts.map +1 -0
- package/dist/services/report/dataset.js +185 -0
- package/dist/services/report/dataset.js.map +1 -0
- package/dist/services/report/fields.d.ts +80 -0
- package/dist/services/report/fields.d.ts.map +1 -0
- package/dist/services/report/fields.js +245 -0
- package/dist/services/report/fields.js.map +1 -0
- package/dist/services/report/forms.d.ts +70 -0
- package/dist/services/report/forms.d.ts.map +1 -0
- package/dist/services/report/forms.js +237 -0
- package/dist/services/report/forms.js.map +1 -0
- package/dist/services/report/guard.d.ts +73 -0
- package/dist/services/report/guard.d.ts.map +1 -0
- package/dist/services/report/guard.js +262 -0
- package/dist/services/report/guard.js.map +1 -0
- package/dist/services/report/http.d.ts +118 -0
- package/dist/services/report/http.d.ts.map +1 -0
- package/dist/services/report/http.js +159 -0
- package/dist/services/report/http.js.map +1 -0
- package/dist/services/report/lifecycle.d.ts +107 -0
- package/dist/services/report/lifecycle.d.ts.map +1 -0
- package/dist/services/report/lifecycle.js +323 -0
- package/dist/services/report/lifecycle.js.map +1 -0
- package/dist/services/report/permission.d.ts +59 -0
- package/dist/services/report/permission.d.ts.map +1 -0
- package/dist/services/report/permission.js +286 -0
- package/dist/services/report/permission.js.map +1 -0
- package/dist/services/report/query-checks.d.ts +124 -0
- package/dist/services/report/query-checks.d.ts.map +1 -0
- package/dist/services/report/query-checks.js +374 -0
- package/dist/services/report/query-checks.js.map +1 -0
- package/dist/services/report/query.d.ts +106 -0
- package/dist/services/report/query.d.ts.map +1 -0
- package/dist/services/report/query.js +278 -0
- package/dist/services/report/query.js.map +1 -0
- package/dist/services/report/render.d.ts +52 -0
- package/dist/services/report/render.d.ts.map +1 -0
- package/dist/services/report/render.js +138 -0
- package/dist/services/report/render.js.map +1 -0
- package/dist/services/report/reports.d.ts +110 -0
- package/dist/services/report/reports.d.ts.map +1 -0
- package/dist/services/report/reports.js +179 -0
- package/dist/services/report/reports.js.map +1 -0
- package/dist/services/report/safe-save.d.ts +57 -0
- package/dist/services/report/safe-save.d.ts.map +1 -0
- package/dist/services/report/safe-save.js +325 -0
- package/dist/services/report/safe-save.js.map +1 -0
- package/dist/services/report/sources.d.ts +48 -0
- package/dist/services/report/sources.d.ts.map +1 -0
- package/dist/services/report/sources.js +147 -0
- package/dist/services/report/sources.js.map +1 -0
- package/dist/services/report/types.d.ts +312 -0
- package/dist/services/report/types.d.ts.map +1 -0
- package/dist/services/report/types.js +2 -0
- package/dist/services/report/types.js.map +1 -0
- package/dist/services/report/validate.d.ts +169 -0
- package/dist/services/report/validate.d.ts.map +1 -0
- package/dist/services/report/validate.js +685 -0
- package/dist/services/report/validate.js.map +1 -0
- package/dist/services/report/verify.d.ts +72 -0
- package/dist/services/report/verify.d.ts.map +1 -0
- package/dist/services/report/verify.js +441 -0
- package/dist/services/report/verify.js.map +1 -0
- package/dist/services/report/workbook.d.ts +108 -0
- package/dist/services/report/workbook.d.ts.map +1 -0
- package/dist/services/report/workbook.js +471 -0
- package/dist/services/report/workbook.js.map +1 -0
- package/dist/services/rich-text.d.ts +33 -0
- package/dist/services/rich-text.d.ts.map +1 -0
- package/dist/services/rich-text.js +134 -0
- package/dist/services/rich-text.js.map +1 -0
- package/dist/services/rich-types.d.ts +39 -0
- package/dist/services/rich-types.d.ts.map +1 -1
- package/dist/services/rich-types.js +61 -30
- package/dist/services/rich-types.js.map +1 -1
- package/dist/services/workflow-assign-flow.d.ts +114 -0
- package/dist/services/workflow-assign-flow.d.ts.map +1 -0
- package/dist/services/workflow-assign-flow.js +311 -0
- package/dist/services/workflow-assign-flow.js.map +1 -0
- package/dist/services/workflow-node-layout.d.ts +214 -0
- package/dist/services/workflow-node-layout.d.ts.map +1 -0
- package/dist/services/workflow-node-layout.js +338 -0
- package/dist/services/workflow-node-layout.js.map +1 -0
- package/dist/services/workflow-node-menu.d.ts +57 -0
- package/dist/services/workflow-node-menu.d.ts.map +1 -0
- package/dist/services/workflow-node-menu.js +144 -0
- package/dist/services/workflow-node-menu.js.map +1 -0
- package/dist/services/workflow-operator.d.ts +47 -2
- package/dist/services/workflow-operator.d.ts.map +1 -1
- package/dist/services/workflow-operator.js +102 -5
- package/dist/services/workflow-operator.js.map +1 -1
- package/dist/services/workflow-overtime.d.ts +95 -0
- package/dist/services/workflow-overtime.d.ts.map +1 -0
- package/dist/services/workflow-overtime.js +207 -0
- package/dist/services/workflow-overtime.js.map +1 -0
- package/dist/services/workflow-plan-range.d.ts +18 -0
- package/dist/services/workflow-plan-range.d.ts.map +1 -0
- package/dist/services/workflow-plan-range.js +72 -0
- package/dist/services/workflow-plan-range.js.map +1 -0
- package/package.json +48 -47
- package/skill-docs/SKILL.md +278 -261
- package/skill-docs/_catalog.md +13 -0
- package/skill-docs/actionflows/SKILL.md +168 -159
- package/skill-docs/actionflows/references/components/calendar/MeetingCreate.md +17 -17
- package/skill-docs/actionflows/references/components/calendar/ScheduleCreate.md +17 -17
- package/skill-docs/actionflows/references/components/database/DMLExecute.md +3 -3
- package/skill-docs/actionflows/references/components/ebuilder/ActionEbAdd.md +1 -1
- package/skill-docs/actionflows/references/components/ebuilder/DateTrigger.md +32 -17
- package/skill-docs/actionflows/references/components/ebuilder/EbGetDataById.md +17 -17
- package/skill-docs/actionflows/references/components/ebuilder/EnquiryForm.md +6 -0
- package/skill-docs/actionflows/references/components/ebuilder/EventButton.md +33 -33
- package/skill-docs/actionflows/references/components/ebuilder/EventFormData.md +2 -0
- package/skill-docs/actionflows/references/components/ebuilder/TimeBatchTrigger.md +19 -17
- package/skill-docs/actionflows/references/components/logic/Output.md +28 -17
- package/skill-docs/actionflows/references/components/message/InnerMQSend.md +6 -2
- package/skill-docs/actionflows/references/components/personnel/AlterPersonStatus.md +30 -30
- package/skill-docs/actionflows/references/components/personnel/HrmEmployeeUpdate.md +32 -32
- package/skill-docs/actionflows/references/components/trigger/InnerMQListener.md +41 -40
- package/skill-docs/actionflows/references/components/trigger/SimpleScheduler.md +19 -17
- package/skill-docs/actionflows/references/components/workflow/ApproveCreate.md +17 -17
- package/skill-docs/actionflows/references/components/workflow/ApproveDelete.md +19 -17
- package/skill-docs/actionflows/references/components/workflow/ApproveEntrust.md +19 -17
- package/skill-docs/actionflows/references/components/workflow/ApproveSave.md +17 -17
- package/skill-docs/actionflows/references/components/workflow/ApproveTrigger.md +99 -84
- package/skill-docs/actionflows/references/dynamic_capability_matrix.md +39 -0
- package/skill-docs/references/common/guide-plan-template.md +22 -1
- package/skill-docs/references/common/ref-cli-commands.md +167 -11
- package/skill-docs/references/ebuilder-designer/guide-designer-components.md +1 -1
- package/skill-docs/references/ebuilder-designer/guide-designer-factory.md +460 -460
- package/skill-docs/references/ebuilder-designer/guide-designer.md +4 -4
- package/skill-docs/references/form/guide-create-form.md +25 -6
- package/skill-docs/references/form/guide-form-association.md +1 -1
- package/skill-docs/references/form/guide-form-formula-functions.md +11 -1
- package/skill-docs/references/form/guide-form-sub-detail.md +82 -0
- package/skill-docs/references/form/guide-form-view.md +318 -318
- package/skill-docs/references/form/guide-list-custom-text.md +52 -0
- package/skill-docs/references/form/guide-virtual-form.md +156 -0
- package/skill-docs/references/form/ref-form-fields.md +239 -100
- package/skill-docs/references/form/style-templates.md +80 -27
- package/skill-docs/references/report/add-dataset-registration-guide.md +139 -0
- package/skill-docs/references/report/ai-report-workflow.md +412 -0
- package/skill-docs/references/report/api-report-build-fast-path.md +275 -0
- package/skill-docs/references/report/app-datasource-lookup-guide.md +230 -0
- package/skill-docs/references/report/cell-config-echo-guide.md +163 -0
- package/skill-docs/references/report/cell-transform-guide.md +147 -0
- package/skill-docs/references/report/condition-format-guide.md +140 -0
- package/skill-docs/references/report/cross-dataset-filter-guide.md +304 -0
- package/skill-docs/references/report/dataset-query-filter-guide.md +235 -0
- package/skill-docs/references/report/dataset-sidebar-ops-guide.md +280 -0
- package/skill-docs/references/report/dataset-table-field-contract-guide.md +339 -0
- package/skill-docs/references/report/datasource-metadata-guide.md +365 -0
- package/skill-docs/references/report/datasource-selection-and-parent-filter-guide.md +148 -0
- package/skill-docs/references/report/date-range-query-reference.md +102 -0
- package/skill-docs/references/report/default-header-style-guide.md +70 -0
- package/skill-docs/references/report/designer-blank-prevention-guide.md +111 -0
- package/skill-docs/references/report/event-hreflink-guide.md +184 -0
- package/skill-docs/references/report/field-bind-exact-match-guide.md +208 -0
- package/skill-docs/references/report/formula-cell-api-guide.md +258 -0
- package/skill-docs/references/report/guide-report-build.md +131 -0
- package/skill-docs/references/report/guide-report-modify.md +100 -0
- package/skill-docs/references/report/guide-report-multisource.md +143 -0
- package/skill-docs/references/report/guide-report-query.md +98 -0
- package/skill-docs/references/report/hidden-row-and-header-merge-guide.md +100 -0
- package/skill-docs/references/report/layout-showlocation-freeze-guide.md +167 -0
- package/skill-docs/references/report/preaggregate-auto-disable-guide.md +107 -0
- package/skill-docs/references/report/query-condition-api-guide.md +890 -0
- package/skill-docs/references/report/ref-report-commands.md +122 -0
- package/skill-docs/references/report/ref-report-pitfalls.md +226 -0
- package/skill-docs/references/report/report-baseinfo-defaults-guide.md +117 -0
- package/skill-docs/references/report/report-building-guide.md +511 -0
- package/skill-docs/references/report/report-config-schema.md +445 -0
- package/skill-docs/references/report/report-create-modes-guide.md +182 -0
- package/skill-docs/references/report/report-data-model.md +447 -0
- package/skill-docs/references/report/report-delivery-contract.md +101 -0
- package/skill-docs/references/report/report-designer-feature-map.md +500 -0
- package/skill-docs/references/report/report-internal-error-guide.md +78 -0
- package/skill-docs/references/report/report-knowledge-base.md +389 -0
- package/skill-docs/references/report/report-lifecycle-api-guide.md +392 -0
- package/skill-docs/references/report/report-list-page-ops-guide.md +191 -0
- package/skill-docs/references/report/report-permission-guide.md +365 -0
- package/skill-docs/references/report/report-requirement-analysis-template.md +202 -0
- package/skill-docs/references/report/report-self-check-guide.md +164 -0
- package/skill-docs/references/report/safe-partial-save-guide.md +151 -0
- package/skill-docs/references/report/snowflake-id-precision-guide.md +84 -0
- package/skill-docs/references/report/spec-build-schema.md +291 -0
- package/skill-docs/references/report/targeted-fix-guide.md +97 -0
- package/skill-docs/references/report/user-request-scope-only-guide.md +82 -0
- package/skill-docs/references/workflow/guide-workflow-auth-resp.md +198 -0
- package/skill-docs/references/workflow/guide-workflow-node-layout.md +181 -0
- package/skill-docs/references/workflow/guide-workflow.md +14 -3
- package/skill-docs/actionflows/references/components/workflow/ApproveCompletelyDelete.md +0 -17
package/dist/commands/form.js
CHANGED
|
@@ -3,8 +3,13 @@ import { AuthSession } from '../core/auth.js';
|
|
|
3
3
|
import { ApiClient } from '../core/client.js';
|
|
4
4
|
import { toColumnName, toTableName } from '../utils/column-name.js';
|
|
5
5
|
import { createCustomPhysicalForm, addInitialFieldsToCustomPhysicalForm, placeholderFromFormat, reapplyGroupLayout } from '../services/form-create.js';
|
|
6
|
-
import { FormSubDetailService } from '../services/form-sub-detail.js';
|
|
7
|
-
import { getRichType, richIdUnits } from '../services/rich-types.js';
|
|
6
|
+
import { FormSubDetailService, resolveDetailTable } from '../services/form-sub-detail.js';
|
|
7
|
+
import { RICH_TYPE_MAP, getRichType, richIdUnits, BROWSER_KINDS } from '../services/rich-types.js';
|
|
8
|
+
import { dropFieldComponents, prepareLayoutForSave } from '../services/form-field-drop.js';
|
|
9
|
+
import { describeEditBaseFailure, resolveEditBase as resolveEditBasePure } from '../services/form-edit-base.js';
|
|
10
|
+
import { applyFieldPatches } from '../services/form-field-patch.js';
|
|
11
|
+
import { ensureDisplayColumns } from '../services/form-ebuilder-columns.js';
|
|
12
|
+
import { buildFormulaParameters, defaultReturnType } from '../services/formula-detail.js';
|
|
8
13
|
import { registerOptionTemplateCommand } from './form-option-template.js';
|
|
9
14
|
/**
|
|
10
15
|
* componentKey 大小写归一:用户/示例常写 "Textarea"/"Ebuilder" 等小写变体,但代码各处
|
|
@@ -23,6 +28,62 @@ const CK_CANON = {
|
|
|
23
28
|
function canonComponentKey(ck) {
|
|
24
29
|
return CK_CANON[String(ck).toLowerCase()] || ck;
|
|
25
30
|
}
|
|
31
|
+
/**
|
|
32
|
+
* 代码里另有分支/别名、不在 CK_CANON 与 RICH_TYPE_MAP 两处的字段类型。
|
|
33
|
+
* **宁宽勿窄**:多列一个只是照旧送服务器,漏一个会把合法类型误杀,所以这里尽量收全。
|
|
34
|
+
* 新增字段类型时记得同步。
|
|
35
|
+
*/
|
|
36
|
+
const EXTRA_FIELD_TYPES = [
|
|
37
|
+
'Flow', 'SelectMultiple', 'DateInterval', 'ColorPicker', 'DataTable',
|
|
38
|
+
'DocFolder', 'DocFloder', 'Fold', 'Placeholder', 'Sharer', 'FileComponent',
|
|
39
|
+
'EbuilderAppTag', 'Attachment', 'Image', 'Signature', 'RichText', 'RelateBrowser',
|
|
40
|
+
// EInvoice 电子发票:下方 add-field 有专属构建分支(isSingle/invoiceType),此前漏登记 →
|
|
41
|
+
// 被 assertFieldType 挡成死代码。AudioRecord/VideoRecord 语音视频:极简 jsonObj,平台原样透传
|
|
42
|
+
// (见 rich-types.ts 的说明),无需富组件模板。
|
|
43
|
+
'EInvoice', 'AudioRecord', 'VideoRecord',
|
|
44
|
+
];
|
|
45
|
+
/** 可用的字段类型 = 基础组件(CK_CANON 的值)∪ 富组件(RICH_TYPE_MAP 的键)∪ 上述补充。
|
|
46
|
+
* 导出仅为让测试能盯住"平台支持的合法类型不许漏登记"(漏了会被 assertFieldType 误杀)。 */
|
|
47
|
+
export const FIELD_TYPE_CHOICES = [...new Set([
|
|
48
|
+
...Object.values(CK_CANON),
|
|
49
|
+
...Object.keys(RICH_TYPE_MAP),
|
|
50
|
+
...EXTRA_FIELD_TYPES,
|
|
51
|
+
])].sort();
|
|
52
|
+
/**
|
|
53
|
+
* 校验字段类型名。不校验的话错类型会**直送服务器**,换回一段
|
|
54
|
+
* `Cannot invoke "ComponentType.name()" because ... getComponentKey() is null`——
|
|
55
|
+
* 既看不出哪错了,也看不出该填什么。这里先拦下来并列出可选值。
|
|
56
|
+
*/
|
|
57
|
+
function assertFieldType(fieldType, where = '') {
|
|
58
|
+
if (FIELD_TYPE_CHOICES.includes(fieldType))
|
|
59
|
+
return;
|
|
60
|
+
console.error(`${where}不支持的字段类型: ${fieldType}`);
|
|
61
|
+
console.error(` 可选: ${FIELD_TYPE_CHOICES.join(' / ')}`);
|
|
62
|
+
process.exit(1);
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* 校验选项定义。**键名必须是 `name` / `valueKey`**——写成 `{value,label}` 这类
|
|
66
|
+
* 不会被拦下,而是静默存成「没有名字的选项」(平台侧 fieldOptionName 为空),
|
|
67
|
+
* 之后 `form data add` 按选项名写数据会直接失效,且读回也看不出哪里错了。
|
|
68
|
+
*/
|
|
69
|
+
function assertFieldOptions(fieldName, options) {
|
|
70
|
+
options.forEach((o, i) => {
|
|
71
|
+
if (typeof o === 'string')
|
|
72
|
+
return; // 字符串简写,归一化时会补成 {name}
|
|
73
|
+
const where = `字段「${fieldName}」第 ${i + 1} 个选项`;
|
|
74
|
+
if (typeof o?.name !== 'string' || !o.name.trim()) {
|
|
75
|
+
const got = o && typeof o === 'object' ? Object.keys(o).join(' / ') : String(o);
|
|
76
|
+
console.error(`${where}缺少 name(收到键:${got || '(无)'})`);
|
|
77
|
+
console.error(' 正确写法: {"name":"待入职","valueKey":"1"}(valueKey 省略则由平台生成)');
|
|
78
|
+
process.exit(1);
|
|
79
|
+
}
|
|
80
|
+
const vk = o.valueKey;
|
|
81
|
+
if (vk !== undefined && vk !== null && String(vk) !== '' && !/^\d+$/.test(String(vk))) {
|
|
82
|
+
console.error(`${where}的 valueKey「${vk}」必须是数字(平台规范,下游按数字引用)`);
|
|
83
|
+
process.exit(1);
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
}
|
|
26
87
|
const SYSTEM_FIELD_IDS = new Set([
|
|
27
88
|
'name', 'creator', 'create_time', 'update_time', 'id',
|
|
28
89
|
'updater', 'data_status', 'flow_status', 'current_step',
|
|
@@ -61,6 +122,38 @@ function defaultEBuilderDataTitle(fields) {
|
|
|
61
122
|
const byName = biz.find((f) => String(f.fieldName ?? f.title ?? '').includes('名称'));
|
|
62
123
|
return byName?.fieldId || biz[0]?.fieldId || 'name';
|
|
63
124
|
}
|
|
125
|
+
/**
|
|
126
|
+
* 只读地看一眼 `getFields` 眼里这个字段长什么样 —— **仅用于把错误信息说清楚,绝不作为写回基底**。
|
|
127
|
+
*
|
|
128
|
+
* `getFields` 的 `fieldKey` 是粗粒度的:CLI 不认识的字段类型(如「文档赋权对象」)一律报 `Text`,
|
|
129
|
+
* 拿它当 `type` 回写就会把真实类型改掉。
|
|
130
|
+
*/
|
|
131
|
+
async function peekViaGetFields(client, baseUrl, objId, fieldId, auth) {
|
|
132
|
+
try {
|
|
133
|
+
const res = await client.post(`${baseUrl}/api/ebuilder/form/dataset/v1/getFields`, {
|
|
134
|
+
objId, userid: auth.userId, tenantKey: auth.tenantKey,
|
|
135
|
+
});
|
|
136
|
+
const all = [...(res?.data?.mainFields || []), ...(res?.data?.subFields || [])];
|
|
137
|
+
return all.find((f) => String(f.fieldId) === String(fieldId)) || null;
|
|
138
|
+
}
|
|
139
|
+
catch {
|
|
140
|
+
return null;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* 读 `getFormFieldPage` 的字段记录(扁平形态)。
|
|
145
|
+
*
|
|
146
|
+
* 单独抽出来是为了让「读不到 → 中止」这条路清晰:**失败要能被调用方看见**,
|
|
147
|
+
* 不能吞掉之后改走别的接口重建一个定义。
|
|
148
|
+
*/
|
|
149
|
+
async function fetchFieldPageRecords(client, baseUrl, appId, formId) {
|
|
150
|
+
const r = await client.post(`${baseUrl}/api/ebuilder/form/form/field/manage/getFormFieldPage?apid=${appId}`, {
|
|
151
|
+
pageNo: 1, pageSize: 500, module: 'ebuilderform',
|
|
152
|
+
customParam: { appId },
|
|
153
|
+
formFieldSearchEntity: { isDelete: 0, status: 'enable', formId },
|
|
154
|
+
}, { ebbusinessid: formId });
|
|
155
|
+
return r?.data?.pageDatas?.result || r?.data?.data?.records || r?.data?.data || [];
|
|
156
|
+
}
|
|
64
157
|
export function registerFormCommands(program) {
|
|
65
158
|
const form = program.command('form').description('表单管理');
|
|
66
159
|
registerOptionTemplateCommand(form, program);
|
|
@@ -255,7 +348,10 @@ export function registerFormCommands(program) {
|
|
|
255
348
|
.description('创建表单')
|
|
256
349
|
.argument('<appId>', '应用 ID')
|
|
257
350
|
.argument('<name>', '表单名称')
|
|
258
|
-
.requiredOption('--fields <json>', '字段定义 JSON
|
|
351
|
+
.requiredOption('--fields <json>', '字段定义 JSON 文件路径(**必须 @ 开头**,如 @fields.json)。格式:'
|
|
352
|
+
+ '[{"componentKey":"Text","fieldName":"姓名"}];Select 的选项写 '
|
|
353
|
+
+ 'options 或 fieldOptions:[{"name":"待入职","valueKey":"1"}](键名必须是 name / valueKey,'
|
|
354
|
+
+ 'valueKey 须为数字、省略则平台生成)')
|
|
259
355
|
.option('--menu', '建表后添加台账菜单(默认不加;漏加可用 `e10-cli menu add-table` 补)')
|
|
260
356
|
.option('--layout <type>', '表单布局类型:FLOW(流式)/EXCEL(表格,缺省)。布局类型建表后不可切换', 'EXCEL')
|
|
261
357
|
.action(async (appId, name, cmdOpts) => {
|
|
@@ -295,27 +391,28 @@ export function registerFormCommands(program) {
|
|
|
295
391
|
// componentKey 大小写归一(canonComponentKey):用户/示例常写 "Textarea"/"Ebuilder" 等,
|
|
296
392
|
// 但 storageFieldType 与各 `=== 'TextArea'` 分支按 canonical 大小写匹配,不归一会导致 type 存成
|
|
297
393
|
// 小写 "Textarea"(FLOW 渲染异常)、TextArea 分支(content/maxLen)漏跑。
|
|
298
|
-
|
|
299
|
-
|
|
394
|
+
// 归一化 + 就地校验(类型名/选项键名)。顶层与明细子字段共用,避免两边校验不一致。
|
|
395
|
+
const normalizeFieldDef = (raw) => {
|
|
396
|
+
const out = { ...raw };
|
|
300
397
|
if (!out.componentKey && out.fieldType)
|
|
301
398
|
out.componentKey = out.fieldType;
|
|
302
399
|
if (out.componentKey)
|
|
303
400
|
out.componentKey = canonComponentKey(out.componentKey);
|
|
401
|
+
const label = out.fieldName || out.title || '(未命名)';
|
|
402
|
+
assertFieldType(out.componentKey || '', `字段「${label}」`);
|
|
304
403
|
if (Array.isArray(out.options) && !out.fieldOptions) {
|
|
305
404
|
out.fieldOptions = out.options.map((o) => typeof o === 'string' ? { name: o } : o);
|
|
306
405
|
}
|
|
307
|
-
|
|
406
|
+
if (Array.isArray(out.fieldOptions))
|
|
407
|
+
assertFieldOptions(label, out.fieldOptions);
|
|
408
|
+
return out;
|
|
409
|
+
};
|
|
410
|
+
fieldDefs = fieldDefs.map((f) => {
|
|
411
|
+
const out = normalizeFieldDef(f);
|
|
412
|
+
// DetailTable 子字段同样归一化:之前只转顶层,子表 Select 用 options 简写时
|
|
308
413
|
// Step 7b 找不到 fieldOptions,子表选项配不上(布局 + 选项配置两处都依赖 fieldOptions)
|
|
309
414
|
if (out.componentKey === 'DetailTable' && Array.isArray(out.formFields)) {
|
|
310
|
-
out.formFields = out.formFields.map((sf) =>
|
|
311
|
-
const so = { ...sf };
|
|
312
|
-
if (so.componentKey)
|
|
313
|
-
so.componentKey = canonComponentKey(so.componentKey);
|
|
314
|
-
if (Array.isArray(so.options) && !so.fieldOptions) {
|
|
315
|
-
so.fieldOptions = so.options.map((o) => typeof o === 'string' ? { name: o } : o);
|
|
316
|
-
}
|
|
317
|
-
return so;
|
|
318
|
-
});
|
|
415
|
+
out.formFields = out.formFields.map((sf) => normalizeFieldDef(sf));
|
|
319
416
|
}
|
|
320
417
|
return out;
|
|
321
418
|
});
|
|
@@ -1551,8 +1648,9 @@ export function registerFormCommands(program) {
|
|
|
1551
1648
|
catch { /* 读不到字段则公式会报"引用字段不存在" */ }
|
|
1552
1649
|
for (const fd of formulaDefs) {
|
|
1553
1650
|
try {
|
|
1651
|
+
// formula 写字符串时**不再默认 Number** —— 返回类型留空,由下面按目标字段类型推断。
|
|
1554
1652
|
const formula = (typeof fd.formula === 'string')
|
|
1555
|
-
? { expression: fd.formula
|
|
1653
|
+
? { expression: fd.formula }
|
|
1556
1654
|
: (fd.formula || {});
|
|
1557
1655
|
const expression = formula.expression || formula.formulaExpress || '';
|
|
1558
1656
|
if (!expression) {
|
|
@@ -1573,52 +1671,25 @@ export function registerFormCommands(program) {
|
|
|
1573
1671
|
continue;
|
|
1574
1672
|
}
|
|
1575
1673
|
const targetFieldId = String(targetField.fieldId);
|
|
1576
|
-
//
|
|
1577
|
-
//
|
|
1578
|
-
|
|
1579
|
-
const
|
|
1580
|
-
|
|
1581
|
-
|
|
1582
|
-
|
|
1583
|
-
const field = rm[2].trim();
|
|
1584
|
-
refNames.push({ table, field });
|
|
1585
|
-
}
|
|
1586
|
-
const parameters = [];
|
|
1587
|
-
let refMissing = false;
|
|
1588
|
-
for (const ref of refNames) {
|
|
1589
|
-
let rf;
|
|
1590
|
-
if (ref.table === '主表') {
|
|
1591
|
-
rf = allFields.find((f) => f.fieldName === ref.field || f.title === ref.field || String(f.fieldId) === ref.field);
|
|
1592
|
-
}
|
|
1593
|
-
else {
|
|
1594
|
-
const dt = detailFields.find((d) => d.name === ref.table || String(d.id) === ref.table);
|
|
1595
|
-
rf = dt && (dt.fields || []).find((f) => f.fieldName === ref.field || String(f.fieldId) === ref.field);
|
|
1596
|
-
}
|
|
1597
|
-
if (!rf) {
|
|
1598
|
-
console.error(` ⚠ 公式引用字段不存在: ${ref.table}.${ref.field}`);
|
|
1599
|
-
refMissing = true;
|
|
1600
|
-
break;
|
|
1601
|
-
}
|
|
1602
|
-
const param = {
|
|
1603
|
-
fieldId: String(rf.fieldId), formId: resolvedFormId, module: 'ebuilderform',
|
|
1604
|
-
properKey: rf.fieldKey || rf.type || 'Text', title: rf.title || rf.fieldName,
|
|
1605
|
-
name: rf.fieldName || rf.title, appId, id: null,
|
|
1606
|
-
};
|
|
1607
|
-
if (ref.table !== '主表') {
|
|
1608
|
-
const dt = detailFields.find((d) => d.name === ref.table || String(d.id) === ref.table);
|
|
1609
|
-
if (dt) {
|
|
1610
|
-
param.sFormId = String(dt.id);
|
|
1611
|
-
param.sFormName = dt.name;
|
|
1612
|
-
}
|
|
1613
|
-
}
|
|
1614
|
-
parameters.push(param);
|
|
1615
|
-
}
|
|
1616
|
-
if (refMissing)
|
|
1674
|
+
// 引用解析与归一化**统一走 services/formula-detail.ts**,与 `form formula set` 同一套:
|
|
1675
|
+
// 两种写法都收(`{主表.x}` 与编辑器里的 `[x]`),方括号一律归一化成花括号再存 ——
|
|
1676
|
+
// 方括号直接下发会「保存成功但字段没接上」;参数按出现位置逐个给,不去重。
|
|
1677
|
+
const parsed = await buildFormulaParameters(client, baseUrl, objId, appId, resolvedFormId, expression);
|
|
1678
|
+
if (parsed.errors.length > 0) {
|
|
1679
|
+
for (const e of parsed.errors)
|
|
1680
|
+
console.error(` ⚠ ${e}`);
|
|
1617
1681
|
continue;
|
|
1682
|
+
}
|
|
1683
|
+
for (const w of parsed.warnings)
|
|
1684
|
+
console.error(` ⚠ ${w}`);
|
|
1685
|
+
const parameters = parsed.parameters;
|
|
1618
1686
|
const formulaName = formula.name || `公式_${fd.fieldName}`;
|
|
1619
1687
|
const savePayload = {
|
|
1620
|
-
expressSql:
|
|
1621
|
-
|
|
1688
|
+
expressSql: parsed.normalizedExpression, name: formulaName, parameters,
|
|
1689
|
+
// 返回类型:显式给了就用,否则按目标字段类型推断。此前一律 Number,
|
|
1690
|
+
// 给文本/日期字段挂公式必被平台拒(「公式计算结果必须为: 数字」)。
|
|
1691
|
+
returnType: formula.returnType || defaultReturnType(targetField.fieldKey || targetField.type),
|
|
1692
|
+
validateType: 'normal',
|
|
1622
1693
|
referenceType: 'assign',
|
|
1623
1694
|
extendParam: JSON.stringify({ exceptIds: targetFieldId, createType: 'once' }),
|
|
1624
1695
|
formulaId: null, dataSources: [], formulaType: 'normal',
|
|
@@ -2043,14 +2114,16 @@ export function registerFormCommands(program) {
|
|
|
2043
2114
|
.option('--sform-id <id>', '关联的目标表单 objId(仅 EBuilder 类型)')
|
|
2044
2115
|
.option('--data-title <field>', '目标表单的显示字段名(仅 EBuilder;缺省 name=目标表含"名称"的字段,无则第一个业务字段)')
|
|
2045
2116
|
.option('--form-name <name>', '目标表单名称(仅 EBuilder 类型,可选)')
|
|
2046
|
-
.option('--browser-type <type>', '
|
|
2117
|
+
.option('--browser-type <type>', `通用浏览类型:${BROWSER_KINDS.join('、')}`)
|
|
2047
2118
|
.option('--browser-form-source <source>', '表单浏览数据源:business 或 ebuilder(仅 --browser-type form)')
|
|
2048
2119
|
.option('--format <fmt>', '日期精度格式(Date/DateTime/DateRange),如 yyyy-MM-dd、yyyy-MM-dd HH:mm')
|
|
2049
2120
|
.option('--min-field <field>', 'Date/DateTime 日期限制:最早不得早于该字段(字段名,min.dateField)')
|
|
2050
2121
|
.option('--max-field <field>', 'Date/DateTime 日期限制:最晚不得晚于该字段(字段名,max.dateField)')
|
|
2051
2122
|
.option('--precision <n>', '小数位数(Number/Money 类型,缺省 Number=0 整数、Money=2、百分比=1)')
|
|
2052
2123
|
.option('--percent', 'Number 百分比显示(numberType=percentage)')
|
|
2053
|
-
.option('--default <value>', '
|
|
2124
|
+
.option('--default <value>', '默认值(Text / TextArea / Number / Money,如 工时单价默认 1000)')
|
|
2125
|
+
.option('--data-key <key>', '数据库字段名(默认按字段名生成拼音;字母数字下划线,不以数字开头)')
|
|
2126
|
+
.option('--desc <text>', '字段描述(设计器字段属性里的「描述」)')
|
|
2054
2127
|
.option('--delimiter', 'Number/Money 千分位(Money 默认开,--no-delimiter 关闭)')
|
|
2055
2128
|
.option('--capital', 'Number/Money 大写金额显示')
|
|
2056
2129
|
.option('--sub-form-id <id>', '明细表 subFormId(在指定明细表里加字段)')
|
|
@@ -2062,6 +2135,9 @@ export function registerFormCommands(program) {
|
|
|
2062
2135
|
// fieldType 大小写归一(与建表一致):用户常传 "Textarea"/"Ebuilder",不归一则 type 存小写
|
|
2063
2136
|
// "Textarea"(FLOW 渲染异常)、TextArea 分支漏跑。
|
|
2064
2137
|
fieldType = canonComponentKey(fieldType);
|
|
2138
|
+
// 先本地拦错类型:否则会直送服务器,换回一段 Java 异常(ComponentType.name() ... null),
|
|
2139
|
+
// 既看不出哪错了也看不出该填什么。
|
|
2140
|
+
assertFieldType(fieldType, 'add-field ');
|
|
2065
2141
|
const opts = program.opts();
|
|
2066
2142
|
const auth = await AuthSession.fromOptions(opts);
|
|
2067
2143
|
if (!auth)
|
|
@@ -2100,18 +2176,19 @@ export function registerFormCommands(program) {
|
|
|
2100
2176
|
dataKey: colName,
|
|
2101
2177
|
columnName: colName,
|
|
2102
2178
|
};
|
|
2103
|
-
// 明细表字段:--sub-form-id 时
|
|
2179
|
+
// 明细表字段:--sub-form-id 时 jsonObj 带 subFormId —— **字段落点由它决定**。
|
|
2180
|
+
// 必须用 resolveDetailTable 而不是直接查 getEbField:后者列不出空明细表,
|
|
2181
|
+
// 用户把明细字段删光后就再也加不回去(详见 services/form-sub-detail.ts)。
|
|
2104
2182
|
if (cmdOpts.subFormId) {
|
|
2105
|
-
const
|
|
2106
|
-
|
|
2107
|
-
|
|
2108
|
-
console.error(`未找到明细表 subFormId=${cmdOpts.subFormId}`);
|
|
2183
|
+
const sub = await resolveDetailTable(client, baseUrl, appId, objId, formId, cmdOpts.subFormId);
|
|
2184
|
+
if (!sub) {
|
|
2185
|
+
console.error(`未找到明细表 subFormId=${cmdOpts.subFormId}(getEbField 与 querySubForms 均无此表,请确认 id)`);
|
|
2109
2186
|
process.exit(1);
|
|
2110
2187
|
}
|
|
2111
2188
|
Object.assign(jsonObj, { subFormId: cmdOpts.subFormId });
|
|
2112
|
-
|
|
2113
|
-
if (
|
|
2114
|
-
jsonObj.formTableId =
|
|
2189
|
+
// 空表拿不到物理表 id,保持主表的值不动:实测带主表 formTableId 一样落进明细表。
|
|
2190
|
+
if (sub.formTableId)
|
|
2191
|
+
jsonObj.formTableId = sub.formTableId;
|
|
2115
2192
|
}
|
|
2116
2193
|
// 富组件:映射到平台真实 type/componentKey + 附加配置(对齐 batch/save/formField 抓包)。
|
|
2117
2194
|
// 之前 jsonObj 只有 type 没有 componentKey → 平台 FormFieldDto.getComponentKey() 为 null → NPE。
|
|
@@ -2440,6 +2517,21 @@ export function registerFormCommands(program) {
|
|
|
2440
2517
|
console.error('提示:模板下拉当前按单选(currentLevel=1)绑定;多选+模板组合未验证');
|
|
2441
2518
|
}
|
|
2442
2519
|
}
|
|
2520
|
+
// 默认值 / 数据库字段名 / 描述:与 edit-field 共用同一套补丁规则。
|
|
2521
|
+
// 放在最后 —— 前面各类型分支会写 content(如 TextArea 恒置 ''),先打补丁会被冲掉。
|
|
2522
|
+
const patch = applyFieldPatches(jsonObj, {
|
|
2523
|
+
defaultValue: cmdOpts.default,
|
|
2524
|
+
dataKey: cmdOpts.dataKey,
|
|
2525
|
+
desc: cmdOpts.desc,
|
|
2526
|
+
});
|
|
2527
|
+
if (patch.errors.length > 0) {
|
|
2528
|
+
for (const e of patch.errors)
|
|
2529
|
+
console.error(` ❌ ${e}`);
|
|
2530
|
+
console.error(' 已中止,未做任何改动。');
|
|
2531
|
+
process.exit(1);
|
|
2532
|
+
}
|
|
2533
|
+
for (const w of patch.warnings)
|
|
2534
|
+
console.error(` ⚠ ${w}`);
|
|
2443
2535
|
const payload = {
|
|
2444
2536
|
formId, module: 'ebuilderform',
|
|
2445
2537
|
customParam: { appId, objId },
|
|
@@ -2449,26 +2541,13 @@ export function registerFormCommands(program) {
|
|
|
2449
2541
|
if (data?.code === 200 && data?.status) {
|
|
2450
2542
|
const msg = opts.json ? JSON.stringify({ fieldId, fieldName }) : `字段已添加: ${fieldName} (fieldId=${fieldId})`;
|
|
2451
2543
|
console.log(msg);
|
|
2452
|
-
//
|
|
2453
|
-
//
|
|
2544
|
+
// 关联浏览弹窗显示列:新建的 EBuilder 字段自动配 ffDisplayColumns = 目标表业务字段(去系统字段,最多 5 个)。
|
|
2545
|
+
// 直接带 ffDisplayColumns 进 jsonObj 不落库,需 getFormField 完整配置 + 单独 save。
|
|
2454
2546
|
if (fieldType === 'EBuilder' && sformId) {
|
|
2455
2547
|
try {
|
|
2456
|
-
const
|
|
2457
|
-
|
|
2458
|
-
|
|
2459
|
-
// 默认显示列最多 5 个(去系统字段后取前 5 个业务字段)
|
|
2460
|
-
const bizCols = (tfd?.data?.mainFields || [])
|
|
2461
|
-
.filter((f) => /^\d+$/.test(String(f.fieldId)))
|
|
2462
|
-
.map((f) => ({ id: String(f.fieldId), name: String(f.fieldName || f.title || '') }))
|
|
2463
|
-
.slice(0, 5);
|
|
2464
|
-
if (bizCols.length) {
|
|
2465
|
-
const gf = await client.post(`${baseUrl}/api/ebuilder/form/form/field/manage/getFormField`, { module: 'ebuilderform', formTableField: { formField: { id: fieldId, form: { id: formId } } } }, { ebbusinessid: formId });
|
|
2466
|
-
const full = gf?.data || {};
|
|
2467
|
-
if (full.fieldId) {
|
|
2468
|
-
await client.post(`${baseUrl}/api/ebuilder/form/form/field/manage/saveFormFieldNew?apid=${appId}`, { formId, module: 'ebuilderform', customParam: { appId, objId }, jsonObj: JSON.stringify({ ...full, ffDisplayColumns: bizCols }) }, { ebbusinessid: formId });
|
|
2469
|
-
console.error(` 关联显示列已自动配置 (${bizCols.length} 列)`);
|
|
2470
|
-
}
|
|
2471
|
-
}
|
|
2548
|
+
const applied = await ensureDisplayColumns(client, baseUrl, appId, objId, formId, fieldId, sformId, auth.userId, auth.tenantKey);
|
|
2549
|
+
if (applied)
|
|
2550
|
+
console.error(` 关联显示列已自动配置 (${applied} 列)`);
|
|
2472
2551
|
}
|
|
2473
2552
|
catch (e) {
|
|
2474
2553
|
console.error(` 关联显示列设置失败: ${e.message}`);
|
|
@@ -2564,6 +2643,8 @@ export function registerFormCommands(program) {
|
|
|
2564
2643
|
.argument('<appId>', '应用 ID')
|
|
2565
2644
|
.argument('<fieldId>', '字段 ID')
|
|
2566
2645
|
.option('--title <title>', '修改字段标题')
|
|
2646
|
+
.option('--type <type>', '修改字段类型(如 Text/Number/Date/Select/Department;取值同 form add-field 的 <fieldType>)。'
|
|
2647
|
+
+ '⚠ 字段已有数据时平台会拒绝')
|
|
2567
2648
|
.option('--required', '设为必填')
|
|
2568
2649
|
.option('--no-required', '取消必填')
|
|
2569
2650
|
.option('--sform-id <id>', 'EBuilder 关联的目标表单 objId(更新关联)')
|
|
@@ -2573,6 +2654,11 @@ export function registerFormCommands(program) {
|
|
|
2573
2654
|
.option('--relate-from-source <fieldId>', '目标表单源字段 fieldId(复制哪个字段的值)')
|
|
2574
2655
|
.option('--multiple', '设为多选(人员/部门/EBuilder/关联类字段)')
|
|
2575
2656
|
.option('--no-multiple', '设为单选(人员/部门/EBuilder/关联类字段)')
|
|
2657
|
+
.option('--max-len <n>', '最大长度(正整数)。日期/时间/省市区/身份证/电子发票/下拉多选这几类没有该属性')
|
|
2658
|
+
.option('--default <value>', '默认值(Text / TextArea / Number / Money)')
|
|
2659
|
+
.option('--clear-default', '清空默认值')
|
|
2660
|
+
.option('--data-key <key>', '数据库字段名(同时改 dataKey 与 columnName;字段已有数据时平台会拒绝)')
|
|
2661
|
+
.option('--desc <text>', '字段描述(设计器字段属性里的「描述」)')
|
|
2576
2662
|
.action(async (objId, appId, fieldId, editOpts) => {
|
|
2577
2663
|
const opts = program.opts();
|
|
2578
2664
|
const auth = await AuthSession.fromOptions(opts);
|
|
@@ -2609,48 +2695,35 @@ export function registerFormCommands(program) {
|
|
|
2609
2695
|
}
|
|
2610
2696
|
// Get formTableId for the payload
|
|
2611
2697
|
const formTableId = formInfo?.formTableId || '';
|
|
2612
|
-
//
|
|
2613
|
-
//
|
|
2614
|
-
|
|
2615
|
-
|
|
2616
|
-
|
|
2617
|
-
|
|
2618
|
-
|
|
2619
|
-
|
|
2620
|
-
|
|
2621
|
-
|
|
2622
|
-
|
|
2623
|
-
|
|
2624
|
-
|
|
2625
|
-
|
|
2626
|
-
|
|
2627
|
-
|
|
2628
|
-
|
|
2629
|
-
|
|
2630
|
-
|
|
2631
|
-
|
|
2632
|
-
|
|
2633
|
-
|
|
2634
|
-
|
|
2635
|
-
|
|
2636
|
-
|
|
2637
|
-
|
|
2638
|
-
|
|
2639
|
-
|
|
2640
|
-
|
|
2641
|
-
// 中文/空 columnName(getFields 对 EBuilder 不返回 columnName):用拼音首字母,
|
|
2642
|
-
// 不用 fld_<id>(否则物理列变 fld_xxx,破坏"数据库字段名=首字母拼音"约定)
|
|
2643
|
-
colName = toColumnName(String(gf?.fieldName || '')) || 'fld_' + fieldId.slice(-8);
|
|
2644
|
-
}
|
|
2645
|
-
jsonObj = {
|
|
2646
|
-
type: gf?.fieldKey || gf?.fieldType || 'Text',
|
|
2647
|
-
title: gf?.fieldName || '',
|
|
2648
|
-
fieldId, formId, groupId: '-1',
|
|
2649
|
-
formTableId: gf?.formTableId || formTableId,
|
|
2650
|
-
showOrder: '0.00',
|
|
2651
|
-
dataKey: colName, columnName: colName,
|
|
2652
|
-
optionSerials: [],
|
|
2653
|
-
};
|
|
2698
|
+
// 读当前字段配置,作为**写回基底**。
|
|
2699
|
+
// `saveFormFieldNew` 是全量覆盖:没带上的键会被服务端按默认值重置,所以基底必须尽量完整。
|
|
2700
|
+
// `getFormFieldPage` 返回的是**扁平记录**(属性直接铺平,没有嵌套 jsonObj),
|
|
2701
|
+
// 它本身就是该字段的属性集 —— 判定逻辑见 services/form-edit-base.ts。
|
|
2702
|
+
// **读不到就中止**,绝不用 getFields 拼一个最小定义顶上(那会把真实类型改成 Text)。
|
|
2703
|
+
const pageRecords = await fetchFieldPageRecords(client, baseUrl, appId, formId).catch(() => null);
|
|
2704
|
+
const baseResult = resolveEditBasePure(pageRecords, fieldId);
|
|
2705
|
+
if (!baseResult.ok) {
|
|
2706
|
+
const seen = await peekViaGetFields(client, baseUrl, resolvedObjId, fieldId, auth);
|
|
2707
|
+
console.error(`${describeEditBaseFailure(baseResult, fieldId)},已中止,未做任何改动。`);
|
|
2708
|
+
if (seen) {
|
|
2709
|
+
console.error(` getFields 里它被报成 type=${seen.fieldKey || seen.fieldType || '?'}` +
|
|
2710
|
+
`${seen.fieldName ? `(${seen.fieldName})` : ''} —— 这是粗粒度信息,` +
|
|
2711
|
+
'拿它回写会把真实类型改掉,所以 CLI 不这么做。');
|
|
2712
|
+
}
|
|
2713
|
+
console.error(' 该字段的类型可能是 CLI 暂不支持的(如「文档赋权对象」),请在表单设计器里维护。');
|
|
2714
|
+
process.exit(1);
|
|
2715
|
+
}
|
|
2716
|
+
const jsonObj = baseResult.base;
|
|
2717
|
+
if (pageRecords) {
|
|
2718
|
+
const rec = pageRecords.find((r) => String(r?.fieldId) === String(fieldId));
|
|
2719
|
+
if (rec?.formId)
|
|
2720
|
+
formId = rec.formId;
|
|
2721
|
+
}
|
|
2722
|
+
// 写回前的最后一道闸:没有 type 就绝不落库。
|
|
2723
|
+
// saveFormFieldNew 是全量覆盖,缺 type 会被服务端按默认类型(Text)补上。
|
|
2724
|
+
if (!jsonObj.type && !editOpts.type) {
|
|
2725
|
+
console.error(`读到的字段定义里没有 type(fieldId=${fieldId}),拒绝写回 —— 全量覆盖会把它改成默认类型。`);
|
|
2726
|
+
process.exit(1);
|
|
2654
2727
|
}
|
|
2655
2728
|
// 兜底补 componentKey:saveFormFieldNew 要求(getComponentKey() 为 null 会 NPE)。
|
|
2656
2729
|
// getFields 兜底路径建不出 componentKey,这里按类型映射补上。
|
|
@@ -2667,6 +2740,54 @@ export function registerFormCommands(program) {
|
|
|
2667
2740
|
if (editOpts.title) {
|
|
2668
2741
|
jsonObj.title = editOpts.title;
|
|
2669
2742
|
}
|
|
2743
|
+
// Apply type change(改字段类型)。
|
|
2744
|
+
// 平台走的就是这个接口:读回字段 jsonObj → 改 `type` → 原样回写,不需要删字段重建。
|
|
2745
|
+
// `type` 取值与 add-field 一致(CLI 规范名;富组件换成 platformType + componentKey),
|
|
2746
|
+
// 回读时对应显示为 `form read` 的 fieldKey(如 Number→NumberComponent)。
|
|
2747
|
+
// ⚠ 字段**已存在数据**时平台会拒绝改结构(报「此列已存在数据不可修改数据库字段名称」)。
|
|
2748
|
+
if (editOpts.type) {
|
|
2749
|
+
const targetType = canonComponentKey(editOpts.type);
|
|
2750
|
+
assertFieldType(targetType, 'edit-field ');
|
|
2751
|
+
// 关联类字段必须同时给目标表单,否则切出来的是个指不到东西的残缺字段
|
|
2752
|
+
if (['EBuilder', 'Flow'].includes(targetType) && !editOpts.sformId && targetType !== String(jsonObj.type)) {
|
|
2753
|
+
console.error(`改成 ${targetType} 需要同时指定 --sform-id <目标表 objId>(Flow 用流程绑定的表单 objId)`);
|
|
2754
|
+
process.exit(1);
|
|
2755
|
+
}
|
|
2756
|
+
if (targetType !== String(jsonObj.type)) {
|
|
2757
|
+
const richTarget = getRichType(targetType);
|
|
2758
|
+
jsonObj.type = richTarget ? richTarget.platformType : targetType;
|
|
2759
|
+
if (richTarget)
|
|
2760
|
+
jsonObj.componentKey = richTarget.platformComponentKey;
|
|
2761
|
+
// 旧类型残留的组件键会在回读时盖过新类型,清掉让平台按新 type 推导
|
|
2762
|
+
else
|
|
2763
|
+
delete jsonObj.componentKey;
|
|
2764
|
+
// 富组件还要补**附加配置**,否则改出来的字段是残缺的:
|
|
2765
|
+
// add-field 走的是同一张表的 build(),两边不一致会导致「新建的对、改类型的错」
|
|
2766
|
+
// (实测 Time:改出来缺 minuteStep/timePanelStyle/defaultExtend,earlyDate/lateDate
|
|
2767
|
+
// 还被平台兜底成 false,等于把时间选择器的可选范围锁死)。
|
|
2768
|
+
if (richTarget?.build) {
|
|
2769
|
+
const extra = richIdUnits(targetType, {}) - 1;
|
|
2770
|
+
let extraIds = [];
|
|
2771
|
+
if (extra > 0) {
|
|
2772
|
+
const extraRes = await client.post(`${baseUrl}/api/form/local/generatorIds?size=${extra}&apid=${appId}`, {});
|
|
2773
|
+
extraIds = (extraRes?.data?.generatorIds || []).map(String);
|
|
2774
|
+
}
|
|
2775
|
+
const extraCfg = await richTarget.build({
|
|
2776
|
+
// edit-field 没有 --format / --browser-* 选项:能带的只有 multiple,
|
|
2777
|
+
// 其余交给富组件模板的默认值(与 add-field 缺省时同一套默认)。
|
|
2778
|
+
def: { multiple: editOpts.multiple },
|
|
2779
|
+
fieldId,
|
|
2780
|
+
formId,
|
|
2781
|
+
formTableId,
|
|
2782
|
+
dataKey: String(jsonObj.dataKey || jsonObj.columnName || ''),
|
|
2783
|
+
columnName: String(jsonObj.columnName || jsonObj.dataKey || ''),
|
|
2784
|
+
showOrder: String(jsonObj.showOrder ?? '0.00'),
|
|
2785
|
+
extraIds,
|
|
2786
|
+
});
|
|
2787
|
+
Object.assign(jsonObj, extraCfg);
|
|
2788
|
+
}
|
|
2789
|
+
}
|
|
2790
|
+
}
|
|
2670
2791
|
// Apply required
|
|
2671
2792
|
if (editOpts.required) {
|
|
2672
2793
|
jsonObj.required = true;
|
|
@@ -2808,6 +2929,23 @@ export function registerFormCommands(program) {
|
|
|
2808
2929
|
};
|
|
2809
2930
|
}
|
|
2810
2931
|
}
|
|
2932
|
+
// 长度 / 默认值 / 数据库字段名 / 描述:共用一套补丁规则(哪些类型适用、取值边界)。
|
|
2933
|
+
// 放在类型变更之后 —— 改完 type 才知道该不该放行 maxLen 这类按类型受限的属性。
|
|
2934
|
+
const patch = applyFieldPatches(jsonObj, {
|
|
2935
|
+
maxLen: editOpts.maxLen,
|
|
2936
|
+
defaultValue: editOpts.default,
|
|
2937
|
+
clearDefault: editOpts.clearDefault,
|
|
2938
|
+
dataKey: editOpts.dataKey,
|
|
2939
|
+
desc: editOpts.desc,
|
|
2940
|
+
});
|
|
2941
|
+
if (patch.errors.length > 0) {
|
|
2942
|
+
for (const e of patch.errors)
|
|
2943
|
+
console.error(` ❌ ${e}`);
|
|
2944
|
+
console.error(' 已中止,未做任何改动。');
|
|
2945
|
+
process.exit(1);
|
|
2946
|
+
}
|
|
2947
|
+
for (const w of patch.warnings)
|
|
2948
|
+
console.error(` ⚠ ${w}`);
|
|
2811
2949
|
const payload = {
|
|
2812
2950
|
formId, module: 'ebuilderform',
|
|
2813
2951
|
customParam: { appId, objId: resolvedObjId },
|
|
@@ -2818,6 +2956,8 @@ export function registerFormCommands(program) {
|
|
|
2818
2956
|
const changes = [];
|
|
2819
2957
|
if (editOpts.title)
|
|
2820
2958
|
changes.push(`title="${editOpts.title}"`);
|
|
2959
|
+
if (editOpts.type)
|
|
2960
|
+
changes.push(`type=${editOpts.type}`);
|
|
2821
2961
|
if (editOpts.required)
|
|
2822
2962
|
changes.push('required');
|
|
2823
2963
|
if (editOpts.noRequired)
|
|
@@ -2830,6 +2970,23 @@ export function registerFormCommands(program) {
|
|
|
2830
2970
|
changes.push(`relateFrom ${editOpts.relateFrom}→${editOpts.relateFromSource || ''}`);
|
|
2831
2971
|
if (editOpts.multiple !== undefined)
|
|
2832
2972
|
changes.push(editOpts.multiple ? 'multiple' : '!multiple');
|
|
2973
|
+
changes.push(...patch.applied);
|
|
2974
|
+
// EBuilder 字段的浏览显示列:add-field 建出来的会自动配,edit-field 改出来的此前漏了这一步
|
|
2975
|
+
// —— 字段能建出来,但浏览弹窗回落平台默认列,会把目标表的系统字段也列出来。
|
|
2976
|
+
// ensureDisplayColumns 只在「没配过」或「旧列对不上当前目标表」时才写,不会冲掉手工配好的列。
|
|
2977
|
+
if (['EBuilder', 'Ebuilder'].includes(String(jsonObj.type))) {
|
|
2978
|
+
const targetId = String(jsonObj.sformId || '');
|
|
2979
|
+
if (targetId) {
|
|
2980
|
+
try {
|
|
2981
|
+
const applied = await ensureDisplayColumns(client, baseUrl, appId, objId, formId, fieldId, targetId, auth.userId, auth.tenantKey);
|
|
2982
|
+
if (applied)
|
|
2983
|
+
changes.push(`浏览显示列=${applied}列`);
|
|
2984
|
+
}
|
|
2985
|
+
catch (e) {
|
|
2986
|
+
console.error(` 警告: 浏览显示列设置失败(字段本身已改好): ${e.message}`);
|
|
2987
|
+
}
|
|
2988
|
+
}
|
|
2989
|
+
}
|
|
2833
2990
|
const msg = opts.json ? JSON.stringify({ fieldId, changes }) : `字段已更新: ${fieldId} (${changes.join(', ') || 'no changes'})`;
|
|
2834
2991
|
console.log(msg);
|
|
2835
2992
|
}
|
|
@@ -2859,6 +3016,76 @@ export function registerFormCommands(program) {
|
|
|
2859
3016
|
process.exit(1);
|
|
2860
3017
|
}
|
|
2861
3018
|
});
|
|
3019
|
+
form.command('delete-field')
|
|
3020
|
+
.description('删除表单字段(可批量)。**仍被表单布局引用的字段删不掉**,需先从布局移除')
|
|
3021
|
+
.argument('<objId>', '表单 objId')
|
|
3022
|
+
.argument('<appId>', '应用 ID')
|
|
3023
|
+
.argument('<fieldIds...>', '字段 ID(可多个,一次批量删)')
|
|
3024
|
+
.option('--force', '字段仍被布局引用时,先从布局移除再删(写操作,失败会中止)')
|
|
3025
|
+
.action(async (objId, appId, fieldIds, cmdOpts) => {
|
|
3026
|
+
const opts = program.opts();
|
|
3027
|
+
const auth = await AuthSession.fromOptions(opts);
|
|
3028
|
+
if (!auth)
|
|
3029
|
+
process.exit(1);
|
|
3030
|
+
const client = new ApiClient(auth);
|
|
3031
|
+
const baseUrl = auth.getBaseUrl();
|
|
3032
|
+
const formList = await client.get(`${baseUrl}/api/bs/ebuilder/form/obj/getList/${appId}?apid=${appId}`, { ebbusinessid: appId });
|
|
3033
|
+
const formInfo = (formList?.data || []).find((f) => String(f.id) === String(objId));
|
|
3034
|
+
const formId = formInfo?.formId || '';
|
|
3035
|
+
if (!formId) {
|
|
3036
|
+
console.error('无法获取 formId,请确认 objId 和 appId 正确');
|
|
3037
|
+
process.exit(1);
|
|
3038
|
+
}
|
|
3039
|
+
const del = async (ids) => client.post(`${baseUrl}/api/ebuilder/form/form/field/manage/batchDeleteFormField?apid=${appId}`, { module: 'ebuilderform', formId, ids, customParam: { appId, objId } }, { ebbusinessid: formId });
|
|
3040
|
+
let res = await del(fieldIds);
|
|
3041
|
+
// 被布局引用的字段平台拒删。--force 时先从布局摘掉这些组件再重试。
|
|
3042
|
+
// 布局的读/存沿用 form-layout.ts 那套已验证的端点(getFormLayout + saveFormAndLayout),不另造。
|
|
3043
|
+
if (cmdOpts.force && (res?.code !== 200 || !res?.status)) {
|
|
3044
|
+
const layoutRes = await client.post(`${baseUrl}/api/ebuilder/form/builder/getFormLayout`, {
|
|
3045
|
+
formId, module: 'ebuilderform', customParam: {}, formTableIdList: [],
|
|
3046
|
+
designerParam: { onlyLayout: false, convert: false }, form: { id: formId },
|
|
3047
|
+
}, { ebbusinessid: formId });
|
|
3048
|
+
if (layoutRes?.code !== 200 || !layoutRes?.status) {
|
|
3049
|
+
console.error(`读取布局失败,未继续删除: ${layoutRes?.msg || '未知错误'}`);
|
|
3050
|
+
process.exit(1);
|
|
3051
|
+
}
|
|
3052
|
+
const snapshot = layoutRes.data || {};
|
|
3053
|
+
const pageLayouts = snapshot.formLayout?.pageLayouts;
|
|
3054
|
+
if (!Array.isArray(pageLayouts)) {
|
|
3055
|
+
console.error('布局数据格式异常(无 formLayout.pageLayouts),未继续删除');
|
|
3056
|
+
process.exit(1);
|
|
3057
|
+
}
|
|
3058
|
+
// 摘组件(含「一个字段 = 本体 + 标题标签,靠 associatedId 配对」的坑)见
|
|
3059
|
+
// services/form-field-drop.ts,与流程表单侧共用。
|
|
3060
|
+
const removed = dropFieldComponents(pageLayouts, fieldIds);
|
|
3061
|
+
if (!removed) {
|
|
3062
|
+
console.error('布局里没找到这些字段的组件,无法自动移除;请到设计器里手动删除');
|
|
3063
|
+
process.exit(1);
|
|
3064
|
+
}
|
|
3065
|
+
const formLayout = prepareLayoutForSave(snapshot.formLayout, formId);
|
|
3066
|
+
const saveRes = await client.post(`${baseUrl}/api/ebuilder/form/builder/saveFormAndLayout`, {
|
|
3067
|
+
module: 'ebuilderform', customParam: {},
|
|
3068
|
+
designerParam: { onlyLayout: false, convert: false },
|
|
3069
|
+
form: JSON.parse(JSON.stringify(snapshot.form || {})), formLayout,
|
|
3070
|
+
}, { ebbusinessid: formId });
|
|
3071
|
+
if (saveRes?.code !== 200 || !saveRes?.status) {
|
|
3072
|
+
console.error(`从布局移除失败,未继续删除: ${saveRes?.msg || '未知错误'}`);
|
|
3073
|
+
process.exit(1);
|
|
3074
|
+
}
|
|
3075
|
+
console.error(` 已从布局移除 ${removed} 个组件`);
|
|
3076
|
+
res = await del(fieldIds);
|
|
3077
|
+
}
|
|
3078
|
+
if (res?.code === 200 && res?.status) {
|
|
3079
|
+
console.log(opts.json
|
|
3080
|
+
? JSON.stringify({ success: true, deleted: fieldIds })
|
|
3081
|
+
: `字段已删除: ${fieldIds.join(', ')}`);
|
|
3082
|
+
}
|
|
3083
|
+
else {
|
|
3084
|
+
console.error(`删除失败: ${res?.msg || '未知错误'}`);
|
|
3085
|
+
console.error(' 提示: 仍被表单布局引用的字段平台不允许删除,请先从布局移除(或加 --force 让 CLI 代做)');
|
|
3086
|
+
process.exit(1);
|
|
3087
|
+
}
|
|
3088
|
+
});
|
|
2862
3089
|
form.command('list-view')
|
|
2863
3090
|
.description('查看表单的台账/数据列表')
|
|
2864
3091
|
.argument('<objId>', '表单 objId')
|