# 后台管理系统功能说明 ## 功能概述 实现了完整的后台管理系统,用于管理小程序中的书籍数据,包括: 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`); ``` ### 2. 创建默认管理员账号 执行 `admin_schema.sql` 脚本会自动创建默认管理员账号: - 用户名:`admin` - 密码:`admin123`(MD5加密后:`0192023a7bbd73250516f069df18b500`) - 角色:`admin` ## 后端实现 ### 1. 实体类更新 **文件**:`book/src/main/java/com/yu/book/domain/User.java` 添加 `role` 字段: ```java private String role; // 用户角色:admin-管理员,user-普通用户 ``` ### 2. Mapper更新 **文件**:`book/src/main/resources/mapper/UserMapper.xml` - 在 `resultMap` 中添加 `role` 字段映射 - 在 `insert` 语句中添加 `role` 字段 - 在 `update` 语句中添加 `role` 字段更新 ### 3. 管理员登录服务 **文件**:`book/src/main/java/com/yu/book/admin/service/AdminService.java` 主要功能: - 验证用户名和密码 - 检查用户角色,只有 `role` 为 `admin` 的用户可以登录 - 检查用户状态 - 返回管理员信息和token ### 4. 管理员登录接口 **文件**:`book/src/main/java/com/yu/book/admin/controller/AdminController.java` 接口:`POST /api/admin/login` ### 5. 书籍管理服务 **文件**:`book/src/main/java/com/yu/book/admin/service/AdminBookService.java` 主要功能: - 分页查询书籍(支持关键词、分类、状态筛选) - 根据ID查询书籍 - 创建书籍 - 更新书籍 - 删除书籍 - 批量删除书籍 - 上架书籍 - 下架书籍 - 批量上架书籍 - 批量下架书籍 ### 6. 书籍管理接口 **文件**:`book/src/main/java/com/yu/book/admin/controller/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` - 批量下架书籍 ### 7. 权限拦截器 **文件**:`book/src/main/java/com/yu/book/admin/interceptor/AdminInterceptor.java` 功能: - 拦截所有 `/api/admin/**` 路径的请求 - 排除登录接口 `/api/admin/login` - 验证请求头中的token - 如果token无效,返回401未授权错误 ### 8. Web配置 **文件**:`book/src/main/java/com/yu/book/admin/config/AdminWebConfig.java` 配置拦截器: - 拦截路径:`/api/admin/**` - 排除路径:`/api/admin/login` ## 前端实现 ### 1. API接口文件 **文件**:`book-admin/utils/api.js` 包含所有后台管理系统的API接口: - 管理员登录 - 书籍管理(增删改查) - 书籍上架/下架 - 批量操作 - 分类查询 ### 2. 登录页面 **文件**:`book-admin/pages/login.html` 功能: - 管理员登录表单 - 用户名和密码验证 - 登录成功后保存token到localStorage - 跳转到书籍管理页面 ### 3. 书籍管理页面 **文件**:`book-admin/pages/books.html` 功能: - 书籍列表展示 - 搜索和筛选功能 - 分页功能 - 添加书籍 - 编辑书籍 - 删除书籍 - 上架/下架书籍 - 批量操作 - 退出登录 ## 使用步骤 ### 1. 数据库初始化 ```bash # 执行数据库脚本 mysql -u root -p books_db < book/src/main/resources/db/admin_schema.sql ``` ### 2. 启动后端服务 确保后端服务已启动(端口8081) ### 3. 打开前端页面 使用浏览器打开 `book-admin/pages/login.html` ### 4. 登录 使用默认管理员账号登录: - 用户名:`admin` - 密码:`admin123` ### 5. 管理书籍 登录成功后,可以: - 查看书籍列表 - 搜索和筛选书籍 - 添加新书籍 - 编辑现有书籍 - 删除书籍 - 上架/下架书籍 - 批量操作 ## 权限控制 ### 1. 登录权限 - 只有 `role` 为 `admin` 的用户可以登录后台管理系统 - 普通用户(`role` 为 `user`)尝试登录会返回错误:"您不是管理员,无权登录后台管理系统" ### 2. 接口权限 - 所有后台管理接口都需要在请求头中携带token - Token格式:`admin_token_{userId}` - 如果token无效或缺失,会返回401未授权错误 ### 3. 前端权限 - 登录页面会检查是否已登录,如果已登录会跳转到书籍管理页面 - 书籍管理页面会检查token,如果token不存在会跳转到登录页面 ## 接口说明 ### 管理员登录 **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" } } ``` ### 书籍管理接口 所有书籍管理接口都需要在请求头中携带token: ``` Authorization: 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` 请求体: ```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}` #### 上架书籍 **PUT** `/api/admin/book/{id}/publish` #### 下架书籍 **PUT** `/api/admin/book/{id}/unpublish` ## 创建管理员账号 ### 方法1:使用SQL脚本 执行 `admin_schema.sql` 脚本会自动创建默认管理员账号。 ### 方法2:手动创建 1. 在数据库中执行以下SQL: ```sql -- 创建管理员账号 INSERT INTO `users` (`username`, `nickname`, `password`, `role`, `status`, `created_at`, `updated_at`) VALUES ('admin', '管理员', '0192023a7bbd73250516f069df18b500', 'admin', 1, NOW(), NOW()); -- 密码:admin123(MD5加密后:0192023a7bbd73250516f069df18b500) ``` 2. 或者将现有用户设置为管理员: ```sql UPDATE `users` SET `role` = 'admin' WHERE `username` = 'your_username'; ``` ### 方法3:使用Java代码生成密码 ```java import com.yu.book.util.PasswordUtil; String password = "admin123"; String encryptedPassword = PasswordUtil.encrypt(password); System.out.println("加密后的密码: " + encryptedPassword); ``` ## 注意事项 1. **密码加密**:系统使用MD5加密密码,默认管理员密码 `admin123` 的MD5值为 `0192023a7bbd73250516f069df18b500` 2. **Token管理**:当前使用的是模拟token(`admin_token_{userId}`),实际项目中应该使用JWT Token 3. **权限验证**:权限拦截器会验证token,如果token无效会返回401错误 4. **CORS配置**:后端已配置CORS,允许跨域请求 5. **API地址**:前端API地址配置在 `book-admin/utils/api.js` 中,默认是 `http://localhost:8081` 6. **Vue.js版本**:前端使用Vue.js 3,通过CDN引入 ## 测试建议 1. **登录测试**: - 使用管理员账号登录 - 使用普通用户账号登录(应该失败) - 使用错误的密码登录(应该失败) 2. **权限测试**: - 不携带token访问接口(应该返回401) - 携带无效token访问接口(应该返回401) - 携带有效token访问接口(应该成功) 3. **功能测试**: - 添加书籍 - 编辑书籍 - 删除书籍 - 上架/下架书籍 - 批量操作 - 搜索和筛选 ## 后续优化 1. **JWT Token**:使用JWT Token替代模拟token 2. **Token过期**:添加token过期时间管理 3. **操作日志**:记录管理员操作日志 4. **数据统计**:添加数据统计功能(书籍数量、用户数量等) 5. **用户管理**:添加用户管理功能 6. **分类管理**:添加分类管理功能 7. **图片上传**:添加图片上传功能 8. **数据导出**:添加数据导出功能(Excel、CSV等) 9. **权限细化**:细化权限管理(不同管理员有不同的权限) 10. **操作确认**:添加操作确认对话框,防止误操作