248 lines
8.8 KiB
Markdown
248 lines
8.8 KiB
Markdown
# Implementation Plan: Admin System
|
||
|
||
## Overview
|
||
|
||
实现 HoneyBox.Admin 后台管理系统,包括后端 API 和 Vue3 前端。采用分阶段实现:先搭建后端框架和核心功能,再实现前端界面。
|
||
|
||
## Tasks
|
||
|
||
- [x] 1. 创建 HoneyBox.Admin 项目结构
|
||
- 创建 ASP.NET Core Web API 项目
|
||
- 配置项目文件夹结构 (Controllers, Services, Entities, Models, Data, Filters, Extensions)
|
||
- 添加必要的 NuGet 包引用
|
||
- 配置 appsettings.json 数据库连接
|
||
- _Requirements: 1.1, 1.2_
|
||
|
||
- [x] 2. 实现数据库实体和 DbContext
|
||
- [x] 2.1 创建 Entity 类
|
||
- 创建 AdminUser, Role, Menu, Permission, Department 实体
|
||
- 创建 AdminUserRole, RoleMenu, RolePermission, DepartmentMenu, AdminUserMenu 关联实体
|
||
- 创建 OperationLog 实体
|
||
- _Requirements: 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7_
|
||
- [x] 2.2 创建 AdminDbContext
|
||
- 配置 DbSet 属性
|
||
- 配置实体关系和索引
|
||
- _Requirements: 2.8_
|
||
- [x] 2.3 执行数据库迁移
|
||
- 创建数据库表
|
||
- 验证表结构
|
||
- _Requirements: 2.1-2.8_
|
||
|
||
- [x] 3. 实现认证服务
|
||
- [x] 3.1 创建通用 DTO 模型
|
||
- 创建 ApiResponse 通用响应模型
|
||
- 创建 PagedResult 分页结果模型
|
||
- 创建 AdminErrorCodes 错误码定义
|
||
- _Requirements: 3.1_
|
||
- [x] 3.2 创建认证相关 DTO 模型
|
||
- 创建 LoginRequest, LoginResponse, AdminUserInfo
|
||
- 创建 ChangePasswordRequest
|
||
- _Requirements: 3.1_
|
||
- [x] 3.3 实现 IAuthService 和 AuthService
|
||
- 实现 LoginAsync 方法 (验证凭据、生成 JWT)
|
||
- 实现登录失败计数和账户锁定逻辑
|
||
- 实现 GetCurrentUserInfoAsync 方法
|
||
- 实现 ChangePasswordAsync 方法
|
||
- _Requirements: 3.1, 3.2, 3.3, 3.4, 3.5_
|
||
- [x] 3.4 创建 AuthController
|
||
- 实现 POST /api/admin/auth/login
|
||
- 实现 GET /api/admin/auth/info
|
||
- 实现 PUT /api/admin/auth/password
|
||
- 实现 POST /api/admin/auth/logout
|
||
- _Requirements: 3.1, 3.6_
|
||
- [x] 3.5 创建 AdminAuthFilter
|
||
- 实现 JWT Token 验证
|
||
- 处理无效/过期 Token
|
||
- _Requirements: 3.6, 3.7_
|
||
|
||
- [x] 4. 实现菜单管理
|
||
- [x] 4.1 创建菜单相关 DTO
|
||
- 创建 MenuDto, MenuTreeDto, CreateMenuRequest, UpdateMenuRequest
|
||
- _Requirements: 4.1_
|
||
- [x] 4.2 实现 IMenuService 和 MenuService
|
||
- 实现 GetMenuTreeAsync (构建树形结构)
|
||
- 实现 CRUD 方法
|
||
- 实现 GetUserMenusAsync (合并部门菜单、角色菜单、用户专属菜单)
|
||
- _Requirements: 4.1, 4.2, 4.3, 4.4, 4.5, 4.7, 11.2, 11.3_
|
||
- [x] 4.3 创建 MenuController
|
||
- 实现所有菜单管理 API
|
||
- _Requirements: 4.1-4.7_
|
||
|
||
- [x] 5. 实现角色管理
|
||
- [x] 5.1 创建角色相关 DTO
|
||
- 创建 RoleDto, CreateRoleRequest, UpdateRoleRequest, RoleQueryRequest
|
||
- _Requirements: 5.1_
|
||
- [x] 5.2 实现 IRoleService 和 RoleService
|
||
- 实现分页查询
|
||
- 实现 CRUD 方法
|
||
- 实现菜单/权限分配
|
||
- _Requirements: 5.1, 5.2, 5.3, 5.4, 5.5, 5.6, 5.7_
|
||
- [x] 5.3 创建 RoleController
|
||
- 实现所有角色管理 API
|
||
- _Requirements: 5.1-5.7_
|
||
|
||
- [x] 6. 实现管理员管理
|
||
- [x] 6.1 创建管理员相关 DTO
|
||
- 创建 AdminUserDto, CreateAdminUserRequest, UpdateAdminUserRequest, AdminUserQueryRequest
|
||
- _Requirements: 6.1_
|
||
- [x] 6.2 实现 IAdminUserService 和 AdminUserService
|
||
- 实现分页查询
|
||
- 实现 CRUD 方法
|
||
- 实现角色分配、部门分配、用户专属菜单分配、状态切换、密码重置
|
||
- _Requirements: 6.1, 6.2, 6.3, 6.4, 6.5, 6.6, 6.7, 10.8, 11.1_
|
||
- [x] 6.3 创建 AdminUserController
|
||
- 实现所有管理员管理 API
|
||
- 包含分配部门、分配用户专属菜单接口
|
||
- _Requirements: 6.1-6.7, 10.8, 11.1_
|
||
|
||
- [x] 7. 实现部门管理
|
||
- [x] 7.1 创建部门相关 DTO
|
||
- 创建 DepartmentDto, DepartmentTreeDto, CreateDepartmentRequest, UpdateDepartmentRequest
|
||
- _Requirements: 10.1, 10.2_
|
||
- [x] 7.2 实现 IDepartmentService 和 DepartmentService
|
||
- 实现 GetDepartmentTreeAsync (构建树形结构,支持无限嵌套)
|
||
- 实现 CRUD 方法
|
||
- 实现部门菜单分配
|
||
- 实现循环引用检测 (防止部门设为自己的子部门)
|
||
- _Requirements: 10.1, 10.2, 10.3, 10.4, 10.5, 10.6, 10.7_
|
||
- [x] 7.3 创建 DepartmentController
|
||
- 实现所有部门管理 API
|
||
- _Requirements: 10.1-10.8_
|
||
|
||
- [x] 8. 实现权限控制
|
||
- [x] 8.1 实现 IPermissionService 和 PermissionService
|
||
- 实现 GetUserPermissionsAsync
|
||
- 实现 HasPermissionAsync
|
||
- 实现权限缓存和失效 (角色、部门、用户菜单变更时失效)
|
||
- _Requirements: 7.1, 7.4, 7.5, 11.5_
|
||
- [x] 8.2 创建 PermissionFilter
|
||
- 实现 AdminPermissionAttribute
|
||
- 实现权限验证逻辑
|
||
- _Requirements: 7.1, 7.2, 7.3_
|
||
- [x] 8.3 创建 PermissionController
|
||
- 实现权限列表查询 API
|
||
- _Requirements: 7.1_
|
||
|
||
- [x] 9. 实现操作日志
|
||
- [x] 9.1 实现 IOperationLogService 和 OperationLogService
|
||
- 实现日志记录方法
|
||
- 实现分页查询
|
||
- _Requirements: 8.1, 8.2, 8.3, 8.4_
|
||
- [x] 9.2 创建 OperationLogFilter
|
||
- 自动记录 API 操作日志
|
||
- _Requirements: 8.1, 8.2_
|
||
- [x] 9.3 创建 OperationLogController
|
||
- 实现日志查询 API
|
||
- _Requirements: 8.3, 8.4_
|
||
|
||
- [x] 10. 配置服务注册和静态文件
|
||
- [x] 10.1 创建 ServiceCollectionExtensions
|
||
- 实现 AddHoneyBoxAdmin() 扩展方法
|
||
- 注册所有服务和 DbContext
|
||
- _Requirements: 1.5_
|
||
- [x] 10.2 重构 Program.cs 使用扩展方法
|
||
- 使用 AddHoneyBoxAdmin() 替代手动注册
|
||
- 确保静态文件服务和 SPA Fallback 路由配置正确
|
||
- _Requirements: 1.3, 1.4_
|
||
|
||
- [x] 11. 数据初始化
|
||
- [x] 11.1 创建 DataSeeder
|
||
- 初始化超级管理员账号 (admin/admin123)
|
||
- 初始化超级管理员角色
|
||
- 初始化系统菜单
|
||
- 初始化系统权限
|
||
- 初始化根部门
|
||
- _Requirements: 12.1, 12.2, 12.3, 12.4, 12.5_
|
||
|
||
- [x] 12. Checkpoint - 后端 API 完成
|
||
- 确保所有 API 可正常调用
|
||
- 确保认证和权限控制正常工作
|
||
- 使用 Postman 或 .http 文件测试
|
||
|
||
- [x] 13. 创建 Vue3 前端项目
|
||
- [x] 13.1 初始化项目
|
||
- 使用 Vite 创建 Vue3 + TypeScript 项目
|
||
- 安装 Element Plus, Pinia, Vue Router, Axios
|
||
- 配置 vite.config.ts 输出到 wwwroot
|
||
- _Requirements: 9.1, 9.2, 9.3, 9.4, 9.8_
|
||
- [x] 13.2 创建基础结构
|
||
- 创建目录结构 (api, store, router, views, layout, utils)
|
||
- 配置 Axios 请求封装
|
||
- 配置 Token 管理
|
||
- _Requirements: 9.1, 9.2, 9.3_
|
||
|
||
- [x] 14. 实现前端登录功能
|
||
- [x] 14.1 创建登录页面
|
||
- 实现登录表单 (用户名、密码)
|
||
- 实现表单验证
|
||
- 调用登录 API
|
||
- _Requirements: 9.5_
|
||
- [x] 14.2 实现用户状态管理
|
||
- 创建 user store (Pinia)
|
||
- 存储 token 和用户信息
|
||
- _Requirements: 9.3_
|
||
|
||
- [x] 15. 实现前端布局和路由
|
||
- [x] 15.1 创建主布局
|
||
- 实现侧边栏菜单组件
|
||
- 实现顶部栏组件
|
||
- 实现主内容区域
|
||
- _Requirements: 9.6_
|
||
- [x] 15.2 实现动态路由
|
||
- 创建 permission store
|
||
- 根据用户菜单生成动态路由
|
||
- 实现路由守卫
|
||
- _Requirements: 9.4_
|
||
- [x] 15.3 实现权限指令
|
||
- 创建 v-permission 指令
|
||
- 实现按钮级别权限控制
|
||
- _Requirements: 9.7_
|
||
|
||
- [x] 16. 实现前端系统管理页面
|
||
- [x] 16.1 实现菜单管理页面
|
||
- 菜单树形表格
|
||
- 新增/编辑/删除菜单
|
||
- _Requirements: 4.1-4.7_
|
||
- [x] 16.2 实现角色管理页面
|
||
- 角色列表表格
|
||
- 新增/编辑/删除角色
|
||
- 分配菜单/权限
|
||
- _Requirements: 5.1-5.7_
|
||
- [x] 16.3 实现部门管理页面
|
||
- 部门树形表格
|
||
- 新增/编辑/删除部门
|
||
- 分配部门菜单
|
||
- _Requirements: 10.1-10.8_
|
||
- [x] 16.4 实现管理员管理页面
|
||
- 管理员列表表格
|
||
- 新增/编辑/删除管理员
|
||
- 分配角色、分配部门、分配用户专属菜单、启用/禁用
|
||
- _Requirements: 6.1-6.7, 10.8, 11.1_
|
||
|
||
- [x] 17. 实现首页仪表盘
|
||
- 创建 Dashboard 页面
|
||
- 显示基本统计信息
|
||
- _Requirements: 9.6_
|
||
|
||
- [x] 18. 前端打包和部署配置
|
||
- 配置生产环境构建
|
||
- 输出到 HoneyBox.Admin/wwwroot
|
||
- 验证一体化部署
|
||
- _Requirements: 9.8_
|
||
- **注意**: 由于项目路径包含 `#` 字符,Vite 构建会失败。需要将项目移动到不包含特殊字符的路径下进行构建。
|
||
|
||
- [x] 19. Final Checkpoint - 系统完成
|
||
- 确保前后端联调正常
|
||
- 确保所有功能可用
|
||
- 确保权限控制正常
|
||
- **后端**: 构建成功,所有 API 已实现
|
||
- **前端**: 所有页面已创建,需在无特殊字符路径下构建
|
||
|
||
## Notes
|
||
|
||
- 任务按顺序执行,后端优先于前端
|
||
- Checkpoint 任务用于阶段性验证
|
||
- 前端打包后部署到 wwwroot,实现一体化部署
|
||
- 默认管理员账号: admin / admin123
|
||
- 用户菜单 = 部门菜单 ∪ 角色菜单 ∪ 用户专属菜单
|