8.1 KiB
课程作业模块 · 功能清单与原型说明(v1 / 任课教师视角 · 核心闭环)
说明:本模块只复用校园公告模板的外壳——顶栏 + 左栏菜单机制、登录/SSO、班级树选人、富文本、附件上传、列表分页、统计页骨架。内部页面与数据按“课程作业”真实业务重搭,不再套用公告的“发布→接收→已读→审批”模型。
v1 范围:仅任课教师端核心闭环 = 布置作业 → 我布置的 → 提交情况(已交/未交) → 批改中心 → 作业统计。 v1 暂不做:作业审核(审批流)、分层/周期性作业、学生端与家长端、拍照/附件真实上传(批改读取用 mock)。
0. 角色与左栏菜单(v1 = 教师视角)
登录身份 = 任课教师(沿用 GetUserMod 数据驱动左栏)。左栏菜单项:
| 序号 | 菜单名 | 路由 | 对应页面 | 复用/新建 |
|---|---|---|---|---|
| 1 | 布置作业 | /assign |
新建/编辑作业表单 | 改造自现 NewHomework.vue |
| 2 | 我布置的 | /list |
作业列表(按状态分组) | 改造自现 HomeworkList.vue |
| 3 | 提交情况 | /submissions |
单作业的已交/未交名单 | 新建(可并入详情) |
| 4 | 批改中心 | /grade |
逐份批改工作台 | 新建 |
| 5 | 作业统计 | /stats |
提交率/正确率/分布 | 改造自现 HomeworkStats.vue |
“我布置的”行内入口:查看详情、编辑、复制、置顶、撤回、催交;从某条作业进入「提交情况」和「批改中心」。
1. 核心业务闭环(状态机)
┌──────────── 我布置的(列表,筛选/状态标签) ────────────┐
│ │
布置作业(草稿) ─发布→ 收集中 ──到截止──> 已截止 ──全部批改完──> 已完成
│ │ │
│ 催交(未交) 批改中心(逐份 打分/评语/驳回)
│ │ │
└──── 编辑/复制/置顶/撤回 订正 ── 学生重交 ── 再批改
- 作业状态:草稿 / 收集中 / 已截止 / 已完成(v1 去掉 pending/rejected 审批态)。
- 提交状态(每个学生×每份作业):未交 / 已交(待批改) / 已批改 / 待订正 / 已订正。
2. 页面详规
2.1 布置作业(/assign)
目的:教师创建并即时发布一份作业给若干班级。
表单项:
- 学科(下拉,来自作业设置/字典)
- 作业标题(必填)
- 布置班级(多选,复用
ClassCheckInput班级树;支持“全部班级”) - 截止时间(日期时间;用于“已截止”判定与倒计时)
- 提交方式(多选/单选:文本、图片、附件、无需提交仅查阅)——决定学生端能力与批改界面
- 作业正文(富文本,复用
@wangeditor) - 附件/题目(复用现附件上传组件
HomeworkUpload) - 是否开启短信提醒(复用
smsFlag) - 操作:保存草稿 / 发布
交互要点:发布即进入“收集中”,生成面向所选班级的可见作业;编辑草稿不改变状态。v1 无审批直发。
API:POST /api/homework/Create、POST /api/homework/Edit(复用,字段扩展见 §3)。
2.2 我布置的(/list)
目的:教师管理自己发布的所有作业。
- 顶部状态标签页:全部 / 收集中 / 已截止 / 已完成 / 草稿
- 列表列:标题、学科、布置班级、截止时间、提交进度(已交 x/应交 y)、批改进度(已批 m/已交 n)、状态、操作
- 操作:查看详情、编辑、复制、置顶、撤回、催交、进入批改
- 支持关键词/学科/时间筛选(复用
applyFilters思路)
API:GET /api/homework/SendList?scope=user(改造为“我布置的”,返回体新增 progress 字段)。
2.3 提交情况(/submissions?serid=)
目的:看某份作业的收交名单。
- 头部:作业标题、截止倒计时、提交率、已交/未交/待订正 汇总
- 名单(按班级分组,复用
ReadDetail的年级→班级分组):每个学生 提交时间 / 状态 / 快捷“批改”“催交” - 批量:对未交一键催交(短信/站内)
API:GET /api/homework/Submissions?serid=(新增,替代现 ReadDetail 的“已读/未读”语义)。
2.4 批改中心(/grade?serid=&subId=)
目的:逐份高效批改。
- 左:提交列表(已交待批优先);右:某学生提交内容(文本/图片/附件预览,复用
@open-file-viewer/pdfjs) - 批改区:评分方式二选一——分数(0–100)或等级(A/B/C 或 优/良/待改进);文字评语;(可选)图片圈划标注
- 动作:保存批改、标为优秀作业、驳回要求订正、(批量)一键通过
- 键盘快捷键上一条/下一条,提升批改效率
API:GET /api/homework/SubmissionDetail?subId=、POST /api/homework/Grade(新增)。
2.5 作业统计(/stats)
目的:教师看学情。
- 单作业维度:提交率、按时率、批改进度、分数/等级分布、订正完成率、共性易错点(v1 可仅展示分布)
- 总览维度:我布置的作业数、平均提交率、待批改数量
- 图表复用现统计页骨架
API:GET /api/homework/Statis(改造为作业口径)。
3. 数据模型(v1 新增字段,mock 需对齐)
Homework(作业)
- 新增:
subject(学科)、deadline(截止)、submitType(提交方式数组)、status ∈ {draft, collecting, closed, done} - 去除/停用:
approvalEnabled/approvalStatus/approvalFlow(v1 不用)、classRead(改为按提交统计)
Submission(提交) — 新概念
{ id, homeworkId, studentId, studentName, classId, className,
submittedAt|null, submitStatus: 'unsubmitted'|'submitted'|'graded'|'needRedo'|'redone',
text, images[], attachments[],
grade: { score|null, level|null, comment, isExcellent, markedImages[] } }
学生名单来源:班级 → 学生(现 mock 只有班级维度 studentCount,v1 需扩到学生个体才能做提交/批改;生成每班的 N 个 mock 学生即可)。
统计:提交率=已交/应交;按时率=截止前交/应交;批改进度=已批/已交;分数分布分桶。
4. 与现有“公告换皮”代码的差异(改造清单)
| 现有(公告语义) | v1 课程作业 | 处理 |
|---|---|---|
| 已收到 / 已发送 | 我布置的(+提交情况) | 改列表口径与字段 |
| 已读 / 未读(班级维度) | 已交 / 未交(学生个体维度) | 提交名单需下到学生 |
| 审批 pending/rejected | v1 不做 | 关闭审批入口与状态 |
| 收件箱(学生视角) | v1 不做(属学生端) | 暂隐藏 |
| NewHomework/Detail/Stats | 布置作业/详情/统计 | 改造复用 |
| ClassCheckInput/富文本/附件/TablePage | 同名复用 | 直接用 |
Mock 层:在 src/assets/mock/homeworkapi.ts 里 ①补 subject/deadline/submitType;②加学生个体表;③新增端点 Submissions / SubmissionDetail / Grade / Remind;④Statis 改作业口径;⑤去掉 SeedFlows/approval 相关种子与分支(或保留但不进菜单)。
5. v1 之后(预留,不实现,仅登记)
- 学生端 / 家长端(今日作业、提交、看批改、订正补交、提醒)
- 作业审核(教研组/教务抽查,复用现审批流,可选开启)
- 分层作业(A/B 组不同题量)、周期性作业(每周固定模板自动生成)
- 拍照提交 + 手写圈划批改、错题本、年级作业负担看板、优秀作业库
6. 建议下一步
- 你按本页圈改功能/字段(尤其 §2 每页要哪些、§3 提交/批改字段够不够)。
- 确认后我先改造
mock(补学生与提交/批改数据 + 新端点),再逐页替换views。 - 先做「布置作业 → 我布置的 → 提交情况」这条能看到数据的链,批改中心随后。