Skip to content

项目结构

CmdAdmin 采用前后端分离架构,后端使用 Spring Boot,前端使用 Vue 3。

后端结构

src/main/java/com/cmdadmin/
├── CmdAdminApplication.java          # 应用启动类
├── common/                           # 公共组件
│   ├── annotation/                   # 自定义注解
│   │   ├── OperLog.java              # 操作日志注解
│   │   └── DataScope.java            # 数据权限注解
│   ├── aspect/                       # AOP 切面
│   │   ├── OperLogAspect.java        # 操作日志切面
│   │   └── DataScopeAspect.java      # 数据权限切面
│   ├── base/                         # 基础类
│   │   ├── BaseEntity.java           # 实体基类
│   │   └── BaseController.java       # 控制器基类
│   ├── config/                       # 配置类
│   │   ├── RedisConfig.java          # Redis 配置
│   │   ├── SecurityConfig.java       # 安全配置
│   │   └── WebConfig.java            # Web 配置
│   ├── constant/                     # 常量定义
│   │   └── CommonConstant.java       # 通用常量
│   ├── exception/                    # 异常处理
│   │   ├── BusinessException.java    # 业务异常
│   │   └── GlobalExceptionHandler.java # 全局异常处理
│   ├── filter/                       # 过滤器
│   │   └── JwtAuthenticationFilter.java # JWT 认证过滤器
│   ├── response/                     # 响应封装
│   │   └── Result.java               # 统一响应
│   └── utils/                        # 工具类
│       ├── JwtTokenUtil.java         # JWT 工具
│       ├── SecurityUtils.java        # 安全工具
│       └── ServletUtils.java         # Servlet 工具
├── config/                           # 外部配置
│   └── MyBatisConfig.java            # MyBatis 配置
├── example/                          # 示例模块
│   ├── controller/                   # 示例控制器
│   ├── entity/                       # 示例实体
│   ├── repository/                   # 示例数据访问
│   └── service/                      # 示例业务逻辑
└── system/                           # 系统管理模块
    ├── controller/                   # 系统控制器
    │   ├── AuthController.java       # 认证控制器
    │   ├── SysUserController.java    # 用户控制器
    │   ├── SysRoleController.java    # 角色控制器
    │   ├── SysMenuController.java    # 菜单控制器
    │   ├── SysDeptController.java    # 部门控制器
    │   ├── SysDictTypeController.java # 字典类型控制器
    │   ├── SysDictItemController.java # 字典项控制器
    │   ├── SysParamController.java   # 参数控制器
    │   ├── SysNoticeController.java  # 通知公告控制器
    │   ├── SysJobController.java     # 定时任务控制器
    │   ├── SysLoginLogController.java # 登录日志控制器
    │   ├── SysOperLogController.java # 操作日志控制器
    │   └── SysExceptionLogController.java # 异常日志控制器
    ├── entity/                       # 系统实体
    │   ├── SysUser.java              # 用户实体
    │   ├── SysRole.java              # 角色实体
    │   ├── SysMenu.java              # 菜单实体
    │   ├── SysDept.java              # 部门实体
    │   ├── SysDictType.java          # 字典类型实体
    │   ├── SysDictItem.java          # 字典项实体
    │   ├── SysParam.java             # 参数实体
    │   ├── SysNotice.java            # 通知公告实体
    │   ├── SysJob.java               # 定时任务实体
    │   ├── SysLoginLog.java          # 登录日志实体
    │   ├── SysOperLog.java           # 操作日志实体
    │   └── SysExceptionLog.java      # 异常日志实体
    ├── repository/                   # 数据访问层
    │   ├── SysUserRepository.java    # 用户仓库
    │   ├── SysRoleRepository.java    # 角色仓库
    │   └── ...
    ├── service/                      # 业务逻辑层
    │   ├── SysUserService.java       # 用户服务
    │   ├── SysRoleService.java       # 角色服务
    │   └── ...
    └── job/                          # 定时任务
        ├── CleanExpiredLogJob.java   # 清理过期日志
        ├── CleanTempFileJob.java     # 清理临时文件
        ├── DataSyncJob.java          # 数据同步
        └── ...

前端结构

admin-web/
├── public/                           # 静态资源
│   └── favicon.ico                   # 网站图标
├── src/
│   ├── api/                          # API 接口
│   │   ├── auth.ts                   # 认证接口
│   │   ├── user.ts                   # 用户接口
│   │   ├── role.ts                   # 角色接口
│   │   ├── menu.ts                   # 菜单接口
│   │   └── ...
│   ├── assets/                       # 静态资源
│   │   ├── images/                   # 图片
│   │   ├── styles/                   # 样式
│   │   └── icons/                    # 图标
│   ├── components/                   # 公共组件
│   │   ├── Dict/                     # 字典组件
│   │   │   ├── DictSelect.vue        # 字典下拉选择
│   │   │   ├── DictRadio.vue         # 字典单选
│   │   │   └── DictTag.vue           # 字典标签
│   │   ├── Breadcrumb/               # 面包屑
│   │   ├── Hamburger/                # 折叠按钮
│   │   ├── SvgIcon/                  # SVG 图标
│   │   └── ...
│   ├── composables/                  # 组合式函数
│   │   └── useCrud.ts                # CRUD Hook
│   ├── directives/                   # 自定义指令
│   │   └── permission.ts             # 权限指令
│   ├── layout/                       # 布局组件
│   │   ├── components/               # 布局子组件
│   │   │   ├── Navbar.vue            # 顶部导航
│   │   │   ├── Sidebar/              # 侧边栏
│   │   │   ├── AppMain.vue           # 主内容区
│   │   │   └── TagsView/             # 标签页
│   │   └── index.vue                 # 布局入口
│   ├── router/                       # 路由配置
│   │   ├── index.ts                  # 路由入口
│   │   └── routes.ts                 # 静态路由
│   ├── services/                     # 服务层
│   │   ├── request.ts                # Axios 封装
│   │   └── modules/                  # 业务模块
│   ├── stores/                       # Pinia 状态
│   │   ├── auth.ts                   # 认证状态
│   │   ├── user.ts                   # 用户状态
│   │   ├── app.ts                    # 应用状态
│   │   └── tagsView.ts               # 标签页状态
│   ├── utils/                        # 工具函数
│   │   ├── auth.ts                   # 认证工具
│   │   ├── validate.ts               # 验证工具
│   │   └── index.ts                  # 通用工具
│   ├── views/                        # 页面视图
│   │   ├── login/                    # 登录页
│   │   ├── dashboard/                # 仪表盘
│   │   ├── profile/                  # 个人中心
│   │   ├── settings/                 # 系统设置
│   │   ├── system/                   # 系统管理
│   │   │   ├── user/                 # 用户管理
│   │   │   ├── role/                 # 角色管理
│   │   │   ├── menu/                 # 菜单管理
│   │   │   ├── dept/                 # 部门管理
│   │   │   ├── dict/                 # 字典管理
│   │   │   ├── param/                # 参数管理
│   │   │   ├── notice/               # 通知公告
│   │   │   └── job/                  # 定时任务
│   │   ├── monitor/                  # 系统监控
│   │   │   ├── server/               # 服务器监控
│   │   │   └── cache/                # 缓存监控
│   │   ├── log/                      # 日志管理
│   │   │   ├── login/                # 登录日志
│   │   │   ├── oper/                 # 操作日志
│   │   │   └── error/                # 异常日志
│   │   └── example/                  # 示例功能
│   │       ├── table/                # 表格示例
│   │       ├── form/                 # 表单示例
│   │       ├── editor/               # 富文本编辑器
│   │       ├── monaco/               # 代码编辑器
│   │       ├── luckysheet/           # 在线表格
│   │       └── ...
│   ├── App.vue                       # 根组件
│   ├── main.ts                       # 入口文件
│   └── vite-env.d.ts                 # Vite 类型声明
├── .env.development                  # 开发环境配置
├── .env.production                   # 生产环境配置
├── index.html                        # HTML 模板
├── package.json                      # 依赖配置
├── tsconfig.json                     # TypeScript 配置
└── vite.config.ts                    # Vite 配置

分层架构

后端分层

┌─────────────────────────────────────┐
│           Controller 层              │  ← 接收请求,返回响应
│    (处理 HTTP 请求,参数校验)        │
├─────────────────────────────────────┤
│            Service 层                │  ← 业务逻辑处理
│    (业务规则,事务控制)              │
├─────────────────────────────────────┤
│          Repository 层               │  ← 数据访问
│    (数据库操作,JPA)                 │
├─────────────────────────────────────┤
│            Entity 层                 │  ← 数据模型
│    (实体类,与数据库表对应)           │
└─────────────────────────────────────┘

前端分层

┌─────────────────────────────────────┐
│            Views 层                  │  ← 页面组件
│    (页面展示,用户交互)              │
├─────────────────────────────────────┤
│          Components 层               │  ← 公共组件
│    (可复用组件)                      │
├─────────────────────────────────────┤
│           Stores 层                  │  ← 状态管理
│    (Pinia,全局状态)                 │
├─────────────────────────────────────┤
│           Services 层                │  ← 服务层
│    (API 调用,数据处理)              │
├─────────────────────────────────────┤
│            Utils 层                  │  ← 工具函数
│    (通用工具,常量定义)              │
└─────────────────────────────────────┘

核心设计

1. 统一响应格式

java
public class Result<T> {
    private Integer code;       // 状态码 0-成功 1-失败
    private String message;     // 提示信息
    private T data;             // 数据
    private Long timestamp;     // 时间戳
}

2. 统一异常处理

java
@RestControllerAdvice
public class GlobalExceptionHandler {
    
    @ExceptionHandler(BusinessException.class)
    public Result<Void> handleBusinessException(BusinessException e) {
        return Result.error(e.getMessage());
    }
    
    @ExceptionHandler(Exception.class)
    public Result<Void> handleException(Exception e) {
        return Result.error("系统繁忙,请稍后重试");
    }
}

3. AOP 日志记录

java
@Aspect
@Component
public class OperLogAspect {
    
    @Around("@annotation(operLog)")
    public Object around(ProceedingJoinPoint point, OperLog operLog) {
        // 记录操作前...
        Object result = point.proceed();
        // 记录操作后...
        return result;
    }
}

4. 动态路由加载

typescript
// 自动扫描视图组件
const modules = import.meta.glob('@/views/**/*.vue')

// 动态注册路由
const registerRoutes = (menus: Menu[]) => {
  menus.forEach(menu => {
    const component = modules[`/src/views/${menu.component}.vue`]
    // 注册路由...
  })
}

数据库设计

核心表关系

┌─────────────┐     ┌─────────────┐     ┌─────────────┐
│   sys_user  │────▶│sys_user_role│◀────│  sys_role   │
└─────────────┘     └─────────────┘     └─────────────┘


                    ┌─────────────┐
                    │sys_role_menu│
                    └─────────────┘


                    ┌─────────────┐
                    │  sys_menu   │
                    └─────────────┘

数据权限

┌─────────────┐     ┌─────────────┐
│  sys_user   │────▶│  sys_dept   │
│   dept_id   │     │    id       │
└─────────────┘     └─────────────┘

                           │ parent_id

                    ┌─────────────┐
                    │  sys_dept   │
                    └─────────────┘

配置文件

后端配置

文件说明
application.yml公共配置
application-dev.yml开发环境
application-test.yml测试环境
application-prod.yml生产环境

前端配置

文件说明
.env.development开发环境变量
.env.production生产环境变量
vite.config.tsVite 构建配置
tsconfig.jsonTypeScript 配置

命名规范

后端命名

类型规范示例
包名小写,点分隔com.cmdadmin.system
类名大驼峰SysUserController
方法名小驼峰getUserList
变量名小驼峰userName
常量名大写下划线MAX_RETRY_COUNT
数据库表小写下划线sys_user
数据库字段小写下划线user_name

前端命名

类型规范示例
组件名大驼峰UserManagement
文件名小写横线user-management.vue
变量名小驼峰userList
常量名大写下划线API_BASE_URL
组合式函数use 前缀useCrud
Pinia Store名词useUserStore

基于 MIT 许可发布