# quiz **Repository Path**: adomas/quiz ## Basic Information - **Project Name**: quiz - **Description**: No description available - **Primary Language**: Unknown - **License**: AGPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-10-16 - **Last Updated**: 2026-10-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: 答题, 历史 ## README # Quiz 答题应用 一个基于 H5 的在线答题学习应用,提供多种题库分类、答题模式、错题管理和成绩统计功能。 ## 项目简介 Quiz 是一个完整的答题学习系统,包含 H5 应用、微信小程序、后台管理和后端 Spring Boot 服务。前端均采用原生 JavaScript 开发,提供流畅的答题体验;后端采用 MyBatis-Plus 框架,支持题库管理、用户管理、答题记录、错题本和后台登录认证等功能。 ## 技术栈 ### 前端 - 原生 JavaScript - CSS3 (支持明暗主题切换) - H5 移动端适配 - 微信小程序(原生框架) ### 后端 - Java 17 - Spring Boot 3.x - MyBatis-Plus - MySQL - 自实现 HMAC-SHA256 令牌认证(无第三方安全依赖) ## 项目结构 ``` quiz/ ├── h5/ # 前端 H5 应用 │ ├── index.html # 主页面 │ ├── app.js # 应用逻辑 │ ├── api.js # API 接口 │ ├── styles.css # 样式文件 │ ├── _mock_server.js # 本地模拟服务器 │ └── _build_data.py # 数据构建脚本 │ ├── mini/ # 微信小程序 │ ├── app.js # 入口(微信静默登录) │ ├── app.json # 全局配置 / tabBar │ ├── utils/api.js # 接口客户端 │ └── pages/ # 首页/答题/结果/错题/记录/我的 │ ├── admin/ # 后台管理前端 │ ├── index.html # 登录页 + 后台框架 │ └── assets/ # css / js(api.js、app.js) │ └── server/ # 后端服务 ├── src/main/java/ │ └── com/example/quiz/ │ ├── QuizApplication.java # 启动类 │ ├── common/ # 通用组件 │ │ ├── BizException.java # 业务异常 │ │ ├── GlobalExceptionHandler.java │ │ ├── R.java # 统一响应 │ │ └── ResultCode.java # 响应码枚举 │ ├── config/ # 配置类 │ │ ├── CorsConfig.java # 跨域配置 │ │ ├── WebMvcConfig.java # 后台鉴权拦截器注册 │ │ └── MybatisPlusConfig.java # 分页插件 │ ├── controller/ # 前台接口 │ │ ├── QuestionController.java │ │ ├── RecordController.java │ │ ├── UserController.java │ │ └── WrongBookController.java │ ├── admin/ # 后台管理模块 │ │ ├── AdminDataInitializer.java # 默认管理员初始化 │ │ ├── controller/ # 认证/题库/概览/管理员 │ │ ├── dto/ # 后台专用 DTO │ │ ├── entity/AdminUser.java │ │ ├── mapper/ │ │ ├── security/ # 口令、令牌、上下文、拦截器 │ │ └── service/ │ ├── dto/ # 数据传输对象 │ ├── entity/ # 实体类 │ ├── mapper/ # MyBatis 映射器 │ └── service/ # 业务服务 └── src/main/resources/ ├── application.yml # 应用配置 └── db/ ├── schema.sql # 业务表结构 └── admin_schema.sql # 后台管理表结构 ``` ## 功能特性 ### 答题模式 - **顺序练习**:按题库顺序依次答题 - **随机练习**:随机抽取题目进行练习 - **每日挑战**:每日答题任务 ### 题库管理 - 多种题目分类 - 支持题目答案显示/隐藏 - 题目解析查看 ### 学习功能 - 错题本:自动收集答题错误的题目 - 答题记录:保存历史答题数据 - 成绩统计:查看正确率、用时等统计信息 ### 用户系统 - 微信登录 (通过 openid) - 个人资料管理 - 学习数据统计 ### 后台管理 - 账号密码登录认证(HMAC-SHA256 令牌,可配置有效期) - 题库管理:分页查询、新增、编辑、删除、JSON 批量导入 - 数据概览:题目/分类/用户/答题量统计 - 管理员账号管理(超级管理员可创建与启禁用账号) ## 快速开始 ### 后端启动 1. 创建 MySQL 数据库并导入 schema: ```sql CREATE DATABASE quiz DEFAULT CHARACTER SET utf8mb4; mysql -u root -p quiz < server/src/main/resources/db/schema.sql mysql -u root -p quiz < server/src/main/resources/db/admin_schema.sql ``` 2. 修改配置文件 `server/src/main/resources/application.yml`,配置数据库连接: ```yaml spring: datasource: url: jdbc:mysql://localhost:3306/quiz username: root password: your_password ``` 3. 启动后端服务: ```bash cd server mvn spring-boot:run ``` 后端服务默认运行在 http://localhost:8083 首次启动且 `admin_user` 表为空时,会自动创建超级管理员 `admin / admin123`。 ### H5 前端运行 #### 方式一:使用 mock 服务器 ```bash cd h5 node _mock_server.js ``` 然后访问 http://localhost:8081 #### 方式二:连接真实后端 修改 `h5/api.js` 中的 API 地址,指向后端服务地址。 ### 后台管理运行 ```bash cd admin python -m http.server 8088 ``` npx serve -p 8088 . 访问 http://127.0.0.1:8088 ,用 `admin / admin123` 登录即可添加题库。详见 [admin/README.md](admin/README.md)。 ### 小程序运行 用微信开发者工具导入 `mini/` 目录,修改 `utils/api.js` 中的 `BASE_URL` 与 `project.config.json` 中的 `appid`。 详见 [mini/README.md](mini/README.md)。 ## API 接口 ### 题库接口 - `GET /api/questions/categories` - 获取题目分类 - `GET /api/questions/random` - 获取随机题目 - `GET /api/questions/{id}` - 获取题目详情 ### 用户接口 - `POST /api/users/login` - 用户登录 - `POST /api/users/wxlogin` - 微信小程序登录(code 换 openid) - `GET /api/users/{id}` - 获取用户信息 ### 答题记录接口 - `POST /api/records` - 提交答题记录 - `GET /api/records` - 获取答题记录列表 - `GET /api/records/{id}` - 获取记录详情 - `GET /api/records/stats` - 获取用户统计 - `DELETE /api/records/{id}` - 删除记录 ### 错题本接口 - `GET /api/wrongs` - 获取错题列表 - `DELETE /api/wrongs/{questionId}` - 移除错题 - `DELETE /api/wrongs/clear` - 清空错题本 ### 后台管理接口(除登录外均需 `Authorization: Bearer {token}`) - `POST /api/admin/auth/login` - 管理员登录,返回 token - `POST /api/admin/auth/logout` - 退出登录 - `GET /api/admin/auth/profile` - 当前管理员信息 - `POST /api/admin/auth/password` - 修改密码 - `GET /api/admin/dashboard/overview` - 概览统计 - `GET /api/admin/questions` - 题目分页列表(keyword / category / page / size) - `GET /api/admin/questions/categories` - 全部题库分类 - `GET /api/admin/questions/{id}` - 题目详情 - `POST /api/admin/questions` - 新增题目 - `PUT /api/admin/questions/{id}` - 修改题目 - `DELETE /api/admin/questions/{id}` - 删除题目 - `POST /api/admin/questions/import` - 批量导入题目 - `GET /api/admin/admins` - 管理员列表 - `POST /api/admin/admins` - 新增管理员(仅超级管理员) - `PUT /api/admin/admins/{id}/status` - 启用/禁用管理员(仅超级管理员) ## 界面预览 应用包含以下主要界面: - **首页**:选择答题模式和题库分类 - **答题页**:显示题目、选项、计时器 - **结果页**:显示答题得分和统计 - **回顾页**:查看答题详情 - **错题页**:查看和练习错题 - **记录页**:查看历史答题记录 - **后台管理**:登录页、数据概览、题库管理、管理员管理 支持明暗主题切换,适配移动端浏览。 ## 许可证 MIT License