HaniBlindBox/.kiro/specs/admin-system/tasks.md
2026-01-04 01:44:21 +08:00

248 lines
8.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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
- 用户菜单 = 部门菜单 角色菜单 用户专属菜单