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

152 lines
8.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 课程作业模块 · 功能清单与原型说明(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. 先做「布置作业 → 我布置的 → 提交情况」这条能看到数据的链,批改中心随后。