ClassHelper 1.3.3 下载

它知道现在是第几节课, 不会在课上打扰学生

课表、作业、通知、成绩、叫人

一个后端全管,老师在电脑或手机上发布,教室大屏和每台学生机同时收到; 断网时用本地缓存接着看,网络恢复自动补齐。

  • v1.3.3
  • Windows 10/11
  • Linux · Docker
  • 触摸屏可用

上面这个灵动岛不是截图 —— 圆角路径与尺寸都是产品的(胶囊 268×44、展开 424×230、连续圆角 4.2 次方), 形变用的是 beUI 的 Dynamic Island 那套弹簧:壳 0.8 秒、回弹 0.2,内容层回弹 0.35。

  • 装着 SQLite 就能跑,需要时一键换到 MySQL —— 数据也跟着搬过去。
  • 课表由教师在管理端维护,教室客户端实时接收变更。
  • 通知实时送达客户端与灵动岛,普通提醒会等待下课再显示。

装什么,挑一下

三个交付物互不依赖安装顺序,但 服务端要先有一台机器跑着 ,管理端与客户端才连得上。 下面的版本与文件清单是当场从本仓库的 GitHub Releases 读出来的:显示什么,就真能下到什么。

选择版本

正在读取版本列表……

装什么

它是怎么工作的

从按下「发布」到教室屏幕上弹出来

中间只隔着一条 WebSocket 广播。实测从老师提交到教室机器收到,是 30 到 50 毫秒 —— 这个数字由 pnpm verify:e2e 每次跑的时候重新量,不是写在文档里的估计值。

  1. 老师发布

    Web 管理端或手机浏览器。通知、作业、叫人、成绩都在这里录。

  2. 后端落库

    Express 5 + Prisma 7 写进库,再按班级房间广播一条事件。

  3. 教室收到

    Socket.IO 推到 class:班级 房间 —— 教室机器、学生机、大屏同时收到。

  4. 判一次时间

    课表服务回答「现在上不上课」,当场弹还是先收着,这一步就定下来了。

  5. 两端弹出

    灵动岛展开成卡片,客户端同步显示通知。

上课的时候,通知会先排队

判定来自课表本身,不是按时钟拍脑袋。把下面这条时间轴拨一下,看看同样的通知在课上和课间分别会怎样。

09:20

正在上 第三节 · 数学

普通通知

学生机 · 灵动岛

先收着,打下课铃自动弹出来

普通通知

教室大屏 · ClassHelper

先收着,下课补弹

紧急通知 / 叫人

教室大屏 · ClassHelper

灵动岛立即展开提醒

不管什么时候

通知中心

照常记一条,未读红点随时可查,不会被吞掉

普通叫人(默认级别)上课时只进队列,下课后自动弹出详情;标成紧急的才当场打断课堂 —— 那是老师正在等学生。老师在 Web 端发紧急通知时会先撞上全屏二次确认,确认按钮带 3 秒倒计时, 防止手滑。这一层拦在服务端,绕过界面直接调接口也一样会被拒。

它是怎么构成的

一份代码,三个交付物

一个 pnpm monorepo。三端共用同一份类型与权限矩阵,所以不会出现「Web 端说有、客户端说没有」。

三个交付物、它们的形态与使用者
交付物 形态 谁在用
后端服务 Express 5 + Prisma 7 + Socket.IO,接口前缀 /api 管理端与客户端
Web 管理端 Vue 3 + Element Plus,手机可用,可在浏览器里装成应用 老师、管理员
桌面客户端 Electron + Vue 3,带灵动岛与系统托盘,断网可用 教室机器、学生机

每个界面都是跑起来截的

下面没有一张是画的示意。这些图是脚本真的把后端、Web 管理端、教室客户端和灵动岛跑起来之后 一屏一屏截下来的 —— 数据也是库里真实的数据。

点任意一张看大图。

老师那边,教室这边

老师与管理员

#班级人员

建班、换班主任、录学生

名单可以直接导入表格。教师录入与重置密码只对管理员开放,班主任也不行。

#课表

按周排课,支持单双周

也可以直接导入 ClassIsland 的档案 JSON —— 节次时间跟着课表一起进来,不用排两遍。

#作业

按「所属日期」归类

晚上八点留的作业算今天。教室机器也能录;未交名单勾一下,其余同学自动标成已完成。

#通知与叫人

分优先级发布,点名分两档

普通叫人上课时先收着,紧急的才当场打断课堂 —— 那是老师正在等学生。

#成绩

单条、批量,或者整张表导进来,还带排名

重复判定按「同班 + 同学生 + 同考试 + 同课程」,导入报错精确到 Excel 行号。单科排名自动出;这次考试要不要把各科相加排总分榜,你说了算。

#数据库

备份、导入导出、一键换库

SQLite 与 MySQL 互相搬数据,中途失败会自动回滚 —— 现有的库不会被动到。

#权限

谁能做什么,点着勾

建权限组、把账号分进去。没分组的按角色默认生效,分组之后只按组的并集算 —— 既能放权,也能收权。

#教室机器

统一管理设备、远控与更新

统一查看客户端在线状态、版本与远控结果,按设备或班级下发更新;可立即安装,或等待放学后安装。

#大模型助手

说一句话就发出去

它只把话解析成待确认的卡片,你点了才落库 —— 权限与上课时段保护仍复用既有流程。

#批量发布

勾几个班,一次发完

通知与作业都能批量。个别班失败不影响其余班级,哪个班为什么没发出去会逐班写清楚。

教室机器与学生机

#课表时间轴

大时钟、正在上的课、距下课倒计时

已结束的置灰,正在上的带进度条,下一节还有多久开始 —— 一眼看完。

#作业看板

按科目分卡,整屏缩放到刚好放下

标题和要求全文不截断,也不用上下翻页;全屏看板会自己算最合适的列数。

#灵动岛

消息到达的第一现场

无边框透明置顶的小窗,通知、作业、叫人在里面展开成卡片;鼠标穿透,不占任务栏。

#成绩排名

教室里就能看排名

单科榜按得分率排、并列同名次;老师把这次考试设成「各科相加」后,还多一张总分榜。开不开由服务端定,教室里只读。

#离线缓存

断网的时候接着看

课表、作业、通知、成绩先落本地,断网顶部提示离线、照旧显示,网络恢复自己刷新。

#外观

深浅两套,岛也能整

高度、宽度、圆角、字号、停靠位置、视觉风格都能调;越界的值在主进程统一夹紧。

#自愈

崩了会自己回来

渲染进程挂了先安静地重建窗口;断网期间错过的通知,重新上线时补弹一次。

它是怎么到你手里的

四种装法,按场景挑

四种部署形态与各自入口
场景 形态 入口
教师电脑、学校机房单机 Windows 服务端安装程序,内置 Node 运行时 双击安装,自动建库建号、开机自启
云服务器、多终端共享 Docker Compose,MySQL 与 SQLite 两种编排都在仓库里 deploy/docker-compose.yml
已有 Linux 服务器 一行命令装成 systemd 服务,附带 classhelper 运维命令 见下面的命令
已有 Node 环境 免安装目录,自带 node.exe pnpm dist:server 的产物
Linux 服务器上跑这一条
curl -fsSL -o /tmp/classhelper-install.sh https://raw.githubusercontent.com/LoveChengke/ClassHelper/master/deploy/install.sh && sudo bash /tmp/classhelper-install.sh

脚本自己从 GitHub Release 取最新版、核对发布页上的 .sha256 ,再装成 systemd 服务。 想先不改动系统,把末尾换成 --check 就只体检。装完之后, classhelper upgrade 、 backup 、 doctor 、 password 这些命令都在 /usr/local/bin 里等着。

学生机这边是安装包和单文件版两种:安装包走 NSIS,单文件版不用装、放 U 盘里就能分发。 两个都不写死服务器地址 —— 第一次打开时填教室的地址和班级码就行。

每个功能都配了一条能复跑的用例

仓库里带着这几套脚本,跑到哪儿、过了几条由脚本自己数,不是文档里写死的数字。 交付前它们必须全绿 —— 包括对 已经打包装好 的那份客户端再跑一遍。

pnpm verify:e2e 接口、实时推送、权限越权、上课时段、表格导入、班级账号、数据库管理、更新检查 190
pnpm verify:desktop 客户端冒烟:登录、离线回退、灵动岛开合与命中、设置页真实点击 105
pnpm verify:packaged 对打包后 / 已安装的那份 EXE 复跑同一套冒烟 105

上面是 2026-10-05 那一次的结果。这几套脚本每天都在跑,数字会变;跑到多少条,以脚本自己打印的为准。

剩下的,留给你自己试

一台机器装完就能跑起来,学生机和教室大屏接上同一个地址就行。装好之后还有什么, 都在界面里 —— 不用先读一遍文档。