Skip to content

Repository files navigation

Lab Attendance (crCheckIn)

面向机房 / 实验室场景的本地签到系统 — 学生扫码签到、教师实时看板、历史批次归档与数据分析。

Release Node.js License

📸 预览

学生签到 教师看板 座位表
学生端搜索签到 实时签到名单 可拖拽座位
拼音首字母搜索 一键撤销 历史对比

✨ 功能特性

签到核心

  • 智能搜索 — 支持中文姓名、拼音首字母、全拼搜索(输入 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.log

📁 项目结构

crCheckIn/
├── src/
│   ├── routes/          # API路由
│   ├── services/        # 业务逻辑
│   ├── plugins/         # Fastify插件
│   └── utils/           # 工具函数
├── views/               # HTML模板
├── public/              # 静态资源
├── prisma/              # 数据库schema
├── scripts/             # 工具脚本
├── docs/                # 文档
└── uploads/             # 上传文件

🔧 开发指南

代码规范

  • 使用ES6模块语法
  • 遵循Fastify最佳实践
  • 使用Prisma进行数据库操作
  • 添加适当的错误处理

测试

# 运行测试
npm test

# 运行构建
npm run build

贡献

  1. Fork 项目
  2. 创建功能分支 (git checkout -b feature/AmazingFeature)
  3. 提交更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 创建 Pull Request

📄 文档

📝 更新日志

详见 CHANGELOG.md

📄 许可证

本项目采用 MIT 许可证 - 详见 LICENSE 文件

🙏 致谢

感谢所有贡献者的支持!

📞 联系方式

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages