You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.
# 教学班实训任务恢复默认内容设计
## 背景与现状
教师端“实训任务”页面按教师本人创建的教学班进行编辑。任务内容写入
`training_task_class_config` ,以 `(teaching_class_id, task_key)` 为唯一键。当前实现会在教学班首次
读取任务时,把平台默认任务完整复制为该班的任务副本;之后的教师编辑都修改该班副本。
教师对某个教学班的编辑只影响该班及其学生,不会影响同一教师创建的其他教学班,也不会影响
其他教师的班级。
学校“默认实训任务配置”中的启用/停用开关保存于 `task_allocation` ,仅决定任务是否可用;
它与本次的任务内容恢复互不替代。
## 目标
让教师可以撤销自己对教学班实训任务内容的编辑,重新使用平台默认实训任务内容。
提供两个恢复范围:
1. 当前教学班的单个任务;
2. 当前教学班的全部任务。
## 不变的边界
- 恢复操作只针对当前教师本人创建的教学班,沿用现有 `requireOwnedTeachingClass` 鉴权。
- 恢复不会修改 `training_task` 平台默认内容。
- 恢复不会修改 `task_allocation` 的学校默认配置或教学班启用/停用配置。
- 恢复不会删除学生完成记录、上传材料、得分、进度或其他业务数据。
- 不会影响任何其他教学班。
## 后端设计
在 `TrainingTaskController` 与 `TrainingTaskService` 增加两个接口:
| 操作 | 方法与地址 | 行为 |
| --- | --- | --- |
| 恢复单个任务 | `DELETE /api/training-tasks/classes/{teachingClassId}/{taskKey}/override` | 删除当前班级该 `task_key` 的 `training_task_class_config` 副本;下次读取自动由默认任务重建。 |
| 恢复全班任务 | `DELETE /api/training-tasks/classes/{teachingClassId}/overrides` | 删除当前班级全部 `training_task_class_config` 副本;下次读取自动按默认任务重建。 |
两个接口均先校验该教学班归当前登录教师所有。删除副本后,现有
`ensureClassTasksInitialized` 会在下一次教师端或学生端读取时,以 `training_task` 当前默认内容
重建缺失副本;不需要改动现有任务读取链路。
删除不存在的覆盖记录视为幂等成功,便于重复点击、刷新重试,以及恢复后再次调用。
## 前端交互
页面仅在已选中教学班时展示恢复入口:
1. 编辑抽屉底部新增危险操作按钮“恢复此任务默认内容”。点击后显示二次确认,确认后调用单任务接口、关闭抽屉并刷新任务列表。
2. 教学班筛选区新增“恢复本班全部默认任务”按钮。点击后显示明确提示:仅恢复当前所选教学班的任务内容,不影响学生成绩、完成数据和其他班级。确认后调用全量接口并刷新列表。
3. 未选中教学班时不展示恢复操作;默认任务预览模式保持只读。
## 验收标准
1. 教师编辑 A 教学班任务后, A 班学生读取到编辑内容, B 班仍读取其自身内容或平台默认内容。
2. 恢复 A 班单个任务后, 该任务立即显示并读取平台默认内容; A 班其他任务不变。
3. 恢复 A 班全部任务后,该班所有任务均显示并读取平台默认内容。
4. 恢复操作不改变任务启用状态分配,不删除学生完成、得分或进度数据。
5. 非该班创建者调用接口被拒绝。