课堂工作区与作业提醒架构 #

本页用于约束“课堂模板 + 教师编排 + 作业中心 + 三时点提醒”的整体实现方案,保证后续前后端迭代一致。

1. 交互原型结构图 #

1.1 全局导航与课程工作区 #

flowchart LR A[全局导航] --> B[课程中心] A --> C[作业中心] A --> D[消息中心] B --> E[课程详情] E --> F[课程工作区] F --> F1[总览] F --> F2[学习内容] F --> F3[作业] F --> F4[随堂测验] F --> F5[成绩反馈] G[教师模块开关配置] --> F H[课次模板] --> G

1.2 教师课堂编排器(仅教师可调整顺序) #

flowchart TD A[选择课程模板] --> B[加载课次结构] B --> C[单元列表] C --> D[知识点列表] D --> E[任务卡片] E --> F{拖拽动作} F -->|同知识点内重排| G[更新 sort_order] F -->|跨知识点移动| H[更新 point_id + sort_order] G --> I[保存草稿] H --> I I --> J[一键发布]

1.3 学生作业流与提醒流 #

sequenceDiagram participant T as 教师 participant C as Core participant R as ReminderScheduler participant S as 学生 T->>C: "创建作业(开始 / 截止 / 提醒开关)" C->>C: "生成提醒事件(开始,截止前 24h,截止时)" R->>C: "扫描待发送事件" C->>C: "写入站内通知" C->>S: "通知可见(消息中心 / 作业中心红点)" S->>C: "查看作业并提交" C->>C: "更新作业完成状态"

2. 角色视图约束 #

  • 教师:默认展示“编排 + 发布 + 监控 + 批阅”。
  • 学生:默认展示“固定课程结构 + 待完成 + 即将截止 + 已提交反馈”。
  • 同一课程路径保持一致,差异仅体现在可见菜单项与操作按钮。

页面职责划分 #

  • 课程管理页(/courses/{id}/manage)负责教师侧创建与发布:
  • 发布课程通知
  • 发布实验
  • 上传课程资源
  • 编排学习结构(单元、知识点、任务)
  • 课程首页、实验页、资源页主要承载浏览与消费,不再放置上述发布表单。
  • 课程学习页承载学习结构展示与课堂任务闭环(提交、批阅、汇总)。

这一调整的目标是把教师高频操作集中到一个入口,减少跨页面切换成本。

课程学习以"学习单元 → 知识点 → 学习任务"三级结构组织: - 学习任务分为媒体学习(文件、链接、文本材料)和随堂测试(单选、多选、简答)。 - 学生可在任务内提交答卷,教师可在线批阅并写入分数与评语。 - 课程学习汇总页按学生聚合提交与批阅结果。

3. 后端接口清单(目标) #

  • 课程工作区模块配置
  • GET /api/v1/courses/{courseId}/workspace/modules
  • PUT /api/v1/courses/{courseId}/workspace/modules
  • 课程学习结构编排
  • PATCH /api/v1/courses/{courseId}/learning/points/{pointId}/tasks/order
  • 作业中心
  • GET /api/v1/courses/{courseId}/homeworks
  • GET /api/v1/homeworks/mine
  • 站内提醒收件箱
  • GET /api/v1/notifications
  • PATCH /api/v1/notifications/{notificationId}/read
  • PATCH /api/v1/notifications/read-all

富文本安全策略 #

  • 教师在创建通知、实验描述、学习任务内容时支持富文本编辑(标题、粗体、列表、链接、代码块等)。
  • 学生提交的文本答卷与教师评语支持富文本展示。
  • 前端渲染层会对 HTML 内容进行白名单清洗,降低 XSS 风险。

4. 数据表变更草案 #

4.1 学习任务扩展(作业字段) #

course_learning_tasks 增加:

  • task_kind: LEARNING / HOMEWORK
  • start_at: 作业开放时间
  • due_at: 作业截止时间
  • notify_on_start: 作业开始时提醒
  • notify_before_due_24h: 截止前 24 小时提醒
  • notify_on_due: 截止时提醒

4.2 课程工作区模块配置 #

新增 course_workspace_modules

  • course_id
  • module_key(如 LEARNING, HOMEWORK, QUIZ
  • enabled
  • sort_order

约束:(course_id, module_key) 唯一。

4.3 站内通知与提醒事件 #

新增 inbox_notifications

  • user_id
  • notification_type
  • title
  • content
  • action_path
  • read_at
  • delivered_at

新增 homework_reminder_events

  • task_id
  • target_user_id
  • trigger_typeSTART / BEFORE_DUE_24H / DUE
  • scheduled_at
  • sent_at
  • canceled

约束:(task_id, target_user_id, trigger_type) 唯一。

5. 调度与幂等策略 #

  • 调度器按分钟扫描 scheduled_at <= now and sent_at is null and canceled = false 的事件。
  • 发送成功后写入 sent_at
  • 提醒事件键唯一,防止重复发送。
  • 作业时间变更时重排提醒事件(取消旧事件并生成新事件)。

6. 迭代边界 #

  • 第一版先支持“同知识点内拖拽重排 + 作业独立汇总 + 三时点站内提醒”。
  • 第二版再支持”跨知识点拖拽移动 + 课次级模板复用 + 更多提醒策略”。

关联阅读 #