面向机房 / 实验室场景的本地签到系统 — 学生扫码签到、教师实时看板、历史批次归档与数据分析。
| 学生签到 | 教师看板 | 座位表 |
|---|---|---|
| 学生端搜索签到 | 实时签到名单 | 可拖拽座位 |
| 拼音首字母搜索 | 一键撤销 | 历史对比 |
- 智能搜索 — 支持中文姓名、拼音首字母、全拼搜索(输入
csy匹配 "陈思源") - 签到倒计时 — 30 分钟倒计时模式,到点自动归档
- IP 限制 — 同一 IP 每节课程只能签到一次,归档后自动释放
- 自动去重 — 学生签到后本地去重,防止重复签到
- 回车快捷操作 — 匹配单条自动签到,已选学生回车直接签到
- 教学班 / 行政班 — 支持多教学班与行政班级映射
- Excel 批量导入 — 一键导入学生名单,自动创建不存在的班级
- 班级归档 — 按日期 + 上下午自动打标签归档
- 历史批次 — 分页浏览历史签到批次,支持查看、导出、删除
- 实时座位可视化 — 教师视角拖拽排座,学生视角查看自己的座位
- 历史对比 — 上节课座位对比,黄色标记变动、蓝色标记新增
- 签到高亮 — 新签到实时高亮显示
- 预设标签 — 管理员统一管理预设标签(如 "缺勤"、"迟到"),级联更新学生标签
- 自定义标签 — 教师可自定义标签颜色,支持 SSE 实时推送
- 签到自动清除 — 签到成功后自动清除自定义标签,保留预设标签
- 成绩录入 — 支持单个和批量成绩录入
- Excel 导入/导出 — 支持 Excel 格式的成绩导入导出
- 成绩分析 — 成绩统计、排名、趋势分析
- 成绩分段 — 优秀/良好/及格/需努力分段统计
- 自定义字段 — 支持文本和附件类型字段
- 学生提交 — 学生端在线填写,教师端查看提交记录
- 数据导出 — 一键导出收集到的信息
- 记忆PK — 学生照片记忆游戏,支持多人PK
- 照片记忆 — 学生照片记忆卡片功能
- 语音播报 — 成绩语音播报功能
- 双角色体系 — 管理员(全局管理)+ 教师(班级管理)
- 数据备份 / 恢复 — 支持 PostgreSQL 备份,并提醒同步备份上传目录
- 审计日志 — 管理员操作全程记录
- 多端防护 — CSRF、XSS、Excel 注入防护,时序攻击防护,速率限制
- ✅ Gzip压缩 — 减少传输大小60-80%
- ✅ 静态资源缓存 — 浏览器缓存,减少重复下载
- ✅ Redis缓存 — 缓存热点数据,减少数据库查询
- ✅ CSS/JS压缩 — 文件大小减少50-60%
- ✅ 性能监控 — 实时监控请求统计和响应时间
- QPS: 500+ 请求/秒
- 平均响应时间: <20ms
- 页面加载速度: 提升50-70%
- 数据库压力: 降低60-80%
| 层 | 技术 |
|---|---|
| 运行时 | Node.js 18+ / ES Modules |
| Web 框架 | Fastify v4 |
| 数据库 | Prisma v5 + PostgreSQL |
| 缓存 | Redis (可选) |
| 模板引擎 | Nunjucks |
| 样式 | Tailwind CSS v3 |
| 进程管理 | PM2 |
| Excel 处理 | ExcelJS |
| 拼音支持 | pinyin-pro |
- Node.js >= 18
- npm >= 9
- PostgreSQL >= 14
- Redis (可选,用于缓存)
git clone https://github.com/JehuYu/crCheckIn.git
cd crCheckIn
npm install复制环境变量模板:
cp .env.example .env编辑 .env 文件:
# 必填配置
SECRET_KEY=your-secret-key-at-least-32-characters
DATABASE_URL="postgresql://username:password@localhost:5432/crcheckin?schema=public"
# 可选配置
PORT=5000
HOST=0.0.0.0
AUTO_DB_DEPLOY=true
# Redis配置(可选)
REDIS_HOST=127.0.0.1
REDIS_PORT=6379# 部署数据库结构
npm run db:deploy
# 创建管理员账号(首次运行)
npm run seed# 开发模式
npm run dev
# 生产模式
npm run start:direct
# 使用PM2生产部署
npm start详见 开发环境部署教程
详见 生产环境部署教程
# 查看监控统计
curl http://localhost:5000/api/monitoring/stats
# 重置监控统计
curl -X POST http://localhost:5000/api/monitoring/reset# 运行系统诊断
npm run doctor# PM2日志
npm run pm2:logs
# 直接查看
tail -f logs/crCheckIn.logcrCheckIn/
├── src/
│ ├── routes/ # API路由
│ ├── services/ # 业务逻辑
│ ├── plugins/ # Fastify插件
│ └── utils/ # 工具函数
├── views/ # HTML模板
├── public/ # 静态资源
├── prisma/ # 数据库schema
├── scripts/ # 工具脚本
├── docs/ # 文档
└── uploads/ # 上传文件
- 使用ES6模块语法
- 遵循Fastify最佳实践
- 使用Prisma进行数据库操作
- 添加适当的错误处理
# 运行测试
npm test
# 运行构建
npm run build- Fork 项目
- 创建功能分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 创建 Pull Request
详见 CHANGELOG.md
本项目采用 MIT 许可证 - 详见 LICENSE 文件
感谢所有贡献者的支持!