create-yss-spec 3.4.6 → 3.4.8
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/package.json +1 -1
- package/template/.agents/skills/.strategic-design-skills-manifest.json +1 -1
- package/template/.agents/skills/.yss-skills-manifest.json +1 -8
- package/template/.agents/skills/code-review/references/yss-review-standards.md +22 -0
- package/template/.agents/skills/formily-mode-slot-detail/SKILL.md +3 -4
- package/template/.agents/skills/lombok/SKILL.md +1 -1
- package/template/.agents/skills/mapstruct/SKILL.md +3 -1
- package/template/.agents/skills/yedit-table-usage/SKILL.md +2 -0
- package/template/.agents/skills/yss-application/references/application-layer-guide.md +7 -0
- package/template/.agents/skills/yss-backend-spec-review/SKILL.md +38 -0
- package/template/.agents/skills/yss-backend-spec-review/references/check-inputs.md +21 -0
- package/template/.agents/skills/yss-backend-spec-review/references/remediation-workflow.md +48 -0
- package/template/.agents/skills/yss-backend-spec-review/tests/routing.test.mjs +19 -0
- package/template/.agents/skills/yss-ddd-scaffold-generator/SKILL.md +6 -4
- package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/java/architecture-rules-test.java.template +60 -23
- package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/pom/bootstrap-pom.xml.template +6 -0
- package/template/.agents/skills/yss-ddd-scaffold-generator/references/ARCHITECTURE.md +1 -1
- package/template/.agents/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +4 -2
- package/template/.agents/skills/yss-ddd-scaffold-generator/references/engineering-baseline.md +7 -1
- package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/first-slice-compatibility.test.mjs +6 -10
- package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/first-slice-verification.test.mjs +12 -16
- package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/run_first_slice_verification.mjs +36 -88
- package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +4 -3
- package/template/.agents/skills/yss-design-system/SKILL.md +2 -2
- package/template/.agents/skills/yss-domain/references/domain-layer-guide.md +8 -1
- package/template/.agents/skills/yss-formily/SKILL.md +2 -2
- package/template/.agents/skills/yss-frontend-scaffold-generator/SKILL.md +1 -1
- package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/README.md +1 -1
- package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/package.json +2 -2
- package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/pnpm-lock.yaml +158 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/references/data-quality-v1.manifest.json +3 -3
- package/template/.agents/skills/yss-frontend-scaffold-generator/scripts/scaffold-generator.test.mjs +5 -0
- package/template/.agents/skills/yss-hook/SKILL.md +3 -2
- package/template/.agents/skills/yss-implementation-contract-compiler/references/boundaries.md +6 -1
- package/template/.agents/skills/yss-layered-mvc-scaffold-generator/SKILL.md +1 -1
- package/template/.agents/skills/yss-layered-mvc-scaffold-generator/assets/templates/architecture-rules-test.java.template +66 -0
- package/template/.agents/skills/yss-layered-mvc-scaffold-generator/scripts/generate_scaffold.mjs +4 -2
- package/template/.agents/skills/yss-layered-mvc-scaffold-generator/scripts/scaffold-generator.test.mjs +0 -7
- package/template/.agents/skills/yss-mybatis/SKILL.md +4 -0
- package/template/.agents/skills/yss-product-lifecycle/references/orchestration-contract.yaml +1 -3
- package/template/.agents/skills/yss-repository/references/profiles/target-domain-model.md +10 -2
- package/template/.agents/skills/yss-skill-source-index-refresh/references/source-map-config.md +3 -2
- package/template/.agents/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.mjs +3 -2
- package/template/.agents/skills/yss-technical-design/SKILL.md +1 -1
- package/template/.agents/skills/yss-technical-design/references/technical-design-contract.md +1 -1
- package/template/.agents/skills/yss-technical-design/tests/run-scenarios.mjs +1 -2
- package/template/.agents/skills/yss-ui/SKILL.md +9 -6
- package/template/.agents/skills/yss-ui/references/component-routing.md +11 -4
- package/template/.agents/skills/yss-ui-business-page-generation/SKILL.md +5 -1
- package/template/.agents/skills/yss-ui-business-page-generation/references/hooks-map.md +3 -2
- package/template/.agents/skills/yss-web-controller/references/web-adapter-layer-guide.md +8 -0
- package/template/.agents/skills/ytable-usage/SKILL.md +14 -7
- package/template/.agents/skills/ytree-usage/SKILL.md +1 -0
- package/template/.codex/skills/code-review/references/yss-review-standards.md +22 -0
- package/template/.codex/skills/formily-mode-slot-detail/SKILL.md +3 -4
- package/template/.codex/skills/lombok/SKILL.md +1 -1
- package/template/.codex/skills/mapstruct/SKILL.md +3 -1
- package/template/.codex/skills/yedit-table-usage/SKILL.md +2 -0
- package/template/.codex/skills/yss-application/references/application-layer-guide.md +7 -0
- package/template/.codex/skills/yss-backend-spec-review/SKILL.md +38 -0
- package/template/.codex/skills/yss-backend-spec-review/references/check-inputs.md +21 -0
- package/template/.codex/skills/yss-backend-spec-review/references/remediation-workflow.md +48 -0
- package/template/.codex/skills/yss-backend-spec-review/tests/routing.test.mjs +19 -0
- package/template/.codex/skills/yss-ddd-scaffold-generator/SKILL.md +6 -4
- package/template/.codex/skills/yss-ddd-scaffold-generator/assets/templates/java/architecture-rules-test.java.template +60 -23
- package/template/.codex/skills/yss-ddd-scaffold-generator/assets/templates/pom/bootstrap-pom.xml.template +6 -0
- package/template/.codex/skills/yss-ddd-scaffold-generator/references/ARCHITECTURE.md +1 -1
- package/template/.codex/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +4 -2
- package/template/.codex/skills/yss-ddd-scaffold-generator/references/engineering-baseline.md +7 -1
- package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/first-slice-compatibility.test.mjs +6 -10
- package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/first-slice-verification.test.mjs +12 -16
- package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/run_first_slice_verification.mjs +36 -88
- package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +4 -3
- package/template/.codex/skills/yss-design-system/SKILL.md +2 -2
- package/template/.codex/skills/yss-domain/references/domain-layer-guide.md +8 -1
- package/template/.codex/skills/yss-formily/SKILL.md +2 -2
- package/template/.codex/skills/yss-frontend-scaffold-generator/SKILL.md +1 -1
- package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/README.md +1 -1
- package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/package.json +2 -2
- package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/pnpm-lock.yaml +158 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/references/data-quality-v1.manifest.json +3 -3
- package/template/.codex/skills/yss-frontend-scaffold-generator/scripts/scaffold-generator.test.mjs +5 -0
- package/template/.codex/skills/yss-hook/SKILL.md +3 -2
- package/template/.codex/skills/yss-implementation-contract-compiler/references/boundaries.md +6 -1
- package/template/.codex/skills/yss-layered-mvc-scaffold-generator/SKILL.md +1 -1
- package/template/.codex/skills/yss-layered-mvc-scaffold-generator/assets/templates/architecture-rules-test.java.template +66 -0
- package/template/.codex/skills/yss-layered-mvc-scaffold-generator/scripts/generate_scaffold.mjs +4 -2
- package/template/.codex/skills/yss-layered-mvc-scaffold-generator/scripts/scaffold-generator.test.mjs +0 -7
- package/template/.codex/skills/yss-mybatis/SKILL.md +4 -0
- package/template/.codex/skills/yss-product-lifecycle/references/orchestration-contract.yaml +1 -3
- package/template/.codex/skills/yss-repository/references/profiles/target-domain-model.md +10 -2
- package/template/.codex/skills/yss-skill-source-index-refresh/references/source-map-config.md +3 -2
- package/template/.codex/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.mjs +3 -2
- package/template/.codex/skills/yss-technical-design/SKILL.md +1 -1
- package/template/.codex/skills/yss-technical-design/references/technical-design-contract.md +1 -1
- package/template/.codex/skills/yss-technical-design/tests/run-scenarios.mjs +1 -2
- package/template/.codex/skills/yss-ui/SKILL.md +9 -6
- package/template/.codex/skills/yss-ui/references/component-routing.md +11 -4
- package/template/.codex/skills/yss-ui-business-page-generation/SKILL.md +5 -1
- package/template/.codex/skills/yss-ui-business-page-generation/references/hooks-map.md +3 -2
- package/template/.codex/skills/yss-web-controller/references/web-adapter-layer-guide.md +8 -0
- package/template/.codex/skills/ytable-usage/SKILL.md +14 -7
- package/template/.codex/skills/ytree-usage/SKILL.md +1 -0
- package/template/.cursor/skills/code-review/references/yss-review-standards.md +22 -0
- package/template/.cursor/skills/formily-mode-slot-detail/SKILL.md +3 -4
- package/template/.cursor/skills/lombok/SKILL.md +1 -1
- package/template/.cursor/skills/mapstruct/SKILL.md +3 -1
- package/template/.cursor/skills/yedit-table-usage/SKILL.md +2 -0
- package/template/.cursor/skills/yss-application/references/application-layer-guide.md +7 -0
- package/template/.cursor/skills/yss-backend-spec-review/SKILL.md +38 -0
- package/template/.cursor/skills/yss-backend-spec-review/references/check-inputs.md +21 -0
- package/template/.cursor/skills/yss-backend-spec-review/references/remediation-workflow.md +48 -0
- package/template/.cursor/skills/yss-backend-spec-review/tests/routing.test.mjs +19 -0
- package/template/.cursor/skills/yss-ddd-scaffold-generator/SKILL.md +6 -4
- package/template/.cursor/skills/yss-ddd-scaffold-generator/assets/templates/java/architecture-rules-test.java.template +60 -23
- package/template/.cursor/skills/yss-ddd-scaffold-generator/assets/templates/pom/bootstrap-pom.xml.template +6 -0
- package/template/.cursor/skills/yss-ddd-scaffold-generator/references/ARCHITECTURE.md +1 -1
- package/template/.cursor/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +4 -2
- package/template/.cursor/skills/yss-ddd-scaffold-generator/references/engineering-baseline.md +7 -1
- package/template/.cursor/skills/yss-ddd-scaffold-generator/scripts/first-slice-compatibility.test.mjs +6 -10
- package/template/.cursor/skills/yss-ddd-scaffold-generator/scripts/first-slice-verification.test.mjs +12 -16
- package/template/.cursor/skills/yss-ddd-scaffold-generator/scripts/run_first_slice_verification.mjs +36 -88
- package/template/.cursor/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +4 -3
- package/template/.cursor/skills/yss-design-system/SKILL.md +2 -2
- package/template/.cursor/skills/yss-domain/references/domain-layer-guide.md +8 -1
- package/template/.cursor/skills/yss-formily/SKILL.md +2 -2
- package/template/.cursor/skills/yss-frontend-scaffold-generator/SKILL.md +1 -1
- package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/README.md +1 -1
- package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/package.json +2 -2
- package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/pnpm-lock.yaml +158 -0
- package/template/.cursor/skills/yss-frontend-scaffold-generator/references/data-quality-v1.manifest.json +3 -3
- package/template/.cursor/skills/yss-frontend-scaffold-generator/scripts/scaffold-generator.test.mjs +5 -0
- package/template/.cursor/skills/yss-hook/SKILL.md +3 -2
- package/template/.cursor/skills/yss-implementation-contract-compiler/references/boundaries.md +6 -1
- package/template/.cursor/skills/yss-layered-mvc-scaffold-generator/SKILL.md +1 -1
- package/template/.cursor/skills/yss-layered-mvc-scaffold-generator/assets/templates/architecture-rules-test.java.template +66 -0
- package/template/.cursor/skills/yss-layered-mvc-scaffold-generator/scripts/generate_scaffold.mjs +4 -2
- package/template/.cursor/skills/yss-layered-mvc-scaffold-generator/scripts/scaffold-generator.test.mjs +0 -7
- package/template/.cursor/skills/yss-mybatis/SKILL.md +4 -0
- package/template/.cursor/skills/yss-product-lifecycle/references/orchestration-contract.yaml +1 -3
- package/template/.cursor/skills/yss-repository/references/profiles/target-domain-model.md +10 -2
- package/template/.cursor/skills/yss-skill-source-index-refresh/references/source-map-config.md +3 -2
- package/template/.cursor/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.mjs +3 -2
- package/template/.cursor/skills/yss-technical-design/SKILL.md +1 -1
- package/template/.cursor/skills/yss-technical-design/references/technical-design-contract.md +1 -1
- package/template/.cursor/skills/yss-technical-design/tests/run-scenarios.mjs +1 -2
- package/template/.cursor/skills/yss-ui/SKILL.md +9 -6
- package/template/.cursor/skills/yss-ui/references/component-routing.md +11 -4
- package/template/.cursor/skills/yss-ui-business-page-generation/SKILL.md +5 -1
- package/template/.cursor/skills/yss-ui-business-page-generation/references/hooks-map.md +3 -2
- package/template/.cursor/skills/yss-web-controller/references/web-adapter-layer-guide.md +8 -0
- package/template/.cursor/skills/ytable-usage/SKILL.md +14 -7
- package/template/.cursor/skills/ytree-usage/SKILL.md +1 -0
- package/template/.pi/skills/code-review/references/yss-review-standards.md +22 -0
- package/template/.pi/skills/formily-mode-slot-detail/SKILL.md +3 -4
- package/template/.pi/skills/lombok/SKILL.md +1 -1
- package/template/.pi/skills/mapstruct/SKILL.md +3 -1
- package/template/.pi/skills/yedit-table-usage/SKILL.md +2 -0
- package/template/.pi/skills/yss-application/references/application-layer-guide.md +7 -0
- package/template/.pi/skills/yss-backend-spec-review/SKILL.md +38 -0
- package/template/.pi/skills/yss-backend-spec-review/references/check-inputs.md +21 -0
- package/template/.pi/skills/yss-backend-spec-review/references/remediation-workflow.md +48 -0
- package/template/.pi/skills/yss-backend-spec-review/tests/routing.test.mjs +19 -0
- package/template/.pi/skills/yss-ddd-scaffold-generator/SKILL.md +6 -4
- package/template/.pi/skills/yss-ddd-scaffold-generator/assets/templates/java/architecture-rules-test.java.template +60 -23
- package/template/.pi/skills/yss-ddd-scaffold-generator/assets/templates/pom/bootstrap-pom.xml.template +6 -0
- package/template/.pi/skills/yss-ddd-scaffold-generator/references/ARCHITECTURE.md +1 -1
- package/template/.pi/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +4 -2
- package/template/.pi/skills/yss-ddd-scaffold-generator/references/engineering-baseline.md +7 -1
- package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/first-slice-compatibility.test.mjs +6 -10
- package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/first-slice-verification.test.mjs +12 -16
- package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/run_first_slice_verification.mjs +36 -88
- package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +4 -3
- package/template/.pi/skills/yss-design-system/SKILL.md +2 -2
- package/template/.pi/skills/yss-domain/references/domain-layer-guide.md +8 -1
- package/template/.pi/skills/yss-formily/SKILL.md +2 -2
- package/template/.pi/skills/yss-frontend-scaffold-generator/SKILL.md +1 -1
- package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/README.md +1 -1
- package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/package.json +2 -2
- package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/pnpm-lock.yaml +158 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/references/data-quality-v1.manifest.json +3 -3
- package/template/.pi/skills/yss-frontend-scaffold-generator/scripts/scaffold-generator.test.mjs +5 -0
- package/template/.pi/skills/yss-hook/SKILL.md +3 -2
- package/template/.pi/skills/yss-implementation-contract-compiler/references/boundaries.md +6 -1
- package/template/.pi/skills/yss-layered-mvc-scaffold-generator/SKILL.md +1 -1
- package/template/.pi/skills/yss-layered-mvc-scaffold-generator/assets/templates/architecture-rules-test.java.template +66 -0
- package/template/.pi/skills/yss-layered-mvc-scaffold-generator/scripts/generate_scaffold.mjs +4 -2
- package/template/.pi/skills/yss-layered-mvc-scaffold-generator/scripts/scaffold-generator.test.mjs +0 -7
- package/template/.pi/skills/yss-mybatis/SKILL.md +4 -0
- package/template/.pi/skills/yss-product-lifecycle/references/orchestration-contract.yaml +1 -3
- package/template/.pi/skills/yss-repository/references/profiles/target-domain-model.md +10 -2
- package/template/.pi/skills/yss-skill-source-index-refresh/references/source-map-config.md +3 -2
- package/template/.pi/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.mjs +3 -2
- package/template/.pi/skills/yss-technical-design/SKILL.md +1 -1
- package/template/.pi/skills/yss-technical-design/references/technical-design-contract.md +1 -1
- package/template/.pi/skills/yss-technical-design/tests/run-scenarios.mjs +1 -2
- package/template/.pi/skills/yss-ui/SKILL.md +9 -6
- package/template/.pi/skills/yss-ui/references/component-routing.md +11 -4
- package/template/.pi/skills/yss-ui-business-page-generation/SKILL.md +5 -1
- package/template/.pi/skills/yss-ui-business-page-generation/references/hooks-map.md +3 -2
- package/template/.pi/skills/yss-web-controller/references/web-adapter-layer-guide.md +8 -0
- package/template/.pi/skills/ytable-usage/SKILL.md +14 -7
- package/template/.pi/skills/ytree-usage/SKILL.md +1 -0
- package/template/docs/agents/digital-human-roles.yaml +2 -2
- package/template/docs/agents/skill-migrations.md +23 -10
- package/template/docs/agents/yss-skill-registry.yaml +14 -73
- package/template/docs/engineering/backend-platforms.md +14 -0
- package/template/docs/process/schemas/digital-human-task-package.schema.json +657 -100
- package/template/docs/process/schemas/slice-implementation-contract-v3.schema.json +41 -0
- package/template/scripts/lib/backend-platform-provenance.mjs +1 -1
- package/template/scripts/lib/backend-platform-verification.mjs +2 -2
- package/template/scripts/lib/backend-platform.mjs +62 -0
- package/template/scripts/lib/backend-review.mjs +102 -0
- package/template/scripts/lib/first-slice-artifacts.mjs +47 -0
- package/template/scripts/lib/first-slice-tests.mjs +24 -0
- package/template/scripts/lib/lifecycle-transition.mjs +6 -0
- package/template/scripts/lib/maintenance-candidate.mjs +160 -0
- package/template/scripts/lib/skill-registry.mjs +5 -1
- package/template/scripts/lib/skill-supply-chain.mjs +1 -1
- package/template/scripts/lib/slice-execution-preflight.mjs +43 -0
- package/template/scripts/slice-contract +7 -3
- package/template/scripts/verify-backend-platform-matrix +8 -2
- package/template/skills-lock.json +42 -157
- package/template/yss-public-skills.json +5 -7
- package/template.manifest.json +0 -1
- package/template.snapshot.json +5 -5
- package/template/.agents/skills/component-selection-imports/SKILL.md +0 -64
- package/template/.agents/skills/page-form-module/SKILL.md +0 -168
- package/template/.agents/skills/page-list-module/SKILL.md +0 -137
- package/template/.agents/skills/page-skeleton/SKILL.md +0 -76
- package/template/.agents/skills/page-skeleton/examples/AdvancedFormPage/constant.ts +0 -34
- package/template/.agents/skills/page-skeleton/examples/AdvancedFormPage/hooks/useRuleConfig.ts +0 -75
- package/template/.agents/skills/page-skeleton/examples/AdvancedFormPage/index.vue +0 -107
- package/template/.agents/skills/page-skeleton/examples/AdvancedFormPage/schemas/ruleConfigSchema.ts +0 -256
- package/template/.agents/skills/page-skeleton/examples/AdvancedFormPage/style.less +0 -30
- package/template/.agents/skills/page-skeleton/examples/StandardListPage/constant.ts +0 -28
- package/template/.agents/skills/page-skeleton/examples/StandardListPage/hooks/useQualityRuleList.ts +0 -58
- package/template/.agents/skills/page-skeleton/examples/StandardListPage/hooks/useRuleActions.ts +0 -65
- package/template/.agents/skills/page-skeleton/examples/StandardListPage/index.vue +0 -91
- package/template/.agents/skills/page-skeleton/examples/StandardListPage/style.less +0 -49
- package/template/.agents/skills/vue3-best-practices/SKILL.md +0 -68
- package/template/.agents/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +0 -12
- package/template/.agents/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/agents/openai.yaml +0 -5
- package/template/.agents/skills/yss-mvc-data-analysis-project-initializer/SKILL.md +0 -12
- package/template/.agents/skills/yss-mvc-data-analysis-project-initializer/scripts/generate_project.mjs +0 -18
- package/template/.agents/skills/yss-mvc-data-analysis-project-initializer/scripts/run_scaffold_verification.mjs +0 -9
- package/template/.agents/skills/yss-mvc-design/SKILL.md +0 -12
- package/template/.agents/skills/yss-mvc-design/agents/openai.yaml +0 -4
- package/template/.agents/skills/yss-mvc-design/references/mvc-design.schema.json +0 -315
- package/template/.agents/skills/yss-use-table-height/SKILL.md +0 -130
- package/template/.agents/skills/yss-use-table-height/agents/openai.yaml +0 -5
- package/template/.agents/skills/yss-use-table-height/references/frontend-docs.md +0 -9
- package/template/.agents/skills/yss-use-tree-height/SKILL.md +0 -98
- package/template/.agents/skills/yss-use-tree-height/agents/openai.yaml +0 -5
- package/template/.agents/skills/yss-use-tree-height/references/frontend-docs.md +0 -9
- package/template/.codex/skills/component-selection-imports/SKILL.md +0 -64
- package/template/.codex/skills/page-form-module/SKILL.md +0 -168
- package/template/.codex/skills/page-list-module/SKILL.md +0 -137
- package/template/.codex/skills/page-skeleton/SKILL.md +0 -76
- package/template/.codex/skills/page-skeleton/examples/AdvancedFormPage/constant.ts +0 -34
- package/template/.codex/skills/page-skeleton/examples/AdvancedFormPage/hooks/useRuleConfig.ts +0 -75
- package/template/.codex/skills/page-skeleton/examples/AdvancedFormPage/index.vue +0 -107
- package/template/.codex/skills/page-skeleton/examples/AdvancedFormPage/schemas/ruleConfigSchema.ts +0 -256
- package/template/.codex/skills/page-skeleton/examples/AdvancedFormPage/style.less +0 -30
- package/template/.codex/skills/page-skeleton/examples/StandardListPage/constant.ts +0 -28
- package/template/.codex/skills/page-skeleton/examples/StandardListPage/hooks/useQualityRuleList.ts +0 -58
- package/template/.codex/skills/page-skeleton/examples/StandardListPage/hooks/useRuleActions.ts +0 -65
- package/template/.codex/skills/page-skeleton/examples/StandardListPage/index.vue +0 -91
- package/template/.codex/skills/page-skeleton/examples/StandardListPage/style.less +0 -49
- package/template/.codex/skills/vue3-best-practices/SKILL.md +0 -68
- package/template/.codex/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +0 -12
- package/template/.codex/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/agents/openai.yaml +0 -5
- package/template/.codex/skills/yss-mvc-data-analysis-project-initializer/SKILL.md +0 -12
- package/template/.codex/skills/yss-mvc-data-analysis-project-initializer/scripts/generate_project.mjs +0 -18
- package/template/.codex/skills/yss-mvc-data-analysis-project-initializer/scripts/run_scaffold_verification.mjs +0 -9
- package/template/.codex/skills/yss-mvc-design/SKILL.md +0 -12
- package/template/.codex/skills/yss-mvc-design/agents/openai.yaml +0 -4
- package/template/.codex/skills/yss-mvc-design/references/mvc-design.schema.json +0 -315
- package/template/.codex/skills/yss-use-table-height/SKILL.md +0 -130
- package/template/.codex/skills/yss-use-table-height/agents/openai.yaml +0 -5
- package/template/.codex/skills/yss-use-table-height/references/frontend-docs.md +0 -9
- package/template/.codex/skills/yss-use-tree-height/SKILL.md +0 -98
- package/template/.codex/skills/yss-use-tree-height/agents/openai.yaml +0 -5
- package/template/.codex/skills/yss-use-tree-height/references/frontend-docs.md +0 -9
- package/template/.cursor/skills/component-selection-imports/SKILL.md +0 -64
- package/template/.cursor/skills/page-form-module/SKILL.md +0 -168
- package/template/.cursor/skills/page-list-module/SKILL.md +0 -137
- package/template/.cursor/skills/page-skeleton/SKILL.md +0 -76
- package/template/.cursor/skills/page-skeleton/examples/AdvancedFormPage/constant.ts +0 -34
- package/template/.cursor/skills/page-skeleton/examples/AdvancedFormPage/hooks/useRuleConfig.ts +0 -75
- package/template/.cursor/skills/page-skeleton/examples/AdvancedFormPage/index.vue +0 -107
- package/template/.cursor/skills/page-skeleton/examples/AdvancedFormPage/schemas/ruleConfigSchema.ts +0 -256
- package/template/.cursor/skills/page-skeleton/examples/AdvancedFormPage/style.less +0 -30
- package/template/.cursor/skills/page-skeleton/examples/StandardListPage/constant.ts +0 -28
- package/template/.cursor/skills/page-skeleton/examples/StandardListPage/hooks/useQualityRuleList.ts +0 -58
- package/template/.cursor/skills/page-skeleton/examples/StandardListPage/hooks/useRuleActions.ts +0 -65
- package/template/.cursor/skills/page-skeleton/examples/StandardListPage/index.vue +0 -91
- package/template/.cursor/skills/page-skeleton/examples/StandardListPage/style.less +0 -49
- package/template/.cursor/skills/vue3-best-practices/SKILL.md +0 -68
- package/template/.cursor/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +0 -12
- package/template/.cursor/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/agents/openai.yaml +0 -5
- package/template/.cursor/skills/yss-mvc-data-analysis-project-initializer/SKILL.md +0 -12
- package/template/.cursor/skills/yss-mvc-data-analysis-project-initializer/scripts/generate_project.mjs +0 -18
- package/template/.cursor/skills/yss-mvc-data-analysis-project-initializer/scripts/run_scaffold_verification.mjs +0 -9
- package/template/.cursor/skills/yss-mvc-design/SKILL.md +0 -12
- package/template/.cursor/skills/yss-mvc-design/agents/openai.yaml +0 -4
- package/template/.cursor/skills/yss-mvc-design/references/mvc-design.schema.json +0 -315
- package/template/.cursor/skills/yss-use-table-height/SKILL.md +0 -130
- package/template/.cursor/skills/yss-use-table-height/agents/openai.yaml +0 -5
- package/template/.cursor/skills/yss-use-table-height/references/frontend-docs.md +0 -9
- package/template/.cursor/skills/yss-use-tree-height/SKILL.md +0 -98
- package/template/.cursor/skills/yss-use-tree-height/agents/openai.yaml +0 -5
- package/template/.cursor/skills/yss-use-tree-height/references/frontend-docs.md +0 -9
- package/template/.pi/skills/component-selection-imports/SKILL.md +0 -64
- package/template/.pi/skills/page-form-module/SKILL.md +0 -168
- package/template/.pi/skills/page-list-module/SKILL.md +0 -137
- package/template/.pi/skills/page-skeleton/SKILL.md +0 -76
- package/template/.pi/skills/page-skeleton/examples/AdvancedFormPage/constant.ts +0 -34
- package/template/.pi/skills/page-skeleton/examples/AdvancedFormPage/hooks/useRuleConfig.ts +0 -75
- package/template/.pi/skills/page-skeleton/examples/AdvancedFormPage/index.vue +0 -107
- package/template/.pi/skills/page-skeleton/examples/AdvancedFormPage/schemas/ruleConfigSchema.ts +0 -256
- package/template/.pi/skills/page-skeleton/examples/AdvancedFormPage/style.less +0 -30
- package/template/.pi/skills/page-skeleton/examples/StandardListPage/constant.ts +0 -28
- package/template/.pi/skills/page-skeleton/examples/StandardListPage/hooks/useQualityRuleList.ts +0 -58
- package/template/.pi/skills/page-skeleton/examples/StandardListPage/hooks/useRuleActions.ts +0 -65
- package/template/.pi/skills/page-skeleton/examples/StandardListPage/index.vue +0 -91
- package/template/.pi/skills/page-skeleton/examples/StandardListPage/style.less +0 -49
- package/template/.pi/skills/vue3-best-practices/SKILL.md +0 -68
- package/template/.pi/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +0 -12
- package/template/.pi/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/agents/openai.yaml +0 -5
- package/template/.pi/skills/yss-mvc-data-analysis-project-initializer/SKILL.md +0 -12
- package/template/.pi/skills/yss-mvc-data-analysis-project-initializer/scripts/generate_project.mjs +0 -18
- package/template/.pi/skills/yss-mvc-data-analysis-project-initializer/scripts/run_scaffold_verification.mjs +0 -9
- package/template/.pi/skills/yss-mvc-design/SKILL.md +0 -12
- package/template/.pi/skills/yss-mvc-design/agents/openai.yaml +0 -4
- package/template/.pi/skills/yss-mvc-design/references/mvc-design.schema.json +0 -315
- package/template/.pi/skills/yss-use-table-height/SKILL.md +0 -130
- package/template/.pi/skills/yss-use-table-height/agents/openai.yaml +0 -5
- package/template/.pi/skills/yss-use-table-height/references/frontend-docs.md +0 -9
- package/template/.pi/skills/yss-use-tree-height/SKILL.md +0 -98
- package/template/.pi/skills/yss-use-tree-height/agents/openai.yaml +0 -5
- package/template/.pi/skills/yss-use-tree-height/references/frontend-docs.md +0 -9
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: component-selection-imports
|
|
3
|
-
description: 指导 YSS UI 业务页面、CRUD、列表页、表单页和组件评审在编码前判定组件、Hook 与工具函数的真实导出来源;当需要在 @yss-ui/components、@yss-ui/hooks、@yss-ui/utils 与 ant-design-vue 之间选择,或需要排查虚构 Y 前缀组件、错误导入、Formily UI 边界时使用。
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# 组件选择与导入
|
|
7
|
-
|
|
8
|
-
## 触发条件
|
|
9
|
-
|
|
10
|
-
- 生成 YSS UI 业务页面前需要判定组件、Hook 或工具函数来源。
|
|
11
|
-
- 出现错误 Y 前缀、导入冲突、Formily UI 跨层或者组件是否已封装不明确。
|
|
12
|
-
|
|
13
|
-
## 不适用场景
|
|
14
|
-
|
|
15
|
-
- 只修改与 UI 导入无关的纯数据逻辑。
|
|
16
|
-
- 组件库内部组件开发;该场景应按组件开发规范处理内部依赖。
|
|
17
|
-
|
|
18
|
-
## 判定流程
|
|
19
|
-
|
|
20
|
-
1. 当前会话可用 yss-ui MCP 时,先用 `list_components` 确认组件、Hook 或 Utils 是否真实存在,再用 `get_component_docs` 确认名称、导出包、Props、Events 和 Slots,不只看 demo 标签名。
|
|
21
|
-
2. `get_component_docs` 未命中时,先用 `search_docs` 和 `list_components` 校正别名与归属,不得立即判定为未封装。
|
|
22
|
-
3. MCP 工具不可用、调用失败或校正后仍无结果时,读取当前上下文或文档站的最新 `llms-full.txt`。
|
|
23
|
-
4. 必要时读取 `../yss-ui-business-page-generation/references/component-map.md`、`hooks-map.md`、`utils-map.md` 快速缩小范围;文档与当前项目依赖版本不一致时,最终以当前源码和可编译导出为准。
|
|
24
|
-
5. 已导出的 YSS 能力优先从 `@yss-ui/components`、`@yss-ui/hooks`、`@yss-ui/utils` 导入;确认未封装后才从 `ant-design-vue` 导入原组件。
|
|
25
|
-
6. 若文档与导出源码不一致,记录差异并按当前仓库可编译的导出处理,不猜测 API。
|
|
26
|
-
|
|
27
|
-
## 硬约束(禁止/必须)
|
|
28
|
-
|
|
29
|
-
- 业务层已封装组件必须从 `@yss-ui/components` 导入;可编辑表格必须优先使用 `YEditTable`,业务主表格必须优先使用 `YTable`。
|
|
30
|
-
- 当前公共导出包含 `YButton`、`YCard`、`YTable`、`YEditTable`、`YTree`、`YSplitPane`、`YFormily` 等;未导出 `YModal`、`YDrawer`、`YInput`、`YPopconfirm`,禁止臆造这些名称。
|
|
31
|
-
- 当前未封装的 `Modal`、`Drawer`、`Popconfirm`、`Input` 等从 `ant-design-vue` 导入。删除操作使用按钮附近的 `Popconfirm`,不默认使用居中 `Modal.confirm`。
|
|
32
|
-
- 业务层禁止导入 `@formily/antdv` 或 `@formily/antd*` UI 组件;使用 `YFormily` 提供的 Schema 与组件边界。
|
|
33
|
-
- 禁止因文档暂时不可达就把猜测的 `Y*` 组件改成 Ant Design Vue “先落地”。只能复用当前仓库已证明可用的导入,或明确报告待确认项。
|
|
34
|
-
- 接口错误提示由 `mutator.ts` 的响应拦截器统一处理。API Hook 不得在 `success === false` 分支或 `catch` 内重复调用 `message.error`;`message` 只用于非 API 错误的本地交互反馈或成功提示。
|
|
35
|
-
|
|
36
|
-
## 标准代码骨架
|
|
37
|
-
|
|
38
|
-
```typescript
|
|
39
|
-
import {
|
|
40
|
-
YButton,
|
|
41
|
-
YCard,
|
|
42
|
-
YEditTable,
|
|
43
|
-
YTable,
|
|
44
|
-
YTree,
|
|
45
|
-
YFormily,
|
|
46
|
-
type YEditTableColumn,
|
|
47
|
-
type YTableColumn,
|
|
48
|
-
} from '@yss-ui/components';
|
|
49
|
-
import { useLoading, useTableHeight, useTreeHeight } from '@yss-ui/hooks';
|
|
50
|
-
import { copyToClipboard, formatDate } from '@yss-ui/utils';
|
|
51
|
-
import { Drawer, Input, Modal, Popconfirm } from 'ant-design-vue';
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
## 交付检查清单
|
|
55
|
-
|
|
56
|
-
- [ ] 每个关键导入都能在最新文档或包的 `src/index.ts` 中追溯。
|
|
57
|
-
- [ ] 未导出的 Y 前缀组件没有出现在业务代码中。
|
|
58
|
-
- [ ] 删除、表格、编辑表格和 Formily 导入边界符合项目约束。
|
|
59
|
-
- [ ] API Hook 中没有重复 `message.error`,异常仍由 `Promise.reject` 中断后续流程。
|
|
60
|
-
|
|
61
|
-
## 失败兜底策略
|
|
62
|
-
|
|
63
|
-
- MCP 与 `llms-full.txt` 都不可用时,用 CodeGraph/源码 `src/index.ts` 和当前项目已编译的相近页面交叉确认,不猜测导出。
|
|
64
|
-
- 文档与源码不一致时,优先保证当前仓库可编译,并在交付中明确标注文档差异。
|
|
@@ -1,168 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: page-form-module
|
|
3
|
-
description: "实现 YSS UI 新增、编辑、查看表单模块及弹窗闭环;排查回显丢失、重置、提交与列表刷新。"
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Page Form Module Skill
|
|
7
|
-
|
|
8
|
-
## 触发条件
|
|
9
|
-
|
|
10
|
-
- 实现新增、编辑、查看表单页,或 Drawer/Modal 中的表单闭环。
|
|
11
|
-
- 需要处理 Schema、mode 0/1/2、回填、校验、提交和成功后列表刷新。
|
|
12
|
-
|
|
13
|
-
## 不适用场景
|
|
14
|
-
|
|
15
|
-
- 页面只包含列表查询,不包含任何表单编辑。
|
|
16
|
-
- 表单为分步流程:使用 `formily-step-flow`。
|
|
17
|
-
- 仅修复单个联动表达式:使用 `formily-linkage-effects`。
|
|
18
|
-
|
|
19
|
-
## 必读依赖
|
|
20
|
-
|
|
21
|
-
- 表单基础:`../formily-foundation/SKILL.md`
|
|
22
|
-
- 联动副作用:`../formily-linkage-effects/SKILL.md`
|
|
23
|
-
- 模式与详情:`../formily-mode-slot-detail/SKILL.md`
|
|
24
|
-
- 分步表单:`../formily-step-flow/SKILL.md`
|
|
25
|
-
- 接口与错误处理:`../yss-api-integration/SKILL.md`
|
|
26
|
-
|
|
27
|
-
## 文档检索
|
|
28
|
-
|
|
29
|
-
1. MCP 可用时,先用 `get_component_docs` 查询 `YFormily` 的 `mode`、`detail-options`、实例提交与回填 API,再按场景用 `get_demo` 获取 `formily/modes`、`formily/group`、`formily/linkage` 或 `formily/steps` 示例。
|
|
30
|
-
2. 精确查询无结果时,先用 `search_docs` 或 `list_components` 校正名称;仅在 MCP 不可用、调用失败或校正后仍无结果时,回退读取最新 `llms-full.txt`。文档版本与当前依赖不一致时,再核对当前源码、CodeGraph 和真实导出。
|
|
31
|
-
3. 当前会话已经加载上述本地 Skill 时,不要再通过 MCP 重复查询同一 Skill;仅在依赖 Skill 缺失时使用 `list_skills`、`get_skill` 补齐规则。
|
|
32
|
-
|
|
33
|
-
## 硬约束(禁止/必须)
|
|
34
|
-
|
|
35
|
-
- 提交前必须调用 `formRef.submit()` 或 `Submit.onSubmit` 进入完整校验链路。
|
|
36
|
-
- `open/mode/currentId/formModel/submitting` 和回填、提交、关闭方法收敛在同一 Hook。
|
|
37
|
-
- **数据前置同步原则(必守)**:表单数据必须在 `openCreate`/`openEdit` 触发前**同步赋好 `formModel.value`**;**严禁**在弹窗/抽屉组件内部通过 `watch(visible) + await nextTick() + initForm()` 异步回填数据(会导致首次编辑正常,切换新增再编辑时因时序差读取到残留空对象导致回显变空白的经典 Bug)。
|
|
38
|
-
- **单一信任源**:使用 `v-model="formModel"` + `ref="formRef"` 调用 `submit()` 驱动;**严禁**在组件顶层写 `const form = createForm()` 与 `v-model`、`form.setValues`、`form.reset` 混用。
|
|
39
|
-
- **禁止滥用动态 `:key`**:**严禁**在 `YFormily`/`YssFormily` 上使用 `:key="isEdit ? 'edit' : 'create'"` 等强制 Remount,应直接通过 `:mode` 或响应式数据驱动。
|
|
40
|
-
- **弹窗生命周期隔离**:Modal/Drawer 必须配置 `:destroy-on-close="true"`,且内部 `YFormily` 必须使用 `v-if="open"` 随容器打开挂载、关闭销毁,避免宽度为 0 导致栅格退化,并彻底回收脏状态。
|
|
41
|
-
- 新增/编辑/查看使用 `YFormily :mode="mode"`,`mode=2` 不渲染保存按钮。
|
|
42
|
-
- Drawer 默认使用响应式宽度;基础表单设置 `FormLayout { labelWidth: 140, labelAlign: 'right' }`。
|
|
43
|
-
- Drawer/Modal 中的 `FormGrid` 默认使用 `maxColumns: 2`、`minColumns: 1`、`minWidth: 320~360`;禁止 `minColumns: 2` 锁死两列。
|
|
44
|
-
- 备注、说明和长文本通过 `x-decorator-props.gridSpan` 跨满整行。
|
|
45
|
-
- 下拉选择器异步数据源必须使用 `enum` 或 `x-reactions` / `field.dataSource` 注入,严禁写入 `x-component-props.options`;基础字典下拉优先在弹窗打开前 `await` 拉取完成或在页面初始化提前拉取。
|
|
46
|
-
- **表单校验规则规范**:必填文本字段声明 `whitespace: true`(如 `{ required: true, whitespace: true, message: '请输入xxx' }`);自定义长度与格式校验必须使用条件式函数,空值放行交由 `required` 报错,非空才校验具体规则,禁止多个自定义校验重复承担必填职责。YFormily 适配层虽会归一化反馈展示,但不能代替正确的 Schema 语义。
|
|
47
|
-
- 长整型 ID 按字符串原样回填和提交,禁止 `Number()`/`parseInt()`;表单中的普通数值按生成 DTO 真实类型处理。
|
|
48
|
-
- 禁止使用 `if (res?.success)` 包裹保存成功逻辑,也禁止在 `catch` 重复 `message.error`。
|
|
49
|
-
|
|
50
|
-
## 标准代码骨架
|
|
51
|
-
|
|
52
|
-
```typescript
|
|
53
|
-
import { ref } from 'vue';
|
|
54
|
-
|
|
55
|
-
/** 默认表单模型 */
|
|
56
|
-
const createDefaultModel = () => ({
|
|
57
|
-
name: '',
|
|
58
|
-
code: '',
|
|
59
|
-
description: '',
|
|
60
|
-
});
|
|
61
|
-
|
|
62
|
-
/** YFormily 业务侧仅需的实例方法。 */
|
|
63
|
-
interface FormilyFormRef {
|
|
64
|
-
submit: () => Promise<Record<string, unknown>>;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
/** 管理表单的模式、可见性、数据模型与提交链路。 */
|
|
68
|
-
export const useRuleForm = (onSuccess: () => void) => {
|
|
69
|
-
const open = ref(false);
|
|
70
|
-
const mode = ref<0 | 1 | 2>(0);
|
|
71
|
-
const currentId = ref<string>();
|
|
72
|
-
const formModel = ref(createDefaultModel());
|
|
73
|
-
const submitting = ref(false);
|
|
74
|
-
const formRef = ref<FormilyFormRef>();
|
|
75
|
-
|
|
76
|
-
/** 打开新增:同步赋空值 */
|
|
77
|
-
const openCreate = (): void => {
|
|
78
|
-
mode.value = 0;
|
|
79
|
-
currentId.value = undefined;
|
|
80
|
-
formModel.value = createDefaultModel();
|
|
81
|
-
open.value = true;
|
|
82
|
-
};
|
|
83
|
-
|
|
84
|
-
/** 打开编辑:同步赋目标行数据,前置完成回填 */
|
|
85
|
-
const openEdit = (record: Record<string, any>): void => {
|
|
86
|
-
mode.value = 1;
|
|
87
|
-
currentId.value = record.id;
|
|
88
|
-
formModel.value = {
|
|
89
|
-
name: record.name ?? '',
|
|
90
|
-
code: record.code ?? '',
|
|
91
|
-
description: record.description ?? '',
|
|
92
|
-
};
|
|
93
|
-
open.value = true;
|
|
94
|
-
};
|
|
95
|
-
|
|
96
|
-
/** 关闭并清理 */
|
|
97
|
-
const close = (): void => {
|
|
98
|
-
open.value = false;
|
|
99
|
-
formModel.value = createDefaultModel();
|
|
100
|
-
};
|
|
101
|
-
|
|
102
|
-
/** 校验并保存表单。 */
|
|
103
|
-
const submit = async (): Promise<void> => {
|
|
104
|
-
if (mode.value === 2 || submitting.value || !formRef.value) return;
|
|
105
|
-
|
|
106
|
-
submitting.value = true;
|
|
107
|
-
try {
|
|
108
|
-
const values = await formRef.value.submit();
|
|
109
|
-
await saveRule({ ...formModel.value, ...values, id: currentId.value });
|
|
110
|
-
close();
|
|
111
|
-
onSuccess();
|
|
112
|
-
} catch {
|
|
113
|
-
// Formily 校验反馈或 mutator 已展示错误,此处不重复 Toast。
|
|
114
|
-
} finally {
|
|
115
|
-
submitting.value = false;
|
|
116
|
-
}
|
|
117
|
-
};
|
|
118
|
-
|
|
119
|
-
return { open, mode, currentId, formModel, submitting, formRef, openCreate, openEdit, close, submit };
|
|
120
|
-
};
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
`saveRule` 必须替换为当前 Orval 真实生成方法,不得照抄占位名。
|
|
124
|
-
|
|
125
|
-
```vue
|
|
126
|
-
<YFormily
|
|
127
|
-
v-if="open"
|
|
128
|
-
ref="formRef"
|
|
129
|
-
v-model="formModel"
|
|
130
|
-
:schema="schema"
|
|
131
|
-
:mode="mode"
|
|
132
|
-
:detail-options="{ bordered: true, maxColumns: 2, minColumns: 1, minWidth: 320 }"
|
|
133
|
-
/>
|
|
134
|
-
```
|
|
135
|
-
|
|
136
|
-
```typescript
|
|
137
|
-
/** Drawer 表单的基础布局 Schema。 */
|
|
138
|
-
export const drawerFormLayout = {
|
|
139
|
-
type: 'void',
|
|
140
|
-
'x-component': 'FormLayout',
|
|
141
|
-
'x-component-props': { layout: 'horizontal', labelWidth: 140, labelAlign: 'right' },
|
|
142
|
-
properties: {
|
|
143
|
-
grid: {
|
|
144
|
-
type: 'void',
|
|
145
|
-
'x-component': 'FormGrid',
|
|
146
|
-
'x-component-props': { maxColumns: 2, minColumns: 1, minWidth: 340, columnGap: 24, rowGap: 16 },
|
|
147
|
-
properties: {},
|
|
148
|
-
},
|
|
149
|
-
},
|
|
150
|
-
};
|
|
151
|
-
```
|
|
152
|
-
|
|
153
|
-
## 交付检查清单
|
|
154
|
-
|
|
155
|
-
- [ ] `mode=0/1/2` 语义、回填和查看态渲染正确。
|
|
156
|
-
- [ ] 提交先校验,又防重入,loading 始终在 `finally` 恢复。
|
|
157
|
-
- [ ] Drawer/Modal 内 `YFormily` 按可见性条件挂载与销毁。
|
|
158
|
-
- [ ] label 宽度和右对齐一致,FormGrid 能从 2 列响应式收缩为 1 列。
|
|
159
|
-
- [ ] 长字段已跨行,长整型 ID 未转 number。
|
|
160
|
-
- [ ] 没有 `if (res?.success)` 和重复错误 Toast。
|
|
161
|
-
- [ ] 成功后关闭表单并通知上层刷新。
|
|
162
|
-
- [ ] 业务层未导入 `@formily/antdv` UI 组件。
|
|
163
|
-
|
|
164
|
-
## 失败兜底策略
|
|
165
|
-
|
|
166
|
-
- 提交无响应时,先确认 `submit()` 是否实际调用并查看 Formily 校验反馈。
|
|
167
|
-
- 编辑回填异常时,核对真实 DTO、字段路径与 Schema path,不在模板散落转换。
|
|
168
|
-
- 表单过大时,拆分 Schema 生成函数、字典 Hook 和提交 Hook,保持 `index.vue` 不超过 150 行。
|
|
@@ -1,137 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: page-list-module
|
|
3
|
-
description: 指导实现 YSS UI 标准列表、远程分页、查询重置、YTable 工具栏、行操作、批量操作和左树右表模块;当页面需要查询、表格、分页或 CRUD 列表闭环时使用。
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Page List Module Skill
|
|
7
|
-
|
|
8
|
-
## 触发条件
|
|
9
|
-
|
|
10
|
-
- 实现查询、表格、分页、行操作或批量操作组合的业务列表。
|
|
11
|
-
- 实现左树右表、远程分页、工具栏或列设置。
|
|
12
|
-
|
|
13
|
-
## 不适用场景
|
|
14
|
-
|
|
15
|
-
- 仅实现表单提交,没有列表或分页。
|
|
16
|
-
- 仅展示本地静态数据,不涉及业务查询与列表操作。
|
|
17
|
-
|
|
18
|
-
## 必读依赖
|
|
19
|
-
|
|
20
|
-
- 组件选型:`../component-selection-imports/SKILL.md`
|
|
21
|
-
- 表格 API:`../ytable-usage/SKILL.md`
|
|
22
|
-
- 查询表单:`../yss-formily/SKILL.md`
|
|
23
|
-
- 接口、错误链路和长整型:`../yss-api-integration/SKILL.md`
|
|
24
|
-
- 左树右表高度:`../ytree-usage/SKILL.md`、`../yss-use-tree-height/SKILL.md`、`../yss-use-table-height/SKILL.md`
|
|
25
|
-
|
|
26
|
-
## 文档检索
|
|
27
|
-
|
|
28
|
-
1. MCP 可用时,按当前页面实际使用的能力调用 `get_component_docs` 查询 `YTable`、`YFormily`、`useTableHeight` 或 `useTreeHeight`,再用 `get_demo` 获取对应官方示例;不要只凭 Skill 内的静态片段推断 API。
|
|
29
|
-
2. 精确查询无结果时,先用 `search_docs` 或 `list_components` 校正名称;仅在 MCP 不可用、调用失败或校正后仍无结果时,回退读取最新 `llms-full.txt`。文档版本与当前依赖不一致时,再核对当前源码、CodeGraph 和真实导出。
|
|
30
|
-
3. 当前会话已经加载上述本地 Skill 时,不要再通过 MCP 重复查询同一 Skill;仅在依赖 Skill 缺失时使用 `list_skills`、`get_skill` 补齐规则。
|
|
31
|
-
|
|
32
|
-
## 硬约束(禁止/必须)
|
|
33
|
-
|
|
34
|
-
- 列表请求必须收敛在 `useXxxList`,模板不直接请求。
|
|
35
|
-
- 后端查询参数可用 `pageIndex/pageSize`;YTable 分页状态必须使用 `current/pageSize/total`。
|
|
36
|
-
- 远程分页必须配置 `pageable`、`pagination.remote = true`、`v-model:pagination` 和 `@page-change`;事件参数固定为 `{ current, pageSize }`,禁止读取 `currentPage`。
|
|
37
|
-
- 禁止臆造 `request`/`search-params` 等 Prop,也禁止把实例 `refresh()` 当成远程重新查询;该方法只调用 vxe `updateData()` 刷新当前表格数据,远程查询/重置/刷新必须调用业务 Hook。
|
|
38
|
-
- 查询区使用纵向 `search-content`:`YFormily` 仅渲染字段,查询/重置按钮在外部 `.xxx__search-actions` 独占下一行并右对齐。
|
|
39
|
-
- 新增、导入、批量操作等主操作直接放入 `#toolbar-right` 插槽即可自动渲染;**无需配置 `:toolbar-config="{ custom: true }"`**,避免无端展示列设置图标;**仅在业务明确需要列设置时才传入 `:toolbar-config="{ custom: true }"`**。
|
|
40
|
-
- 删除等危险操作默认使用 `actionConfig.buttons[].isConfirm` 按钮项气泡确认,禁止默认使用居中 `Modal.confirm`。
|
|
41
|
-
- 列定义、状态映射和筛选配置放入 `constant.ts`;超过 10 行的列不得内联在 `index.vue`。
|
|
42
|
-
- 长整型 ID 保持字符串透传,禁止 `Number()`/`parseInt()` 等会丢失精度的转换;页码、状态值等普通 number 按真实生成类型使用。
|
|
43
|
-
- 禁止使用 `if (res?.success)` 包裹成功逻辑,也禁止在 `else`/`catch` 重复调用 `message.error`;mutator 已对 `success === false` 提示并 reject。
|
|
44
|
-
|
|
45
|
-
## 标准代码骨架
|
|
46
|
-
|
|
47
|
-
```typescript
|
|
48
|
-
import { reactive, ref } from 'vue';
|
|
49
|
-
|
|
50
|
-
/** 管理规则列表数据、查询条件和远程分页。 */
|
|
51
|
-
export const useRuleList = () => {
|
|
52
|
-
const loading = ref(false);
|
|
53
|
-
const dataList = ref<RuleItem[]>([]);
|
|
54
|
-
const query = reactive<RuleQuery>({ pageIndex: 1, pageSize: 20, keyword: '' });
|
|
55
|
-
const pagination = reactive({ current: 1, pageSize: 20, total: 0, remote: true });
|
|
56
|
-
|
|
57
|
-
/** 请求规则列表;错误 Toast 由 mutator 处理。 */
|
|
58
|
-
const fetchData = async (): Promise<void> => {
|
|
59
|
-
loading.value = true;
|
|
60
|
-
try {
|
|
61
|
-
query.pageIndex = pagination.current;
|
|
62
|
-
query.pageSize = pagination.pageSize;
|
|
63
|
-
const res = await queryRuleList(query);
|
|
64
|
-
dataList.value = res.data ?? [];
|
|
65
|
-
pagination.total = res.totalCount ?? 0;
|
|
66
|
-
} catch {
|
|
67
|
-
dataList.value = [];
|
|
68
|
-
pagination.total = 0;
|
|
69
|
-
} finally {
|
|
70
|
-
loading.value = false;
|
|
71
|
-
}
|
|
72
|
-
};
|
|
73
|
-
|
|
74
|
-
/** 处理页码或每页数量变化。 */
|
|
75
|
-
const handlePageChange = ({ current, pageSize }: { current: number; pageSize: number }): void => {
|
|
76
|
-
pagination.current = current;
|
|
77
|
-
pagination.pageSize = pageSize;
|
|
78
|
-
void fetchData();
|
|
79
|
-
};
|
|
80
|
-
|
|
81
|
-
/** 从第一页执行查询。 */
|
|
82
|
-
const handleSearch = (): void => {
|
|
83
|
-
pagination.current = 1;
|
|
84
|
-
void fetchData();
|
|
85
|
-
};
|
|
86
|
-
|
|
87
|
-
/** 重置查询条件并回到第一页。 */
|
|
88
|
-
const handleReset = (): void => {
|
|
89
|
-
Object.assign(query, { pageIndex: 1, pageSize: pagination.pageSize, keyword: '' });
|
|
90
|
-
pagination.current = 1;
|
|
91
|
-
void fetchData();
|
|
92
|
-
};
|
|
93
|
-
|
|
94
|
-
return { loading, dataList, query, pagination, fetchData, handlePageChange, handleSearch, handleReset };
|
|
95
|
-
};
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
`RuleItem`、`RuleQuery`、`queryRuleList` 必须替换为当前 Orval 生成类型和真实方法,禁止照抄占位名。
|
|
99
|
-
|
|
100
|
-
```vue
|
|
101
|
-
<YTable
|
|
102
|
-
v-if="isReady"
|
|
103
|
-
ref="tableRef"
|
|
104
|
-
v-model:selected-row-keys="selectedRowKeys"
|
|
105
|
-
:row-config="{ keyField: 'id', useKey: true }"
|
|
106
|
-
:data="dataList"
|
|
107
|
-
:columns="TABLE_COLUMNS"
|
|
108
|
-
:loading="loading"
|
|
109
|
-
:height="tableHeight"
|
|
110
|
-
pageable
|
|
111
|
-
v-model:pagination="pagination"
|
|
112
|
-
@page-change="handlePageChange"
|
|
113
|
-
>
|
|
114
|
-
<template #toolbar-right>
|
|
115
|
-
<YButton :disabled="selectedRowKeys.length === 0" @click="handleBatchDelete">批量删除</YButton>
|
|
116
|
-
<YButton type="primary" @click="openCreate">新增</YButton>
|
|
117
|
-
</template>
|
|
118
|
-
</YTable>
|
|
119
|
-
```
|
|
120
|
-
|
|
121
|
-
## 交付检查清单
|
|
122
|
-
|
|
123
|
-
- [ ] 已确认真实 Orval 导出、查询 DTO 和响应字段。
|
|
124
|
-
- [ ] 查询参数与 YTable 分页字段已映射,`page-change` 回调读取 `current/pageSize` 而非 `currentPage`。
|
|
125
|
-
- [ ] 若包含批量操作,首列已配置 `type: 'checkbox'`,设置了 `:row-config="{ keyField: 'xxx', useKey: true }"`,批量按钮配置了 `:disabled="selectedRowKeys.length === 0"`,操作成功后已清空选中态。
|
|
126
|
-
- [ ] 查询/重置会回到第一页,远程分页配置完整。
|
|
127
|
-
- [ ] 主操作在 `#toolbar-right`,列设置已开启。
|
|
128
|
-
- [ ] 删除使用气泡确认,操作按钮的 loading/close 在成功与失败后都会恢复。
|
|
129
|
-
- [ ] 长整型 ID 未转 number,普通 number 仍符合真实类型。
|
|
130
|
-
- [ ] 没有 `if (res?.success)` 和重复错误 Toast。
|
|
131
|
-
- [ ] loading、空态和失败后数据状态可预期。
|
|
132
|
-
|
|
133
|
-
## 失败兜底策略
|
|
134
|
-
|
|
135
|
-
- 分页字段混乱时,在 Hook 中分离 YTable 状态和后端参数,不直接把 `pageIndex/totalCount` 绑到组件。
|
|
136
|
-
- 列表逻辑过大时,拆分 `useListData` 和 `useListActions`,不得回填到 `index.vue`。
|
|
137
|
-
- 响应字段不稳定时,在 Hook API 边界做最小映射,禁止在模板散落兼容分支。
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: page-skeleton
|
|
3
|
-
description: "创建或拆分 Vue3 YSS UI 页面模块骨架,明确页面、配置、hooks 与私有组件职责。"
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Page Skeleton Skill
|
|
7
|
-
|
|
8
|
-
## 触发条件
|
|
9
|
-
|
|
10
|
-
- 新建业务页面模块(列表、表单、详情、弹窗任意组合)。
|
|
11
|
-
- 需要快速搭建目录结构、类型文件、hooks、组件分层。
|
|
12
|
-
- 需要把页面代码控制在可维护结构,而不是单文件堆叠。
|
|
13
|
-
|
|
14
|
-
## 不适用场景
|
|
15
|
-
|
|
16
|
-
- 仅补一个局部交互逻辑,不涉及页面骨架重建。
|
|
17
|
-
- 仅改 API 请求细节:使用 `../yss-api-integration/SKILL.md`。
|
|
18
|
-
- 仅做 Formily 细节:使用 `../formily-*` 系列 skill。
|
|
19
|
-
|
|
20
|
-
## 硬约束(禁止/必须)
|
|
21
|
-
|
|
22
|
-
- 开发前必须先执行组件选型:`../component-selection-imports/SKILL.md`。
|
|
23
|
-
- 页面目录默认拆分:`index.vue + constant.ts + style.less + hooks/`;存在多个私有视图或大量独立类型时再增加 `components/` 和 `type.ts`。
|
|
24
|
-
- `index.vue` 只做 hooks 组合和视图编排,原则上控制在 150 行以内;超过 150 行或包含多个独立职责时必须拆分。
|
|
25
|
-
- 表格列超过 10 行时放入 `constant.ts`;状态、API 调用、副作用和事件处理放入 `hooks/useXxx.ts`。
|
|
26
|
-
- 所有样式放入 `style.less`,SFC 只保留 `<style scoped lang="less">@import './style.less';</style>`。
|
|
27
|
-
- 所有导出函数、hooks、类型和静态配置必须有中文 JSDoc。
|
|
28
|
-
- 表单方案默认用 `YFormily`;分步场景默认用 `formily-step-flow`。
|
|
29
|
-
- 不得导入 `@formily/antdv` 作为业务 UI 方案。
|
|
30
|
-
|
|
31
|
-
## 标准代码骨架
|
|
32
|
-
|
|
33
|
-
```text
|
|
34
|
-
packages/src/views/{ModuleName}/
|
|
35
|
-
├── index.vue
|
|
36
|
-
├── constant.ts
|
|
37
|
-
├── style.less
|
|
38
|
-
├── hooks/
|
|
39
|
-
│ ├── use{Module}List.ts
|
|
40
|
-
│ └── use{Module}Form.ts
|
|
41
|
-
├── type.ts # 独立类型较多时增加
|
|
42
|
-
└── components/ # 存在多个私有视图时增加
|
|
43
|
-
├── {Module}Table.vue
|
|
44
|
-
└── {Module}Modal.vue
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
```vue
|
|
48
|
-
<script setup lang="ts">
|
|
49
|
-
import { useModuleList } from './hooks/useModuleList';
|
|
50
|
-
import { useModuleForm } from './hooks/useModuleForm';
|
|
51
|
-
|
|
52
|
-
const list = useModuleList();
|
|
53
|
-
const form = useModuleForm({ onSuccess: list.fetchData });
|
|
54
|
-
</script>
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
## 交付检查清单
|
|
58
|
-
|
|
59
|
-
- [ ] 目录拆分完整,职责清晰。
|
|
60
|
-
- [ ] `index.vue` 不超过 150 行,且仅负责组合和渲染。
|
|
61
|
-
- [ ] 类型定义与常量已抽离,不在页面内硬编码。
|
|
62
|
-
- [ ] hooks 可复用且命名清晰(`useXxx`)。
|
|
63
|
-
- [ ] 样式已抽离到 `style.less`,SFC 样式块已 scoped。
|
|
64
|
-
- [ ] 页面导入组件来源符合组件选型规则。
|
|
65
|
-
- [ ] 若包含表单,已选择对应 Formily skill。
|
|
66
|
-
|
|
67
|
-
## 失败兜底策略
|
|
68
|
-
|
|
69
|
-
- 当需求不清晰时,先落地最小骨架(列表区 + 操作区 + 弹窗占位),再增量填充。
|
|
70
|
-
- 当页面复杂度超预期时,优先继续拆 hooks 和私有组件,而不是在 `index.vue` 堆逻辑。
|
|
71
|
-
- 若组件是否封装存在歧义,回退到 `component-selection-imports` 先判定导入来源。
|
|
72
|
-
|
|
73
|
-
## 示例
|
|
74
|
-
|
|
75
|
-
- `./examples/StandardListPage/`
|
|
76
|
-
- `./examples/AdvancedFormPage/`
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import type { OperatorOption, OptionItem } from '@yss-ui/components';
|
|
2
|
-
|
|
3
|
-
/** 表单字典选项。 */
|
|
4
|
-
export interface FormOptions {
|
|
5
|
-
intensity: Array<{ label: string; value: string }>;
|
|
6
|
-
errorStorageType: Array<{ label: string; value: string }>;
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
/** 规则配置表单字典。 */
|
|
10
|
-
export const FORM_OPTIONS: FormOptions = {
|
|
11
|
-
intensity: [
|
|
12
|
-
{ label: '弱规则', value: 'WEAK' },
|
|
13
|
-
{ label: '强规则', value: 'STRONG' },
|
|
14
|
-
],
|
|
15
|
-
errorStorageType: [
|
|
16
|
-
{ label: '文件服务', value: 'FILE_SYSTEM' },
|
|
17
|
-
{ label: '数据落地表', value: 'DATATABLE_SYSTEM' },
|
|
18
|
-
],
|
|
19
|
-
};
|
|
20
|
-
|
|
21
|
-
/** 条件构建器可选字段。 */
|
|
22
|
-
export const FIELD_OPTIONS: OptionItem[] = [
|
|
23
|
-
{ label: '用户编号', value: 'userId' },
|
|
24
|
-
{ label: '金额', value: 'amount' },
|
|
25
|
-
{ label: '状态', value: 'status' },
|
|
26
|
-
];
|
|
27
|
-
|
|
28
|
-
/** 条件构建器操作符。 */
|
|
29
|
-
export const RULE_OPERATOR_OPTIONS: OperatorOption[] = [
|
|
30
|
-
{ label: '等于', value: '=', kind: 'single' },
|
|
31
|
-
{ label: '大于', value: '>', kind: 'single' },
|
|
32
|
-
{ label: '介于', value: 'between', kind: 'between' },
|
|
33
|
-
{ label: '包含于', value: 'in', kind: 'multiple' },
|
|
34
|
-
];
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
import { reactive, ref } from 'vue';
|
|
2
|
-
import { message } from 'ant-design-vue';
|
|
3
|
-
import type { ConditionGroup, OptionItem } from '@yss-ui/components';
|
|
4
|
-
import { FIELD_OPTIONS, RULE_OPERATOR_OPTIONS } from '../constant';
|
|
5
|
-
|
|
6
|
-
/** 创建空条件组。 */
|
|
7
|
-
const createEmptyGroup = (id: string): ConditionGroup => ({
|
|
8
|
-
id,
|
|
9
|
-
type: 'GROUP',
|
|
10
|
-
logicalOp: 'AND',
|
|
11
|
-
children: [],
|
|
12
|
-
});
|
|
13
|
-
|
|
14
|
-
/** 按关键词筛选条件字段。 */
|
|
15
|
-
const filterFields = (keyword: string): OptionItem[] => {
|
|
16
|
-
const normalizedKeyword = keyword.trim().toLowerCase();
|
|
17
|
-
if (!normalizedKeyword) return FIELD_OPTIONS;
|
|
18
|
-
return FIELD_OPTIONS.filter(item =>
|
|
19
|
-
[item.label, item.value].some(value =>
|
|
20
|
-
String(value ?? '')
|
|
21
|
-
.toLowerCase()
|
|
22
|
-
.includes(normalizedKeyword)
|
|
23
|
-
)
|
|
24
|
-
);
|
|
25
|
-
};
|
|
26
|
-
|
|
27
|
-
/** 管理条件构建器与预览状态。 */
|
|
28
|
-
export const useRuleConfig = () => {
|
|
29
|
-
const filterCondition = ref<ConditionGroup>(createEmptyGroup('filter-root'));
|
|
30
|
-
const checkCondition = ref<ConditionGroup>(createEmptyGroup('check-root'));
|
|
31
|
-
const filterPreview = ref('');
|
|
32
|
-
const checkPreview = ref('');
|
|
33
|
-
const loading = reactive({ filterPreview: false, checkPreview: false });
|
|
34
|
-
|
|
35
|
-
/** 为 YConditionBuilder 加载可搜索字段。 */
|
|
36
|
-
const loadFields = async (keyword: string): Promise<OptionItem[]> => filterFields(keyword);
|
|
37
|
-
|
|
38
|
-
/** 生成条件 JSON 预览。 */
|
|
39
|
-
const generatePreview = async (
|
|
40
|
-
condition: ConditionGroup,
|
|
41
|
-
target: 'filterPreview' | 'checkPreview'
|
|
42
|
-
): Promise<void> => {
|
|
43
|
-
if (!condition.children.length) {
|
|
44
|
-
message.warning('请先配置完整条件');
|
|
45
|
-
return;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
loading[target] = true;
|
|
49
|
-
try {
|
|
50
|
-
const preview = JSON.stringify(condition, null, 2);
|
|
51
|
-
if (target === 'filterPreview') filterPreview.value = preview;
|
|
52
|
-
else checkPreview.value = preview;
|
|
53
|
-
} finally {
|
|
54
|
-
loading[target] = false;
|
|
55
|
-
}
|
|
56
|
-
};
|
|
57
|
-
|
|
58
|
-
/** 生成校验范围预览。 */
|
|
59
|
-
const generateFilterPreview = (): Promise<void> => generatePreview(filterCondition.value, 'filterPreview');
|
|
60
|
-
|
|
61
|
-
/** 生成校验表达式预览。 */
|
|
62
|
-
const generateCheckPreview = (): Promise<void> => generatePreview(checkCondition.value, 'checkPreview');
|
|
63
|
-
|
|
64
|
-
return {
|
|
65
|
-
filterCondition,
|
|
66
|
-
checkCondition,
|
|
67
|
-
filterPreview,
|
|
68
|
-
checkPreview,
|
|
69
|
-
loading,
|
|
70
|
-
operatorOptions: RULE_OPERATOR_OPTIONS,
|
|
71
|
-
loadFields,
|
|
72
|
-
generateFilterPreview,
|
|
73
|
-
generateCheckPreview,
|
|
74
|
-
};
|
|
75
|
-
};
|
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
<script setup lang="ts">
|
|
2
|
-
import { computed, ref } from 'vue';
|
|
3
|
-
import { YButton, YCard, YConditionBuilder, YFormily } from '@yss-ui/components';
|
|
4
|
-
import { FORM_OPTIONS } from './constant';
|
|
5
|
-
import { useRuleConfig } from './hooks/useRuleConfig';
|
|
6
|
-
import { ruleConfigSchema } from './schemas/ruleConfigSchema';
|
|
7
|
-
|
|
8
|
-
defineOptions({ name: 'AdvancedFormPage' });
|
|
9
|
-
|
|
10
|
-
/** YFormily 校验实例。 */
|
|
11
|
-
interface FormilyRef {
|
|
12
|
-
submit: () => Promise<Record<string, unknown>>;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
/** YConditionBuilder 校验实例。 */
|
|
16
|
-
interface ConditionBuilderRef {
|
|
17
|
-
validate: () => boolean;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
const formData = ref<Record<string, unknown>>({
|
|
21
|
-
intensity: 'WEAK',
|
|
22
|
-
errorStorage: true,
|
|
23
|
-
errorStorageLimit: 1000,
|
|
24
|
-
errorStorageType: 'FILE_SYSTEM',
|
|
25
|
-
});
|
|
26
|
-
const schema = computed(() => ruleConfigSchema(FORM_OPTIONS));
|
|
27
|
-
const formRef = ref<FormilyRef>();
|
|
28
|
-
const filterBuilderRef = ref<ConditionBuilderRef>();
|
|
29
|
-
const checkBuilderRef = ref<ConditionBuilderRef>();
|
|
30
|
-
const {
|
|
31
|
-
filterCondition,
|
|
32
|
-
checkCondition,
|
|
33
|
-
filterPreview,
|
|
34
|
-
checkPreview,
|
|
35
|
-
loading,
|
|
36
|
-
operatorOptions,
|
|
37
|
-
loadFields,
|
|
38
|
-
generateFilterPreview,
|
|
39
|
-
generateCheckPreview,
|
|
40
|
-
} = useRuleConfig();
|
|
41
|
-
|
|
42
|
-
/** 校验表单与指定条件构建器。 */
|
|
43
|
-
const validateBeforeGenerate = async (builder?: ConditionBuilderRef): Promise<boolean> => {
|
|
44
|
-
if (!formRef.value || !builder) return false;
|
|
45
|
-
try {
|
|
46
|
-
await formRef.value.submit();
|
|
47
|
-
} catch {
|
|
48
|
-
return false;
|
|
49
|
-
}
|
|
50
|
-
return builder.validate();
|
|
51
|
-
};
|
|
52
|
-
|
|
53
|
-
/** 校验后生成校验范围预览。 */
|
|
54
|
-
const handleGenerateFilterPreview = async (): Promise<void> => {
|
|
55
|
-
if (await validateBeforeGenerate(filterBuilderRef.value)) await generateFilterPreview();
|
|
56
|
-
};
|
|
57
|
-
|
|
58
|
-
/** 校验后生成校验表达式预览。 */
|
|
59
|
-
const handleGenerateCheckPreview = async (): Promise<void> => {
|
|
60
|
-
if (await validateBeforeGenerate(checkBuilderRef.value)) await generateCheckPreview();
|
|
61
|
-
};
|
|
62
|
-
</script>
|
|
63
|
-
|
|
64
|
-
<template>
|
|
65
|
-
<div class="rule-config-page">
|
|
66
|
-
<YCard class="rule-config-page__content">
|
|
67
|
-
<YFormily ref="formRef" v-model="formData" :schema="schema">
|
|
68
|
-
<template #conditionFilter>
|
|
69
|
-
<YConditionBuilder
|
|
70
|
-
ref="filterBuilderRef"
|
|
71
|
-
v-model="filterCondition"
|
|
72
|
-
:load-fields="loadFields"
|
|
73
|
-
:operator-options="operatorOptions"
|
|
74
|
-
/>
|
|
75
|
-
</template>
|
|
76
|
-
<template #filterPreview>
|
|
77
|
-
<div class="rule-config-page__preview">
|
|
78
|
-
<pre>{{ filterPreview || '配置校验范围后生成预览' }}</pre>
|
|
79
|
-
<YButton type="primary" :loading="loading.filterPreview" @click="handleGenerateFilterPreview">
|
|
80
|
-
生成校验范围
|
|
81
|
-
</YButton>
|
|
82
|
-
</div>
|
|
83
|
-
</template>
|
|
84
|
-
<template #checkCondition>
|
|
85
|
-
<YConditionBuilder
|
|
86
|
-
ref="checkBuilderRef"
|
|
87
|
-
v-model="checkCondition"
|
|
88
|
-
:load-fields="loadFields"
|
|
89
|
-
:operator-options="operatorOptions"
|
|
90
|
-
/>
|
|
91
|
-
</template>
|
|
92
|
-
<template #checkPreview>
|
|
93
|
-
<div class="rule-config-page__preview">
|
|
94
|
-
<pre>{{ checkPreview || '配置校验表达式后生成预览' }}</pre>
|
|
95
|
-
<YButton type="primary" :loading="loading.checkPreview" @click="handleGenerateCheckPreview">
|
|
96
|
-
生成校验表达式
|
|
97
|
-
</YButton>
|
|
98
|
-
</div>
|
|
99
|
-
</template>
|
|
100
|
-
</YFormily>
|
|
101
|
-
</YCard>
|
|
102
|
-
</div>
|
|
103
|
-
</template>
|
|
104
|
-
|
|
105
|
-
<style scoped lang="less">
|
|
106
|
-
@import url('./style.less');
|
|
107
|
-
</style>
|