提交作业
页面元信息
- 终端:教师小程序
- Astro 路由:
/teacher-mp/submit - 原始 HTML:
tm_submit.html - 来源章节:
4.3.2 - 维护规则:后续以本页面 PRD 为准;若改动影响通用规则,再同步总览 / 全局规则文档。
视觉描述
- 原型引用:
产出文档/作业管理模块/原型图/tm_submit.html。 - 页面为教师小程序统一提交页,默认标题为
提交作业;顶部包含关闭返回按钮、页面标题、小程序胶囊,以及纸质教辅作业、个性化作业分段页签。原型默认高亮纸质教辅作业;当教师从tm_select_personal.html返回或从补拍续传链路返回时,页签自动切换为个性化作业并回填已选作业。 - 本次详细展开范围聚焦
个性化作业页签。页签内容从上到下依次为关联作业卡片、作业内容照片网格、底部主按钮。未选择作业时卡片文案为点击选择个性化作业记录;已选择后卡片替换为学科封面、作业标题、发布班级和共X页,共Y题标签。 - 照片区采用 3 列网格,标题右侧实时展示
当前已拍张数/99。提交前每张图片右上角展示删除按钮,末尾固定展示拍照卡片;未选择关联作业时,该卡片保持可见但为禁用态;提交后网格切换为上传状态徽标,不再显示删除入口。 - 上传过程中,页面不整页跳转,而是在主内容区顶部展开
正在上传中...面板,展示进度文案、进度条、成功/异常/等待统计和缩略图网格,底部主按钮同步进入锁定态。 - 当教师因弱网、系统挂起、主动切到后台等原因中断在上传过程中,再次进入小程序时,不展示常规列表页或空白提交页,而是直接进入当前上传任务的拦截页。拦截页沿用提交页主框架,但默认展开上传进度面板和当前任务明细,页面表现应与用户确认截图保持一致。
- 当存在异常图片时,页面进入
上传结果模式:顶部标题切换为上传结果,隐藏页签与原提交表单,主体展示上传结果摘要卡、图片明细、异常状态标记和补拍结果标记,底部操作切换为返回提交记录与补拍提交。 - 页面包含两类浮层:一类为首次提交时的连续拍照浮层;另一类为上传结果页的图片预览/异常补拍浮层。首次提交采用连续拍照直采模式,补拍采用单张确认模式。
功能描述
- 业务规则:R02、R03、R04、R05、R06、R07、R17、R34。
- 本版范围说明:
个性化作业为本次详细补充范围。纸质教辅作业与现有能力保持一致:教师点击对应的作业本进入tm_select_book.html,返回后继续使用同一套连续拍照、上传中锁页、异常补拍、退出确认和未完成上传恢复机制;本节不再重复展开纸质教辅差异。
- 页面入口:
- 教师在
tm_list.html点击底部主按钮提交作业进入本页。 - 教师在本页点击
关联作业后跳转tm_select_personal.html,选择完成后返回本页,并带回tab=personal与已选作业参数。 - 教师在上传结果页完成异常图补拍后,点击
补拍提交,系统生成新的补拍上传任务,再回到本页继续上传。 - 教师在上传过程中异常中断后重新进入小程序时,无论原计划进入哪个教师小程序页面,只要检测到当前账号仍有未完成上传任务,都必须先拦截进入本页的上传任务页。
- 教师在
- 页面初始化与上下文恢复:
- 首次从作业列表进入时,页面默认停留在
纸质教辅作业页签。 - 当 URL 中存在
tab=personal&selected={作业名}时,页面必须自动切换至个性化作业页签,并回填该作业的学科、标题、发布班级、页数和题数。 - 当本地检测到未完成上传任务且队列中仍存在
pending图片时,页面必须优先恢复上传任务,而不是展示空白提交页;恢复后自动切换至对应页签、回填已选作业与已拍图片,并立即继续上传。 - 恢复场景下页面直接进入
上传任务拦截态:默认展开上传进度卡、锁定主按钮和页签切换、保留当前任务缩略图网格;教师不能先回作业列表、提交记录、报告或批改页。 - 恢复成功后,页面 Toast 文案固定为
检测到未完成上传,正在自动继续提交。
- 首次从作业列表进入时,页面默认停留在
页面分区与控件说明
| 区域/控件 | 展示规则 | 交互与系统行为 |
|---|---|---|
顶部关闭返回按钮 | 始终展示 | 提交模式下点击时,若无任何已选作业和照片,直接返回tm_list.html;若已选作业或已拍照片不为空,弹出退出确认弹窗;上传中或恢复拦截态点击仅提示正在上传中,请等待完成,不允许离开;上传结果模式点击直接返回tm_history.html。 |
页签纸质教辅作业/个性化作业 | 仅在提交模式展示 | 点击个性化作业后切换至个性化提交表单;若页面已进入上传锁定态,则不允许切页,并 Toast提交后正在处理,请等待上传完成。 |
关联作业卡片 | 个性化页签默认展示 | 未选择前展示占位文案点击选择个性化作业记录;点击后跳转tm_select_personal.html。已选择后卡片替换为已选作业摘要,但仍保持可点击,可再次进入选择页更换关联作业。 |
作业内容标题及计数 | 个性化页签展示 | 标题固定为作业内容;右侧实时显示已拍张数/99。该计数与当前页签下的照片数组绑定,不跨页签混算。 |
| 已拍图片项 | 有照片时展示 | 提交前每张图片右上角显示删除按钮,仅支持单张删除,不支持批量删除;提交后删除按钮隐藏,右上角改为上传状态标记:等待、✓、!。 |
拍照卡片 | 未锁页且当前张数 < 99 时展示 | 未选择关联作业时卡片保持可见但置灰,点击后仅 Toast 请先选择作业,不拉起相机;已选择关联作业后点击进入连续拍照浮层;达到 99 张上限后该卡片隐藏,不允许继续追加。 |
底部主按钮提交 | 默认置灰 | 仅当“已选择个性化作业”且“至少存在 1 张照片”时激活。上传中按钮文案切换为正在提交...并显示加载动画;锁页但非动画态时文案显示提交处理中。 |
关联作业选择链路(tm_select_personal.html)
| 区域/控件 | 展示规则 | 交互与系统行为 |
|---|---|---|
| 返回按钮 | 始终展示 | 点击返回tm_submit.html?tab=personal,不带作业参数,不自动覆盖当前已选作业。 |
| 搜索框 | 始终展示 | 用于按作业标题关键字检索个性化作业;输入态不自动改变当前筛选条件。 |
筛选按钮 | 始终展示 | 点击后拉起底部筛选面板;当任一筛选条件生效后,按钮进入高亮态。 |
筛选面板学科/班级/作业状态 | 通过 Bottom Sheet 展示 | 三个分组均支持组内多选;全部为互斥项,点击全部后需清空同组其他选项;若教师取消了同组全部具体选项,系统自动回退选中全部。 |
重置 | 面板头部展示 | 点击后将学科、班级、作业状态三组全部恢复到全部。 |
取消 | 面板底部展示 | 关闭筛选面板,不应用本次临时修改。 |
确认筛选 | 面板底部展示 | 按当前勾选条件过滤列表;若过滤后无结果,显示空状态没有匹配的作业。 |
作业卡片选择 | 每张卡片展示 | 点击后按钮文案从选择切换为已选并置灰,约 400ms 后返回tm_submit.html?tab=personal&selected={作业名}。 |
- 个性化作业卡片字段要求:
- 学科封面:用学科色块展示,如语文、数学、英语。
- 作业标题:展示完整标题;有教研院来源标签时紧跟标题展示。
- 发布班级:展示为
发布班级: {班级名称}。 - 规模信息:展示为
共X页,共Y题。 - 发布时间:展示完整时间。
- 当前原型中
待提交、待批改、已完成三类作业卡片均保留选择按钮,研发落地时应正式按此规则实现:作业状态在现版仅承担展示与筛选作用,不直接控制选择按钮禁用,其中已完成状态仍允许继续创建新的教师代提交记录。 - 后端校验仅用于拦截已删除、已撤回、已停用或超出当前教师代提交权限的无效作业,不得仅因作业处于
已完成状态而阻断教师继续代提交。
连续拍照浮层
- 首次提交拍照采用连续拍照模式,不逐张进入确认页:
- 顶部提示文案固定为
连续拍照。 - 右上角主操作为
完成,用于结束当前连续拍照并返回照片网格。 - 右下角计数器实时显示当前页签下已采集图片数,教师可据此判断本次拍摄进度。
- 教师每按一次快门,系统立即将该照片加入当前个性化作业的图片数组,并在取景框内播放缩略图飞入动画;首次提交模式不要求逐张
重拍/确认。
- 顶部提示文案固定为
- 补拍模式与首次提交模式不同:
- 从上传结果页进入补拍时,顶部提示文案改为
异常图片补拍。 - 右上角主操作改为
取消,隐藏完成按钮和照片计数器。 - 补拍照片拍摄后必须进入
照片确认页,教师可执行重拍或确认;仅点击确认后才回写异常图片并激活补拍提交按钮。
- 从上传结果页进入补拍时,顶部提示文案改为
上传中态
| 区域/控件 | 展示规则 | 交互与系统行为 |
|---|---|---|
| 上传标题 | 提交后展示 | 默认文案为正在上传中...;若全部成功则改为全部上传成功;若存在异常图则改为上传完成,有异常待处理。 |
| 上传副文案 | 提交后展示 | 上传中展示已完成X/Y张,上传完成前将停留在当前页面;全部成功后改为共完成Y张,即将返回作业列表;存在异常后改为成功X张,异常Y张,即将跳转查看。 |
| 进度条 | 提交后展示 | 按已完成数量实时推进;全部成功使用绿色完成色,存在异常时使用橙色完成色。 |
| 统计卡 | 提交后展示 | 固定显示成功、异常、等待三组统计;等待数 = 总数 - 成功数 - 异常数。 |
| 上传缩略图网格 | 上传中展示 | 每张缩略图展示当前图片的上传状态标记;上传完成后缩略图网格收起,仅保留汇总结果。 |
- 提交动作与锁页规则:
- 点击
提交后,以当前个性化作业页签下全部照片生成上传队列;队列中每张图片都是独立上传项,初始状态为pending。 - 上传开始后,页面进入锁定态:不允许切页签、不允许继续拍照、不允许删除图片、不允许退出页面。
- 若教师在锁定态期间切到后台、杀掉小程序或重新打开小程序,系统必须基于
pendingUploadTask恢复同一上传队列,并直接回到当前上传任务页,不允许先进入其他页面再手动恢复。 - 在恢复拦截态下,视为仍处于“上传中页面”,直到当前任务队列全部转为
success或failed后,才允许结束拦截。 - 锁页期间所有前置操作按钮仍可见,但点击后必须给出明确反馈:
- 点击拍照 Toast:
提交后不可继续拍照 - 点击删除 Toast:
提交后图片不可删除 - 点击返回 Toast:
正在上传中,请等待完成 - 点击其他全局入口或重新进入作业中心时:统一重定向回当前上传任务页,并提示
检测到未完成上传,正在继续提交
- 点击拍照 Toast:
- 点击
- 上传完成后的自动跳转:
- 当本次队列全部上传成功时,系统 Toast
上传完成,即将返回作业列表,并在约 1.5 秒后自动返回tm_list.html。 - 当本次队列中存在任一异常图片时,系统 Toast
上传完成,{异常数}张图片标记为异常,并在约 1.5 秒后自动切换到本页的上传结果模式。
- 当本次队列全部上传成功时,系统 Toast
上传结果与补拍
| 区域/控件 | 展示规则 | 交互与系统行为 |
|---|---|---|
| 结果摘要卡 | 上传结果模式展示 | 展示作业名称、提交时间、记录 ID、总图片数、正常图片数、异常图片数;异常数 > 0 时顶部状态文案为{N}张异常待处理,否则为全部上传正常。 |
| 图片明细网格 | 上传结果模式展示 | 所有上传图片均可点击预览;异常图右上角显示!标识;已完成补拍但尚未提交补拍记录的图片额外显示已补拍标记。 |
返回提交记录 | 上传结果模式展示 | 点击后跳转tm_history.html,用于查看本次原始提交记录。 |
补拍提交 | 上传结果模式展示 | 默认置灰;仅当当前结果页至少有 1 张异常图完成补拍确认后激活。点击后将本次结果页内所有已补拍图片打包为新的补拍提交记录,并重新进入本页继续自动上传。 |
- 图片预览与补拍规则:
- 点击任一结果图片,拉起
图片预览浮层。 - 正常图仅展示
关闭按钮,不展示补拍该图片按钮。 - 异常图展示状态文案
状态:异常图(可补拍)和异常原因;点击补拍该图片后进入单张补拍流程。 - 异常图完成补拍确认后:
- 预览状态文案更新为
状态:异常图已补拍 - 原异常原因文案更新为
已补拍,等待补拍提交 - 结果网格中的该图片增加
已补拍标记 - 底部
补拍提交按钮激活
- 预览状态文案更新为
- 点击任一结果图片,拉起
- 补拍记录生成规则:
补拍提交的批量作用范围为“当前上传结果页内,所有已完成补拍确认的异常图片”,不是仅当前正在预览的单张图片。- 补拍提交必须生成新的补拍记录与新的上传任务,不覆盖原始提交记录;原始记录仍保留在
tm_history.html中,便于追溯。 - 新补拍任务默认回到
个性化作业页签继续上传,关联作业名按原作业名称(补拍)写入恢复任务上下文。
页面跳转与返回逻辑
tm_list.html -> tm_submit.html:- 教师通过作业列表底部
提交作业进入统一提交页。
- 教师通过作业列表底部
tm_submit.html -> tm_select_personal.html -> tm_submit.html:- 点击
关联作业进入选择页。 - 选择成功后返回本页,保留
个性化作业页签,并回填所选作业。
- 点击
tm_submit.html -> tm_list.html:- 本次上传全部成功后自动返回作业列表。
- 未选择任何作业、未拍任何照片时,教师点击顶部关闭按钮也直接返回作业列表。
tm_submit.html -> tm_history.html:- 上传结果模式下点击顶部关闭按钮或底部
返回提交记录,都进入提交记录页。
- 上传结果模式下点击顶部关闭按钮或底部
- 其他页面 ->
tm_submit.html:- 当系统检测到存在未完成上传任务时,教师原计划进入
tm_list.html、tm_history.html、tm_report.html、tm_grading_list.html等页面,均应先强制跳转到本页上传任务拦截态。
- 当系统检测到存在未完成上传任务时,教师原计划进入
- 数据保留与回退策略:
- 教师在提交模式下切换页签时,
纸质教辅作业与个性化作业各自的已选对象和已拍照片分别保存在独立上下文中,互不覆盖。 - 教师从选择页返回、从相机浮层返回、从结果预览浮层关闭返回时,均留在当前提交页面,不丢失已拍照片和已选作业。
- 退出确认仅清理“尚未正式提交的照片与已选对象”;已经进入上传队列的任务不允许通过返回直接中断。
- 教师在提交模式下切换页签时,
批量操作范围
- 本页
提交按钮的批量作用范围为“当前页签 + 当前已选个性化作业 + 当前页签下全部已拍照片”,单次最多 99 张。 - 本页不提供批量删除照片能力,删除仅支持提交前逐张删除。
- 上传结果页
补拍提交的批量作用范围为“当前结果记录页内全部已完成补拍确认的异常图片”,一次提交生成 1 条新的补拍记录。 tm_select_personal.html的筛选能力支持组内多选,作用范围仅限当前教师可见的个性化作业列表,不跨账号、不跨权限空间。
弹窗/浮层规格
弹窗 1:退出当前页面确认弹窗
| 要素 | 内容 |
|---|---|
| 触发条件 | 提交模式下点击顶部关闭按钮,且当前已选择作业或已拍照片数量 > 0 |
| 标题 | 无独立标题,按原型展示正文型确认框 |
| 正文 | 退出当前页面将不保留本次已拍的作业照片,确认退出吗? |
| 主按钮 | 确认退出 → 关闭当前提交上下文并返回tm_list.html |
| 次按钮 | 取消 → 关闭弹窗,停留当前页 |
| [x] 关闭 | 原型无独立×,点击遮罩不关闭,必须显式选择按钮 |
弹窗 2:上传结果图片预览浮层
| 要素 | 内容 |
|---|---|
| 触发条件 | 在上传结果模式点击任一图片 |
| 标题 | 图片预览 |
| 正文 | 展示当前图片大图、状态文案和异常原因/正常说明 |
| 主按钮 | 异常图展示补拍该图片 → 进入单张补拍流程;正常图不展示主按钮 |
| 次按钮 | 关闭 → 收起预览浮层,回到上传结果列表 |
| [x] 关闭 | 点击右上角×或遮罩均关闭浮层 |
异常描述
| 异常场景 | 处理方式 |
|---|---|
未选择个性化作业即点击拍照卡片 | 不拉起相机,保留当前页面,Toast 提示请先选择作业;拍照卡片继续保持禁用态。 |
| 未选择个性化作业或未拍照片 | 提交按钮保持置灰,不允许触发上传;若通过异常链路强制触发提交,返回错误文案请先选择作业并拍照后再提交。 |
| 选择页筛选后无匹配作业 | 展示空状态没有匹配的作业,保留当前筛选条件,并允许教师重置或重新筛选。 |
| 选择的个性化作业后端校验为已删除、已撤回、已停用或超出当前教师代提交权限 | 阻断正式提交并提示当前作业已不可关联,请重新选择;已拍照片保留,方便教师更换关联作业。 |
| 连续拍照达到 99 张上限 | 隐藏拍照卡片并提示已达到 99 张上限,不允许继续添加。 |
| 单张图片超过 20 MB | 拦截该图片进入队列,提示单张图片不能超过 20 MB,请重新拍摄或压缩后上传。 |
| 相机权限被拒绝 | 不拉起取景框,提示请开启相机权限后再拍照,并提供重试入口。 |
| 上传过程中网络中断或小程序被动挂起 | 将未完成任务写入本地恢复上下文;下次进入本页时自动恢复并继续上传。 |
| 教师重新进入小程序时仍存在未完成上传任务 | 不展示其他业务页面,直接拦截到本页上传任务页;当前任务完成前不允许继续访问其他页面。 |
| 本地恢复任务数据损坏或缺少必要字段 | 放弃自动恢复,清除损坏缓存,并提示未完成上传恢复失败,请重新提交。 |
| 上传全部成功 | 展示成功态文案并自动返回tm_list.html,不进入上传结果页。 |
| 上传部分成功、部分异常 | 自动进入上传结果页;正常图不可补拍,异常图保留补拍入口。 |
| 上传中点击切页签、拍照、删除、返回 | 统一阻断操作并分别反馈明确 Toast,避免教师误以为操作已生效。 |
补拍后未点击补拍提交即离开结果页 | 已补拍图片仅停留在当前结果会话内,不生成正式补拍记录;再次进入原记录时需重新补拍。 |
补拍提交时补拍图片为空 | 按钮保持置灰,不允许点击。 |
| 结果预览中的异常图片补拍失败 | 保持原异常图状态不变,提示补拍失败,请重新拍摄。 |
数据需求
- 接口:
GET /teacher/mp/homework/personal/list:获取教师可见的个性化作业列表,返回作业 ID、标题、学科、发布班级、页数、题数、发布时间、提交状态。GET /teacher/mp/homework/personal/filter-options:获取个性化作业筛选字典,至少包含学科、班级、作业状态。GET /teacher/mp/homework/personal/{homework_id}:获取已选个性化作业摘要,用于提交页回填关联作业卡片。POST /teacher/mp/submission/upload-task:创建教师代提交上传任务,返回task_id、关联作业信息和图片上传凭证。POST /teacher/mp/submission/upload-image:上传单张图片,返回单图上传结果和质量状态。GET /teacher/mp/submission/upload-task/{task_id}:查询或恢复上传任务状态,返回队列中各图片的pending/success/failed结果。GET /teacher/mp/submission/record/{record_id}:获取上传结果详情,用于渲染上传结果页。POST /teacher/mp/submission/record/{record_id}/retake:基于原记录提交补拍图片,生成新的补拍记录。
- 本地缓存与状态:
- 需缓存
submit_context,至少包含active_tab、paper.selected_id、paper.photos、personal.selected_id、personal.photos。 - 需缓存
pending_upload_task,至少包含task_id、tab、selected_name、photos、queue、created_at、updated_at;queue内每条图片需记录image_id、local_url、upload_state。 - 页面模式至少区分
submit、upload_result;上传队列状态至少区分pending、success、failed;结果图片状态至少区分success、abnormal,并额外记录retaken布尔标记。 - 补拍任务需与原提交记录建立关联字段,如
source_record_id、source_image_id,用于提交记录页追溯原异常图与补拍图关系。
- 需缓存
- 权限与校验:
- 教师仅可查看自己有权限的班级与个性化作业,不允许通过 URL 参数直接带出无权限作业。
- 最终提交前必须基于
作业 ID + 班级权限 + 作业有效性/教师代提交资格再次校验可提交性,不能仅依赖前端筛选结果;已完成状态不作为阻断教师继续代提交的默认条件。 - 埋点:
| 埋点事件 | 触发时机 | 关键参数 |
|---|---|---|
teacher_mp_submit_view | 页面首屏渲染完成 | source_page、default_tab、resume_task |
teacher_mp_submit_tab_switch | 点击页签切换时 | from_tab、to_tab、has_selected_homework、photo_count |
teacher_mp_personal_select_entry_click | 点击关联作业卡片时 | source_page、current_tab |
teacher_mp_personal_filter_confirm | 在选择页点击确认筛选时 | subject_filters、class_filters、status_filters、result_count |
teacher_mp_personal_select_confirm | 在选择页点击选择时 | homework_id、homework_title、homework_status、class_id |
teacher_mp_camera_blocked_no_homework | 未选择作业时点击拍照卡片被拦截 | tab、photo_count_before |
teacher_mp_camera_open | 点击拍照卡片拉起连续拍照浮层时 | homework_id、tab、photo_count_before |
teacher_mp_photo_capture | 每次按下快门成功入列时 | homework_id、tab、photo_count_after、capture_mode |
teacher_mp_submit_click | 点击底部提交按钮时 | homework_id、tab、photo_count |
teacher_mp_upload_resume | 检测到未完成上传并自动恢复时 | task_id、tab、pending_count |
teacher_mp_upload_finish | 本次上传任务结束时 | task_id、success_count、failed_count、next_page |
teacher_mp_result_retake_start | 在结果预览点击补拍该图片时 | record_id、source_image_id、abnormal_reason |
teacher_mp_result_retake_submit | 点击补拍提交时 | record_id、retake_count、source_page |
teacher_mp_submit_exit_confirm | 在退出确认弹窗点击确认退出时 | current_tab、selected_homework、photo_count |