# qbms
**Repository Path**: taj5/qbms
## Basic Information
- **Project Name**: qbms
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-05-10
- **Last Updated**: 2026-05-10
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# QBMS - 选煤领域题库管理系统
**Question Bank Management System for Coal Preparation**
[](https://www.python.org/)
[](https://fastapi.tiangolo.com/)
[](https://vuejs.org/)
[](LICENSE)
---
## 📋 目录
- [项目概述](#项目概述)
- [快速开始](#快速开始)
- [技术栈](#技术栈)
- [功能特性](#功能特性)
- [项目结构](#项目结构)
- [开发指南](#开发指南)
- [部署说明](#部署说明)
- [常见问题](#常见问题)
---
## 项目概述
QBMS(Question Bank Management System)是一个专为选煤领域设计的题库管理系统,支持问题与答案的全生命周期管理,包括存储、查阅、增删改、评分、评论以及数据导入导出功能。
### 核心功能
- ✅ **题目管理**: 创建、编辑、删除、查看题目
- ✅ **答案管理**: 支持 Markdown 格式的答案编辑
- ✅ **标签系统**: 灵活的标签分类和筛选
- ✅ **难度分级**: 简单、中等、困难三级难度
- ✅ **评分评论**: 用户可以对题目进行评分和评论
- ✅ **数据导入导出**: 支持 Excel/CSV 格式批量导入导出
- ✅ **回收站**: 软删除机制,支持恢复已删除题目
- ✅ **权限控制**: 基于角色的访问控制(RBAC)
- ✅ **统计分析**: 题目数量、难度分布等数据统计
---
## 快速开始
### 🚀 一键启动(推荐)
#### Windows 用户
**方法一:双击批处理文件**
```
双击 → start.bat # 启动所有服务
双击 → stop.bat # 停止所有服务
```
**方法二:PowerShell 命令行**
```powershell
.\start.ps1 # 启动
.\stop.ps1 # 停止
```
#### Mac/Linux 用户
```bash
chmod +x deploy.sh
./deploy.sh
```
### 🌐 访问地址
| 服务 | 地址 | 说明 |
|------|------|------|
| **前端界面** | http://localhost:5173 | 用户操作界面 |
| **后端API** | http://localhost:8000 | REST API 接口 |
| **API文档** | http://localhost:8000/docs | Swagger UI 交互式文档 |
| **健康检查** | http://localhost:8000/health | 服务状态检查 |
### 📦 Docker Compose 部署
```bash
# 配置环境变量
cp backend/.env.example backend/.env
# 编辑 .env 文件,修改数据库密码等配置
# 启动服务
docker-compose up -d
# 查看日志
docker-compose logs -f
# 停止服务
docker-compose down
```
### 🔧 手动启动
#### 后端服务
```bash
cd backend
# 安装依赖
uv pip install -r requirements.txt
# 设置环境变量
export PYTHONPATH=$(pwd) # Linux/Mac
$env:PYTHONPATH = (Get-Location).Path # Windows PowerShell
# 启动服务
uv run uvicorn app.main:app --reload --host 0.0.0.0 --port 8000
```
#### 前端服务
```bash
cd frontend
# 安装依赖
npm install
# 启动开发服务器
npm run dev
```
---
## 技术栈
### 后端技术
| 技术 | 版本 | 用途 |
|------|------|------|
| Python | 3.10+ | 编程语言 |
| FastAPI | 0.100+ | Web 框架 |
| SQLAlchemy | 2.0+ | ORM 框架 |
| Pydantic | 2.0+ | 数据验证 |
| MySQL | 8.0+ | 关系数据库 |
| Redis | 7.0+ | 缓存(可选) |
| JWT | - | 身份认证 |
| pytest | 7.4+ | 单元测试 |
### 前端技术
| 技术 | 版本 | 用途 |
|------|------|------|
| Vue.js | 3.x | 前端框架 |
| Element Plus | 2.x | UI 组件库 |
| Pinia | 2.x | 状态管理 |
| Vue Router | 4.x | 路由管理 |
| Vite | 5.x | 构建工具 |
| Axios | 1.x | HTTP 客户端 |
| Markdown-it | - | Markdown 渲染 |
---
## 功能特性
### 1. 题目管理
- **CRUD 操作**: 完整的增删改查功能
- **Markdown 支持**: 题干和答案支持 Markdown 格式
- **难度分级**: 简单、中等、困难三个等级
- **标签系统**: 多标签分类,支持自定义标签
- **版本控制**: 题目修改历史追踪
- **软删除**: 回收站机制,可恢复误删题目
### 2. 答案管理
- **独立存储**: 答案与题目分离存储
- **双向关联**: 题目和答案互相引用
- **Markdown 渲染**: 支持代码块、列表、表格等
- **实时更新**: 编辑时即时预览
### 3. 评分与评论
- **星级评分**: 1-5 星评分系统
- **平均分数**: 自动计算题目平均分
- **评论功能**: 支持多级评论回复
- **评论统计**: 显示评论数量
### 4. 数据导入导出
- **Excel 支持**: 支持 .xlsx 格式
- **CSV 支持**: 支持 .csv 格式
- **批量操作**: 一次性导入多个题目
- **模板下载**: 提供标准导入模板
- **错误提示**: 详细的导入错误信息
### 5. 统计分析
- **题目统计**: 总数、各难度数量
- **标签统计**: 热门标签、使用频率
- **评分统计**: 平均分、评分分布
- **趋势分析**: 题目创建趋势图
### 6. 权限控制
- **角色管理**: 管理员、普通用户
- **JWT 认证**: Token 有效期 2 小时
- **RBAC 模型**: 基于角色的访问控制
- **操作审计**: 记录创建者和更新者
---
## 项目结构
```
qbms/
├── backend/ # 后端项目
│ ├── app/
│ │ ├── api/ # API 路由
│ │ │ ├── auth.py # 认证接口
│ │ │ ├── questions.py # 题目接口
│ │ │ ├── tags.py # 标签接口
│ │ │ └── import_export.py # 导入导出接口
│ │ ├── core/ # 核心配置
│ │ │ ├── config.py # 配置文件
│ │ │ ├── database.py # 数据库连接
│ │ │ └── security.py # 安全模块
│ │ ├── models/ # 数据模型
│ │ │ └── __init__.py # SQLAlchemy 模型
│ │ ├── schemas/ # Pydantic Schema
│ │ │ └── __init__.py # 请求/响应模型
│ │ ├── services/ # 业务逻辑
│ │ │ ├── question_service.py
│ │ │ ├── auth_service.py
│ │ │ └── import_export_service.py
│ │ └── main.py # 应用入口
│ ├── tests/ # 测试文件
│ │ ├── conftest.py # 测试配置
│ │ ├── test_auth.py # 认证测试
│ │ ├── test_questions.py # 题目测试
│ │ ├── test_tags.py # 标签测试
│ │ ├── test_models.py # 模型测试
│ │ ├── test_services.py # 服务测试
│ │ └── test_import_export.py # 导入导出测试
│ ├── .env # 环境变量
│ ├── .env.example # 环境变量示例
│ ├── requirements.txt # Python 依赖
│ ├── pytest.ini # 测试配置
│ └── uv.lock # uv 锁定文件
├── frontend/ # 前端项目
│ ├── src/
│ │ ├── api/ # API 调用
│ │ │ └── index.js # API 封装
│ │ ├── components/ # 公共组件
│ │ ├── views/ # 页面组件
│ │ │ ├── Login.vue # 登录页
│ │ │ ├── Layout.vue # 布局组件
│ │ │ ├── QuestionList.vue # 题目列表
│ │ │ ├── QuestionForm.vue # 题目表单
│ │ │ ├── QuestionDetail.vue # 题目详情
│ │ │ ├── Statistics.vue # 统计页面
│ │ │ ├── Import.vue # 导入页面
│ │ │ ├── TagManagement.vue # 标签管理
│ │ │ └── RecycleBin.vue # 回收站
│ │ ├── router/ # 路由配置
│ │ ├── store/ # 状态管理
│ │ ├── utils/ # 工具函数
│ │ ├── App.vue # 根组件
│ │ └── main.js # 入口文件
│ ├── public/ # 静态资源
│ ├── package.json # Node 依赖
│ ├── vite.config.js # Vite 配置
│ └── index.html # HTML 模板
├── docker-compose.yml # Docker 编排
├── Dockerfile.backend # 后端 Dockerfile
├── Dockerfile.frontend # 前端 Dockerfile
├── init.sql # 数据库初始化脚本
├── start.bat # Windows 启动脚本
├── start.ps1 # PowerShell 启动脚本
├── stop.bat # Windows 停止脚本
├── stop.ps1 # PowerShell 停止脚本
├── deploy.sh # Linux/Mac 部署脚本
├── deploy.ps1 # PowerShell 部署脚本
├── .gitignore # Git 忽略配置
└── README.md # 项目文档
```
---
## 开发指南
### 环境要求
- **Python**: 3.10+
- **Node.js**: 18+
- **MySQL**: 8.0+
- **Redis**: 7.0+(可选)
### 后端开发
#### 1. 安装依赖
```bash
cd backend
uv pip install -r requirements.txt
```
#### 2. 配置环境变量
```bash
cp .env.example .env
# 编辑 .env 文件
```
关键配置项:
```env
DATABASE_URL=mysql+pymysql://root:password@localhost:3306/qbms
SECRET_KEY=your-secret-key-here
ALLOWED_ORIGINS=http://localhost:5173
```
#### 3. 运行测试
```bash
# 运行所有测试
uv run pytest tests/ -v
# 运行特定测试文件
uv run pytest tests/test_questions.py -v
# 生成覆盖率报告
uv run pytest tests/ --cov=app --cov-report=html
```
#### 4. 启动开发服务器
```bash
uv run uvicorn app.main:app --reload --host 0.0.0.0 --port 8000
```
### 前端开发
#### 1. 安装依赖
```bash
cd frontend
npm install
```
#### 2. 启动开发服务器
```bash
npm run dev
```
#### 3. 构建生产版本
```bash
npm run build
```
#### 4. 代码规范检查
```bash
npm run lint
```
### 数据库迁移
项目使用 SQLAlchemy ORM,无需手动迁移。首次启动时会自动创建表结构。
如需重置数据库:
```sql
DROP DATABASE IF EXISTS qbms;
CREATE DATABASE qbms CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
```
---
## 部署说明
### Docker Compose 部署(推荐)
#### 1. 准备工作
```bash
# 克隆项目
git clone
cd qbms
# 配置环境变量
cp backend/.env.example backend/.env
```
#### 2. 修改配置
编辑 `backend/.env`:
```env
DATABASE_URL=mysql+pymysql://root:your_password@mysql:3306/qbms
SECRET_KEY=your-production-secret-key
ALLOWED_ORIGINS=http://your-domain.com
```
#### 3. 启动服务
```bash
docker-compose up -d
```
#### 4. 验证部署
```bash
# 检查容器状态
docker-compose ps
# 查看日志
docker-compose logs -f
# 健康检查
curl http://localhost:8000/health
```
### 生产环境部署
#### 后端部署
```bash
# 安装依赖
uv pip install -r requirements.txt
# 使用 Gunicorn 启动
uv run gunicorn app.main:app \
-w 4 \
-k uvicorn.workers.UvicornWorker \
--bind 0.0.0.0:8000 \
--access-logfile - \
--error-logfile -
```
#### 前端部署
```bash
# 构建
npm run build
# 使用 Nginx 托管 dist 目录
```
Nginx 配置示例:
```nginx
server {
listen 80;
server_name your-domain.com;
root /path/to/frontend/dist;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
location /api/ {
proxy_pass http://localhost:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
```
---
## 常见问题
### 1. 端口被占用
**问题**: 启动时提示端口 8000 或 5173 已被占用
**解决**:
```bash
# 查找占用端口的进程
netstat -ano | findstr :8000 # Windows
lsof -i :8000 # Mac/Linux
# 终止进程
taskkill /F /PID # Windows
kill -9 # Mac/Linux
```
### 2. 数据库连接失败
**问题**: 后端启动时提示数据库连接错误
**解决**:
1. 确认 MySQL 服务已启动
2. 检查 `backend/.env` 中的数据库配置
3. 确保数据库 `qbms` 已创建
4. 检查用户名和密码是否正确
### 3. CORS 错误
**问题**: 前端无法访问后端 API,提示 CORS 错误
**解决**:
1. 检查 `backend/.env` 中 `ALLOWED_ORIGINS` 包含前端地址
2. 确认 `frontend/vite.config.js` 代理配置正确
3. 清除浏览器缓存
### 4. Token 认证失败
**问题**: 登录后访问 API 提示 401 Unauthorized
**解决**:
1. 清除浏览器 localStorage
2. 重新登录获取新 Token
3. 检查 `SECRET_KEY` 配置是否一致
### 5. 依赖安装缓慢
**问题**: pip 或 npm 安装依赖速度很慢
**解决**:
**Python 国内镜像**:
```bash
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
```
**Node.js 国内镜像**:
```bash
npm config set registry https://registry.npmmirror.com
npm install
```
### 6. bcrypt 版本冲突
**问题**: 导入 passlib 时提示 bcrypt 版本不兼容
**解决**:
```bash
uv pip install --force-reinstall bcrypt==4.0.1
```
### 7. Docker 构建缓慢
**问题**: Docker 镜像构建速度很慢
**解决**:
1. 配置 Docker 镜像加速器
2. 清理无用镜像: `docker system prune -a`
3. 使用 `.dockerignore` 排除不必要文件
---
## 运维命令
### Docker 相关
```bash
# 查看所有容器
docker-compose ps
# 查看日志
docker-compose logs -f [service-name]
# 重启服务
docker-compose restart [service-name]
# 进入容器
docker-compose exec backend bash
docker-compose exec mysql bash
# 备份数据库
docker-compose exec mysql mysqldump -u root -p qbms > backup.sql
# 恢复数据库
docker-compose exec -T mysql mysql -u root -p qbms < backup.sql
# 停止并清理
docker-compose down -v
```
### 健康检查
```bash
# 后端健康检查
curl http://localhost:8000/health
# 前端访问测试
curl http://localhost:5173
# API 文档访问
curl http://localhost:8000/docs
```
---
## 贡献指南
欢迎提交 Issue 和 Pull Request!
1. Fork 本仓库
2. 创建特性分支 (`git checkout -b feature/AmazingFeature`)
3. 提交更改 (`git commit -m 'Add some AmazingFeature'`)
4. 推送到分支 (`git push origin feature/AmazingFeature`)
5. 开启 Pull Request
---
## 许可证
本项目采用 MIT 许可证 - 详见 [LICENSE](LICENSE) 文件
---
## 联系方式
- 项目主页: [GitHub Repository](https://github.com/your-username/qbms)
- 问题反馈: [Issues](https://github.com/your-username/qbms/issues)
---
**Made with ❤️ for Coal Preparation Industry**