ai-engineering-init 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/agents/code-reviewer.md +139 -0
- package/.claude/agents/project-manager.md +159 -0
- package/.claude/audio/completed.wav +0 -0
- package/.claude/commands/add-todo.md +255 -0
- package/.claude/commands/check.md +210 -0
- package/.claude/commands/crud.md +454 -0
- package/.claude/commands/dev.md +503 -0
- package/.claude/commands/init-docs.md +681 -0
- package/.claude/commands/next.md +251 -0
- package/.claude/commands/progress.md +242 -0
- package/.claude/commands/start.md +199 -0
- package/.claude/commands/sync.md +307 -0
- package/.claude/commands/update-status.md +428 -0
- package/.claude/docs/Mixin/344/275/277/347/224/250/346/214/207/345/215/227.md +299 -0
- package/.claude/docs/README.md +167 -0
- package/.claude/docs//345/211/215/347/253/257/345/274/200/345/217/221/346/214/207/345/215/227.md +599 -0
- package/.claude/docs//345/220/216/347/253/257/345/274/200/345/217/221/346/214/207/345/215/227.md +726 -0
- package/.claude/docs//345/267/245/344/275/234/346/265/201/345/274/200/345/217/221/346/214/207/345/215/227.md +714 -0
- package/.claude/docs//345/267/245/345/205/267/347/261/273/344/275/277/347/224/250/346/214/207/345/215/227.md +463 -0
- package/.claude/docs//346/225/260/346/215/256/345/272/223/350/256/276/350/256/241/350/247/204/350/214/203.md +390 -0
- package/.claude/docs//346/226/260/345/212/237/350/203/275/345/274/200/345/217/221/346/265/201/347/250/213/350/247/204/350/214/203.md +688 -0
- package/.claude/docs//346/226/260/351/241/271/347/233/256/345/274/200/345/217/221/346/265/201/347/250/213.md +365 -0
- package/.claude/docs//346/241/206/346/236/266/350/257/264/346/230/216.md +393 -0
- package/.claude/docs//350/267/257/347/224/261/351/205/215/347/275/256/346/214/207/345/215/227.md +246 -0
- package/.claude/framework-config.json +73 -0
- package/.claude/hooks/pre-tool-use.js +117 -0
- package/.claude/hooks/skill-forced-eval.js +167 -0
- package/.claude/hooks/stop.js +58 -0
- package/.claude/settings.json +41 -0
- package/.claude/skills/add-skill/SKILL.md +352 -0
- package/.claude/skills/api-development/SKILL.md +560 -0
- package/.claude/skills/architecture-design/SKILL.md +756 -0
- package/.claude/skills/backend-annotations/SKILL.md +674 -0
- package/.claude/skills/banana-image/CHANGELOG.md +37 -0
- package/.claude/skills/banana-image/README.md +146 -0
- package/.claude/skills/banana-image/SKILL.md +164 -0
- package/.claude/skills/banana-image/assets/logo.png +0 -0
- package/.claude/skills/banana-image/references/advanced-usage.md +189 -0
- package/.claude/skills/banana-image/scripts/apply_template.py +125 -0
- package/.claude/skills/banana-image/scripts/banana_image_exec.ts +412 -0
- package/.claude/skills/banana-image/scripts/batch_prep.py +82 -0
- package/.claude/skills/banana-image/scripts/package-lock.json +1437 -0
- package/.claude/skills/banana-image/scripts/package.json +18 -0
- package/.claude/skills/banana-image/scripts/requirements.txt +10 -0
- package/.claude/skills/banana-image/templates/poster.json +22 -0
- package/.claude/skills/banana-image/templates/product.json +17 -0
- package/.claude/skills/banana-image/templates/social.json +22 -0
- package/.claude/skills/banana-image/templates/thumbnail.json +17 -0
- package/.claude/skills/brainstorm/SKILL.md +648 -0
- package/.claude/skills/bug-detective/SKILL.md +1206 -0
- package/.claude/skills/code-patterns/SKILL.md +590 -0
- package/.claude/skills/collaborating-with-codex/SKILL.md +174 -0
- package/.claude/skills/collaborating-with-codex/scripts/codex_bridge.py +275 -0
- package/.claude/skills/collaborating-with-gemini/SKILL.md +194 -0
- package/.claude/skills/collaborating-with-gemini/scripts/gemini_bridge.py +275 -0
- package/.claude/skills/crud-development/SKILL.md +649 -0
- package/.claude/skills/data-permission/SKILL.md +599 -0
- package/.claude/skills/database-ops/SKILL.md +407 -0
- package/.claude/skills/error-handler/SKILL.md +371 -0
- package/.claude/skills/file-oss-management/SKILL.md +863 -0
- package/.claude/skills/git-workflow/SKILL.md +375 -0
- package/.claude/skills/json-serialization/SKILL.md +357 -0
- package/.claude/skills/leniu-api-development/SKILL.md +803 -0
- package/.claude/skills/leniu-architecture-design/SKILL.md +598 -0
- package/.claude/skills/leniu-backend-annotations/SKILL.md +664 -0
- package/.claude/skills/leniu-code-patterns/SKILL.md +365 -0
- package/.claude/skills/leniu-crud-development/SKILL.md +1110 -0
- package/.claude/skills/leniu-data-permission/SKILL.md +256 -0
- package/.claude/skills/leniu-database-ops/SKILL.md +426 -0
- package/.claude/skills/leniu-error-handler/SKILL.md +462 -0
- package/.claude/skills/leniu-java-amount-handling/SKILL.md +461 -0
- package/.claude/skills/leniu-java-code-style/SKILL.md +510 -0
- package/.claude/skills/leniu-java-concurrent/SKILL.md +400 -0
- package/.claude/skills/leniu-java-entity/SKILL.md +751 -0
- package/.claude/skills/leniu-java-export/SKILL.md +560 -0
- package/.claude/skills/leniu-java-logging/SKILL.md +832 -0
- package/.claude/skills/leniu-java-mq/SKILL.md +338 -0
- package/.claude/skills/leniu-java-mybatis/SKILL.md +640 -0
- package/.claude/skills/leniu-java-report-query-param/SKILL.md +291 -0
- package/.claude/skills/leniu-java-task/SKILL.md +367 -0
- package/.claude/skills/leniu-java-total-line/SKILL.md +195 -0
- package/.claude/skills/leniu-marketing-price-rule-customizer/SKILL.md +301 -0
- package/.claude/skills/leniu-marketing-recharge-rule-customizer/SKILL.md +285 -0
- package/.claude/skills/leniu-mealtime/SKILL.md +215 -0
- package/.claude/skills/leniu-redis-cache/SKILL.md +316 -0
- package/.claude/skills/leniu-security-guard/SKILL.md +520 -0
- package/.claude/skills/leniu-utils-toolkit/SKILL.md +380 -0
- package/.claude/skills/openspec-apply-change/SKILL.md +156 -0
- package/.claude/skills/openspec-archive-change/SKILL.md +114 -0
- package/.claude/skills/openspec-bulk-archive-change/SKILL.md +246 -0
- package/.claude/skills/openspec-continue-change/SKILL.md +118 -0
- package/.claude/skills/openspec-explore/SKILL.md +290 -0
- package/.claude/skills/openspec-ff-change/SKILL.md +101 -0
- package/.claude/skills/openspec-new-change/SKILL.md +74 -0
- package/.claude/skills/openspec-onboard/SKILL.md +529 -0
- package/.claude/skills/openspec-sync-specs/SKILL.md +138 -0
- package/.claude/skills/openspec-verify-change/SKILL.md +168 -0
- package/.claude/skills/performance-doctor/SKILL.md +627 -0
- package/.claude/skills/project-navigator/SKILL.md +305 -0
- package/.claude/skills/redis-cache/SKILL.md +839 -0
- package/.claude/skills/scheduled-jobs/SKILL.md +633 -0
- package/.claude/skills/security-guard/SKILL.md +748 -0
- package/.claude/skills/sms-mail/SKILL.md +766 -0
- package/.claude/skills/social-login/SKILL.md +668 -0
- package/.claude/skills/store-pc/SKILL.md +366 -0
- package/.claude/skills/task-tracker/SKILL.md +307 -0
- package/.claude/skills/tech-decision/SKILL.md +393 -0
- package/.claude/skills/tenant-management/SKILL.md +603 -0
- package/.claude/skills/test-development/SKILL.md +755 -0
- package/.claude/skills/ui-pc/SKILL.md +438 -0
- package/.claude/skills/utils-toolkit/SKILL.md +615 -0
- package/.claude/skills/websocket-sse/SKILL.md +716 -0
- package/.claude/skills/workflow-engine/SKILL.md +676 -0
- package/.claude/templates//345/276/205/345/212/236/346/270/205/345/215/225/346/250/241/346/235/277.md +56 -0
- package/.claude/templates//351/234/200/346/261/202/346/226/207/346/241/243/346/250/241/346/235/277.md +85 -0
- package/.claude/templates//351/241/271/347/233/256/347/212/266/346/200/201/346/250/241/346/235/277.md +43 -0
- package/.codex/skills/add-skill/SKILL.md +352 -0
- package/.codex/skills/add-todo/SKILL.md +269 -0
- package/.codex/skills/api-development/SKILL.md +693 -0
- package/.codex/skills/architecture-design/SKILL.md +628 -0
- package/.codex/skills/backend-annotations/SKILL.md +664 -0
- package/.codex/skills/banana-image/CHANGELOG.md +37 -0
- package/.codex/skills/banana-image/README.md +146 -0
- package/.codex/skills/banana-image/SKILL.md +164 -0
- package/.codex/skills/banana-image/assets/logo.png +0 -0
- package/.codex/skills/banana-image/references/advanced-usage.md +189 -0
- package/.codex/skills/banana-image/scripts/apply_template.py +125 -0
- package/.codex/skills/banana-image/scripts/banana_image_exec.ts +412 -0
- package/.codex/skills/banana-image/scripts/batch_prep.py +82 -0
- package/.codex/skills/banana-image/scripts/package-lock.json +1437 -0
- package/.codex/skills/banana-image/scripts/package.json +18 -0
- package/.codex/skills/banana-image/scripts/requirements.txt +10 -0
- package/.codex/skills/banana-image/templates/poster.json +22 -0
- package/.codex/skills/banana-image/templates/product.json +17 -0
- package/.codex/skills/banana-image/templates/social.json +22 -0
- package/.codex/skills/banana-image/templates/thumbnail.json +17 -0
- package/.codex/skills/brainstorm/SKILL.md +648 -0
- package/.codex/skills/bug-detective/SKILL.md +1206 -0
- package/.codex/skills/check/SKILL.md +367 -0
- package/.codex/skills/code-patterns/SKILL.md +442 -0
- package/.codex/skills/collaborating-with-codex/SKILL.md +174 -0
- package/.codex/skills/collaborating-with-codex/scripts/codex_bridge.py +275 -0
- package/.codex/skills/collaborating-with-gemini/SKILL.md +194 -0
- package/.codex/skills/collaborating-with-gemini/scripts/gemini_bridge.py +275 -0
- package/.codex/skills/crud/SKILL.md +265 -0
- package/.codex/skills/crud-development/SKILL.md +637 -0
- package/.codex/skills/data-permission/SKILL.md +591 -0
- package/.codex/skills/database-ops/SKILL.md +553 -0
- package/.codex/skills/dev/SKILL.md +187 -0
- package/.codex/skills/error-handler/SKILL.md +361 -0
- package/.codex/skills/file-oss-management/SKILL.md +863 -0
- package/.codex/skills/git-workflow/SKILL.md +375 -0
- package/.codex/skills/init-docs/SKILL.md +194 -0
- package/.codex/skills/json-serialization/SKILL.md +357 -0
- package/.codex/skills/leniu-api-development/SKILL.md +803 -0
- package/.codex/skills/leniu-architecture-design/SKILL.md +594 -0
- package/.codex/skills/leniu-backend-annotations/SKILL.md +662 -0
- package/.codex/skills/leniu-code-patterns/SKILL.md +365 -0
- package/.codex/skills/leniu-crud-development/SKILL.md +1110 -0
- package/.codex/skills/leniu-data-permission/SKILL.md +256 -0
- package/.codex/skills/leniu-database-ops/SKILL.md +426 -0
- package/.codex/skills/leniu-error-handler/SKILL.md +462 -0
- package/.codex/skills/leniu-java-amount-handling/SKILL.md +461 -0
- package/.codex/skills/leniu-java-code-style/SKILL.md +510 -0
- package/.codex/skills/leniu-java-concurrent/SKILL.md +400 -0
- package/.codex/skills/leniu-java-entity/SKILL.md +751 -0
- package/.codex/skills/leniu-java-export/SKILL.md +560 -0
- package/.codex/skills/leniu-java-logging/SKILL.md +832 -0
- package/.codex/skills/leniu-java-mq/SKILL.md +338 -0
- package/.codex/skills/leniu-java-mybatis/SKILL.md +640 -0
- package/.codex/skills/leniu-java-report-query-param/SKILL.md +291 -0
- package/.codex/skills/leniu-java-task/SKILL.md +367 -0
- package/.codex/skills/leniu-java-total-line/SKILL.md +195 -0
- package/.codex/skills/leniu-marketing-price-rule-customizer/SKILL.md +301 -0
- package/.codex/skills/leniu-marketing-recharge-rule-customizer/SKILL.md +285 -0
- package/.codex/skills/leniu-mealtime/SKILL.md +215 -0
- package/.codex/skills/leniu-redis-cache/SKILL.md +316 -0
- package/.codex/skills/leniu-security-guard/SKILL.md +520 -0
- package/.codex/skills/leniu-utils-toolkit/SKILL.md +378 -0
- package/.codex/skills/next/SKILL.md +137 -0
- package/.codex/skills/openspec-apply-change/SKILL.md +156 -0
- package/.codex/skills/openspec-archive-change/SKILL.md +114 -0
- package/.codex/skills/openspec-bulk-archive-change/SKILL.md +246 -0
- package/.codex/skills/openspec-continue-change/SKILL.md +118 -0
- package/.codex/skills/openspec-explore/SKILL.md +290 -0
- package/.codex/skills/openspec-ff-change/SKILL.md +101 -0
- package/.codex/skills/openspec-new-change/SKILL.md +74 -0
- package/.codex/skills/openspec-onboard/SKILL.md +529 -0
- package/.codex/skills/openspec-sync-specs/SKILL.md +138 -0
- package/.codex/skills/openspec-verify-change/SKILL.md +168 -0
- package/.codex/skills/performance-doctor/SKILL.md +627 -0
- package/.codex/skills/progress/SKILL.md +193 -0
- package/.codex/skills/project-navigator/SKILL.md +286 -0
- package/.codex/skills/redis-cache/SKILL.md +829 -0
- package/.codex/skills/scheduled-jobs/SKILL.md +633 -0
- package/.codex/skills/security-guard/SKILL.md +739 -0
- package/.codex/skills/sms-mail/SKILL.md +766 -0
- package/.codex/skills/social-login/SKILL.md +668 -0
- package/.codex/skills/start/SKILL.md +154 -0
- package/.codex/skills/store-pc/SKILL.md +491 -0
- package/.codex/skills/sync/SKILL.md +149 -0
- package/.codex/skills/task-tracker/SKILL.md +307 -0
- package/.codex/skills/tech-decision/SKILL.md +393 -0
- package/.codex/skills/tenant-management/SKILL.md +603 -0
- package/.codex/skills/test-development/SKILL.md +755 -0
- package/.codex/skills/ui-pc/SKILL.md +475 -0
- package/.codex/skills/update-status/SKILL.md +159 -0
- package/.codex/skills/utils-toolkit/SKILL.md +593 -0
- package/.codex/skills/websocket-sse/SKILL.md +716 -0
- package/.codex/skills/workflow-engine/SKILL.md +676 -0
- package/.cursor/agents/code-reviewer.md +139 -0
- package/.cursor/agents/project-manager.md +159 -0
- package/.cursor/commands/opsx-apply.md +152 -0
- package/.cursor/commands/opsx-archive.md +157 -0
- package/.cursor/commands/opsx-bulk-archive.md +242 -0
- package/.cursor/commands/opsx-continue.md +114 -0
- package/.cursor/commands/opsx-explore.md +174 -0
- package/.cursor/commands/opsx-ff.md +94 -0
- package/.cursor/commands/opsx-new.md +69 -0
- package/.cursor/commands/opsx-onboard.md +525 -0
- package/.cursor/commands/opsx-sync.md +134 -0
- package/.cursor/commands/opsx-verify.md +164 -0
- package/.cursor/mcp.json +22 -0
- package/.cursor/skills/add-skill/SKILL.md +352 -0
- package/.cursor/skills/api-development/SKILL.md +560 -0
- package/.cursor/skills/architecture-design/SKILL.md +756 -0
- package/.cursor/skills/backend-annotations/SKILL.md +674 -0
- package/.cursor/skills/banana-image/CHANGELOG.md +37 -0
- package/.cursor/skills/banana-image/README.md +146 -0
- package/.cursor/skills/banana-image/SKILL.md +164 -0
- package/.cursor/skills/banana-image/assets/logo.png +0 -0
- package/.cursor/skills/banana-image/references/advanced-usage.md +189 -0
- package/.cursor/skills/banana-image/scripts/apply_template.py +125 -0
- package/.cursor/skills/banana-image/scripts/banana_image_exec.ts +412 -0
- package/.cursor/skills/banana-image/scripts/batch_prep.py +82 -0
- package/.cursor/skills/banana-image/scripts/package-lock.json +1437 -0
- package/.cursor/skills/banana-image/scripts/package.json +18 -0
- package/.cursor/skills/banana-image/scripts/requirements.txt +10 -0
- package/.cursor/skills/banana-image/templates/poster.json +22 -0
- package/.cursor/skills/banana-image/templates/product.json +17 -0
- package/.cursor/skills/banana-image/templates/social.json +22 -0
- package/.cursor/skills/banana-image/templates/thumbnail.json +17 -0
- package/.cursor/skills/brainstorm/SKILL.md +648 -0
- package/.cursor/skills/bug-detective/SKILL.md +1206 -0
- package/.cursor/skills/code-patterns/SKILL.md +590 -0
- package/.cursor/skills/collaborating-with-codex/SKILL.md +174 -0
- package/.cursor/skills/collaborating-with-codex/scripts/codex_bridge.py +275 -0
- package/.cursor/skills/collaborating-with-gemini/SKILL.md +194 -0
- package/.cursor/skills/collaborating-with-gemini/scripts/gemini_bridge.py +275 -0
- package/.cursor/skills/crud-development/SKILL.md +649 -0
- package/.cursor/skills/data-permission/SKILL.md +599 -0
- package/.cursor/skills/database-ops/SKILL.md +407 -0
- package/.cursor/skills/error-handler/SKILL.md +371 -0
- package/.cursor/skills/file-oss-management/SKILL.md +863 -0
- package/.cursor/skills/git-workflow/SKILL.md +375 -0
- package/.cursor/skills/json-serialization/SKILL.md +357 -0
- package/.cursor/skills/leniu-api-development/SKILL.md +803 -0
- package/.cursor/skills/leniu-architecture-design/SKILL.md +598 -0
- package/.cursor/skills/leniu-backend-annotations/SKILL.md +664 -0
- package/.cursor/skills/leniu-code-patterns/SKILL.md +365 -0
- package/.cursor/skills/leniu-crud-development/SKILL.md +1110 -0
- package/.cursor/skills/leniu-data-permission/SKILL.md +256 -0
- package/.cursor/skills/leniu-database-ops/SKILL.md +426 -0
- package/.cursor/skills/leniu-error-handler/SKILL.md +462 -0
- package/.cursor/skills/leniu-java-amount-handling/SKILL.md +461 -0
- package/.cursor/skills/leniu-java-code-style/SKILL.md +510 -0
- package/.cursor/skills/leniu-java-concurrent/SKILL.md +400 -0
- package/.cursor/skills/leniu-java-entity/SKILL.md +751 -0
- package/.cursor/skills/leniu-java-export/SKILL.md +560 -0
- package/.cursor/skills/leniu-java-logging/SKILL.md +832 -0
- package/.cursor/skills/leniu-java-mq/SKILL.md +338 -0
- package/.cursor/skills/leniu-java-mybatis/SKILL.md +640 -0
- package/.cursor/skills/leniu-java-report-query-param/SKILL.md +291 -0
- package/.cursor/skills/leniu-java-task/SKILL.md +367 -0
- package/.cursor/skills/leniu-java-total-line/SKILL.md +195 -0
- package/.cursor/skills/leniu-marketing-price-rule-customizer/SKILL.md +301 -0
- package/.cursor/skills/leniu-marketing-recharge-rule-customizer/SKILL.md +285 -0
- package/.cursor/skills/leniu-mealtime/SKILL.md +215 -0
- package/.cursor/skills/leniu-redis-cache/SKILL.md +316 -0
- package/.cursor/skills/leniu-security-guard/SKILL.md +520 -0
- package/.cursor/skills/leniu-utils-toolkit/SKILL.md +380 -0
- package/.cursor/skills/openspec-apply-change/SKILL.md +156 -0
- package/.cursor/skills/openspec-archive-change/SKILL.md +114 -0
- package/.cursor/skills/openspec-bulk-archive-change/SKILL.md +246 -0
- package/.cursor/skills/openspec-continue-change/SKILL.md +118 -0
- package/.cursor/skills/openspec-explore/SKILL.md +290 -0
- package/.cursor/skills/openspec-ff-change/SKILL.md +101 -0
- package/.cursor/skills/openspec-new-change/SKILL.md +74 -0
- package/.cursor/skills/openspec-onboard/SKILL.md +529 -0
- package/.cursor/skills/openspec-sync-specs/SKILL.md +138 -0
- package/.cursor/skills/openspec-verify-change/SKILL.md +168 -0
- package/.cursor/skills/performance-doctor/SKILL.md +627 -0
- package/.cursor/skills/project-navigator/SKILL.md +305 -0
- package/.cursor/skills/redis-cache/SKILL.md +839 -0
- package/.cursor/skills/scheduled-jobs/SKILL.md +633 -0
- package/.cursor/skills/security-guard/SKILL.md +748 -0
- package/.cursor/skills/sms-mail/SKILL.md +766 -0
- package/.cursor/skills/social-login/SKILL.md +668 -0
- package/.cursor/skills/store-pc/SKILL.md +366 -0
- package/.cursor/skills/task-tracker/SKILL.md +307 -0
- package/.cursor/skills/tech-decision/SKILL.md +393 -0
- package/.cursor/skills/tenant-management/SKILL.md +603 -0
- package/.cursor/skills/test-development/SKILL.md +755 -0
- package/.cursor/skills/ui-pc/SKILL.md +438 -0
- package/.cursor/skills/utils-toolkit/SKILL.md +615 -0
- package/.cursor/skills/websocket-sse/SKILL.md +716 -0
- package/.cursor/skills/workflow-engine/SKILL.md +676 -0
- package/AGENTS.md +669 -0
- package/CLAUDE.md +205 -0
- package/README.md +205 -0
- package/bin/index.js +179 -0
- package/init.sh +178 -0
- package/package.json +27 -0
|
@@ -0,0 +1,393 @@
|
|
|
1
|
+
# RuoYi-Vue-Plus 框架说明
|
|
2
|
+
|
|
3
|
+
> 本文档说明框架已完成的模块和业务开发区域。
|
|
4
|
+
> **注意**:本项目是纯后端项目,前端项目独立维护。
|
|
5
|
+
|
|
6
|
+
最后更新: 2026-02-09
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## 📦 框架已完成模块(无需开发)
|
|
11
|
+
|
|
12
|
+
### 后端框架模块
|
|
13
|
+
|
|
14
|
+
#### 1. ruoyi-common(通用工具库 - 24个子模块)
|
|
15
|
+
|
|
16
|
+
| 模块 | 功能说明 |
|
|
17
|
+
|------|---------|
|
|
18
|
+
| ruoyi-common-bom | BOM 依赖版本管理 |
|
|
19
|
+
| ruoyi-common-core | 核心工具类、常量、异常处理、MapstructUtils |
|
|
20
|
+
| ruoyi-common-mybatis | MyBatis-Plus 增强、BaseMapperPlus、分页、数据权限 |
|
|
21
|
+
| ruoyi-common-redis | Redis 缓存封装、RedisUtils、分布式锁 |
|
|
22
|
+
| ruoyi-common-satoken | Sa-Token 认证授权、LoginHelper |
|
|
23
|
+
| ruoyi-common-security | 安全组件 |
|
|
24
|
+
| ruoyi-common-tenant | 多租户支持、TenantEntity、TenantHelper |
|
|
25
|
+
| ruoyi-common-web | Web 配置、全局异常处理、BaseController |
|
|
26
|
+
| ruoyi-common-json | JSON 序列化配置 |
|
|
27
|
+
| ruoyi-common-excel | Excel 导入导出(FastExcel) |
|
|
28
|
+
| ruoyi-common-doc | SpringDoc/OpenAPI 接口文档 |
|
|
29
|
+
| ruoyi-common-oss | 对象存储(S3 协议、MinIO、阿里云等) |
|
|
30
|
+
| ruoyi-common-sms | 短信服务(SMS4j) |
|
|
31
|
+
| ruoyi-common-mail | 邮件服务 |
|
|
32
|
+
| ruoyi-common-social | 社交登录(JustAuth) |
|
|
33
|
+
| ruoyi-common-websocket | WebSocket 支持 |
|
|
34
|
+
| ruoyi-common-sse | SSE 服务端推送 |
|
|
35
|
+
| ruoyi-common-job | 定时任务(SnailJob) |
|
|
36
|
+
| ruoyi-common-idempotent | 幂等性控制 |
|
|
37
|
+
| ruoyi-common-ratelimiter | 限流控制 |
|
|
38
|
+
| ruoyi-common-encrypt | 数据加密注解 |
|
|
39
|
+
| ruoyi-common-sensitive | 敏感字段脱敏 |
|
|
40
|
+
| ruoyi-common-log | 操作日志 |
|
|
41
|
+
| ruoyi-common-translation | 翻译/国际化 |
|
|
42
|
+
|
|
43
|
+
#### 2. ruoyi-modules/ruoyi-system(系统管理)
|
|
44
|
+
|
|
45
|
+
**监控模块 (monitor)**:
|
|
46
|
+
|
|
47
|
+
| Controller | 功能说明 |
|
|
48
|
+
|-----------|---------|
|
|
49
|
+
| CacheController | 缓存监控、Redis Key 管理 |
|
|
50
|
+
| SysLogininforController | 登录日志、IP归属地 |
|
|
51
|
+
| SysOperlogController | 操作日志记录 |
|
|
52
|
+
| SysUserOnlineController | 在线用户监控、强制下线 |
|
|
53
|
+
|
|
54
|
+
**系统模块 (system)**:
|
|
55
|
+
|
|
56
|
+
| Controller | 功能说明 |
|
|
57
|
+
|-----------|---------|
|
|
58
|
+
| SysUserController | 用户管理、分配角色、重置密码 |
|
|
59
|
+
| SysRoleController | 角色管理、权限分配、数据权限 |
|
|
60
|
+
| SysMenuController | 菜单管理、按钮权限、路由配置 |
|
|
61
|
+
| SysDeptController | 部门管理、树形结构 |
|
|
62
|
+
| SysPostController | 岗位管理 |
|
|
63
|
+
| SysDictTypeController | 字典类型管理 |
|
|
64
|
+
| SysDictDataController | 字典数据管理 |
|
|
65
|
+
| SysConfigController | 系统参数配置 |
|
|
66
|
+
| SysNoticeController | 通知公告 |
|
|
67
|
+
| SysProfileController | 个人中心 |
|
|
68
|
+
| SysTenantController | 租户管理 |
|
|
69
|
+
| SysTenantPackageController | 租户套餐、菜单权限 |
|
|
70
|
+
| SysClientController | OAuth2 客户端管理 |
|
|
71
|
+
| SysOssController | OSS 文件管理 |
|
|
72
|
+
| SysOssConfigController | OSS 配置管理 |
|
|
73
|
+
| SysSocialController | 社会化登录管理 |
|
|
74
|
+
|
|
75
|
+
#### 3. ruoyi-modules/ruoyi-generator(代码生成器)
|
|
76
|
+
|
|
77
|
+
- 数据库表导入
|
|
78
|
+
- 代码生成配置
|
|
79
|
+
- 一键生成 CRUD 代码(Entity、BO、VO、Controller、Service、Mapper)
|
|
80
|
+
- 生成菜单 SQL
|
|
81
|
+
- 支持单表、树表、主子表
|
|
82
|
+
|
|
83
|
+
#### 4. ruoyi-modules/ruoyi-demo(演示模块)
|
|
84
|
+
|
|
85
|
+
- 功能演示示例
|
|
86
|
+
- 代码参考模板
|
|
87
|
+
- 表前缀:`test_`
|
|
88
|
+
|
|
89
|
+
#### 5. ruoyi-modules/ruoyi-job(定时任务模块)
|
|
90
|
+
|
|
91
|
+
- SnailJob 任务调度
|
|
92
|
+
- 分布式任务管理
|
|
93
|
+
- 失败重试、工作流编排
|
|
94
|
+
|
|
95
|
+
#### 6. ruoyi-modules/ruoyi-workflow(工作流模块)
|
|
96
|
+
|
|
97
|
+
- WarmFlow 工作流引擎
|
|
98
|
+
- 流程定义与管理
|
|
99
|
+
- 审批流程、任务办理
|
|
100
|
+
- 表前缀:`flow_`
|
|
101
|
+
|
|
102
|
+
#### 7. ruoyi-admin(启动入口)
|
|
103
|
+
|
|
104
|
+
- Spring Boot 启动类
|
|
105
|
+
- 配置文件管理(application.yml、application-dev.yml)
|
|
106
|
+
- 不包含业务逻辑
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
## 🏗️ 核心架构规范
|
|
111
|
+
|
|
112
|
+
### 三层架构(无 DAO 层)
|
|
113
|
+
|
|
114
|
+
```
|
|
115
|
+
Controller → Service → Mapper
|
|
116
|
+
↓ ↓ ↓
|
|
117
|
+
接收请求 业务逻辑 数据访问
|
|
118
|
+
参数校验 查询构建 MyBatis-Plus
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
**关键点**:
|
|
122
|
+
- Service 实现类**不继承任何基类**,直接注入 Mapper
|
|
123
|
+
- `buildQueryWrapper()` 方法在 **Service 实现类**中
|
|
124
|
+
- Mapper 接口继承 `BaseMapperPlus<Entity, Vo>`
|
|
125
|
+
|
|
126
|
+
### 包名规范
|
|
127
|
+
|
|
128
|
+
**必须使用 `org.dromara.*`**,禁止使用 `com.ruoyi.*`
|
|
129
|
+
|
|
130
|
+
```java
|
|
131
|
+
// ✅ 正确
|
|
132
|
+
package org.dromara.system.controller.system;
|
|
133
|
+
package org.dromara.demo.service.impl;
|
|
134
|
+
|
|
135
|
+
// ❌ 错误
|
|
136
|
+
package com.ruoyi.system.controller; // 禁止!
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
### 模块与表前缀对应
|
|
140
|
+
|
|
141
|
+
| 模块 | 目录路径 | 包路径 | 表前缀 |
|
|
142
|
+
|------|---------|--------|--------|
|
|
143
|
+
| **系统管理** | `ruoyi-modules/ruoyi-system/` | `org.dromara.system` | `sys_` |
|
|
144
|
+
| **演示模块** | `ruoyi-modules/ruoyi-demo/` | `org.dromara.demo` | `test_` |
|
|
145
|
+
| **工作流** | `ruoyi-modules/ruoyi-workflow/` | `org.dromara.workflow` | `flow_` |
|
|
146
|
+
| **定时任务** | `ruoyi-modules/ruoyi-job/` | `org.dromara.job` | `sj_` |
|
|
147
|
+
| **自定义业务** | `ruoyi-modules/ruoyi-xxx/` | `org.dromara.xxx` | `xxx_` |
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
## 🎯 业务开发区域(需要开发的地方)
|
|
152
|
+
|
|
153
|
+
### 后端业务模块位置
|
|
154
|
+
|
|
155
|
+
```
|
|
156
|
+
ruoyi-modules/
|
|
157
|
+
├── ruoyi-system/ ❌ 框架模块(不要修改)
|
|
158
|
+
├── ruoyi-generator/ ❌ 框架模块(不要修改)
|
|
159
|
+
├── ruoyi-demo/ ⚠️ 演示模块(可参考,不建议直接修改)
|
|
160
|
+
├── ruoyi-job/ ❌ 框架模块(不要修改)
|
|
161
|
+
├── ruoyi-workflow/ ❌ 框架模块(不要修改)
|
|
162
|
+
└── ruoyi-{你的业务}/ ✅ 创建你的业务模块
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
### 创建业务模块的标准结构
|
|
166
|
+
|
|
167
|
+
```
|
|
168
|
+
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/
|
|
169
|
+
├── controller/
|
|
170
|
+
│ └── XxxController.java # @RestController, extends BaseController
|
|
171
|
+
├── service/
|
|
172
|
+
│ ├── IXxxService.java # 服务接口
|
|
173
|
+
│ └── impl/
|
|
174
|
+
│ └── XxxServiceImpl.java # 服务实现(包含 buildQueryWrapper)
|
|
175
|
+
├── mapper/
|
|
176
|
+
│ └── XxxMapper.java # extends BaseMapperPlus<Xxx, XxxVo>
|
|
177
|
+
└── domain/
|
|
178
|
+
├── Xxx.java # Entity(extends TenantEntity)
|
|
179
|
+
├── bo/
|
|
180
|
+
│ └── XxxBo.java # 业务对象(@AutoMapper)
|
|
181
|
+
└── vo/
|
|
182
|
+
└── XxxVo.java # 视图对象
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
### 标准代码示例
|
|
186
|
+
|
|
187
|
+
**Entity 示例**:
|
|
188
|
+
|
|
189
|
+
```java
|
|
190
|
+
@Data
|
|
191
|
+
@TableName("m_order")
|
|
192
|
+
public class Order extends TenantEntity {
|
|
193
|
+
@TableId(value = "id")
|
|
194
|
+
private Long id;
|
|
195
|
+
private String orderNo;
|
|
196
|
+
private Integer status;
|
|
197
|
+
// 其他业务字段...
|
|
198
|
+
}
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
**BO 示例**:
|
|
202
|
+
|
|
203
|
+
```java
|
|
204
|
+
@Data
|
|
205
|
+
@AutoMapper(target = Order.class, reverseConvertGenerate = false)
|
|
206
|
+
public class OrderBo extends BaseEntity {
|
|
207
|
+
private Long id;
|
|
208
|
+
private String orderNo;
|
|
209
|
+
private Integer status;
|
|
210
|
+
}
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
**Service 实现示例**:
|
|
214
|
+
|
|
215
|
+
```java
|
|
216
|
+
@Service
|
|
217
|
+
public class OrderServiceImpl implements IOrderService {
|
|
218
|
+
|
|
219
|
+
private final OrderMapper baseMapper; // 直接注入 Mapper
|
|
220
|
+
|
|
221
|
+
/**
|
|
222
|
+
* 构建查询条件(在 Service 层)
|
|
223
|
+
*/
|
|
224
|
+
private LambdaQueryWrapper<Order> buildQueryWrapper(OrderBo bo) {
|
|
225
|
+
LambdaQueryWrapper<Order> lqw = Wrappers.lambdaQuery();
|
|
226
|
+
lqw.eq(StringUtils.isNotBlank(bo.getOrderNo()), Order::getOrderNo, bo.getOrderNo());
|
|
227
|
+
lqw.eq(bo.getStatus() != null, Order::getStatus, bo.getStatus());
|
|
228
|
+
return lqw;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
@Override
|
|
232
|
+
public TableDataInfo<OrderVo> queryPageList(OrderBo bo, PageQuery pageQuery) {
|
|
233
|
+
LambdaQueryWrapper<Order> lqw = buildQueryWrapper(bo);
|
|
234
|
+
Page<OrderVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
|
|
235
|
+
return TableDataInfo.build(result);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
**Controller 示例**:
|
|
241
|
+
|
|
242
|
+
```java
|
|
243
|
+
@RestController
|
|
244
|
+
@RequestMapping("/mall/order")
|
|
245
|
+
public class OrderController extends BaseController {
|
|
246
|
+
|
|
247
|
+
private final IOrderService orderService;
|
|
248
|
+
|
|
249
|
+
@GetMapping("/list")
|
|
250
|
+
public TableDataInfo<OrderVo> list(OrderBo bo, PageQuery pageQuery) {
|
|
251
|
+
return orderService.queryPageList(bo, pageQuery);
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
@GetMapping("/{id}")
|
|
255
|
+
public R<OrderVo> getInfo(@PathVariable Long id) {
|
|
256
|
+
return R.ok(orderService.queryById(id));
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
@PostMapping
|
|
260
|
+
public R<Void> add(@RequestBody OrderBo bo) {
|
|
261
|
+
return toAjax(orderService.insertByBo(bo));
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
@PutMapping
|
|
265
|
+
public R<Void> edit(@RequestBody OrderBo bo) {
|
|
266
|
+
return toAjax(orderService.updateByBo(bo));
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
@DeleteMapping("/{ids}")
|
|
270
|
+
public R<Void> remove(@PathVariable Long[] ids) {
|
|
271
|
+
return toAjax(orderService.deleteByIds(Arrays.asList(ids)));
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
---
|
|
277
|
+
|
|
278
|
+
## 📏 进度统计规则
|
|
279
|
+
|
|
280
|
+
### 核心原则:使用排除法(黑名单)
|
|
281
|
+
|
|
282
|
+
**为什么用排除法?**
|
|
283
|
+
- ✅ **灵活**:用户可以创建任意名称的业务目录
|
|
284
|
+
- ✅ **准确**:不会遗漏用户的自定义业务模块
|
|
285
|
+
- ✅ **简单**:只需维护一个小的框架模块排除列表
|
|
286
|
+
|
|
287
|
+
### 只统计业务模块
|
|
288
|
+
|
|
289
|
+
**后端**:
|
|
290
|
+
- ✅ 统计:`ruoyi-modules/ruoyi-*`(排除 ruoyi-system、ruoyi-generator、ruoyi-demo、ruoyi-job、ruoyi-workflow)
|
|
291
|
+
- ❌ 不统计:ruoyi-common、ruoyi-admin、ruoyi-system、ruoyi-generator、ruoyi-demo、ruoyi-job、ruoyi-workflow
|
|
292
|
+
|
|
293
|
+
---
|
|
294
|
+
|
|
295
|
+
## 🚀 快速开始
|
|
296
|
+
|
|
297
|
+
### 1. 查看框架状态
|
|
298
|
+
|
|
299
|
+
```bash
|
|
300
|
+
/start
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
### 2. 开发第一个业务功能
|
|
304
|
+
|
|
305
|
+
**方式 1:使用 /dev 命令**
|
|
306
|
+
|
|
307
|
+
```bash
|
|
308
|
+
/dev
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
Claude 会引导你完成:
|
|
312
|
+
- 需求分析
|
|
313
|
+
- 数据库设计
|
|
314
|
+
- 后端代码生成
|
|
315
|
+
|
|
316
|
+
**方式 2:使用 /crud 命令(快速生成标准CRUD)**
|
|
317
|
+
|
|
318
|
+
```bash
|
|
319
|
+
/crud
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
**方式 3:使用代码生成器**
|
|
323
|
+
|
|
324
|
+
1. 设计数据库表
|
|
325
|
+
2. 访问代码生成器页面
|
|
326
|
+
3. 导入表、配置生成选项
|
|
327
|
+
4. 一键生成代码
|
|
328
|
+
|
|
329
|
+
### 3. 查看业务进度
|
|
330
|
+
|
|
331
|
+
```bash
|
|
332
|
+
/progress
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
---
|
|
336
|
+
|
|
337
|
+
## 📚 相关文档
|
|
338
|
+
|
|
339
|
+
- **开发规范**:`CLAUDE.md` - 完整的开发规范和架构说明
|
|
340
|
+
- **技能库**:`.claude/skills/` - 各功能开发指南
|
|
341
|
+
|
|
342
|
+
---
|
|
343
|
+
|
|
344
|
+
## 💡 常见问题
|
|
345
|
+
|
|
346
|
+
### Q1: 我可以修改框架模块的代码吗?
|
|
347
|
+
|
|
348
|
+
**不建议**。框架模块是通用功能,修改后升级框架会有冲突。如果需要扩展,建议:
|
|
349
|
+
- 继承框架类并重写
|
|
350
|
+
- 在业务模块中封装
|
|
351
|
+
- 通过配置文件调整行为
|
|
352
|
+
|
|
353
|
+
### Q2: 为什么项目没有 DAO 层?
|
|
354
|
+
|
|
355
|
+
本项目采用三层架构(Controller → Service → Mapper),Service 直接注入 Mapper,没有独立的 DAO 层。这样做的好处是:
|
|
356
|
+
- 更简洁、更少的样板代码
|
|
357
|
+
- 避免过度分层
|
|
358
|
+
- MyBatis-Plus 已提供足够的数据访问抽象
|
|
359
|
+
|
|
360
|
+
### Q3: buildQueryWrapper 应该放在哪里?
|
|
361
|
+
|
|
362
|
+
**放在 Service 实现类中**,不是 Controller,也不是单独的 DAO 层。
|
|
363
|
+
|
|
364
|
+
### Q4: 代码生成器生成的代码是业务代码吗?
|
|
365
|
+
|
|
366
|
+
**是的**。代码生成器根据你的业务表生成代码,属于业务代码,会放到你指定的业务模块中。
|
|
367
|
+
|
|
368
|
+
### Q5: 为什么执行 /progress 显示 0%?
|
|
369
|
+
|
|
370
|
+
因为你还没有开发任何业务模块。框架模块不参与进度统计。
|
|
371
|
+
|
|
372
|
+
---
|
|
373
|
+
|
|
374
|
+
## 🎯 总结
|
|
375
|
+
|
|
376
|
+
| 类型 | 框架模块(已完成) | 业务模块(需要开发) |
|
|
377
|
+
|------|------------------|-------------------|
|
|
378
|
+
| 通用工具 | ruoyi-common(24个子模块) | - |
|
|
379
|
+
| 启动入口 | ruoyi-admin | - |
|
|
380
|
+
| 系统管理 | ruoyi-modules/ruoyi-system | - |
|
|
381
|
+
| 代码生成 | ruoyi-modules/ruoyi-generator | - |
|
|
382
|
+
| 演示模块 | ruoyi-modules/ruoyi-demo | - |
|
|
383
|
+
| 定时任务 | ruoyi-modules/ruoyi-job | - |
|
|
384
|
+
| 工作流 | ruoyi-modules/ruoyi-workflow | - |
|
|
385
|
+
| 业务模块 | - | ruoyi-modules/ruoyi-{你的业务}/ |
|
|
386
|
+
| 统计进度 | ❌ 不统计 | ✅ 只统计业务模块 |
|
|
387
|
+
|
|
388
|
+
**记住**:
|
|
389
|
+
- 框架 = 已完成的通用功能
|
|
390
|
+
- 业务 = 你要开发的项目功能
|
|
391
|
+
- 包名必须是 `org.dromara.*`
|
|
392
|
+
- 三层架构:Controller → Service → Mapper(无 DAO 层)
|
|
393
|
+
- 进度统计只看业务,不看框架
|
package/.claude/docs//350/267/257/347/224/261/351/205/215/347/275/256/346/214/207/345/215/227.md
ADDED
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
# 路由配置指南
|
|
2
|
+
|
|
3
|
+
> **适用于**: 腾云智慧食堂管理系统前端项目(`/Users/xujiajun/Developer/frontProj/web`)
|
|
4
|
+
|
|
5
|
+
最后更新: 2026-02-18
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 路由文件结构
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
src/router/
|
|
13
|
+
├── index.js # 路由入口:创建路由实例、全局前置守卫
|
|
14
|
+
├── static-routers.js # 静态路由:不需要权限的页面(登录、404、大屏等)
|
|
15
|
+
├── business-routers.js # 业务路由:商户管理相关页面
|
|
16
|
+
└── campus-routers.js # 园区路由:园区相关页面
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
`src/permission.js` — 全局路由守卫(登录、权限、动态路由加载)
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## 静态路由 (static-routers.js)
|
|
24
|
+
|
|
25
|
+
不需要登录权限的页面配置在这里,每条路由都设置 `hidden: true`(不在侧边栏显示):
|
|
26
|
+
|
|
27
|
+
```javascript
|
|
28
|
+
// src/router/static-routers.js
|
|
29
|
+
import Layout from '@/layout'
|
|
30
|
+
|
|
31
|
+
export default [
|
|
32
|
+
{
|
|
33
|
+
path: '/login',
|
|
34
|
+
name: 'login',
|
|
35
|
+
// ⭐ 懒加载规范:使用 webpackChunkName 注释
|
|
36
|
+
component: () => import(/* webpackChunkName: "login" */ '@/leniuview/login/index'),
|
|
37
|
+
hidden: true
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
path: '/404',
|
|
41
|
+
name: '404',
|
|
42
|
+
component: () => import(/* webpackChunkName: "404" */ '@/leniuview/error/404'),
|
|
43
|
+
hidden: true
|
|
44
|
+
},
|
|
45
|
+
// 有 Layout 框架、但不在菜单显示的页面
|
|
46
|
+
{
|
|
47
|
+
path: '',
|
|
48
|
+
component: Layout,
|
|
49
|
+
hidden: true,
|
|
50
|
+
meta: {
|
|
51
|
+
title: '首页',
|
|
52
|
+
icon: 'home'
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
]
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## 业务路由 (business-routers.js)
|
|
61
|
+
|
|
62
|
+
有 Layout 框架、需要权限的业务页面,组织为父子路由结构:
|
|
63
|
+
|
|
64
|
+
```javascript
|
|
65
|
+
// src/router/business-routers.js
|
|
66
|
+
import Layout from '@/layout'
|
|
67
|
+
import LayoutView from '@/layout/layout' // 嵌套路由时使用
|
|
68
|
+
|
|
69
|
+
export default {
|
|
70
|
+
path: '/initialized',
|
|
71
|
+
component: Layout, // 使用主布局
|
|
72
|
+
redirect: 'noRedirect',
|
|
73
|
+
name: '商户',
|
|
74
|
+
meta: {
|
|
75
|
+
title: '商户',
|
|
76
|
+
icon: 'component'
|
|
77
|
+
},
|
|
78
|
+
children: [
|
|
79
|
+
{
|
|
80
|
+
path: 'initial',
|
|
81
|
+
// ⭐ 懒加载:webpackChunkName 与 name 保持一致
|
|
82
|
+
component: () => import(/* webpackChunkName: "initial" */ '@/leniuview/Business/initialized'),
|
|
83
|
+
name: '商户注册',
|
|
84
|
+
meta: {
|
|
85
|
+
title: '商户注册',
|
|
86
|
+
redirect: 'audit'
|
|
87
|
+
}
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
path: 'initializedList',
|
|
91
|
+
component: () => import(/* webpackChunkName: "initializedList" */ '@/leniuview/Business/initializedList'),
|
|
92
|
+
name: '商户审核',
|
|
93
|
+
meta: {
|
|
94
|
+
title: '商户审核',
|
|
95
|
+
noCache: true // 不缓存该页面
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
]
|
|
99
|
+
}
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## 懒加载规范
|
|
105
|
+
|
|
106
|
+
```javascript
|
|
107
|
+
// ✅ 正确:使用 webpackChunkName 注释
|
|
108
|
+
component: () => import(/* webpackChunkName: "moduleName" */ '@/leniuview/xxx/index')
|
|
109
|
+
|
|
110
|
+
// ✅ webpackChunkName 命名建议与路由 name 保持一致
|
|
111
|
+
{
|
|
112
|
+
path: 'priceRule',
|
|
113
|
+
name: 'priceRule',
|
|
114
|
+
component: () => import(/* webpackChunkName: "priceRule" */ '@/leniuview/marketing/priceRule/index')
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
// ❌ 不推荐:不加 webpackChunkName(影响分包优化)
|
|
118
|
+
component: () => import('@/leniuview/xxx/index')
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
## meta 字段说明
|
|
124
|
+
|
|
125
|
+
| 字段 | 类型 | 说明 | 示例 |
|
|
126
|
+
|------|------|------|------|
|
|
127
|
+
| `title` | String | 页面标题(显示在浏览器标签和面包屑) | `'营销规则管理'` |
|
|
128
|
+
| `icon` | String | 菜单图标名称 | `'component'` |
|
|
129
|
+
| `noCache` | Boolean | 是否禁用页面缓存(`<keep-alive>`)默认缓存 | `true` |
|
|
130
|
+
| `hidden` | Boolean | 是否在侧边菜单中隐藏 | `true` |
|
|
131
|
+
| `redirect` | String | 重定向目标 | `'audit'` |
|
|
132
|
+
| `affix` | Boolean | 是否固定在 tab 栏(不可关闭) | `true` |
|
|
133
|
+
|
|
134
|
+
---
|
|
135
|
+
|
|
136
|
+
## 权限路由控制流程
|
|
137
|
+
|
|
138
|
+
`permission.js` 中的全局前置守卫流程:
|
|
139
|
+
|
|
140
|
+
```
|
|
141
|
+
用户访问页面
|
|
142
|
+
↓
|
|
143
|
+
有 Token?
|
|
144
|
+
├── 否 → 是白名单页面? → 是 → 直接访问
|
|
145
|
+
│ → 否 → 跳转 /login
|
|
146
|
+
└── 是 → 已加载用户角色?
|
|
147
|
+
├── 是 → 直接 next()
|
|
148
|
+
└── 否 → 调用 store.dispatch('user/getInfo')
|
|
149
|
+
↓
|
|
150
|
+
根据角色加载动态路由
|
|
151
|
+
store.dispatch('permission/generateRoutes', roles)
|
|
152
|
+
↓
|
|
153
|
+
router.addRoutes(accessedRoutes)
|
|
154
|
+
↓
|
|
155
|
+
next({ ...to, replace: true })
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
### 白名单页面(无需登录)
|
|
159
|
+
|
|
160
|
+
```javascript
|
|
161
|
+
// src/permission.js
|
|
162
|
+
const whiteList = [
|
|
163
|
+
'/login',
|
|
164
|
+
'/ssoLogin',
|
|
165
|
+
'/openLogin',
|
|
166
|
+
'/404',
|
|
167
|
+
'/registeredCompany',
|
|
168
|
+
'/registeredCompanyLinS',
|
|
169
|
+
'/resetPassword',
|
|
170
|
+
'/registerSupplier',
|
|
171
|
+
'/cooperativePartner',
|
|
172
|
+
'/dataHunter_user',
|
|
173
|
+
'/dataHunter_back',
|
|
174
|
+
'/dataHunter_merchant',
|
|
175
|
+
'/backCustomScreen'
|
|
176
|
+
]
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
---
|
|
180
|
+
|
|
181
|
+
## 新增路由步骤
|
|
182
|
+
|
|
183
|
+
### 1. 不需要权限的页面(静态路由)
|
|
184
|
+
|
|
185
|
+
在 `static-routers.js` 中添加:
|
|
186
|
+
|
|
187
|
+
```javascript
|
|
188
|
+
{
|
|
189
|
+
path: '/myPage',
|
|
190
|
+
name: 'myPage',
|
|
191
|
+
component: () => import(/* webpackChunkName: "myPage" */ '@/leniuview/myModule/index'),
|
|
192
|
+
hidden: true
|
|
193
|
+
}
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
### 2. 需要权限的业务页面(业务路由)
|
|
197
|
+
|
|
198
|
+
在对应的业务路由文件(如 `business-routers.js`)的 `children` 中添加:
|
|
199
|
+
|
|
200
|
+
```javascript
|
|
201
|
+
{
|
|
202
|
+
path: 'myFeature',
|
|
203
|
+
component: () => import(/* webpackChunkName: "myFeature" */ '@/leniuview/Business/myFeature/index'),
|
|
204
|
+
name: '我的功能',
|
|
205
|
+
meta: {
|
|
206
|
+
title: '我的功能',
|
|
207
|
+
noCache: true
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
### 3. 动态权限路由
|
|
213
|
+
|
|
214
|
+
从后端接口获取用户有权限的菜单,由 Vuex `permission` 模块动态生成路由,无需手动添加。
|
|
215
|
+
|
|
216
|
+
---
|
|
217
|
+
|
|
218
|
+
## 路由实例管理
|
|
219
|
+
|
|
220
|
+
```javascript
|
|
221
|
+
// src/router/index.js
|
|
222
|
+
import { resetRouter } from '@/router'
|
|
223
|
+
|
|
224
|
+
// 登出时重置路由(清除动态添加的权限路由)
|
|
225
|
+
resetRouter()
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
---
|
|
229
|
+
|
|
230
|
+
## 常见问题
|
|
231
|
+
|
|
232
|
+
### 重复点击相同路由报错
|
|
233
|
+
|
|
234
|
+
已在 `router/index.js` 中全局处理,忽略 `NavigationDuplicated` 错误,无需每个页面单独处理。
|
|
235
|
+
|
|
236
|
+
### 页面不缓存
|
|
237
|
+
|
|
238
|
+
在路由 meta 中添加 `noCache: true`,同时确保组件有 `name` 属性(`keep-alive` 按组件 name 缓存)。
|
|
239
|
+
|
|
240
|
+
### 检查当前用户是否有某页面权限
|
|
241
|
+
|
|
242
|
+
```javascript
|
|
243
|
+
import { checkMenu } from '@/utils/auth'
|
|
244
|
+
|
|
245
|
+
const hasAccess = checkMenu('/marketing/price')
|
|
246
|
+
```
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
{
|
|
2
|
+
"framework": {
|
|
3
|
+
"description": "框架模块配置 - 这些模块是框架的一部分,不参与业务进度统计",
|
|
4
|
+
"backend": {
|
|
5
|
+
"modules": [
|
|
6
|
+
"ruoyi-common",
|
|
7
|
+
"ruoyi-admin"
|
|
8
|
+
],
|
|
9
|
+
"systemModules": [
|
|
10
|
+
"ruoyi-modules/ruoyi-system",
|
|
11
|
+
"ruoyi-modules/ruoyi-generator"
|
|
12
|
+
],
|
|
13
|
+
"description": "后端框架模块,包含通用工具、系统管理、代码生成器等"
|
|
14
|
+
},
|
|
15
|
+
"systemFeatures": [
|
|
16
|
+
"用户管理",
|
|
17
|
+
"角色管理",
|
|
18
|
+
"菜单管理",
|
|
19
|
+
"部门管理",
|
|
20
|
+
"岗位管理",
|
|
21
|
+
"字典管理",
|
|
22
|
+
"参数配置",
|
|
23
|
+
"通知公告",
|
|
24
|
+
"操作日志",
|
|
25
|
+
"登录日志",
|
|
26
|
+
"在线用户",
|
|
27
|
+
"定时任务",
|
|
28
|
+
"代码生成器",
|
|
29
|
+
"租户管理",
|
|
30
|
+
"租户套餐",
|
|
31
|
+
"客户端管理",
|
|
32
|
+
"OSS配置",
|
|
33
|
+
"OSS对象存储"
|
|
34
|
+
]
|
|
35
|
+
},
|
|
36
|
+
"business": {
|
|
37
|
+
"description": "业务模块配置 - 这些是需要统计进度的业务代码",
|
|
38
|
+
"backend": {
|
|
39
|
+
"modulePattern": "ruoyi-modules/ruoyi-*",
|
|
40
|
+
"excludeModules": [
|
|
41
|
+
"ruoyi-modules/ruoyi-system",
|
|
42
|
+
"ruoyi-modules/ruoyi-generator",
|
|
43
|
+
"ruoyi-modules/ruoyi-demo",
|
|
44
|
+
"ruoyi-modules/ruoyi-job",
|
|
45
|
+
"ruoyi-modules/ruoyi-workflow"
|
|
46
|
+
],
|
|
47
|
+
"description": "业务模块位于 ruoyi-modules/ 下,以 ruoyi- 开头但不包括框架自带模块(system、generator、demo、job、workflow)"
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
"scanRules": {
|
|
51
|
+
"backend": {
|
|
52
|
+
"requiredFiles": [
|
|
53
|
+
"Entity (domain/*.java)",
|
|
54
|
+
"BO (domain/bo/*Bo.java)",
|
|
55
|
+
"VO (domain/vo/*Vo.java)",
|
|
56
|
+
"Controller (*Controller.java)",
|
|
57
|
+
"Service (I*Service.java)",
|
|
58
|
+
"ServiceImpl (impl/*ServiceImpl.java)",
|
|
59
|
+
"Mapper (*Mapper.java)"
|
|
60
|
+
],
|
|
61
|
+
"completenessFormula": "存在文件数 / 7 * 100%"
|
|
62
|
+
},
|
|
63
|
+
"todoPatterns": [
|
|
64
|
+
"TODO:",
|
|
65
|
+
"FIXME:",
|
|
66
|
+
"XXX:",
|
|
67
|
+
"HACK:",
|
|
68
|
+
"NOTE:"
|
|
69
|
+
]
|
|
70
|
+
},
|
|
71
|
+
"version": "1.0.0",
|
|
72
|
+
"lastUpdated": "2026-01-24"
|
|
73
|
+
}
|