Files
ClassHelper/docs/app/notifications.md
T

4.3 KiB
Raw Blame History

title, description
title description
通知与提醒 通知的三档优先级、上课时段策略、紧急通知的二次确认、提醒弹在哪个端、已读与红点。

通知与提醒

通知是这套系统里规则最多的一项 —— 因为它要在"老师想说"和"别打断上课"之间做取舍。 这一页把规则一次讲清楚。

三档优先级

优先级 ClassHelper 班级端表现
普通 课间弹「新消息」胶囊,点击展开详情;上课时段完全不显示(窗口隐藏)并进队列,下课自动补弹
重要 同上,卡片上有优先级标签
紧急 无论是否上课都立即展开,卡片内部红色呼吸光晕 + 「紧急」角标,无需点击,45 秒后收起

紧急通知的光晕画在卡片内部(inset 阴影),因为窗口比卡片只大 2~4px,向外的阴影会被裁成硬边。

上课时段策略

「上课时段」由课表实时判定(见课表)。判定之后:

ClassHelper 班级端行为 上课时段 课间 / 放学
普通通知 收着不弹(窗口隐藏),进待发队列 直接弹
紧急通知 立刻弹 立刻弹
任何点击 一律不响应(不会展开、也不会回缩出胶囊) 正常

紧急通知的二次确认

上课时段发紧急通知,服务端会拦一次(409 URGENT_DURING_CLASS):

POST /api/notifications { classId, title, content, priority: "URGENT" }
  → 409 URGENT_DURING_CLASS(响应体里带着正在上的那节课)

POST /api/notifications { …, priority: "URGENT", confirmDuringClass: true }
  → 201 发出去

Web 端在提交前会先查一次上课状态,命中就弹一个全屏二次确认:全屏遮罩 + 强警示配色, 文案是"现在为上课时间段……" + 正在上的课时段 + 待发布的标题。确认按钮带 3 秒倒计时 (圆环进度),倒计时结束前点不动,防误触。

这个拦截在服务端,不是前端提醒。 绕过界面直接调接口一样会被拦 —— 这是产品行为,不是可以关掉的提示。

提醒显示

通知通过实时通道发送到 ClassHelper 客户端与灵动岛。设置页显示本机提醒规则,旧的跨应用通知渠道已移除。

已读、红点与删除

能力 说明
未读红点 客户端侧边栏「通知」项右上角的徽标;数字来自 GET /notifications/unread-count
标为已读 点开通知自动标为已读;也有「全部已读」
班级设备 教室机器的"已读"是代全班操作的(它用的是班级账号)
删除 只有教师 / 管理员能删

发布入口只有一个实现

「通知发布」与叫人复用同一套服务端发布流程和实时广播。

接口

方法 路径 说明
GET /notifications?classId=&priority=&unreadOnly=&keyword= 列表(带已读状态)
GET /notifications/unread-count 未读数
POST /notifications 发布(广播 notification:new)
POST /notifications/:id/read、/notifications/read-all 标记已读
DELETE /notifications/:id 删除

完整清单见 REST API。