6.2 KiB
6.2 KiB
点名系统
一个基于Web的点名系统,支持后台管理和用户点名功能。支持双模式运行:服务器模式和本地模式。
🌟 核心特性
双模式运行
- 服务器模式:通过Node.js服务器运行,支持多用户、数据持久化
- 本地模式:直接打开HTML文件,使用浏览器localStorage存储,无需服务器
功能特性
- 管理员登录(默认账号:admin / admin123)
- 创建点名名单,自动生成编号和二维码
- 用户通过编号或二维码进入点名
- 实时进度条显示
- 拍照点名(支持人脸识别)
- 手动点名
- 数据实时同步
🚀 快速开始
方式一:本地模式(推荐新手)
无需安装Node.js,直接使用!
-
打开后台管理
- 直接双击
admin.html文件 - 或在浏览器中打开
admin.html
- 直接双击
-
登录系统
- 用户名:
admin - 密码:
admin123
- 用户名:
-
创建点名名单
- 输入名单名称和成员
- 系统自动生成编号和二维码
-
用户点名
- 打开
index.html - 输入编号进入点名
- 打开
优点:
- ✅ 无需安装任何软件
- ✅ 即开即用
- ✅ 数据保存在浏览器本地
注意:
- ⚠️ 数据仅保存在当前浏览器
- ⚠️ 清除浏览器数据会丢失记录
- ⚠️ 不同浏览器/电脑数据不共享
方式二:服务器模式(推荐正式使用)
需要Node.js环境
-
启动服务器
# 方法1: 使用批处理文件 双击 "启动服务器.bat" # 方法2: 命令行启动 cd 手机点名器 node server.js -
访问系统
-
登录系统
- 用户名:
admin - 密码:
admin123
- 用户名:
优点:
- ✅ 数据持久化到文件
- ✅ 支持多用户访问
- ✅ 数据不会丢失
- ✅ 可以在局域网使用
📖 详细使用说明
后台管理操作
-
创建点名名单
- 输入名单名称(如:"2024春季班点名")
- 输入成员名单(每行一个姓名)
- 点击"生成"按钮
- 系统自动生成编号和二维码
-
管理名单
- 查看二维码:显示编号和二维码
- 编辑:修改名单名称和成员
- 删除:删除整个名单
-
查看记录
- 查看所有点名记录
- 显示点名时间、名单、编号
用户点名操作
-
进入点名
- 方式1:输入编号
- 方式2:扫描二维码(需摄像头)
- 方式3:直接访问带参数的URL
-
点名方式
- 拍照点名:开启摄像头拍照,系统自动识别
- 手动点名:从下拉列表选择姓名
-
查看进度
- 实时进度条显示
- 已点名/总人数统计
- 成员状态标记
🔄 模式自动切换
系统会自动检测运行环境:
| 访问方式 | 运行模式 | 数据存储 |
|---|---|---|
| 双击HTML文件 | 本地模式 | localStorage |
| file://协议 | 本地模式 | localStorage |
| http://localhost | 服务器模式 | 服务器文件 |
| http://域名 | 服务器模式 | 服务器文件 |
📁 文件结构
手机点名器/
├── server.js # Node.js后端服务器
├── package.json # 项目配置
├── storage.js # 通用数据存储模块(核心)
├── admin.html # 后台管理页面
├── index.html # 用户点名页面
├── styles.css # 共享样式
├── admin.js # 后台管理逻辑
├── index.js # 用户点名逻辑
├── qrcode.js # 本地二维码生成器
├── 启动服务器.bat # Windows启动脚本
├── 启动说明.md # 启动说明
├── data_lists.json # 点名列表数据(服务器模式)
├── data_records.json # 点名记录数据(服务器模式)
├── idea.md # 需求文档
└── README.md # 使用说明
🛠️ 技术架构
前端
- 纯HTML/CSS/JavaScript
- 无框架依赖
- 响应式设计
- 本地二维码生成
后端(可选)
- Node.js原生HTTP服务器
- RESTful API设计
- 文件系统数据存储
- CORS支持
数据存储
- 本地模式:浏览器localStorage
- 服务器模式:JSON文件持久化
📝 API接口文档(服务器模式)
登录
- URL:
/api/login - 方法: POST
- 参数:
{ username, password }
创建点名名单
- URL:
/api/create-list - 方法: POST
- 参数:
{ name, members: [] }
获取所有名单
- URL:
/api/get-lists - 方法: GET
获取单个名单
- URL:
/api/get-list?code=xxx - 方法: GET
更新名单
- URL:
/api/update-list - 方法: POST
- 参数:
{ id, name, members: [] }
删除名单
- URL:
/api/delete-list - 方法: POST
- 参数:
{ id }
点名
- URL:
/api/roll-call - 方法: POST
- 参数:
{ code, name }
获取点名记录
- URL:
/api/get-records - 方法: GET
❓ 常见问题
Q1: 本地模式下数据会丢失吗?
A: 数据保存在浏览器localStorage中,除非清除浏览器数据,否则不会丢失。
Q2: 可以在不同电脑上使用吗?
A:
- 本地模式:每台电脑独立数据,不共享
- 服务器模式:可以通过局域网IP访问,数据共享
Q3: 如何在手机上使用?
A:
- 本地模式:将HTML文件传到手机,用浏览器打开
- 服务器模式:通过局域网IP访问(如 http://192.168.1.100:3000)
Q4: 服务器模式如何停止?
A: 在命令行窗口按 Ctrl+C 或关闭窗口
Q5: 端口被占用怎么办?
A: 修改 server.js 中的 const PORT = 3000; 为其他端口
🔧 扩展建议
- 集成真实的人脸识别API
- 使用数据库替代文件存储
- 实现扫码功能
- 添加数据导出功能
- 支持批量导入名单
- 添加用户权限管理
- 实现WebSocket实时通信
- 添加日志记录功能
📄 许可证
MIT License
推荐使用方式:
- 🎯 学习/测试:使用本地模式,简单快捷
- 🏢 正式使用:使用服务器模式,稳定可靠