作业列表
页面元信息
- 终端:教师小程序
- Astro 路由:
/teacher-mp/list - 原始 HTML:
tm_list.html - 来源章节:
4.3.1 - 维护规则:后续以本页面 PRD 为准;若改动影响通用规则,再同步总览 / 全局规则文档。
视觉描述
- 原型引用:
产出文档/作业管理模块/原型图/tm_list.html。 - 页面为教师小程序底部导航的
作业中心主列表页。顶部为双分段切换区,包含纸质教辅作业、个性化作业两个大页签;未选中项为白底灰字,选中项为浅灰底深色字。当前原型默认高亮个性化作业。 - 分段切换下方为三枚筛选胶囊
全部学科、全部班级、全部状态,每枚胶囊右侧带下拉箭头。筛选生效后,胶囊文案直接替换为当前已选值,不额外显示第二行标签或筛选摘要。 - 主内容区为纵向作业卡片流。每张卡片由
学科方块、标题区、状态标签、信息盒、底部操作区五部分组成。 - 标题区展示
作业标题、可选来源标签教研院、以及共X页,共Y题。状态标签仅允许三种视觉样式:灰色待提交、橙色待批改、绿色已完成。 - 信息盒固定展示三行内容:
发布班级、发布时间、提交情况。其中提交情况使用高亮色突出已提交人数/应提交人数。 - 卡片底部操作区包含
查看分析与批改两个横向等分文本按钮,中间使用竖线分隔。原型中整张卡片可点击,卡片内按钮点击时需阻断整卡点击。 - 页面底部在 TabBar 上方悬浮一组快捷操作:左侧
提交记录为描边按钮,右侧提交作业为品牌主按钮,按钮内带相机图标。 - 最底部为四项 TabBar
首页、作业中心、学情分析、我的,其中作业中心为当前激活态。 - 页面需补齐四类占位态:首屏骨架屏、筛选无结果空态、权限空态、触底加载反馈态。
功能描述
- 页面入口:
- 教师从小程序全局底部导航点击
作业中心进入。 - 从
tm_submit.html在普通提交模式下完成上传后自动回流本页。 - 从
tm_submit.html在普通提交模式点击返回并确认退出后回流本页;若当前为upload_result模式,则返回tm_history.html,不直接回流本页。 - 从
tm_report.html顶部返回、tm_grading_list.html顶部返回、tm_history.html左上关闭返回本页。
- 教师从小程序全局底部导航点击
- 页面权限与数据范围:
- 仅具备当前班级代提交/批改权限的教师可见;列表仅返回教师有权限处理的作业,不展示其他学校、其他班级作业。
- 页面卡片只展示作业级汇总信息,不展示学生姓名、得分、手机号、原卷图片等学生敏感明细。
- 页面初始化与上下文恢复:
- 首次进入优先读取
tm_list_context;若不存在历史上下文,则默认选中个性化作业页签,与现有原型默认态一致。 tm_list_context至少保存active_type、subject_id、class_id、status、page_no、scroll_top、source_page、updated_at。- 若进入
tm_list.html前检测到本地仍存在pendingUploadTask,则本页不得继续渲染作业列表,必须立即重定向至tm_submit.html的上传任务拦截态,由该页继续上传;教师不能先看到列表再决定是否恢复。 - 从
tm_report.html、tm_grading_list.html、tm_history.html、tm_submit.html回流本页时,必须恢复离开前的页签、筛选条件、已加载页数和滚动位置,不得每次回到默认首屏。 - 列表默认按
发布时间倒序排列,最新发布的作业排在最前;同一筛选条件下不提供手动排序入口。
- 首次进入优先读取
顶部作业类型切换区
| 区域/控件 | 展示规则 | 交互与系统行为 |
|---|---|---|
纸质教辅作业 | 始终展示;未选中时白底灰字 | 点击后切换当前列表数据源为 paper;按钮切换为选中态;刷新列表并回到顶部。 |
个性化作业 | 始终展示;首次进入默认选中 | 点击后切换当前列表数据源为 personal;按钮切换为选中态;刷新列表并回到顶部。 |
| 分段按钮状态 | 二选一互斥 | 同一时刻仅允许 1 个页签处于选中态;切换时写入 tm_list_context.active_type。 |
| 切换后的筛选继承 | 仅在新数据源仍存在对应选项时保留 | 学科/班级/状态在新数据源仍有效则沿用;若当前筛选值在新数据源无可选项,则自动回退为 全部学科/全部班级/全部状态。 |
筛选区
| 区域/控件 | 展示规则 | 交互与系统行为 |
|---|---|---|
全部学科 筛选胶囊 | 始终展示;默认文案 全部学科 | 点击打开学科底部选择弹层;选中后胶囊文案更新为学科名称;取消或关闭不改当前结果集。 |
全部班级 筛选胶囊 | 始终展示;默认文案 全部班级 | 点击打开班级底部选择弹层;仅展示当前教师有权限的班级;选中后立即刷新列表。 |
全部状态 筛选胶囊 | 始终展示;默认文案 全部状态 | 点击打开状态底部选择弹层;选项固定为 全部状态 / 待提交 / 待批改 / 已完成。 |
| 筛选结果刷新 | 任一筛选项确认后触发 | 刷新时清空当前已加载分页、滚动到顶部,并展示局部骨架屏;筛选值写入 tm_list_context。 |
| 筛选口径 | 全部为单选 | 本页不支持多条件多选;每个筛选维度同时仅能存在 1 个生效值。 |
作业卡片列表区
- 列表加载策略:
- 首屏加载 10 张作业卡片,向下滚动触底后继续加载下一页 10 条。
- 触发作业类型切换或任一筛选变化后,分页游标重置为第 1 页,已加载卡片清空并重新请求。
- 加载过程中显示卡片骨架屏;触底加载失败时保留已加载数据,在列表底部展示
加载失败,点击重试。
- 卡片字段与交互说明:
| 区域/字段/按钮 | 展示规则 | 交互与系统行为 |
|---|---|---|
| 学科方块 | 每张卡片固定展示 | 展示学科简称,如 语文 / 数学 / 英语;仅作识别,不可点击。 |
| 作业标题 | 每张卡片固定展示 | 展示发布后的最终标题;标题过长最多显示 2 行,超出省略。 |
教研院 标签 | 仅当 source = research_institute 时展示 | 作为来源标识,不可点击;该标签不改变批改和分析入口规则。 |
| 页数/题数 | 每张卡片固定展示 | 展示格式固定为 共{page_count}页,共{question_count}题。 |
| 状态标签 | 每张卡片固定展示 | 仅允许 待提交 / 待批改 / 已完成 三种状态;颜色样式分别为灰/橙/绿;状态口径遵循 R28。 |
| 发布班级 | 每张卡片固定展示 | 单班作业显示单一班级名称;多班作业显示聚合班级名,完整名单在详情接口返回。 |
| 发布时间 | 每张卡片固定展示 | 展示格式固定为 YYYY-MM-DD HH:mm:ss。 |
| 提交情况 | 每张卡片固定展示 | 展示 已提交人数/应提交人数;当 submitted_student_count > 0 时用高亮色强调,否则用普通文本色。 |
| 整卡点击 | 仅当 can_view_report = true 时可点击 | 点击进入 tm_report.html,默认打开 作业分析 页签,并透传 homework_id、homework_type、source_page=tm_list;若 can_view_report = false,整卡不响应点击。 |
查看分析 | 当 can_view_report = true 时展示可点击态;否则展示禁用态 | 点击行为与整卡点击一致;点击时必须 stopPropagation,不能继续触发整卡点击。禁用态文案仍为 查看分析,点击 Toast:作业分析数据生成中,请稍后查看。 |
批改 | 当 submitted_student_count > 0 时展示可点击态;否则展示禁用态 | 点击进入 tm_grading_list.html;若当前作业状态为 待批改,透传 tab=pending;若状态为 待提交 且 submitted_student_count > 0 或状态为 已完成,透传 tab=graded,用于复查已批内容。禁用态点击 Toast:当前暂无可批改答卷。 |
- 卡片状态与按钮绑定规则:
待提交:- 判定条件:当前不存在待最终确认的已提交答卷,且仍存在未提交学生。
- 业务子态 1:
submitted_student_count = 0。卡片展示提交情况 = 0/应交人数;查看分析与批改均为禁用态;整卡不可点击。 - 业务子态 2:
submitted_student_count > 0且当前已提交部分均完成最终成绩确认。查看分析可用;批改可用但默认进入已批改页签,用于复查已批学生。
待批改:- 判定条件:至少存在 1 份已提交但未完成最终成绩确认的答卷,不区分是否仍有未提交学生。
查看分析在report_status in (partial_generated, generated)时可用,否则显示禁用态。批改始终可用,默认进入待批改页签。
已完成:- 判定条件:全部应交学生已提交,且全部提交答卷均完成最终成绩确认。
查看分析与批改均可用;批改进入已批改页签,用于复查或修正成绩。
底部悬浮快捷操作区
| 区域/控件 | 展示规则 | 交互与系统行为 |
|---|---|---|
提交记录 | 始终展示 | 页面级快捷入口,不绑定当前卡片;点击后按当前顶部作业类型进入对应的提交记录页。当前页签为个性化作业时进入 tm_history.html?source_page=tm_list&tab=personal;当前页签为纸质教辅作业时进入纸质教辅专属提交记录页;返回时恢复本页上下文。 |
提交作业 | 始终展示 | 页面级快捷入口,不绑定当前卡片;点击进入 tm_submit.html 统一提交页。若当前实现透传 tab 参数,则按当前顶部作业类型传 paper / personal;若未透传,则提交页执行其默认初始化规则。 |
提交作业 文案与状态 | 始终展示为品牌主按钮 | 本页不根据筛选结果或列表是否为空隐藏该按钮;即使当前无列表数据,也允许教师进入统一提交页重新选择作业对象。 |
提交作业跳转补充规则:tm_submit.html收到入口后,必须先执行pendingUploadTask恢复判断;若存在未完成上传任务,则直接进入上传任务拦截态,不以tab入参覆盖当前恢复结果。- 教师重新进入小程序时,只要当前账号下仍有未完成上传任务,无论其原本打算访问
tm_list.html、tm_history.html、tm_report.html或tm_grading_list.html,都必须先被拦截到tm_submit.html上传任务页,直至当前任务结束。 - 仅在不存在未完成上传任务时,才按入口传入的
tab=paper|personal打开对应页签;若入口未透传tab,则再走tm_submit.html的默认页签初始化规则。
底部全局导航区
| 区域/控件 | 展示规则 | 交互与系统行为 |
|---|---|---|
首页 | 常驻展示 | 遵循教师小程序全局导航规则,本节不展开首页内容;离开前保留 tm_list_context。 |
作业中心 | 当前页固定激活态 | 高亮显示,不响应重复点击刷新。 |
学情分析 | 常驻展示 | 遵循教师小程序全局导航规则;离开前保留 tm_list_context。 |
我的 | 常驻展示 | 遵循教师小程序全局导航规则;离开前保留 tm_list_context。 |
批量操作范围
- 本页不支持作业卡片多选,不提供批量批改、批量提交、批量删除、批量催交入口。
- 三个筛选胶囊仅影响“当前列表结果集的展示范围”,不修改任何作业、提交、批改数据。
提交记录与提交作业属于页面级快捷入口,对整个教师账号当前权限范围生效,不绑定当前卡片,也不只作用于当前筛选结果。
弹层规格
弹层 1:学科选择底部弹层
| 要素 | 内容 |
|---|---|
| 触发条件 | 点击筛选胶囊 全部学科/当前学科 |
| 标题 | 选择学科 |
| 正文 | 单列展示 全部学科 + 教师当前有权限的学科列表;当前选中项以勾选态或高亮态标记。 |
| 主按钮 | 无独立底部主按钮;点击某一学科项后立即生效,关闭弹层并刷新列表。 |
| 次按钮 | 取消 → 关闭弹层,不改变当前筛选。 |
| [x] 关闭 | 同 取消 |
弹层 2:班级选择底部弹层
| 要素 | 内容 |
|---|---|
| 触发条件 | 点击筛选胶囊 全部班级/当前班级 |
| 标题 | 选择班级 |
| 正文 | 单列展示 全部班级 + 当前教师可见班级;班级名称按完整教务名称展示。 |
| 主按钮 | 无独立底部主按钮;点击班级项后立即生效,关闭弹层并刷新列表。 |
| 次按钮 | 取消 → 关闭弹层,不改变当前筛选。 |
| [x] 关闭 | 同 取消 |
弹层 3:状态选择底部弹层
| 要素 | 内容 |
|---|---|
| 触发条件 | 点击筛选胶囊 全部状态/当前状态 |
| 标题 | 选择状态 |
| 正文 | 单列展示 全部状态 / 待提交 / 待批改 / 已完成;选中项高亮。 |
| 主按钮 | 无独立底部主按钮;点击状态项后立即生效,关闭弹层并刷新列表。 |
| 次按钮 | 取消 → 关闭弹层,不改变当前筛选。 |
| [x] 关闭 | 同 取消 |
- 业务规则:R18、R28、R29、R30、R31、R32、R33、R34。
异常描述
| 异常场景 | 处理方式 |
|---|---|
| 页面初始化失败(列表接口 404、500、网络超时) | 展示整页错误态,提供 重试 按钮;已缓存的页签和筛选条件保留。 |
| 当前教师无可见班级或无可见作业 | 展示权限空态 当前暂无可管理作业;保留 提交记录 与 提交作业 快捷入口。 |
| 筛选结果为空 | 列表区展示空状态 暂无符合条件的作业,并提供 清空筛选 快捷入口;顶部页签与筛选胶囊保持当前值。 |
| 筛选字典加载失败 | 对应筛选弹层不展开,Toast 提示 筛选项加载失败,请稍后重试。 |
查看分析 点击时报告未生成 | 保持停留在当前页,Toast 提示 作业分析数据生成中,请稍后查看。 |
批改 点击时无已提交答卷 | 保持停留在当前页,Toast 提示 当前暂无可批改答卷。 |
| 列表触底加载下一页失败 | 已加载卡片保留,列表底部展示 加载失败,点击重试;不得整页回到首屏。 |
| 进入本页前检测到未完成上传任务 | 本页不展示列表内容,立即强制跳转 tm_submit.html 上传任务拦截态,并 Toast 提示 检测到未完成上传,正在继续提交。 |
| 从下游页面返回时上下文恢复失败 | 回退到本页默认首屏,并 Toast 提示 已为你恢复到作业列表默认视图。 |
| 教师越权访问某作业 ID | 该作业卡片不返回到列表结果中;若通过过期缓存强制跳转下游页,下游页需拦截并返回本页。 |
| 弱网导致提交人数统计延迟 | 卡片仍显示上一次成功返回的汇总值,同时在卡片局部展示 数据更新中 提示,不以 0 值覆盖已有结果。 |
数据需求
- 接口需求:
GET /mini/homework/list:查询教师小程序作业列表。入参至少包含homework_type、subject_id、class_id、status、page_no、page_size。GET /mini/homework/filter-options:返回当前教师在当前作业类型下可用的学科、班级、状态选项及默认值。GET /mini/homework/context(可选):返回最近一次tm_list_context,用于多端一致的默认页签恢复;若无服务端接口,则前端本地缓存承担相同职责。
- 列表字段需求:
- 基础字段:
homework_id、homework_type、source、display_title、subject_name、page_count、question_count、published_at、class_summary_text。 - 统计字段:
assigned_student_count、submitted_student_count、ungraded_submission_count、graded_student_count、status、report_status。 - 按钮控制字段:
can_view_report、can_grade、default_grade_tab。 - 展示字段:
source_tag_text、status_tag_style、highlight_submit_text。
- 基础字段:
- 页面状态缓存:
- 本地缓存
tm_list_context:active_type、subject_id、class_id、status、page_no、scroll_top、source_page、updated_at。 - 全局上传恢复对象
pendingUploadTask:至少包含task_id、task_status、active_tab、selected_homework_id、selected_homework_title、total_count、success_count、failed_count、pending_count、snapshot_images、updated_at;进入本页前必须先读取该对象,决定是否触发强制拦截。 - 下游页面透传字段:至少包含
source_page=tm_list、homework_id、homework_type;进入tm_grading_list.html时增加tab=pending|graded。
- 本地缓存
- 埋点需求:
| 事件名 | 触发时机 | 关键参数 |
|---|---|---|
tm_homework_list_view | 页面首屏加载完成时 | source_page、active_type、subject_id、class_id、status、result_count |
tm_homework_type_switch_click | 点击顶部作业类型分段按钮时 | from_type、to_type |
tm_homework_filter_open | 点击任一筛选胶囊并成功打开弹层时 | filter_type、active_type |
tm_homework_filter_confirm | 在筛选弹层选择某项并生效时 | filter_type、selected_value、active_type、result_count |
tm_homework_card_click | 点击可进入分析的整张作业卡片时 | homework_id、homework_type、status、submitted_student_count |
tm_homework_view_report_click | 点击 查看分析 按钮时 | homework_id、homework_type、status、report_status |
tm_homework_grade_click | 点击 批改 按钮时 | homework_id、homework_type、status、default_grade_tab |
tm_homework_history_click | 点击底部 提交记录 时 | source_page=tm_list、active_type |
tm_homework_submit_click | 点击底部 提交作业 时 | source_page=tm_list、active_type、has_pending_upload_task |
tm_homework_list_load_more | 触底加载下一页成功时 | active_type、page_no、loaded_count |