mirror of
https://github.com/Cccc-owo/CheckInApp.git
synced 2026-06-17 05:56:29 +00:00
docs: remove some old docs
This commit is contained in:
@@ -1,258 +0,0 @@
|
|||||||
# 接龙自动打卡系统 - 后端 API
|
|
||||||
|
|
||||||
FastAPI 后端服务,提供用户管理、QQ 扫码登录、自动打卡等功能。
|
|
||||||
|
|
||||||
## 🚀 快速开始
|
|
||||||
|
|
||||||
### 1. 安装依赖
|
|
||||||
|
|
||||||
```bash
|
|
||||||
cd backend
|
|
||||||
pip install -r requirements.txt
|
|
||||||
```
|
|
||||||
|
|
||||||
### 2. 配置环境
|
|
||||||
|
|
||||||
创建 `.env` 文件(可选):
|
|
||||||
|
|
||||||
```env
|
|
||||||
# 邮件通知配置(可选)
|
|
||||||
SMTP_SERVER=smtp.example.com
|
|
||||||
SMTP_PORT=465
|
|
||||||
SMTP_SENDER_EMAIL=your-email@example.com
|
|
||||||
SMTP_SENDER_PASSWORD=your-password-here
|
|
||||||
|
|
||||||
# Chrome 浏览器配置(可选)
|
|
||||||
CHROME_BINARY_PATH=
|
|
||||||
CHROMEDRIVER_PATH=
|
|
||||||
```
|
|
||||||
|
|
||||||
### 3. 初始化数据库
|
|
||||||
|
|
||||||
数据库会在首次启动时自动初始化。
|
|
||||||
|
|
||||||
### 4. 创建管理员用户
|
|
||||||
|
|
||||||
```bash
|
|
||||||
python backend/scripts/create_admin.py
|
|
||||||
```
|
|
||||||
|
|
||||||
按照提示输入管理员信息:
|
|
||||||
- Signature: 管理员标识(唯一)
|
|
||||||
- ThreadId: 接龙 ID
|
|
||||||
- 邮箱: 接收通知的邮箱
|
|
||||||
|
|
||||||
### 5. 启动服务
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# 开发模式(支持热重载)
|
|
||||||
cd backend
|
|
||||||
python main.py
|
|
||||||
|
|
||||||
# 或者使用 uvicorn
|
|
||||||
uvicorn backend.main:app --reload --host 0.0.0.0 --port 8000
|
|
||||||
|
|
||||||
# 生产模式
|
|
||||||
uvicorn backend.main:app --host 0.0.0.0 --port 8000 --workers 4
|
|
||||||
```
|
|
||||||
|
|
||||||
### 6. 访问 API 文档
|
|
||||||
|
|
||||||
启动后访问: http://localhost:8000/docs
|
|
||||||
|
|
||||||
## 📁 项目结构
|
|
||||||
|
|
||||||
```
|
|
||||||
backend/
|
|
||||||
├── main.py # FastAPI 应用入口
|
|
||||||
├── config.py # 配置管理
|
|
||||||
├── dependencies.py # 认证中间件
|
|
||||||
├── requirements.txt # Python 依赖
|
|
||||||
├── models/ # 数据库模型
|
|
||||||
│ ├── database.py # 数据库配置
|
|
||||||
│ ├── user.py # User 模型
|
|
||||||
│ └── check_in_record.py # CheckInRecord 模型
|
|
||||||
├── schemas/ # Pydantic Schema
|
|
||||||
│ ├── user.py # 用户相关 Schema
|
|
||||||
│ ├── auth.py # 认证相关 Schema
|
|
||||||
│ └── check_in.py # 打卡相关 Schema
|
|
||||||
├── api/ # API 路由
|
|
||||||
│ ├── auth.py # 认证 API
|
|
||||||
│ ├── users.py # 用户管理 API
|
|
||||||
│ ├── check_in.py # 打卡 API
|
|
||||||
│ └── admin.py # 管理员 API
|
|
||||||
├── services/ # 业务逻辑层
|
|
||||||
│ ├── auth_service.py # 认证服务
|
|
||||||
│ ├── user_service.py # 用户服务
|
|
||||||
│ ├── check_in_service.py # 打卡服务
|
|
||||||
│ └── scheduler_service.py # 调度服务
|
|
||||||
├── workers/ # Selenium 工作模块
|
|
||||||
│ ├── token_refresher.py # Token 刷新(QQ 扫码)
|
|
||||||
│ ├── check_in_worker.py # 打卡执行
|
|
||||||
│ └── email_notifier.py # 邮件通知
|
|
||||||
└── scripts/ # 工具脚本
|
|
||||||
└── create_admin.py # 创建管理员用户
|
|
||||||
```
|
|
||||||
|
|
||||||
## 🔌 API 端点
|
|
||||||
|
|
||||||
### 认证 API (`/api/auth`)
|
|
||||||
|
|
||||||
- `POST /api/auth/request_qrcode` - 请求 QQ 扫码二维码
|
|
||||||
- `GET /api/auth/qrcode_status/{session_id}` - 检查扫码状态
|
|
||||||
- `POST /api/auth/verify_token` - 验证 Token 有效性
|
|
||||||
|
|
||||||
### 用户 API (`/api/users`)
|
|
||||||
|
|
||||||
- `POST /api/users` - 创建用户(管理员)
|
|
||||||
- `GET /api/users/me` - 获取当前用户信息
|
|
||||||
- `GET /api/users/me/token_status` - 获取 Token 状态
|
|
||||||
- `GET /api/users` - 获取所有用户(管理员)
|
|
||||||
- `GET /api/users/{user_id}` - 获取指定用户
|
|
||||||
- `PUT /api/users/{user_id}` - 更新用户信息
|
|
||||||
- `DELETE /api/users/{user_id}` - 删除用户(管理员)
|
|
||||||
|
|
||||||
### 打卡 API (`/api/check_in`)
|
|
||||||
|
|
||||||
- `POST /api/check_in/manual` - 手动触发打卡
|
|
||||||
- `GET /api/check_in/my_records` - 查看自己的打卡记录
|
|
||||||
- `GET /api/check_in/records` - 查看所有打卡记录(管理员)
|
|
||||||
- `GET /api/check_in/records/count` - 获取打卡记录统计(管理员)
|
|
||||||
|
|
||||||
### 管理员 API (`/api/admin`)
|
|
||||||
|
|
||||||
- `POST /api/admin/batch_check_in` - 批量触发打卡
|
|
||||||
- `GET /api/admin/logs` - 获取系统日志
|
|
||||||
- `GET /api/admin/stats` - 获取系统统计
|
|
||||||
|
|
||||||
## ⚙️ 配置说明
|
|
||||||
|
|
||||||
### 邮件配置 (`config.ini`)
|
|
||||||
|
|
||||||
在项目根目录创建 `config.ini`:
|
|
||||||
|
|
||||||
```ini
|
|
||||||
[Email]
|
|
||||||
smtpserver = smtp.example.com
|
|
||||||
smtpport = 465
|
|
||||||
senderemail = your-email@example.com
|
|
||||||
senderpassword = your-password
|
|
||||||
```
|
|
||||||
|
|
||||||
### 定时任务配置
|
|
||||||
|
|
||||||
在 `.env` 文件中配置(或在 `backend/config.py` 中设置默认值):
|
|
||||||
|
|
||||||
- `TOKEN_CHECK_INTERVAL_MINUTES`: Token 检查间隔(默认 30 分钟)
|
|
||||||
- `SESSION_CLEANUP_INTERVAL_HOURS`: 会话清理间隔(默认 24 小时)
|
|
||||||
|
|
||||||
**注意**:每个任务的打卡时间由任务自身的 `cron_expression` 字段控制(支持标准 Crontab 表达式)。
|
|
||||||
|
|
||||||
## 🔐 认证流程
|
|
||||||
|
|
||||||
1. 用户输入 Signature 并请求二维码
|
|
||||||
2. 后端启动 Selenium 获取 QQ 登录二维码
|
|
||||||
3. 前端轮询检查扫码状态
|
|
||||||
4. 用户使用手机 QQ 扫码
|
|
||||||
5. 后端获取 Token 并解析 JWT
|
|
||||||
6. 用户后续请求使用 `Authorization: Bearer <token>` header
|
|
||||||
|
|
||||||
## 📊 定时任务
|
|
||||||
|
|
||||||
系统会自动执行以下定时任务:
|
|
||||||
|
|
||||||
1. **定时打卡**: 每天 20:00 为所有启用的用户执行打卡
|
|
||||||
2. **Token 过期检查**: 每 30 分钟检查一次,Token 在 30 分钟内过期时发送邮件提醒
|
|
||||||
3. **会话文件清理**: 每 24 小时清理超过 24 小时的旧会话文件
|
|
||||||
|
|
||||||
## 🛠️ 开发说明
|
|
||||||
|
|
||||||
### 添加新的 API 端点
|
|
||||||
|
|
||||||
1. 在 `backend/schemas/` 中定义请求/响应 Schema
|
|
||||||
2. 在 `backend/services/` 中实现业务逻辑
|
|
||||||
3. 在 `backend/api/` 中创建 API 路由
|
|
||||||
4. 在 `backend/main.py` 中注册路由
|
|
||||||
|
|
||||||
### 数据库迁移
|
|
||||||
|
|
||||||
如果修改了模型,删除 `data/checkin.db` 并重启服务即可重新创建数据库。
|
|
||||||
|
|
||||||
⚠️ 注意:生产环境建议使用 Alembic 进行数据库迁移。
|
|
||||||
|
|
||||||
## 🐛 故障排查
|
|
||||||
|
|
||||||
### 问题:无法启动 Selenium
|
|
||||||
|
|
||||||
确保已安装 Chrome 和 ChromeDriver:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# 检查路径配置
|
|
||||||
ls chrome-linux64/chrome
|
|
||||||
ls chromedriver
|
|
||||||
```
|
|
||||||
|
|
||||||
### 问题:Token 验证失败
|
|
||||||
|
|
||||||
检查数据库中用户的 `authorization` 字段是否有值。
|
|
||||||
|
|
||||||
### 问题:定时任务未执行
|
|
||||||
|
|
||||||
检查日志文件 `logs/CheckIn.log`,确认调度器是否成功启动。
|
|
||||||
|
|
||||||
### 问题:邮件发送失败
|
|
||||||
|
|
||||||
检查 `config.ini` 配置是否正确,SMTP 服务器是否可访问。
|
|
||||||
|
|
||||||
## 📝 环境变量
|
|
||||||
|
|
||||||
可选的环境变量:
|
|
||||||
|
|
||||||
- `DATABASE_URL`: 数据库 URL(默认使用 SQLite)
|
|
||||||
- `CORS_ORIGINS`: 允许的前端域名(默认 localhost:5173 和 localhost:3000)
|
|
||||||
- `SMTP_SERVER`: 邮件服务器地址(用于邮件通知,可选)
|
|
||||||
- `SMTP_SENDER_EMAIL`: 发件人邮箱(用于邮件通知,可选)
|
|
||||||
- `CHROME_BINARY_PATH`: Chrome 浏览器路径(可选,留空自动检测)
|
|
||||||
- `CHROMEDRIVER_PATH`: ChromeDriver 路径(可选,留空自动下载)
|
|
||||||
|
|
||||||
## 🚀 部署建议
|
|
||||||
|
|
||||||
### 使用 Gunicorn
|
|
||||||
|
|
||||||
```bash
|
|
||||||
pip install gunicorn
|
|
||||||
gunicorn backend.main:app -w 4 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:8000
|
|
||||||
```
|
|
||||||
|
|
||||||
### 使用 Systemd
|
|
||||||
|
|
||||||
创建 `/etc/systemd/system/checkin-api.service`:
|
|
||||||
|
|
||||||
```ini
|
|
||||||
[Unit]
|
|
||||||
Description=CheckIn API Service
|
|
||||||
After=network.target
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
Type=simple
|
|
||||||
User=your-user
|
|
||||||
WorkingDirectory=/path/to/CheckInApp
|
|
||||||
Environment="PATH=/path/to/venv/bin"
|
|
||||||
ExecStart=/path/to/venv/bin/gunicorn backend.main:app -w 4 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:8000
|
|
||||||
Restart=always
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=multi-user.target
|
|
||||||
```
|
|
||||||
|
|
||||||
启动服务:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
sudo systemctl enable checkin-api
|
|
||||||
sudo systemctl start checkin-api
|
|
||||||
sudo systemctl status checkin-api
|
|
||||||
```
|
|
||||||
|
|
||||||
## 📄 许可证
|
|
||||||
|
|
||||||
本项目仅供学习和研究使用。
|
|
||||||
@@ -1,230 +0,0 @@
|
|||||||
# 接龙自动打卡系统 - 前端
|
|
||||||
|
|
||||||
基于 Vue 3 + Vite + Element Plus 的现代化前端应用。
|
|
||||||
|
|
||||||
## 技术栈
|
|
||||||
|
|
||||||
- **框架**: Vue 3 (Composition API)
|
|
||||||
- **构建工具**: Vite
|
|
||||||
- **UI 库**: Element Plus
|
|
||||||
- **路由**: Vue Router 4
|
|
||||||
- **状态管理**: Pinia
|
|
||||||
- **HTTP 客户端**: Axios
|
|
||||||
- **图标**: @element-plus/icons-vue
|
|
||||||
|
|
||||||
## 项目结构
|
|
||||||
|
|
||||||
```
|
|
||||||
frontend/
|
|
||||||
├── src/
|
|
||||||
│ ├── api/ # API 接口
|
|
||||||
│ │ ├── client.js # Axios 客户端配置
|
|
||||||
│ │ └── index.js # API 方法封装
|
|
||||||
│ ├── assets/ # 静态资源
|
|
||||||
│ ├── components/ # 公共组件
|
|
||||||
│ │ ├── Layout.vue # 布局组件
|
|
||||||
│ │ ├── Navbar.vue # 导航栏
|
|
||||||
│ │ └── QRCodeModal.vue # QR 码扫码组件
|
|
||||||
│ ├── router/ # 路由配置
|
|
||||||
│ │ └── index.js
|
|
||||||
│ ├── stores/ # Pinia 状态管理
|
|
||||||
│ │ ├── auth.js # 认证状态
|
|
||||||
│ │ ├── user.js # 用户状态
|
|
||||||
│ │ ├── checkIn.js # 打卡状态
|
|
||||||
│ │ └── admin.js # 管理员状态
|
|
||||||
│ ├── utils/ # 工具函数
|
|
||||||
│ │ └── helpers.js # 通用辅助函数
|
|
||||||
│ ├── views/ # 页面组件
|
|
||||||
│ │ ├── LoginView.vue # 登录页
|
|
||||||
│ │ ├── DashboardView.vue # 用户仪表盘
|
|
||||||
│ │ ├── RecordsView.vue # 打卡记录
|
|
||||||
│ │ ├── NotFoundView.vue # 404 页面
|
|
||||||
│ │ └── admin/ # 管理员页面
|
|
||||||
│ │ ├── UsersView.vue # 用户管理
|
|
||||||
│ │ ├── RecordsView.vue # 所有打卡记录
|
|
||||||
│ │ ├── StatsView.vue # 统计信息
|
|
||||||
│ │ └── LogsView.vue # 系统日志
|
|
||||||
│ ├── App.vue # 根组件
|
|
||||||
│ ├── main.js # 入口文件
|
|
||||||
│ └── style.css # 全局样式
|
|
||||||
├── .env # 环境变量
|
|
||||||
├── .env.development # 开发环境变量
|
|
||||||
├── .env.production # 生产环境变量
|
|
||||||
├── vite.config.js # Vite 配置
|
|
||||||
├── package.json # 依赖配置
|
|
||||||
└── README.md # 本文件
|
|
||||||
```
|
|
||||||
|
|
||||||
## 快速开始
|
|
||||||
|
|
||||||
### 安装依赖
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npm install
|
|
||||||
```
|
|
||||||
|
|
||||||
### 开发模式
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npm run dev
|
|
||||||
```
|
|
||||||
|
|
||||||
访问 http://localhost:3000
|
|
||||||
|
|
||||||
### 生产构建
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npm run build
|
|
||||||
```
|
|
||||||
|
|
||||||
构建产物在 `dist/` 目录。
|
|
||||||
|
|
||||||
### 预览生产构建
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npm run preview
|
|
||||||
```
|
|
||||||
|
|
||||||
## 功能特性
|
|
||||||
|
|
||||||
### 用户功能
|
|
||||||
|
|
||||||
- **QQ 扫码登录**: 支持 QQ 扫码认证
|
|
||||||
- **个人仪表盘**: 查看 Token 状态、手动打卡
|
|
||||||
- **打卡记录**: 查看个人打卡历史和统计
|
|
||||||
- **Token 管理**: 实时监控 Token 过期状态
|
|
||||||
|
|
||||||
### 管理员功能
|
|
||||||
|
|
||||||
- **用户管理**: CRUD 操作、批量启用/禁用、批量打卡
|
|
||||||
- **打卡记录**: 查看所有用户的打卡记录
|
|
||||||
- **统计信息**: 系统整体运行数据统计
|
|
||||||
- **系统日志**: 实时查看系统运行日志
|
|
||||||
|
|
||||||
## API 代理配置
|
|
||||||
|
|
||||||
开发环境下,Vite 会自动代理 `/api` 请求到后端服务器:
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
// vite.config.js
|
|
||||||
server: {
|
|
||||||
port: 3000,
|
|
||||||
proxy: {
|
|
||||||
'/api': {
|
|
||||||
target: 'http://localhost:8000',
|
|
||||||
changeOrigin: true,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
## 环境变量
|
|
||||||
|
|
||||||
创建 `.env.local` 文件自定义配置:
|
|
||||||
|
|
||||||
```env
|
|
||||||
VITE_API_BASE_URL=http://localhost:8000
|
|
||||||
```
|
|
||||||
|
|
||||||
## 路由结构
|
|
||||||
|
|
||||||
- `/login` - 登录页面
|
|
||||||
- `/dashboard` - 用户仪表盘(需登录)
|
|
||||||
- `/records` - 打卡记录(需登录)
|
|
||||||
- `/admin/users` - 用户管理(需管理员权限)
|
|
||||||
- `/admin/records` - 所有打卡记录(需管理员权限)
|
|
||||||
- `/admin/stats` - 统计信息(需管理员权限)
|
|
||||||
- `/admin/logs` - 系统日志(需管理员权限)
|
|
||||||
|
|
||||||
## 状态管理
|
|
||||||
|
|
||||||
使用 Pinia 进行全局状态管理:
|
|
||||||
|
|
||||||
- **authStore**: 认证状态(Token、用户信息)
|
|
||||||
- **userStore**: 用户管理相关
|
|
||||||
- **checkInStore**: 打卡记录相关
|
|
||||||
- **adminStore**: 管理员功能相关
|
|
||||||
|
|
||||||
## 组件说明
|
|
||||||
|
|
||||||
### QRCodeModal
|
|
||||||
|
|
||||||
QQ 扫码登录组件,支持:
|
|
||||||
- 自动获取二维码
|
|
||||||
- 轮询扫码状态
|
|
||||||
- 倒计时和进度显示
|
|
||||||
- 二维码过期提示和刷新
|
|
||||||
|
|
||||||
### Navbar
|
|
||||||
|
|
||||||
导航栏组件,支持:
|
|
||||||
- 基于角色的菜单显示
|
|
||||||
- 当前路由高亮
|
|
||||||
- 用户信息显示
|
|
||||||
- 退出登录
|
|
||||||
|
|
||||||
### Layout
|
|
||||||
|
|
||||||
页面布局组件,包含:
|
|
||||||
- 顶部导航栏
|
|
||||||
- 主内容区域
|
|
||||||
- 响应式布局
|
|
||||||
|
|
||||||
## 开发规范
|
|
||||||
|
|
||||||
1. **组件命名**: 使用 PascalCase
|
|
||||||
2. **文件命名**: 组件文件使用 PascalCase,工具文件使用 camelCase
|
|
||||||
3. **API 调用**: 统一通过 stores 调用,不直接在组件中调用
|
|
||||||
4. **错误处理**: 使用 try-catch 并显示友好的错误提示
|
|
||||||
5. **Loading 状态**: 异步操作需显示加载状态
|
|
||||||
|
|
||||||
## 浏览器支持
|
|
||||||
|
|
||||||
- Chrome >= 87
|
|
||||||
- Firefox >= 78
|
|
||||||
- Safari >= 14
|
|
||||||
- Edge >= 88
|
|
||||||
|
|
||||||
## 常见问题
|
|
||||||
|
|
||||||
### 启动时端口被占用
|
|
||||||
|
|
||||||
修改 `vite.config.js` 中的 `server.port` 配置。
|
|
||||||
|
|
||||||
### API 请求失败
|
|
||||||
|
|
||||||
检查后端服务是否启动,默认应在 http://localhost:8000 运行。
|
|
||||||
|
|
||||||
### 构建产物过大
|
|
||||||
|
|
||||||
Element Plus 已配置按需加载,如需进一步优化,可以:
|
|
||||||
- 使用动态导入 (dynamic import)
|
|
||||||
- 配置 CDN 引入
|
|
||||||
- 启用 gzip 压缩
|
|
||||||
|
|
||||||
## 部署
|
|
||||||
|
|
||||||
### Nginx 配置示例
|
|
||||||
|
|
||||||
```nginx
|
|
||||||
server {
|
|
||||||
listen 80;
|
|
||||||
server_name your-domain.com;
|
|
||||||
root /var/www/checkin/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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
## 许可证
|
|
||||||
|
|
||||||
MIT
|
|
||||||
Reference in New Issue
Block a user