Files
coursehomework-front/docs/课程作业-功能与原型说明-v1.md

8.1 KiB
Raw Permalink Blame History

课程作业模块 · 功能清单与原型说明(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. 建议下一步

  1. 你按本页圈改功能/字段(尤其 §2 每页要哪些、§3 提交/批改字段够不够)。
  2. 确认后我先改造 mock(补学生与提交/批改数据 + 新端点),再逐页替换 views。
  3. 先做「布置作业 → 我布置的 → 提交情况」这条能看到数据的链,批改中心随后。