后台管理系统功能说明.md 9.1 KB

后台管理系统功能说明

功能概述

实现了完整的后台管理系统,用于管理小程序中的书籍数据,包括:

  1. 管理员登录 - 只有管理员可以登录后台管理系统
  2. 书籍管理 - 书籍的增删改查
  3. 书籍状态管理 - 上架/下架操作
  4. 批量操作 - 批量删除、批量上架、批量下架

数据库设计

1. 用户表添加role字段

users 表中添加 role 字段,用于区分管理员和普通用户:

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 字段:

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

主要功能:

  • 验证用户名和密码
  • 检查用户角色,只有 roleadmin 的用户可以登录
  • 检查用户状态
  • 返回管理员信息和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. 数据库初始化

# 执行数据库脚本
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. 登录权限

  • 只有 roleadmin 的用户可以登录后台管理系统
  • 普通用户(roleuser)尝试登录会返回错误:"您不是管理员,无权登录后台管理系统"

2. 接口权限

  • 所有后台管理接口都需要在请求头中携带token
  • Token格式:admin_token_{userId}
  • 如果token无效或缺失,会返回401未授权错误

3. 前端权限

  • 登录页面会检查是否已登录,如果已登录会跳转到书籍管理页面
  • 书籍管理页面会检查token,如果token不存在会跳转到登录页面

接口说明

管理员登录

POST /api/admin/login

请求体:

{
  "username": "admin",
  "password": "admin123"
}

响应:

{
  "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(可选)

响应:

{
  "code": 200,
  "message": "成功",
  "data": {
    "list": [...],
    "total": 100,
    "page": 1,
    "size": 10
  }
}

创建书籍

POST /api/admin/book

请求体:

{
  "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:

    -- 创建管理员账号
    INSERT INTO `users` (`username`, `nickname`, `password`, `role`, `status`, `created_at`, `updated_at`)
    VALUES ('admin', '管理员', '0192023a7bbd73250516f069df18b500', 'admin', 1, NOW(), NOW());
    
    -- 密码:admin123(MD5加密后:0192023a7bbd73250516f069df18b500)
    
  2. 或者将现有用户设置为管理员:

    UPDATE `users` SET `role` = 'admin' WHERE `username` = 'your_username';
    

方法3:使用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. 操作确认:添加操作确认对话框,防止误操作