8.0 KiB
8.0 KiB
SoybeanAdmin - AI 开发助手指南
项目概述
SoybeanAdmin 是一个基于 Vue3 + Vite7 + TypeScript 的清新优雅的中后台管理模板。这是一个 pnpm monorepo 架构的项目,包含多个子包。
核心技术栈
- 框架: Vue 3.5.25 (Composition API)
- 构建工具: Vite 7
- 语言: TypeScript 5.9.3
- 状态管理: Pinia 3.0.4
- 路由: Vue Router 4.6.3 + Elegant Router
- UI 组件库: Naive UI 2.43.2
- 样式方案: UnoCSS 66.5.10 + SCSS
- 国际化: Vue I18n 11.2.2
- HTTP 客户端: Axios (自封装) / Alova (可选)
- 图表库: ECharts 6.0.0
- 图标: Iconify
- 包管理器: pnpm 10.5.0+
- Node 版本: 20.19.0+
项目结构
主要目录说明
soybean-admin/
├── packages/ # Monorepo 子包目录
│ ├── alova/ # Alova 网络请求封装
│ ├── axios/ # Axios 网络请求封装
│ ├── color/ # 颜色工具包
│ ├── hooks/ # 通用 Hooks 集合
│ ├── materials/ # 组件物料库
│ ├── scripts/ # 脚本工具
│ ├── uno-preset/ # UnoCSS 预设
│ └── utils/ # 通用工具函数
├── src/ # 主应用源码
│ ├── assets/ # 静态资源
│ ├── components/ # 公共组件
│ ├── constants/ # 常量定义
│ ├── enum/ # 枚举定义
│ ├── hooks/ # 业务 Hooks
│ ├── layouts/ # 布局组件
│ ├── locales/ # 国际化配置
│ ├── plugins/ # 插件配置
│ ├── router/ # 路由配置
│ ├── service/ # API 服务层
│ ├── store/ # Pinia 状态管理
│ ├── styles/ # 全局样式
│ ├── theme/ # 主题配置
│ ├── typings/ # TypeScript 类型定义
│ ├── utils/ # 工具函数
│ └── views/ # 页面视图
├── build/ # 构建配置
└── public/ # 公共静态资源
Monorepo 子包说明
@sa/axios: Axios 封装,包含请求拦截、响应处理、错误处理等@sa/alova: Alova 封装,提供另一种网络请求方案@sa/hooks: 通用 React Hooks 风格的组合式函数@sa/utils: 通用工具函数库@sa/color: 颜色处理工具@sa/materials: UI 组件物料@sa/scripts: 命令行工具脚本@sa/uno-preset: UnoCSS 自定义预设
开发规范
代码风格
- 遵循 SoybeanJS 规范
- 使用 ESLint (@soybeanjs/eslint-config) 进行代码检查
- 严格的 TypeScript 类型检查
- 使用 Composition API 和
<script setup>语法 - 优先使用组合式函数 (Composables) 封装可复用逻辑
Table页面
- 使用@/components/table/table-base.vue 作为基础表格组件
- 通过配置项实现增删改查功能
- 支持分页、排序、筛选等常用功能
- 使用类型定义确保数据结构一致性
命名规范
- 文件命名: kebab-case (如:
user-profile.vue) - 组件命名: PascalCase (如:
UserProfile) - 函数/变量: camelCase (如:
getUserInfo) - 常量: UPPER_SNAKE_CASE (如:
MAX_COUNT) - 类型/接口: PascalCase (如:
UserInfo) - 枚举: PascalCase (如:
UserRole)
路由系统
项目使用 Elegant Router 实现文件路由系统:
- 路由文件位于
src/router/elegant/目录 - 路由自动生成,无需手动配置
- 支持前端静态路由和后端动态路由
- 路由类型定义自动生成在
src/typings/elegant-router.d.ts
状态管理
使用 Pinia 进行状态管理:
- Store 文件位于
src/store/modules/ - 使用
defineStore定义状态 - 支持 Options API 和 Composition API 两种风格
- Store 类型已在
src/store/index.ts统一导出
API 服务
- API 定义位于
src/service/api/ - 使用
@sa/axios封装的请求实例 - 请求配置在
src/service/request/中 - 支持 TypeScript 类型定义
样式开发
- 优先使用 UnoCSS 原子化 CSS
- 使用
@sa/uno-preset自定义预设 - 全局样式在
src/styles/目录 - 主题配置在
src/theme/目录 - 支持 SCSS 预处理器
组件开发
- 公共组件位于
src/components/ - 组件分类:
common/: 通用基础组件custom/: 自定义业务组件advanced/: 高级封装组件table/: 表格相关组件
- 使用
unplugin-vue-components自动导入组件
类型定义
- 全局类型定义在
src/typings/目录 - 每个模块可包含独立的类型文件
- 使用
.d.ts文件进行类型声明 - API 类型定义在
src/typings/api/
常用命令
# 开发
pnpm dev # 测试环境开发
pnpm dev:prod # 生产环境模式开发
# 构建
pnpm build # 生产环境构建
pnpm build:test # 测试环境构建
# 代码质量
pnpm lint # ESLint 检查并修复
pnpm typecheck # TypeScript 类型检查
# 工具命令
pnpm gen-route # 生成路由
pnpm cleanup # 清理项目
pnpm commit # Git 提交 (英文)
pnpm commit:zh # Git 提交 (中文)
pnpm release # 发布版本
pnpm update-pkg # 更新依赖包
开发建议
创建新页面
- 在
src/views/下创建页面目录 - 路由会自动生成,运行
pnpm gen-route - 在页面中使用
<script setup>和 TypeScript - 使用 Naive UI 组件构建界面
添加 API 接口
- 在
src/service/api/中定义接口 - 在
src/typings/api/中定义类型 - 使用
@sa/axios的请求实例 - 在组件中通过
import使用
状态管理
- 在
src/store/modules/创建 store - 使用
defineStore定义 - 在组件中使用
const store = useXxxStore() - 支持持久化存储插件
组件封装
- 评估是否为通用组件
- 在合适的目录下创建组件文件
- 使用 TypeScript 定义 Props 和 Emits
- 添加必要的文档注释
- 考虑组件的可复用性和可维护性
样式编写
- 优先使用 UnoCSS 原子类
- 复杂布局可使用 Flex/Grid 原子类
- 使用主题变量确保主题切换正常
- SCSS 用于特殊样式需求
国际化
- 翻译文件在
src/locales/langs/ - 使用
$t('key')获取翻译 - 新增翻译需同步更新所有语言文件
注意事项
- 严格类型: 确保所有变量、函数都有明确的类型定义
- 响应式规范: 使用
ref、reactive、computed等 Vue 3 响应式 API - 性能优化: 合理使用
computed、watchEffect,避免不必要的重渲染 - 错误处理: API 请求需添加错误处理逻辑
- 权限控制: 涉及权限的功能需配合路由守卫
- 移动端适配: 注意响应式设计,支持移动端访问
- Monorepo: 修改 packages 下的包时注意影响范围
开发工作流
- 启动项目:
pnpm dev - 创建分支: 遵循 Git Flow 规范
- 开发功能: 遵循项目规范编码
- 代码检查:
pnpm lint和pnpm typecheck - 提交代码:
pnpm commit或pnpm commit:zh - 测试验证: 确保功能正常
- 代码审查: 提交 PR 前自查
外部资源
AI 协作提示
在协助开发时,请注意:
- 遵循项目现有的代码风格和架构
- 保持 TypeScript 类型的完整性
- 使用 Vue 3 Composition API
- 优先使用项目已有的工具函数和 Hooks
- 注意 Monorepo 架构,正确引用子包
- 样式优先使用 UnoCSS 原子类
- 确保代码符合 ESLint 规则
- 添加必要的注释,特别是复杂逻辑
- 考虑代码的可维护性和扩展性
- 遵循响应式设计原则
最后更新: 2025-12-24