# 后台管理系统完整功能说明 ## 功能概述 后台管理系统用于管理小程序中的书籍数据,实现了完整的书籍管理功能,包括: 1. **管理员登录** - 只有管理员可以登录后台管理系统 2. **书籍管理** - 书籍的增删改查 3. **书籍状态管理** - 上架/下架操作 4. **批量操作** - 批量删除、批量上架、批量下架 ## 后端实现 ### 1. 数据库设计 #### 用户表添加role字段 在 `users` 表中添加 `role` 字段,用于区分管理员和普通用户: ```sql ALTER TABLE `users` ADD COLUMN `role` VARCHAR(20) DEFAULT 'user' COMMENT '用户角色:admin-管理员,user-普通用户' AFTER `status`, ADD INDEX `idx_role` (`role`); ``` #### 创建默认管理员账号 ```sql INSERT INTO `users` (`username`, `nickname`, `password`, `role`, `status`, `created_at`, `updated_at`) SELECT 'admin', '管理员', '0192023a7bbd73250516f069df18b500', 'admin', 1, NOW(), NOW() WHERE NOT EXISTS (SELECT 1 FROM `users` WHERE `username` = 'admin'); ``` 默认管理员账号: - 用户名:`admin` - 密码:`admin123`(MD5加密后:`0192023a7bbd73250516f069df18b500`) ### 2. 实体类 #### User.java - 添加 `role` 字段(String类型) - 用于区分管理员和普通用户 #### Book.java - 包含书籍的所有字段 - 支持状态管理(status:0-下架,1-上架) ### 3. DTO和VO #### AdminLoginDTO.java - 管理员登录DTO - 包含用户名和密码 #### AdminLoginVO.java - 管理员登录VO - 包含用户信息和token #### BookManageDTO.java - 书籍管理DTO - 包含书籍的所有可编辑字段 #### AdminBookVO.java - 后台管理书籍VO - 包含书籍的所有信息,包括分类名称 ### 4. 服务层 #### AdminService.java - 管理员登录服务 - 验证用户名和密码 - 检查用户角色(只有admin可以登录) - 检查用户状态 - 返回token #### AdminBookService.java - 书籍管理服务 - 分页查询书籍(支持关键词、分类、状态筛选) - 根据ID查询书籍 - 创建书籍 - 更新书籍 - 删除书籍(单个/批量) - 上架书籍(单个/批量) - 下架书籍(单个/批量) ### 5. 控制器 #### AdminController.java - 管理员登录接口 - `POST /api/admin/login` - 管理员登录 #### AdminBookController.java - 书籍管理接口 - `GET /api/admin/book/list` - 分页查询书籍 - `GET /api/admin/book/{id}` - 根据ID查询书籍 - `POST /api/admin/book` - 创建书籍 - `PUT /api/admin/book/{id}` - 更新书籍 - `DELETE /api/admin/book/{id}` - 删除书籍 - `DELETE /api/admin/book/batch` - 批量删除书籍 - `PUT /api/admin/book/{id}/publish` - 上架书籍 - `PUT /api/admin/book/{id}/unpublish` - 下架书籍 - `PUT /api/admin/book/batch/publish` - 批量上架书籍 - `PUT /api/admin/book/batch/unpublish` - 批量下架书籍 ### 6. 权限控制 #### AdminInterceptor.java - 管理员权限拦截器 - 拦截所有 `/api/admin/**` 路径的请求 - 排除登录接口 `/api/admin/login` - 验证请求头中的token - 如果token无效,返回401未授权错误 #### AdminWebConfig.java - Web配置类 - 注册拦截器 - 配置拦截路径和排除路径 ## 前端实现 ### 1. API接口 #### api.js - 统一请求方法 - 管理员登录API - 书籍管理API(增删改查、上架下架、批量操作) - 分类查询API ### 2. 登录页面 #### login.html - 管理员登录表单 - 用户名和密码验证 - 登录成功后保存token到localStorage - 跳转到书籍管理页面 - 错误提示和加载状态 ### 3. 书籍管理页面 #### books.html - 书籍列表展示 - 搜索和筛选功能(关键词、状态、分类) - 分页功能 - 添加书籍(模态框) - 编辑书籍(模态框) - 删除书籍(单个/批量) - 上架/下架书籍(单个/批量) - 退出登录 ## 功能特性 ### 1. 管理员登录 #### 登录权限 - 只有 `role` 为 `admin` 的用户可以登录 - 普通用户(`role` 为 `user`)不能登录后台管理系统 - 登录时会验证用户角色和状态 #### Token管理 - Token保存在localStorage中 - Token格式:`admin_token_{userId}` - 所有后台管理接口都需要在请求头中携带token ### 2. 书籍管理 #### 查询功能 - 支持按书名、作者搜索 - 支持按状态筛选(上架/下架) - 支持按分类筛选 - 支持分页查询 - 支持查看所有状态的书籍(后台管理) #### 添加书籍 - 填写书籍信息(书名、作者、封面、简介等) - 设置书籍价格、是否免费、是否VIP - 选择分类 - 设置书籍状态(上架/下架) - 参数验证 #### 编辑书籍 - 修改书籍信息 - 保留原有的统计信息(浏览次数、点赞数、阅读次数) - 参数验证 #### 删除书籍 - 单个删除:点击"删除"按钮,确认后删除 - 批量删除:选中多个书籍后点击"批量删除",确认后删除 #### 上架/下架 - 单个操作:点击"上架"或"下架"按钮 - 批量操作:选中多个书籍后点击"批量上架"或"批量下架" - 状态更新后自动刷新列表 ### 3. 权限控制 #### 接口权限 - 所有 `/api/admin/**` 接口都需要token - 登录接口 `/api/admin/login` 不需要token - 如果token无效,返回401未授权错误 #### 前端权限 - 登录页面会检查是否已登录,如果已登录会跳转到书籍管理页面 - 书籍管理页面会检查token,如果token不存在会跳转到登录页面 ## 使用步骤 ### 1. 数据库初始化 ```bash mysql -u root -p books_db < book/src/main/resources/db/admin_schema.sql ``` ### 2. 启动后端服务 ```bash cd book mvn spring-boot:run ``` ### 3. 启动前端开发服务器 ```bash cd book-admin npm install # 首次使用需要安装依赖 npm run dev # 启动开发服务器 ``` ### 4. 登录 - 用户名:`admin` - 密码:`admin123` ### 5. 管理书籍 - 查看书籍列表 - 搜索和筛选书籍 - 添加新书籍 - 编辑现有书籍 - 删除书籍 - 上架/下架书籍 - 批量操作 ## API接口详细说明 ### 管理员登录 **POST** `/api/admin/login` 请求体: ```json { "username": "admin", "password": "admin123" } ``` 响应: ```json { "code": 200, "message": "登录成功", "data": { "id": 1, "username": "admin", "nickname": "管理员", "role": "admin", "token": "admin_token_1" } } ``` ### 分页查询书籍 **GET** `/api/admin/book/list?page=1&size=10&keyword=&status=1&categoryId=` 参数: - `page` - 页码(默认:1) - `size` - 每页数量(默认:10) - `keyword` - 关键词(可选,搜索书名、作者) - `status` - 状态(可选,0-下架,1-上架) - `categoryId` - 分类ID(可选) 响应: ```json { "code": 200, "message": "成功", "data": { "list": [...], "total": 100, "page": 1, "size": 10 } } ``` ### 创建书籍 **POST** `/api/admin/book` 请求头: ``` Authorization: admin_token_1 ``` 请求体: ```json { "title": "书名", "author": "作者", "cover": "封面URL", "image": "图片URL", "brief": "简介", "desc": "描述", "introduction": "详细介绍", "price": 0.00, "isFree": false, "isVip": false, "categoryId": 1, "status": 1 } ``` ### 更新书籍 **PUT** `/api/admin/book/{id}` 请求头和请求体同创建书籍。 ### 删除书籍 **DELETE** `/api/admin/book/{id}` 请求头: ``` Authorization: admin_token_1 ``` ### 上架书籍 **PUT** `/api/admin/book/{id}/publish` 请求头: ``` Authorization: admin_token_1 ``` ### 下架书籍 **PUT** `/api/admin/book/{id}/unpublish` 请求头: ``` Authorization: admin_token_1 ``` ## 数据库表结构 ### users表 - `id` - 用户ID - `username` - 用户名 - `password` - 密码(MD5加密) - `role` - 用户角色(admin-管理员,user-普通用户) - `status` - 状态(0-禁用,1-启用) - 其他字段... ### books表 - `id` - 书籍ID - `title` - 书名 - `author` - 作者 - `cover` - 封面URL - `image` - 图片URL - `brief` - 简介 - `desc` - 描述 - `introduction` - 详细介绍 - `price` - 价格 - `is_free` - 是否免费 - `is_vip` - 是否VIP - `category_id` - 分类ID - `status` - 状态(0-下架,1-上架) - `view_count` - 浏览次数 - `like_count` - 点赞数 - `read_count` - 阅读次数 - `created_at` - 创建时间 - `updated_at` - 更新时间 ## 注意事项 1. **密码加密**:系统使用MD5加密密码,默认管理员密码 `admin123` 的MD5值为 `0192023a7bbd73250516f069df18b500` 2. **Token管理**:当前使用的是模拟token(`admin_token_{userId}`),生产环境建议使用JWT Token 3. **CORS配置**:后端已配置CORS,允许跨域请求 4. **API地址**:前端API地址配置在 `utils/api.js` 中,默认是 `http://localhost:8081` 5. **Vue.js版本**:前端使用Vue.js 3,通过CDN引入 6. **权限验证**:权限拦截器会验证token,如果token无效会返回401错误 ## 后续优化建议 1. **JWT Token**:使用JWT Token替代模拟token 2. **Token过期**:添加token过期时间管理 3. **操作日志**:记录管理员操作日志 4. **数据统计**:添加数据统计功能(书籍数量、用户数量等) 5. **用户管理**:添加用户管理功能 6. **分类管理**:添加分类管理功能 7. **图片上传**:添加图片上传功能 8. **数据导出**:添加数据导出功能(Excel、CSV等) 9. **权限细化**:细化权限管理(不同管理员有不同的权限) 10. **操作确认**:添加操作确认对话框,防止误操作