@lovrabet/rabetbase-cli 2.3.16-beta.7 → 2.4.1
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 +4 -10
- package/lib/api/api-doc.js +1 -1
- package/lib/api/fetch-model-list.js +1 -1
- package/lib/api/generate-api-file.js +1 -1
- package/lib/auth/auth-server-ui.js +1 -1
- package/lib/auth/auth-server.js +1 -1
- package/lib/auth/constant.js +1 -1
- package/lib/auth/get-cookie.js +1 -1
- package/lib/auth/get-session-user.js +1 -1
- package/lib/auth/is-session-valid.js +1 -1
- package/lib/auth/login-success-html.js +1 -1
- package/lib/auth/logout.js +1 -1
- package/lib/cli-flags.js +1 -1
- package/lib/cli.js +1 -1
- package/lib/commands/api/generate.js +1 -1
- package/lib/commands/api/index.js +1 -1
- package/lib/commands/api/list.js +1 -1
- package/lib/commands/api/pull.js +1 -1
- package/lib/commands/api/shared.js +1 -1
- package/lib/commands/app/index.js +1 -1
- package/lib/commands/app/list.js +1 -1
- package/lib/commands/app/members-list.js +1 -1
- package/lib/commands/app/remote-directory.js +1 -1
- package/lib/commands/app/shared.js +1 -1
- package/lib/commands/app-config/delete.js +1 -1
- package/lib/commands/app-config/get.js +1 -1
- package/lib/commands/app-config/index.js +1 -1
- package/lib/commands/app-config/list.js +1 -1
- package/lib/commands/app-config/set.js +1 -1
- package/lib/commands/app-config/shared.js +1 -1
- package/lib/commands/auth/index.js +1 -1
- package/lib/commands/bff/create.js +1 -1
- package/lib/commands/bff/delete.js +1 -1
- package/lib/commands/bff/detail.js +1 -1
- package/lib/commands/bff/index.js +1 -1
- package/lib/commands/bff/list.js +1 -1
- package/lib/commands/bff/pull.js +1 -1
- package/lib/commands/bff/push.js +1 -1
- package/lib/commands/bff/status.js +1 -1
- package/lib/commands/cli-skill/index.js +1 -1
- package/lib/commands/cli-update.js +1 -1
- package/lib/commands/codegen/index.js +1 -1
- package/lib/commands/codegen/sdk.js +1 -1
- package/lib/commands/codegen/sql.js +1 -1
- package/lib/commands/common/app-registry.js +1 -1
- package/lib/commands/common/app-selector.js +1 -1
- package/lib/commands/common/async-task.js +1 -1
- package/lib/commands/common/dry-run.js +1 -1
- package/lib/commands/common/flags.js +1 -1
- package/lib/commands/common/local-file.js +1 -1
- package/lib/commands/common/validate.js +1 -1
- package/lib/commands/config/get.js +1 -1
- package/lib/commands/config/index.js +1 -1
- package/lib/commands/config/list.js +1 -1
- package/lib/commands/config/set.js +1 -1
- package/lib/commands/config/shared.js +1 -1
- package/lib/commands/data/filter.js +1 -1
- package/lib/commands/data/getOne.js +1 -1
- package/lib/commands/data/index.js +1 -1
- package/lib/commands/data/shared.js +1 -1
- package/lib/commands/dataset/business-group-update.js +1 -1
- package/lib/commands/dataset/capability.js +1 -1
- package/lib/commands/dataset/delete.js +1 -1
- package/lib/commands/dataset/detail.js +1 -1
- package/lib/commands/dataset/extend-update.js +1 -1
- package/lib/commands/dataset/field-update.js +1 -1
- package/lib/commands/dataset/generate.js +1 -1
- package/lib/commands/dataset/index.js +1 -1
- package/lib/commands/dataset/list.js +1 -1
- package/lib/commands/dataset/operations.js +1 -1
- package/lib/commands/dataset/relation-audit.js +1 -1
- package/lib/commands/dataset/relation-create.js +1 -1
- package/lib/commands/dataset/relation-delete.js +1 -1
- package/lib/commands/dataset/relation-shared.js +1 -1
- package/lib/commands/dataset/relation-update.js +1 -1
- package/lib/commands/dataset/relations.js +1 -1
- package/lib/commands/dataset/rename.js +1 -1
- package/lib/commands/dataset/restore.js +1 -1
- package/lib/commands/db/analysis-batching.js +1 -1
- package/lib/commands/db/analyze-batch-plan.js +1 -1
- package/lib/commands/db/analyze-cancel.js +1 -1
- package/lib/commands/db/analyze-start.js +1 -1
- package/lib/commands/db/analyze-status.js +1 -1
- package/lib/commands/db/create.js +1 -1
- package/lib/commands/db/delete.js +1 -1
- package/lib/commands/db/detail.js +1 -1
- package/lib/commands/db/diff.js +1 -1
- package/lib/commands/db/index.js +1 -1
- package/lib/commands/db/list.js +1 -1
- package/lib/commands/db/shared.js +1 -1
- package/lib/commands/db/tables.js +1 -1
- package/lib/commands/db/test.js +1 -1
- package/lib/commands/db/update.js +1 -1
- package/lib/commands/doctor.js +1 -1
- package/lib/commands/file/index.js +1 -1
- package/lib/commands/init/index.js +1 -1
- package/lib/commands/issue/index.js +1 -1
- package/lib/commands/issue/nudge.js +1 -1
- package/lib/commands/issue/report.js +1 -1
- package/lib/commands/issue/shared.js +1 -1
- package/lib/commands/kb/create.js +1 -1
- package/lib/commands/kb/delete.js +1 -1
- package/lib/commands/kb/detail.js +1 -1
- package/lib/commands/kb/index.js +1 -1
- package/lib/commands/kb/list.js +1 -1
- package/lib/commands/kb/shared.js +1 -1
- package/lib/commands/kb/update.js +1 -1
- package/lib/commands/logs/index.js +1 -1
- package/lib/commands/menu/asset-update.js +1 -1
- package/lib/commands/menu/delete.js +1 -1
- package/lib/commands/menu/external-link-create.js +1 -1
- package/lib/commands/menu/external-link-update.js +1 -1
- package/lib/commands/menu/group-create.js +1 -1
- package/lib/commands/menu/group-update.js +1 -1
- package/lib/commands/menu/index.js +1 -1
- package/lib/commands/menu/list.js +1 -1
- package/lib/commands/menu/move.js +1 -1
- package/lib/commands/menu/regroup-start.js +1 -1
- package/lib/commands/menu/rename.js +1 -1
- package/lib/commands/menu/shared/compare-table.js +1 -1
- package/lib/commands/menu/shared/delete-plan.js +1 -1
- package/lib/commands/menu/shared/facts.js +1 -1
- package/lib/commands/menu/shared/index.js +1 -1
- package/lib/commands/menu/shared/inquirer.js +1 -1
- package/lib/commands/menu/shared/local-pages.js +1 -1
- package/lib/commands/menu/shared/logic.js +1 -1
- package/lib/commands/menu/shared/mutations.js +1 -1
- package/lib/commands/menu/shared/service.js +1 -1
- package/lib/commands/menu/shared/sync-core.js +1 -1
- package/lib/commands/menu/shared/update-core.js +1 -1
- package/lib/commands/menu/shared/valid-url.js +1 -1
- package/lib/commands/menu/sync.js +1 -1
- package/lib/commands/notification/config-list.js +1 -1
- package/lib/commands/notification/index.js +1 -1
- package/lib/commands/ocr/index.js +1 -1
- package/lib/commands/page/generate-start.js +1 -1
- package/lib/commands/page/generate-status.js +1 -1
- package/lib/commands/page/index.js +1 -1
- package/lib/commands/page/pull.js +1 -1
- package/lib/commands/page/push.js +1 -1
- package/lib/commands/page/react/create.d.ts +2 -0
- package/lib/commands/page/react/create.js +1 -0
- package/lib/commands/page/react/detail.d.ts +2 -0
- package/lib/commands/page/react/detail.js +1 -0
- package/lib/commands/page/react/list.d.ts +2 -0
- package/lib/commands/page/react/list.js +1 -0
- package/lib/commands/page/react/publish.d.ts +2 -0
- package/lib/commands/page/react/publish.js +1 -0
- package/lib/commands/page/react/shared.d.ts +78 -0
- package/lib/commands/page/react/shared.js +1 -0
- package/lib/commands/page/react/syntax.d.ts +18 -0
- package/lib/commands/page/react/syntax.js +1 -0
- package/lib/commands/page/react/template.d.ts +8 -0
- package/lib/commands/page/react/template.js +1 -0
- package/lib/commands/page/react/update.d.ts +2 -0
- package/lib/commands/page/react/update.js +1 -0
- package/lib/commands/page/relation-audit.js +1 -1
- package/lib/commands/page/restore.js +1 -1
- package/lib/commands/page/shared.d.ts +1 -0
- package/lib/commands/page/shared.js +1 -1
- package/lib/commands/page/standard-page-status.js +1 -1
- package/lib/commands/page/sync.js +1 -1
- package/lib/commands/permit/index.js +1 -1
- package/lib/commands/permit/page-get.js +1 -1
- package/lib/commands/permit/page-set.js +1 -1
- package/lib/commands/permit/role-apis-set.js +1 -1
- package/lib/commands/permit/role-menus-set.js +1 -1
- package/lib/commands/permit/role-menus.js +1 -1
- package/lib/commands/permit/shared.js +1 -1
- package/lib/commands/project/create/enhanced-guided-create.js +1 -1
- package/lib/commands/project/create/format-elapsed.js +1 -1
- package/lib/commands/project/create/main.js +1 -1
- package/lib/commands/project/create/non-interactive.js +1 -1
- package/lib/commands/project/create/project-template-path.js +1 -1
- package/lib/commands/project/create/use-copy-project-template.js +1 -1
- package/lib/commands/project/create/use-format-code.js +1 -1
- package/lib/commands/project/create/use-install-dependencies.js +1 -1
- package/lib/commands/project/index.js +1 -1
- package/lib/commands/project/upgrade.js +1 -1
- package/lib/commands/registry.js +1 -1
- package/lib/commands/role/create.js +1 -1
- package/lib/commands/role/delete.js +1 -1
- package/lib/commands/role/detail.js +1 -1
- package/lib/commands/role/index.js +1 -1
- package/lib/commands/role/list.js +1 -1
- package/lib/commands/role/shared.js +1 -1
- package/lib/commands/role/update.js +1 -1
- package/lib/commands/role/user-add.js +1 -1
- package/lib/commands/role/user-remove.js +1 -1
- package/lib/commands/role/user-resolve.js +1 -1
- package/lib/commands/run/index.js +1 -1
- package/lib/commands/schema.js +1 -1
- package/lib/commands/sql/create.js +1 -1
- package/lib/commands/sql/delete.js +1 -1
- package/lib/commands/sql/detail.js +1 -1
- package/lib/commands/sql/exec.js +1 -1
- package/lib/commands/sql/index.js +1 -1
- package/lib/commands/sql/list.js +1 -1
- package/lib/commands/sql/pull.js +1 -1
- package/lib/commands/sql/push.js +1 -1
- package/lib/commands/sql/shared.js +1 -1
- package/lib/commands/sql/status.js +1 -1
- package/lib/commands/sql/validate.js +1 -1
- package/lib/commands/task/index.js +1 -1
- package/lib/commands/task/status.js +1 -1
- package/lib/commands/tenant/index.js +1 -1
- package/lib/commands/tenant/members-list.js +1 -1
- package/lib/commands/tenant/shared.js +1 -1
- package/lib/commands/user-account/dingding-sandbox-bind.d.ts +2 -0
- package/lib/commands/user-account/dingding-sandbox-bind.js +1 -0
- package/lib/commands/user-account/index.d.ts +2 -0
- package/lib/commands/user-account/index.js +1 -0
- package/lib/commands/workspace/add.js +1 -1
- package/lib/commands/workspace/index.js +1 -1
- package/lib/commands/workspace/remove.js +1 -1
- package/lib/config/schema.js +1 -1
- package/lib/constant/cdn.js +1 -1
- package/lib/constant/cli.js +1 -1
- package/lib/constant/defaults.js +1 -1
- package/lib/constant/domain.js +1 -1
- package/lib/constant/env.js +1 -1
- package/lib/constant/output.js +1 -1
- package/lib/constant/paths.js +1 -1
- package/lib/constant/risk.js +1 -1
- package/lib/context/app-resolver.js +1 -1
- package/lib/context/auth-resolver.js +1 -1
- package/lib/context/config-loader.js +1 -1
- package/lib/context.js +1 -1
- package/lib/core/alias-resolver.js +1 -1
- package/lib/core/api-client.d.ts +117 -0
- package/lib/core/api-client.js +1 -1
- package/lib/core/bff/config.js +1 -1
- package/lib/core/bff/file-system.js +1 -1
- package/lib/core/bff/hash.js +1 -1
- package/lib/core/bff/lock.js +1 -1
- package/lib/core/bff/utils.js +1 -1
- package/lib/core/db-resolver.js +1 -1
- package/lib/core/page/file-system.js +1 -1
- package/lib/core/page/hash.js +1 -1
- package/lib/core/page/lock.js +1 -1
- package/lib/core/sql-index-auditor.js +1 -1
- package/lib/core/sql-sync/config.js +1 -1
- package/lib/core/sql-sync/file-system.js +1 -1
- package/lib/core/sql-sync/hash.js +1 -1
- package/lib/core/sql-sync/lock.js +1 -1
- package/lib/core/sql-sync/utils.js +1 -1
- package/lib/core/sql-validator.js +1 -1
- package/lib/errors.js +1 -1
- package/lib/framework/build-all-flags.js +1 -1
- package/lib/framework/error-output.js +1 -1
- package/lib/framework/explicit-yes.js +1 -1
- package/lib/framework/flags.js +1 -1
- package/lib/framework/help.js +1 -1
- package/lib/framework/index.js +1 -1
- package/lib/framework/output.js +1 -1
- package/lib/framework/response.js +1 -1
- package/lib/framework/runner-alias.js +1 -1
- package/lib/framework/runner.js +1 -1
- package/lib/framework/schema-export.js +1 -1
- package/lib/framework/types.js +1 -1
- package/lib/generated/build-info.d.ts +4 -4
- package/lib/generated/build-info.js +1 -1
- package/lib/help.js +1 -1
- package/lib/postinstall.d.ts +3 -0
- package/lib/postinstall.js +1 -0
- package/lib/runtime/confirmation.js +1 -1
- package/lib/runtime/event.js +1 -1
- package/lib/runtime/index.js +1 -1
- package/lib/runtime/queue.js +1 -1
- package/lib/runtime/resolve.js +1 -1
- package/lib/skills/builtin-skill.d.ts +37 -0
- package/lib/skills/builtin-skill.js +1 -0
- package/lib/skills/main.js +1 -1
- package/lib/skills/npx-skills-add.d.ts +4 -2
- package/lib/skills/npx-skills-add.js +1 -1
- package/lib/skills/skill-presence.js +1 -1
- package/lib/telemetry/cli-command-trace.js +1 -1
- package/lib/telemetry/cli-help-trace.js +1 -1
- package/lib/telemetry/ensure-cli-otel-config.js +1 -1
- package/lib/telemetry/register-otel-exit-shutdown.js +1 -1
- package/lib/telemetry/send-cli-trace-log.js +1 -1
- package/lib/telemetry/send-platform-issue-collect-log.js +1 -1
- package/lib/utils/ai_config.js +1 -1
- package/lib/utils/apply-jq-filter.js +1 -1
- package/lib/utils/cdn-config.js +1 -1
- package/lib/utils/check-sdk-version.js +1 -1
- package/lib/utils/cli-version-check.js +1 -1
- package/lib/utils/cli-version-policy.js +1 -1
- package/lib/utils/config.js +1 -1
- package/lib/utils/copy-directory.js +1 -1
- package/lib/utils/entity-with-id.js +1 -1
- package/lib/utils/file-utils.js +1 -1
- package/lib/utils/guides-cdn.js +1 -1
- package/lib/utils/http-client.js +1 -1
- package/lib/utils/is-non-interactive.js +1 -1
- package/lib/utils/logger.js +1 -1
- package/lib/utils/params.js +1 -1
- package/lib/utils/platform.js +1 -1
- package/lib/utils/rules-cdn.js +1 -1
- package/lib/utils/sleep.js +1 -1
- package/lib/utils/template-replacer.js +1 -1
- package/lib/utils/update-notice.js +1 -1
- package/lib/utils/version.js +1 -1
- package/lib/utils/with-active-cookie.js +1 -1
- package/lib/utils/write-cli-side-channel.js +1 -1
- package/package.json +9 -3
- package/scripts/postinstall.mjs +24 -0
- package/skills/rabetbase/SKILL.md +493 -0
- package/skills/rabetbase/guides/backend-function.md +835 -0
- package/skills/rabetbase/guides/best-practices.md +137 -0
- package/skills/rabetbase/guides/bff-creation-workflow.md +148 -0
- package/skills/rabetbase/guides/conflict-detection.md +119 -0
- package/skills/rabetbase/guides/data-api-guidelines.md +414 -0
- package/skills/rabetbase/guides/database-connection-workflow.md +169 -0
- package/skills/rabetbase/guides/frontend-development.md +179 -0
- package/skills/rabetbase/guides/legacy-application-blueprint-workflow.md +495 -0
- package/skills/rabetbase/guides/menu-anomaly-manual-cleanup.md +137 -0
- package/skills/rabetbase/guides/page-development-workflow.md +187 -0
- package/skills/rabetbase/guides/react-custom-page-workflow.md +184 -0
- package/skills/rabetbase/guides/role-permit-workflow.md +127 -0
- package/skills/rabetbase/guides/sql-creation-workflow.md +173 -0
- package/skills/rabetbase/guides/sql-mybatis.md +126 -0
- package/skills/rabetbase/guides/troubleshooting.md +67 -0
- package/skills/rabetbase/guides/typescript-sdk.md +227 -0
- package/skills/rabetbase/knowledge/page-schema/LrSmartCreate.md +367 -0
- package/skills/rabetbase/knowledge/page-schema/LrSmartDetail.md +153 -0
- package/skills/rabetbase/knowledge/page-schema/LrSmartEcharts.md +291 -0
- package/skills/rabetbase/knowledge/page-schema/LrSmartFilter.md +478 -0
- package/skills/rabetbase/knowledge/page-schema/LrSmartJsx.md +119 -0
- package/skills/rabetbase/knowledge/page-schema/LrSmartStatistic.md +223 -0
- package/skills/rabetbase/knowledge/page-schema/LrSmartTable.md +632 -0
- package/skills/rabetbase/knowledge/page-schema/YtPage.md +172 -0
- package/skills/rabetbase/knowledge/page-schema/dataset-relations.md +126 -0
- package/skills/rabetbase/knowledge/page-schema/external-resources-usage.md +232 -0
- package/skills/rabetbase/knowledge/page-schema/field-components.md +312 -0
- package/skills/rabetbase/knowledge/page-schema/syntax-reference.md +278 -0
- package/skills/rabetbase/knowledge/react-page/components.md +225 -0
- package/skills/rabetbase/knowledge/react-page/generation-standards.md +385 -0
- package/skills/rabetbase/references/rabetbase-api-list.md +58 -0
- package/skills/rabetbase/references/rabetbase-api-pull.md +82 -0
- package/skills/rabetbase/references/rabetbase-app-config.md +95 -0
- package/skills/rabetbase/references/rabetbase-app-list.md +79 -0
- package/skills/rabetbase/references/rabetbase-app-members-list.md +64 -0
- package/skills/rabetbase/references/rabetbase-auth-login.md +53 -0
- package/skills/rabetbase/references/rabetbase-auth-logout.md +29 -0
- package/skills/rabetbase/references/rabetbase-bff-create.md +59 -0
- package/skills/rabetbase/references/rabetbase-bff-delete.md +42 -0
- package/skills/rabetbase/references/rabetbase-bff-detail.md +38 -0
- package/skills/rabetbase/references/rabetbase-bff-list.md +61 -0
- package/skills/rabetbase/references/rabetbase-bff-pull.md +42 -0
- package/skills/rabetbase/references/rabetbase-bff-push.md +65 -0
- package/skills/rabetbase/references/rabetbase-bff-save.md +63 -0
- package/skills/rabetbase/references/rabetbase-bff-status.md +37 -0
- package/skills/rabetbase/references/rabetbase-cli-skill-install.md +42 -0
- package/skills/rabetbase/references/rabetbase-codegen-sdk.md +35 -0
- package/skills/rabetbase/references/rabetbase-codegen-sql.md +33 -0
- package/skills/rabetbase/references/rabetbase-config.md +296 -0
- package/skills/rabetbase/references/rabetbase-dataset-business-group-update.md +84 -0
- package/skills/rabetbase/references/rabetbase-dataset-delete.md +54 -0
- package/skills/rabetbase/references/rabetbase-dataset-detail.md +106 -0
- package/skills/rabetbase/references/rabetbase-dataset-extend-update.md +70 -0
- package/skills/rabetbase/references/rabetbase-dataset-field-update.md +117 -0
- package/skills/rabetbase/references/rabetbase-dataset-generate.md +206 -0
- package/skills/rabetbase/references/rabetbase-dataset-list.md +42 -0
- package/skills/rabetbase/references/rabetbase-dataset-operations.md +34 -0
- package/skills/rabetbase/references/rabetbase-dataset-relation-audit.md +63 -0
- package/skills/rabetbase/references/rabetbase-dataset-relation-mutations.md +141 -0
- package/skills/rabetbase/references/rabetbase-dataset-relations.md +71 -0
- package/skills/rabetbase/references/rabetbase-dataset-rename.md +107 -0
- package/skills/rabetbase/references/rabetbase-dataset-restore.md +54 -0
- package/skills/rabetbase/references/rabetbase-db-analyze.md +135 -0
- package/skills/rabetbase/references/rabetbase-db-create.md +54 -0
- package/skills/rabetbase/references/rabetbase-db-delete.md +26 -0
- package/skills/rabetbase/references/rabetbase-db-detail.md +27 -0
- package/skills/rabetbase/references/rabetbase-db-diff.md +57 -0
- package/skills/rabetbase/references/rabetbase-db-list.md +37 -0
- package/skills/rabetbase/references/rabetbase-db-tables.md +25 -0
- package/skills/rabetbase/references/rabetbase-db-test.md +29 -0
- package/skills/rabetbase/references/rabetbase-db-update.md +29 -0
- package/skills/rabetbase/references/rabetbase-doctor.md +62 -0
- package/skills/rabetbase/references/rabetbase-file.md +35 -0
- package/skills/rabetbase/references/rabetbase-init.md +70 -0
- package/skills/rabetbase/references/rabetbase-issue-report.md +132 -0
- package/skills/rabetbase/references/rabetbase-kb.md +62 -0
- package/skills/rabetbase/references/rabetbase-menu-asset-update.md +135 -0
- package/skills/rabetbase/references/rabetbase-menu-delete.md +54 -0
- package/skills/rabetbase/references/rabetbase-menu-external-link-create.md +63 -0
- package/skills/rabetbase/references/rabetbase-menu-external-link-update.md +74 -0
- package/skills/rabetbase/references/rabetbase-menu-group-create.md +33 -0
- package/skills/rabetbase/references/rabetbase-menu-group-update.md +38 -0
- package/skills/rabetbase/references/rabetbase-menu-list.md +144 -0
- package/skills/rabetbase/references/rabetbase-menu-move.md +54 -0
- package/skills/rabetbase/references/rabetbase-menu-regroup-start.md +45 -0
- package/skills/rabetbase/references/rabetbase-menu-rename.md +48 -0
- package/skills/rabetbase/references/rabetbase-menu-sync.md +60 -0
- package/skills/rabetbase/references/rabetbase-notification-config-list.md +80 -0
- package/skills/rabetbase/references/rabetbase-ocr.md +86 -0
- package/skills/rabetbase/references/rabetbase-page-generate-start.md +32 -0
- package/skills/rabetbase/references/rabetbase-page-generate-status.md +32 -0
- package/skills/rabetbase/references/rabetbase-page-pull.md +47 -0
- package/skills/rabetbase/references/rabetbase-page-push.md +45 -0
- package/skills/rabetbase/references/rabetbase-page-react-create.md +29 -0
- package/skills/rabetbase/references/rabetbase-page-react-detail.md +26 -0
- package/skills/rabetbase/references/rabetbase-page-react-list.md +23 -0
- package/skills/rabetbase/references/rabetbase-page-react-publish.md +23 -0
- package/skills/rabetbase/references/rabetbase-page-react-update.md +24 -0
- package/skills/rabetbase/references/rabetbase-page-relation-binding.md +72 -0
- package/skills/rabetbase/references/rabetbase-page-restore.md +45 -0
- package/skills/rabetbase/references/rabetbase-page-sync.md +36 -0
- package/skills/rabetbase/references/rabetbase-permit-page-set.md +69 -0
- package/skills/rabetbase/references/rabetbase-permit-role-apis-set.md +53 -0
- package/skills/rabetbase/references/rabetbase-permit-role-menus-set.md +57 -0
- package/skills/rabetbase/references/rabetbase-project-create.md +46 -0
- package/skills/rabetbase/references/rabetbase-project-upgrade.md +57 -0
- package/skills/rabetbase/references/rabetbase-role-list.md +68 -0
- package/skills/rabetbase/references/rabetbase-role-user-add.md +54 -0
- package/skills/rabetbase/references/rabetbase-role-user-resolve.md +27 -0
- package/skills/rabetbase/references/rabetbase-run.md +53 -0
- package/skills/rabetbase/references/rabetbase-schema.md +22 -0
- package/skills/rabetbase/references/rabetbase-sql-create.md +41 -0
- package/skills/rabetbase/references/rabetbase-sql-delete.md +37 -0
- package/skills/rabetbase/references/rabetbase-sql-detail.md +32 -0
- package/skills/rabetbase/references/rabetbase-sql-exec.md +34 -0
- package/skills/rabetbase/references/rabetbase-sql-list.md +54 -0
- package/skills/rabetbase/references/rabetbase-sql-pull.md +54 -0
- package/skills/rabetbase/references/rabetbase-sql-push.md +46 -0
- package/skills/rabetbase/references/rabetbase-sql-status.md +39 -0
- package/skills/rabetbase/references/rabetbase-sql-validate.md +73 -0
- package/skills/rabetbase/references/rabetbase-standard-page-status.md +31 -0
- package/skills/rabetbase/references/rabetbase-task-status.md +40 -0
- package/skills/rabetbase/references/rabetbase-tenant-members-list.md +69 -0
- package/skills/rabetbase/references/rabetbase-update.md +56 -0
- package/skills/rabetbase/references/rabetbase-user-account.md +45 -0
- package/skills/rabetbase/references/rabetbase-workspace.md +60 -0
- package/skills/rabetbase.manifest.json +137 -0
|
@@ -0,0 +1,367 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: LrSmartCreate
|
|
3
|
+
description: LrSmartCreate/LrSmartUpdate/LrSmartDetail 表单组件完整配置
|
|
4
|
+
tags: [form, page-schema]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# LrSmartCreate / LrSmartUpdate / LrSmartDetail
|
|
8
|
+
|
|
9
|
+
表单组件,用于数据录入/编辑/详情展示。
|
|
10
|
+
|
|
11
|
+
| 组件 | 用途 | 差异 |
|
|
12
|
+
|------|------|------|
|
|
13
|
+
| LrSmartCreate | 新建表单 | 默认空表单 |
|
|
14
|
+
| LrSmartUpdate | 编辑表单 | 加载已有数据 |
|
|
15
|
+
| LrSmartDetail | 详情页 | 所有字段只读 |
|
|
16
|
+
|
|
17
|
+
**配置结构相似度**: 90%+
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## 禁止事项
|
|
22
|
+
|
|
23
|
+
| 禁止 | 替代方案/说明 |
|
|
24
|
+
|------|---------------|
|
|
25
|
+
| `meta.handleProps` | 纯 JSON props |
|
|
26
|
+
| 字段改名/类型/字典 | 需在数据集管理中操作 |
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Props 属性
|
|
31
|
+
|
|
32
|
+
| 属性 | 类型 | 说明 |
|
|
33
|
+
|------|------|------|
|
|
34
|
+
| _doVersion | string | 数据集版本标识,必须保留原值(如 `"V2"`),不可删除或修改 |
|
|
35
|
+
| items | Item[] | 表单项配置 |
|
|
36
|
+
| layoutMode | string | 布局:`multiple` / `inline` |
|
|
37
|
+
| cols | number | 每行字段数(multiple 模式) |
|
|
38
|
+
| valuesKey | string | 数据加载状态 key(Update/Detail) |
|
|
39
|
+
| fieldReactions | JSFunction(PageSchema 写法) | 表单型组件字段联动函数,返回“字段名 → 字段属性覆盖”对象 |
|
|
40
|
+
| sub_info | object | 主子表的子表配置。标准页生成器为主表 Form 写入,包含子表标题、数据集编码与字段 items |
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## 主子表表单(sub_info)
|
|
45
|
+
|
|
46
|
+
`LrSmartCreate`、`LrSmartUpdate` 和 `LrSmartDetail` 共用 `YtForm` 的子表运行时。主子表不是在 `items` 中增加一个普通字段,而是由 Form props 顶层的 `sub_info` 描述子表。
|
|
47
|
+
关系写入规范见 [dataset-relations.md](dataset-relations.md)。
|
|
48
|
+
|
|
49
|
+
```json
|
|
50
|
+
{
|
|
51
|
+
"sub_info": {
|
|
52
|
+
"title": "订单明细",
|
|
53
|
+
"datasetCode": "order_item",
|
|
54
|
+
"items": [
|
|
55
|
+
{"name": "product_name", "label": "商品", "componentName": "YtInput", "isShown": true},
|
|
56
|
+
{"name": "quantity", "label": "数量", "componentName": "YtInputNumber", "isShown": true}
|
|
57
|
+
]
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
| 属性 | 含义 | 生成规则 |
|
|
63
|
+
|------|------|----------|
|
|
64
|
+
| `sub_info.title` | 子表区域标题和子表抽屉标题 | 使用子表数据集名称 |
|
|
65
|
+
| `sub_info.datasetCode` | 子表数据集编码,也是子表记录在 Form 内部的命名空间 | 使用子表协议中的 `datasetCode` |
|
|
66
|
+
| `sub_info.items` | 子表的 Form items | 按子表字段生成并同步;若配置了 `subColumnName`,同名字段不会出现在子表 items 中 |
|
|
67
|
+
|
|
68
|
+
### 标准页生成条件与同步
|
|
69
|
+
|
|
70
|
+
主子表关系声明见 [dataset-relations.md](dataset-relations.md)。标准页生成器还需要在主表协议的 `extend` 中提供 `subDatasetCode` 和 `subTableName`,并在 `relatedTablesJson` 中提供以 `subTableName` 为 key 的子表协议;`subColumnName` 为可选字段,用于从子表表单项中排除同名字段。
|
|
71
|
+
|
|
72
|
+
- 仅主表的 Form 节点会写入 `sub_info`,不会给子表自身的页面节点重复挂载子表。
|
|
73
|
+
- 新建、编辑和详情页面的 `LrSmartCreate` / `LrSmartUpdate` / `LrSmartDetail` 都会在标准页生成或更新时同步 `sub_info`。
|
|
74
|
+
- 同步会复用并校准既有子表 items,而不是要求手工维护一份与子表数据集脱节的字段副本。
|
|
75
|
+
- 当主子表上下文被移除后再次同步,旧的 `sub_info` 会被删除;同步结果会标记只由旧子表 items 引用的数据源,供上层生命周期决定是否清理。
|
|
76
|
+
|
|
77
|
+
因此,新增或变更主子表字段时,先通过 Rabetbase CLI 校验关系事实,再修改子表数据集与主表协议并重新执行标准页生成/同步。不要只在某一个页面手写一套长期维护的 `sub_info.items`,也不要因存在关系元数据就假定页面会自动生成子表。
|
|
78
|
+
|
|
79
|
+
### 运行时展示与数据结构
|
|
80
|
+
|
|
81
|
+
- `sub_info.items` 为空时,页面不会渲染子表区域。
|
|
82
|
+
- 子表区域以卡片汇总展示记录,每条记录默认展示前三个可见、非分组字段。新建和编辑模式提供“新增”、编辑和删除操作,编辑在子表抽屉中完成。
|
|
83
|
+
- 子表抽屉会遵循 item 的 `isShown`、`hidden`、`group`、`formSpan` 和 `readonly` 配置,与主表字段的表单规则一致。
|
|
84
|
+
- 子表记录会同步到父 Form 的内部字段路径 `__subFormData[<sub_info.datasetCode>]`,并同步到 Form 的 `valuesKey` 状态。该路径是运行时数据结构,不要把 `__subFormData` 作为普通主表字段写入 `items`。
|
|
85
|
+
- 同步记录时会去除以 `_label` 结尾的展示字段,只保留原始提交值;不要依赖 `xxx_label` 作为子表持久化数据。
|
|
86
|
+
|
|
87
|
+
### 三种表单模式
|
|
88
|
+
|
|
89
|
+
| 组件 | 子表交互 | 数据表现 |
|
|
90
|
+
|------|----------|----------|
|
|
91
|
+
| `LrSmartCreate` | 可新增、编辑、删除子表记录 | 从空表单开始,子表记录随主表 Form 一起维护 |
|
|
92
|
+
| `LrSmartUpdate` | 可新增、编辑、删除子表记录 | 已传入的子表默认记录会先规范化,再写入 `__subFormData[datasetCode]` |
|
|
93
|
+
| `LrSmartDetail` | 仅可通过查看按钮打开只读抽屉 | `preview: true` 时不显示新增、编辑、删除与抽屉提交按钮 |
|
|
94
|
+
|
|
95
|
+
详情页的主子表展示与普通引用表详情不同,详见 [LrSmartDetail.md](LrSmartDetail.md)。
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## Item 表单项属性
|
|
100
|
+
|
|
101
|
+
V2 页面生成时已为数据集所有字段全量生成 items,通过 `isShown` 控制显示。用户"添加表单项" = 将已有 item 的 `isShown` 设为 `true`;仅当字段在 items 中完全不存在时才需插入新对象。
|
|
102
|
+
|
|
103
|
+
### INSERT element 最小结构
|
|
104
|
+
|
|
105
|
+
arrayName = `formItems`,字段必须存在于数据集(先 dataset_detail_tool 确认)。工具层自动默认 `readonly: true`,仅当用户明确要求可编辑时设 `readonly: false`。
|
|
106
|
+
|
|
107
|
+
```json
|
|
108
|
+
{"name": "<fieldName>", "label": "<fieldLabel>", "componentName": "<组件类型>", "isShown": true}
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
> 组件类型参考 `field-components.md`。选择类组件需同时配置 options(静态枚举或动态数据源),参见下方「动态选项加载」。
|
|
112
|
+
|
|
113
|
+
**能力边界**:
|
|
114
|
+
|
|
115
|
+
- ✅ 支持:显示数据集中已有但表单未展示的字段(将 `isShown: false` 改为 `true`,或在 items 中新增引用)
|
|
116
|
+
- ✅ 支持:修改已有字段的展示方式(组件类型、校验规则、标签等)
|
|
117
|
+
- ❌ 不支持:添加数据集中不存在的字段(需要持久化的字段必须先在 Lovrabet 平台的数据集管理中创建)
|
|
118
|
+
- 原因:表单提交的字段必须对应数据集中的实际字段,否则提交会失败
|
|
119
|
+
|
|
120
|
+
| 属性 | 渲染 | 参与提交 | 用途 |
|
|
121
|
+
|------|:----:|:-------:|------|
|
|
122
|
+
| `isShown: false` | ❌ | ❌ | 完全不渲染,等同于不存在 |
|
|
123
|
+
| `hidden: true` | ❌ | ✅ | 隐藏但仍提交值(Ant Design 5 Form.Item 规范) |
|
|
124
|
+
|
|
125
|
+
| 属性 | 类型 | 说明 |
|
|
126
|
+
|------|------|------|
|
|
127
|
+
| name | string | 字段名(仅主表字段,不支持点号字段) |
|
|
128
|
+
| label | string | 标签 |
|
|
129
|
+
| indexType | string | 索引类型(`primary` / `unique` / `index`),系统自动生成,无需手动设置 |
|
|
130
|
+
| componentName | string | 组件类型 |
|
|
131
|
+
| formSpan | string | 占宽:`full` / `half` |
|
|
132
|
+
| initialValue | any | 默认值(与 Ant Design 5 Form.Item initialValue 一致) |
|
|
133
|
+
| rules | Rule[] | 校验规则 |
|
|
134
|
+
| options | array | 静态选项 |
|
|
135
|
+
| events | object | 禁止默认生成;当前运行时不消费字段级 `events`,字段联动请使用 Form 顶层 `fieldReactions` |
|
|
136
|
+
| readonly | boolean | 只读(Detail 默认 true) |
|
|
137
|
+
|
|
138
|
+
### 组件类型
|
|
139
|
+
|
|
140
|
+
表单项可用的 `componentName`、字段组件选型规则、数据格式与动态选项约束,统一参考 `field-components.md`。本文档仅补充 Form 场景特有的模式、校验、提交与联动行为。
|
|
141
|
+
|
|
142
|
+
### 校验规则
|
|
143
|
+
|
|
144
|
+
| 规则 | 示例 |
|
|
145
|
+
|------|------|
|
|
146
|
+
| 必填 | `{required: true, message: "不能为空"}` |
|
|
147
|
+
| 手机号 | `{type: "phone", message: "手机号格式错误"}` |
|
|
148
|
+
| 邮箱 | `{type: "email", message: "邮箱格式错误"}` |
|
|
149
|
+
| 正则 | `{type: "regex", pattern: "^\\d{11}$", message: "格式错误"}` |
|
|
150
|
+
|
|
151
|
+
---
|
|
152
|
+
|
|
153
|
+
## events 与上下文
|
|
154
|
+
|
|
155
|
+
- 宿主级事件、按钮 `optType + options` 协议:统一参考 `syntax-reference.md`
|
|
156
|
+
- 当前运行时不消费字段级 `events.onChange` / `events.onMount`,Agent 不应新增此类字段级事件 schema
|
|
157
|
+
- 表单型组件字段联动使用组件 props 顶层 `fieldReactions`,不要写在 `items[]` 内
|
|
158
|
+
- `form` 方法属于表单组件特有能力,集中在本页维护
|
|
159
|
+
|
|
160
|
+
### fieldReactions(字段联动)
|
|
161
|
+
|
|
162
|
+
`fieldReactions` 是表单型组件字段联动的默认方式,写在组件 props 顶层,用于集中描述多字段之间的显隐、禁用、校验和选项覆盖逻辑。函数返回一个“字段名 → 字段属性覆盖”的对象,运行时会把返回值按字段 `name` 合并到对应 item 上。当前适用于 `LrSmartCreate` / `LrSmartUpdate`;`LrSmartDetail` 如需展示控制也遵循同一机制。
|
|
163
|
+
|
|
164
|
+
Agent 规则:
|
|
165
|
+
|
|
166
|
+
- 联动触发源字段不用写事件;表单值变化后运行时会重新执行 `fieldReactions`。
|
|
167
|
+
- 返回对象的 key 必须是被联动字段的 `name`。
|
|
168
|
+
- value 是要覆盖的 item 属性,常见为 `isShown`、`hidden`、`disabled`、`rules`、`options`。
|
|
169
|
+
- `isShown: false` 表示不渲染该字段;`hidden: true` 表示隐藏但保留在 Form 中。
|
|
170
|
+
- 读取值优先使用 `allValues`;不要用 `changedValues` 判断本次变化字段,因为当前运行时 `changedValues` 与 `allValues` 同值。
|
|
171
|
+
- 只有需要命令式读写值时才使用 `form`。
|
|
172
|
+
- 联动函数应保持纯函数:根据 `allValues` 返回覆盖对象,不在函数内发请求、改 schema 或写页面状态。
|
|
173
|
+
- PageSchema 中统一生成 `{"type": "JSFunction", "value": "..."}`,不要生成裸函数字符串。
|
|
174
|
+
|
|
175
|
+
### form(管理字段值)
|
|
176
|
+
|
|
177
|
+
| 方法 | 说明 |
|
|
178
|
+
|------|------|
|
|
179
|
+
| `form.getFieldValue(name)` | 获取字段值 |
|
|
180
|
+
| `form.setFieldValue(name, value)` | 设置字段值 |
|
|
181
|
+
| `form.setFieldsValue({...})` | 批量设置 |
|
|
182
|
+
| `form.resetFields([names])` | 重置字段 |
|
|
183
|
+
|
|
184
|
+
---
|
|
185
|
+
|
|
186
|
+
## 提交按钮配置
|
|
187
|
+
|
|
188
|
+
按钮协议本身是平台通用语法;Form 场景的关键点是 `submit` 动作需要同时绑定表单与数据源。
|
|
189
|
+
|
|
190
|
+
```json
|
|
191
|
+
{
|
|
192
|
+
"title": "提交",
|
|
193
|
+
"type": "primary",
|
|
194
|
+
"optType": "flowAction",
|
|
195
|
+
"options": {
|
|
196
|
+
"flowList": [{
|
|
197
|
+
"optType": "submit",
|
|
198
|
+
"options": {
|
|
199
|
+
"_bindForm": "form_unique_id",
|
|
200
|
+
"_bindDataSource": "<datasetId>_create",
|
|
201
|
+
"_autoBindDataSourceParams": true
|
|
202
|
+
}
|
|
203
|
+
}]
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
| 操作 | `_bindDataSource` |
|
|
209
|
+
|------|-------------------|
|
|
210
|
+
| 新建 | `<datasetId>_create` |
|
|
211
|
+
| 更新 | `<datasetId>_update` |
|
|
212
|
+
|
|
213
|
+
### 多步流程(提交后刷新 + 跳转)
|
|
214
|
+
|
|
215
|
+
- **机制**:`flowList` 数组中的动作按顺序串行执行。提交成功后常需刷新列表页数据源(跨页面通过 `__rendererInstanceRegistry` 访问)+ 跳转到结果页
|
|
216
|
+
- **参数**:
|
|
217
|
+
|
|
218
|
+
| Placeholder | Value Source | Description |
|
|
219
|
+
|-------------|--------------|-------------|
|
|
220
|
+
| `<form_uniqueId>` | `props._uniqueId` | Form unique identifier |
|
|
221
|
+
| `<datasetId>_update` | Dataset id + operation suffix | Use `_create` for create, `_update` for update |
|
|
222
|
+
| `<datasetId>_filter` | List page filter dataSource id | For cross-page list refresh |
|
|
223
|
+
| `pageTagName` | Page identifier | `RESULT` = detail page, `UPDATE` = edit page |
|
|
224
|
+
| `dataid` | `_context.state.urlParams.dataid` | Current record id |
|
|
225
|
+
|
|
226
|
+
- **示例**:
|
|
227
|
+
|
|
228
|
+
```json
|
|
229
|
+
{
|
|
230
|
+
"title": "提交",
|
|
231
|
+
"type": "primary",
|
|
232
|
+
"optType": "flowAction",
|
|
233
|
+
"options": {
|
|
234
|
+
"flowList": [
|
|
235
|
+
{
|
|
236
|
+
"optType": "submit",
|
|
237
|
+
"options": {
|
|
238
|
+
"_bindForm": "<form_uniqueId>",
|
|
239
|
+
"_bindDataSource": "<datasetId>_update",
|
|
240
|
+
"_autoBindDataSourceParams": true,
|
|
241
|
+
"responseConfig": {
|
|
242
|
+
"enableSuccessToast": true,
|
|
243
|
+
"successToastMsg": "更新成功!"
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
},
|
|
247
|
+
{
|
|
248
|
+
"optType": "jsAction",
|
|
249
|
+
"options": {
|
|
250
|
+
"jsFunction": {
|
|
251
|
+
"type": "JSFunction",
|
|
252
|
+
"value": "(config) => {\n window.__rendererInstanceRegistry?.instances.values().forEach((item) => item.instance.dataSourceMap['<datasetId>_filter']?.load());\n}"
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
},
|
|
256
|
+
{
|
|
257
|
+
"optType": "jsAction",
|
|
258
|
+
"options": {
|
|
259
|
+
"jsFunction": {
|
|
260
|
+
"type": "JSFunction",
|
|
261
|
+
"value": "(config) => {\n const { _context } = config;\n const dataid = _context?.state?.urlParams?.dataid;\n _context?.appHelper?.yt?.smartPageHistory?.push({ pageTagName: 'RESULT', datasetId: '<datasetId>', dataid: dataid });\n}"
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
]
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
---
|
|
271
|
+
|
|
272
|
+
## 常见场景
|
|
273
|
+
|
|
274
|
+
### 条件显隐与禁用
|
|
275
|
+
|
|
276
|
+
通过 `fieldReactions` 根据当前表单值覆盖字段属性,控制其他字段显隐或禁用。不要生成字段级 `events` 联动 schema。
|
|
277
|
+
|
|
278
|
+
`fieldReactions` 是函数型字段。Agent 生成 PageSchema 时使用 `JSFunction`。函数入参使用 `{ allValues, form }`:`allValues` 用于读取完整表单值,`form` 用于命令式读写表单。
|
|
279
|
+
|
|
280
|
+
```json
|
|
281
|
+
{
|
|
282
|
+
"fieldReactions": {
|
|
283
|
+
"type": "JSFunction",
|
|
284
|
+
"value": "({ allValues }) => {\n const isEnterprise = allValues.customer_type === 'enterprise';\n return {\n company_name: { isShown: isEnterprise },\n personal_name: { isShown: !isEnterprise },\n tax_no: { disabled: !isEnterprise }\n };\n}"
|
|
285
|
+
},
|
|
286
|
+
"items": [
|
|
287
|
+
{"name": "customer_type", "label": "客户类型", "componentName": "YtSingleSelect", "options": [{"label": "企业", "value": "enterprise"}, {"label": "个人", "value": "personal"}]},
|
|
288
|
+
{"name": "company_name", "label": "企业名称", "componentName": "YtInput", "isShown": false},
|
|
289
|
+
{"name": "personal_name", "label": "个人姓名", "componentName": "YtInput", "isShown": true},
|
|
290
|
+
{"name": "tax_no", "label": "税号", "componentName": "YtInput"}
|
|
291
|
+
]
|
|
292
|
+
}
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
### 动态选项加载
|
|
296
|
+
|
|
297
|
+
- **机制**:options 数据来自关联表,需两步配置:Page 层请求 To 表 options 数据 → formItem 层绑定 state。state key 必须与 dataSource id 一致,确保数据正确传递
|
|
298
|
+
- **参数**:
|
|
299
|
+
|
|
300
|
+
| Placeholder | Value Source | Description |
|
|
301
|
+
|-------------|--------------|-------------|
|
|
302
|
+
| `dataset_<FromDatasetCode>_<FromRelationField>_options` | `dataset_` prefix + From 表字段所属 datasetCode + From 表关联字段名 + `_options` suffix | dataSource id, must match state key |
|
|
303
|
+
| `<appCode>` | Application code | From current app config |
|
|
304
|
+
| `<ToDatasetCode>` | To 表 datasetCode | From dataset relations |
|
|
305
|
+
| `<ToValueField>` | To 表被关联字段 | Usually `id` or `code` |
|
|
306
|
+
| `<ToLabelField>` | To 表展示字段 | Usually `name` / `title` / location field |
|
|
307
|
+
|
|
308
|
+
> 自关联父子关系中,`FromDatasetCode` 与 `ToDatasetCode` 可以相同;state key 仍按 `dataset_<FromDatasetCode>_<FromRelationField>_options` 命名,URI 仍使用 To 侧 options 数据源。
|
|
309
|
+
|
|
310
|
+
- **示例**:
|
|
311
|
+
|
|
312
|
+
```json
|
|
313
|
+
// Page.dataSource.list
|
|
314
|
+
{
|
|
315
|
+
"type": "fetch",
|
|
316
|
+
"id": "dataset_<FromDatasetCode>_<FromRelationField>_options",
|
|
317
|
+
"isInit": true,
|
|
318
|
+
"source": "dataset",
|
|
319
|
+
"options": {
|
|
320
|
+
"uri": "/api/<appCode>/<ToDatasetCode>/getSelectOptions",
|
|
321
|
+
"params": {"code": "<ToValueField>", "label": "<ToLabelField>"}
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
// formItem
|
|
326
|
+
{
|
|
327
|
+
"name": "<FromRelationField>",
|
|
328
|
+
"componentName": "YtSingleSelect",
|
|
329
|
+
"options": {
|
|
330
|
+
"type": "JSExpression",
|
|
331
|
+
"value": "this.state.dataset_<FromDatasetCode>_<FromRelationField>_options"
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
> `getSelectOptions` 禁止使用 `optionsRequest`。即使字段级请求技术上能访问完整接口,也会把表单字段耦合到具体域名或部署环境;Agent 必须使用 Page 层 `dataSource.list` 的相对 URI,并通过 `this.state.dataset_<FromDatasetCode>_<FromRelationField>_options` 绑定。`optionsRequest` 仅用于三方链接、外部接口或外部静态资源 options。
|
|
337
|
+
|
|
338
|
+
---
|
|
339
|
+
|
|
340
|
+
## 常见问题
|
|
341
|
+
|
|
342
|
+
| 问题 | 原因 | 解决方案 |
|
|
343
|
+
|------|------|----------|
|
|
344
|
+
| 表单不显示 | items 为空 | 配置 items |
|
|
345
|
+
| 联动不生效 | 使用了字段级 events/onChange | 表单型组件字段联动使用 `fieldReactions`,不要生成字段级 events 联动 schema |
|
|
346
|
+
| 下拉选项为空 | options 未配置,或 Page 层未配置 getSelectOptions 请求 | 配置静态 options,或按标准方案配置 Page 层 dataSource + state 绑定 |
|
|
347
|
+
| 提交失败 | 必填字段未填 | 检查 rules |
|
|
348
|
+
|
|
349
|
+
---
|
|
350
|
+
|
|
351
|
+
## 完整示例
|
|
352
|
+
|
|
353
|
+
```json
|
|
354
|
+
{
|
|
355
|
+
"componentName": "LrSmartCreate",
|
|
356
|
+
"props": {
|
|
357
|
+
"_doVersion": "V2",
|
|
358
|
+
"layoutMode": "multiple",
|
|
359
|
+
"cols": 2,
|
|
360
|
+
"items": [
|
|
361
|
+
{"name": "customer_name", "componentName": "YtInput", "label": "客户名称", "formSpan": "full", "rules": [{"required": true, "message": "不能为空"}]},
|
|
362
|
+
{"name": "level_id", "componentName": "YtSingleSelect", "label": "客户等级", "options": [{"label": "A类", "value": "A"}, {"label": "B类", "value": "B"}]},
|
|
363
|
+
{"name": "status", "componentName": "YtSingleSelect", "label": "状态", "initialValue": 1, "options": [{"label": "活跃", "value": 1}, {"label": "流失", "value": 0}]}
|
|
364
|
+
]
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
```
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: LrSmartDetail
|
|
3
|
+
description: LrSmartDetail 详情组件。单表/引用表详情的 getOne 数据源绑定、引用表依赖链(isSync + dataHandler)。
|
|
4
|
+
tags: [detail, page-schema, dataSource, isSync]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# LrSmartDetail
|
|
8
|
+
|
|
9
|
+
## 1. 组件定位
|
|
10
|
+
|
|
11
|
+
- **组件名**:`LrSmartDetail`
|
|
12
|
+
- **用途**:只读展示单条记录详情
|
|
13
|
+
- **适用场景**:单表详情、引用表多区域详情
|
|
14
|
+
- **不适用场景**:需要编辑提交 → `LrSmartCreate` / `LrSmartUpdate`
|
|
15
|
+
|
|
16
|
+
## 2. 边界与依赖
|
|
17
|
+
|
|
18
|
+
- **与 LrSmartCreate 的关系**:共享 items/events/form 配置,Detail 专属部分仅为 getOne 数据绑定和引用表依赖链
|
|
19
|
+
- **依赖文档**:items 配置 → `LrSmartCreate.md`;通用语法 → `syntax-reference.md`;布局 → `YtPage.md`
|
|
20
|
+
|
|
21
|
+
## 3. 核心属性
|
|
22
|
+
|
|
23
|
+
| 属性 | 类型 | 说明 |
|
|
24
|
+
|------|------|------|
|
|
25
|
+
| `_bindDataSource` | string | `"<datasetId>_getOne"` 或 `"<relatedDatasetCode>_getOne"` |
|
|
26
|
+
| `defaultValue` | JSExpression | `"this.state['<同_bindDataSource的id>']"` |
|
|
27
|
+
| `preview` | boolean | 固定 `true` |
|
|
28
|
+
| `title` | string | 引用表区域标题(主表不需要) |
|
|
29
|
+
| `sub_info` | object | 主子表子表区域;由标准页生成器写入主表详情组件,字段结构见 `LrSmartCreate.md` |
|
|
30
|
+
|
|
31
|
+
> 通用表单项配置与 `LrSmartCreate` 一致;本页只补充详情页数据绑定与引用表依赖链。
|
|
32
|
+
|
|
33
|
+
## 4. 运行机制
|
|
34
|
+
|
|
35
|
+
### 4.1 单表详情
|
|
36
|
+
|
|
37
|
+
- **机制**:urlParams 提供 `dataid` → getOne 用 `dataid` 查主表 → defaultValue 绑定结果
|
|
38
|
+
- **参数**:`this.state.urlParams.dataid` 来自列表页跳转 URL `?dataid=<id>`
|
|
39
|
+
- **示例**:
|
|
40
|
+
|
|
41
|
+
```json
|
|
42
|
+
{
|
|
43
|
+
"type": "fetch", "id": "<datasetId>_getOne", "isInit": true, "source": "dataset",
|
|
44
|
+
"options": {
|
|
45
|
+
"method": "POST",
|
|
46
|
+
"uri": "/api/<appCode>/<datasetCode>/getOne",
|
|
47
|
+
"params": {"id": {"type": "JSExpression", "value": "this.state.urlParams.dataid"}},
|
|
48
|
+
"requiredParams": ["id"]
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
```json
|
|
54
|
+
{
|
|
55
|
+
"componentName": "LrSmartDetail",
|
|
56
|
+
"props": {
|
|
57
|
+
"_bindDataSource": "<datasetId>_getOne",
|
|
58
|
+
"defaultValue": {"type": "JSExpression", "value": "this.state['<datasetId>_getOne']"},
|
|
59
|
+
"preview": true,
|
|
60
|
+
"items": [...]
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### 4.2 引用表依赖链
|
|
66
|
+
|
|
67
|
+
- **机制**:引用表 getOne 的 `params.id` 依赖主表 getOne 返回值中的外键。必须用 `isSync: true` 串行加载 + 主表 `dataHandler` 同步写 state,否则并行触发时主表数据还没返回,引用表 `requiredParams` 校验失败被跳过
|
|
68
|
+
- **参数**:
|
|
69
|
+
- 主表外键值:`this.state['<datasetId>_getOne']?.<fromField>`
|
|
70
|
+
- `isSync: true`:让引擎按 list 顺序 `await` 逐个加载
|
|
71
|
+
- `dataHandler`:主表请求完成后同步直写 `this.state[key] = response`(与 urlParams 同步直写模式一致),确保后续 isSync 数据源能立即读到
|
|
72
|
+
- **示例**(dataSource.list 关键片段):
|
|
73
|
+
|
|
74
|
+
```json
|
|
75
|
+
[
|
|
76
|
+
{"type": "urlParams", "id": "urlParams", "isInit": true, "source": "system", "options": {}},
|
|
77
|
+
{
|
|
78
|
+
"type": "fetch", "id": "<datasetId>_getOne", "isInit": true, "isSync": true, "source": "dataset",
|
|
79
|
+
"dataHandler": {
|
|
80
|
+
"type": "JSFunction",
|
|
81
|
+
"value": "function(response) { if (this.state) { this.state['<datasetId>_getOne'] = response; } return response; }"
|
|
82
|
+
},
|
|
83
|
+
"options": {
|
|
84
|
+
"uri": "/api/<appCode>/<datasetCode>/getOne",
|
|
85
|
+
"params": {"id": {"type": "JSExpression", "value": "this.state.urlParams.dataid"}},
|
|
86
|
+
"requiredParams": ["id"]
|
|
87
|
+
}
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
"type": "fetch", "id": "<relatedDatasetCode>_getOne", "isInit": true, "isSync": true, "source": "dataset",
|
|
91
|
+
"options": {
|
|
92
|
+
"uri": "/api/<appCode>/<relatedDatasetCode>/getOne",
|
|
93
|
+
"params": {"id": {"type": "JSExpression", "value": "this.state['<datasetId>_getOne']?.<fromField>"}},
|
|
94
|
+
"requiredParams": ["id"]
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
]
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
引用表 LrSmartDetail 组件:
|
|
101
|
+
|
|
102
|
+
```json
|
|
103
|
+
{
|
|
104
|
+
"componentName": "LrSmartDetail",
|
|
105
|
+
"props": {
|
|
106
|
+
"_bindDataSource": "<relatedDatasetCode>_getOne",
|
|
107
|
+
"defaultValue": {"type": "JSExpression", "value": "this.state['<relatedDatasetCode>_getOne']"},
|
|
108
|
+
"title": "<引用表显示名>",
|
|
109
|
+
"preview": true,
|
|
110
|
+
"items": [...]
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### 4.3 主子表详情(sub_info)
|
|
116
|
+
|
|
117
|
+
主子表详情使用主表 `LrSmartDetail.props.sub_info` 展示一对多的子记录,不需要为每条子记录新增独立的 `LrSmartDetail`,也不应套用 4.2 的“引用表 getOne 依赖链”。
|
|
118
|
+
|
|
119
|
+
`sub_info` 只承接 PageSchema 展示结果,不能包含或替代数据集关系字段、CLI 创建参数。关系的 `bizRelationType: "main_sub"`、基数和展示字段应先按 [dataset-relations.md](dataset-relations.md) 写入并回查。
|
|
120
|
+
|
|
121
|
+
- 当主表协议的 `extend` 提供 `subDatasetCode`、`subTableName`,且 `relatedTablesJson` 中存在对应子表协议时,标准页生成/同步会为主表详情组件写入 `sub_info`。
|
|
122
|
+
- 子表记录随主表详情的默认值传入;运行时会规范化记录并写入 `__subFormData[datasetCode]`。该字段路径为内部状态,不是数据集字段。
|
|
123
|
+
- `preview: true` 下,子表记录以卡片汇总展示;用户只能通过查看按钮打开只读抽屉。不会显示新增、编辑、删除或抽屉提交按钮。
|
|
124
|
+
- 子表卡片默认显示前三个可见、非分组字段。子表字段的 `isShown`、`hidden`、`group`、`formSpan` 和 `readonly` 仍然生效。
|
|
125
|
+
|
|
126
|
+
| 场景 | 正确配置 |
|
|
127
|
+
|------|----------|
|
|
128
|
+
| 主表引用一条客户、部门等记录 | 使用 4.2 的关联表 `getOne` 数据源和独立详情区域 |
|
|
129
|
+
| 一条订单包含多条订单明细 | 使用主表 `sub_info`,由主子表标准页生成器维护 |
|
|
130
|
+
|
|
131
|
+
完整的 `sub_info` 字段、生成条件及 Create/Update 行为见 [LrSmartCreate.md](LrSmartCreate.md);关系字段方向见 [dataset-relations.md](dataset-relations.md)。
|
|
132
|
+
|
|
133
|
+
## 5. 高频变更点
|
|
134
|
+
|
|
135
|
+
- 增删 items 字段
|
|
136
|
+
- 新增引用表区域:dataSource.list 加 getOne(`isSync: true`) + YtRglContainer.children 加 LrSmartDetail + RGLlayout 加布局块
|
|
137
|
+
- 修改引用表区域标题(`title`)
|
|
138
|
+
- 变更主子表字段或布局:调整子表数据集与主表关系配置后重新执行标准页生成/同步,不要为明细列表新增引用表 getOne 链
|
|
139
|
+
|
|
140
|
+
## 6. 限制与误用
|
|
141
|
+
|
|
142
|
+
- ❌ 引用表 getOne 不加 `isSync: true` → 与主表并行触发,params 为 undefined,控制台报 `"should not fetch"`
|
|
143
|
+
- ❌ 有引用表时主表 getOne 不加 `dataHandler` 同步写 state → `isSync` 仅保证 await 顺序,但 setState 是异步的,下一个数据源读不到值
|
|
144
|
+
- ❌ `defaultValue` 的 state key 与 dataSource id 不匹配 → 无数据
|
|
145
|
+
- ❌ 将一对多主子表按引用表方式逐条配置 getOne → 会丢失 `sub_info` 的记录卡片、只读抽屉和统一内部值结构
|
|
146
|
+
|
|
147
|
+
## 7. 交叉校验
|
|
148
|
+
|
|
149
|
+
- **已验证事实**:
|
|
150
|
+
- isSync + dataHandler 同步写 state 组合可解决引用表 getOne 依赖链问题(线上已验证,最大 3 个引用表场景)
|
|
151
|
+
- 无引用表时主表 getOne 不需要 isSync 和 dataHandler,保持默认异步
|
|
152
|
+
- `_options` 数据源不加 isSync,与 getOne 链并行加载,互不影响
|
|
153
|
+
- **未完全验证**:超过 3 个引用表时的串行加载性能
|