Astro-only / 学生待提交
周策 老师
Prototype

Astro-only · 学生待提交

历史单页,当前链路已被 /student/submit 聚合。

设计视口: 375 x 812 · 当前缩放: 100% · 左右分栏: 拖动中线调整
Page PRD

提交作业

当前文档: prds/作业管理模块/student/s_submit.md

当前对照重点: 提交作业
Review Hint

左侧现在支持三种演示模式: 默认按设计稿完整缩放、按宽度铺满、以及 100% 原始尺寸滚动查看。 右侧默认读取当前页面对应的页面级 PRD,而不是整本总 PRD;改页面时,直接同步维护这个页面文档即可。

提交作业

页面元信息

  • 终端:学生端
  • Astro 路由:/student/submit
  • 原始 HTML:s_submit.html
  • 来源章节:4.4.4
  • 维护规则:后续以本页面 PRD 为准;若改动影响通用规则,再同步总览 / 全局规则文档。

视觉描述

  • 原型引用:产出文档/作业管理模块/原型图/s_submit.html
  • 页面为学生端统一提交页,默认标题为提交作业。顶部固定展示关闭返回按钮、页面标题、小程序胶囊,以及纸质教辅作业个性化作业分段页签;提交模式下默认高亮纸质教辅作业,当学生从s_select_personal.html返回、从补拍续传链路回流或命中上传恢复任务时,页签自动切换到个性化作业
  • 本次详细展开范围聚焦个性化作业页签。页签内容自上而下分为关联作业卡片、作业内容照片网格、底部主按钮。未选择时卡片展示占位文案点击选择个性化作业记录;已选择后卡片替换为学科色块、作业标题、发布班级和共X页,共Y题标签,可选展示来源标签教研院
  • 照片区采用3列网格,标题右侧实时展示当前已拍张数/6。提交前每张图片右上角展示删除按钮,网格尾部固定展示拍照卡片;提交后照片网格切换为上传状态徽标,不再显示删除按钮和新增入口。
  • 上传过程中,页面不整页跳转,而是在正文顶部展开正在上传中...面板,展示完成进度、进度条、成功/异常/等待统计和缩略图网格;底部提交按钮同步进入锁定态。
  • 当本次上传存在异常图片时,页面进入同文件内的上传结果模式:顶部标题切换为上传结果,隐藏页签与原提交表单,主体展示结果摘要卡、图片明细网格和异常标记,底部操作切换为返回提交记录补拍提交
  • 页面包含3类浮层/弹窗:拍照取景+照片确认全屏浮层、退出当前页面确认弹窗、上传结果图片预览浮层。学生端首次提交与异常图补拍均采用“单张拍照 -> 单张确认”的模式,不采用连续拍照。

功能描述

  • 业务规则:R01、R03、R04、R05、R06、R07、R50、R53、R70、R71。
  • 本版范围说明:
    • 本节仅对个性化作业页签及其上传结果链路做详细展开。
    • 纸质教辅作业继续沿用既有教辅提交流程:点击对应的作业本进入s_select_book.html,返回后继续使用相同的拍照确认、上传锁页、未完成上传恢复、退出确认与异常补拍机制;本节不再重复拆写纸质教辅差异。
  • 页面入口:
    • 学生在s_homework_list.html点击底部主按钮提交作业进入本页,进入时默认停留在统一提交框架。
    • 学生在本页点击关联作业后跳转s_select_personal.html;选择完成后返回本页,并透传tab=personal&selected={作业名称}
    • 学生在s_history.html点击查看上传结果时,进入s_submit.html?mode=upload_result&recordId={record_id}查看该次提交批次的上传结果。
    • 学生在上传结果模式中完成异常图补拍后,点击补拍提交,系统生成新的补拍上传任务,再回到本页继续上传。
    • 学生在上传过程中弱网中断、切到后台、重开小程序时,只要检测到当前账号仍有未完成上传任务,都必须优先恢复到本页上传任务态。
  • 页面初始化与上下文恢复:
    • 首次从作业列表进入时,页面默认停留在纸质教辅作业页签,但若命中tab=personal参数,则自动切换到个性化作业页签。
    • 当 URL 中存在tab=personal&selected={作业名}时,页面必须自动切换至个性化作业页签,并回填该作业的学科、作业标题、发布班级、页数和题数。
    • 当本地检测到未完成上传任务,且队列内仍存在pending图片时,页面必须优先恢复上传任务,而不是展示默认页签或重新解析 URL 透传作业参数。参见 R70。
    • 恢复场景下页面直接进入上传任务拦截态:默认展开上传进度卡,锁定页签、拍照、删除和返回动作;学生不能先去作业列表或提交记录页。
    • 恢复成功后页面 Toast 文案固定为检测到未完成上传,正在自动继续提交

页面分区与控件交互

区域/控件展示规则交互与系统行为
顶部关闭返回按钮始终展示提交模式下点击时,若当前没有任何已选作业且未拍照片,直接返回s_homework_list.html;若已选作业或已拍照片不为空,弹出退出确认弹窗;上传中或恢复拦截态点击仅 Toast 正在上传中,请等待完成,不允许离开;上传结果模式点击直接返回s_history.html
页签纸质教辅作业/个性化作业仅在提交模式展示点击个性化作业后切换到个性化提交表单;两个页签各自维护独立的临时已选对象与照片数组,互不覆盖;若页面已进入上传锁定态,则不允许切页,并 Toast 提交后正在处理,请等待上传完成
关联作业卡片个性化页签默认展示未选择前展示占位文案点击选择个性化作业记录;点击后跳转s_select_personal.html。已选择后卡片替换为作业摘要,但仍保持可点击,可再次进入选择页更换关联作业。若当前处于上传锁定态,不允许重新选择。
作业内容标题及计数个性化页签展示标题固定为作业内容;右侧实时显示已拍张数/6;该计数仅统计当前个性化作业页签下的照片,不与纸质教辅页签混算。
已拍图片项有照片时展示提交前每张图片右上角展示删除按钮,仅支持逐张删除;提交后删除按钮隐藏,右上角改为上传状态标记:等待!
拍照卡片未锁页且当前张数 < 6 时展示未选择关联作业时卡片保持可见但为禁用态,点击后仅 Toast 请先选择作业,不拉起相机;已选择作业后点击进入拍照取景浮层;达到 6 张上限后该卡片隐藏。
底部主按钮提交默认置灰仅当“已选择个性化作业”且“至少存在1张照片”时激活;上传中按钮文案切换为正在提交...并展示加载动画;锁页但非动画态时文案切换为提交处理中

关联作业选择链路(s_select_personal.html

区域/控件展示规则交互与系统行为
返回按钮始终展示点击返回s_submit.html?tab=personal,不带作业参数,不自动覆盖提交页中已存在的当前已选作业。
搜索框始终展示支持按作业标题关键字检索学生当前可提交的个性化作业;搜索结果与当前筛选条件按交集生效。
筛选按钮始终展示点击后拉起筛选 Bottom Sheet;当任一筛选维度已生效时,按钮进入蓝色高亮态。
筛选面板学科/作业状态通过 Bottom Sheet 展示学科作业状态2个分组均支持组内多选;全部与其他标签互斥;若取消了同组全部具体项,系统自动回退到全部
重置面板头部展示点击后仅将学科作业状态两组恢复到全部选中,不立即刷新列表。
取消面板底部展示关闭筛选面板,不应用本次临时勾选。
确认筛选面板底部展示按当前勾选条件过滤列表;若过滤后无结果,展示空状态没有匹配的作业
作业卡片选择每张卡片展示点击后按钮文案从选择切换为已选并置灰,约400ms后返回s_submit.html?tab=personal&selected={作业名称}
  • 个性化作业卡片字段要求:
    • 学科标识:使用学科色块展示语文/数学/英语等学科,不展示教材封面。
    • 作业标题:展示完整作业标题;若作业来源为教研院,标题后紧跟展示教研院标签。
    • 规模信息:展示为共X页,共Y题
    • 发布时间:展示完整时间YYYY-MM-DD HH:mm:ss
  • 当前原型中的待提交待批改已完成3类作业卡片均保留选择按钮,学生端本版正式按此规则落地:作业状态当前仅承担展示与筛选作用,不直接禁用选择按钮,其中已完成状态仍允许学生再次提交并创建新的提交记录。参见 R88。
  • 后端校验用于拦截已删除、已撤回、已停用、已超出学生本人权限范围的无效作业;家长/监护人协助操作时,仍必须以当前绑定学生身份校验,不能形成独立权限主体。校验不得仅因作业当前状态为已完成而阻断学生再次提交。参见 R53、R88。

拍照取景与照片确认浮层

  • 学生端首次提交采用单张确认模式,不采用连续拍照:
    • 点击拍照卡片后,打开全屏取景浮层。
    • 浮层顶部左侧展示提示文案拍照,右侧展示取消
    • 中部展示虚线取景框和引导文案将作业放在取景框内
    • 底部中间展示圆形快门按钮,学生每点击一次快门仅生成1张待确认照片。
  • 快门触发后必须进入照片确认页:
    • 顶部标题固定为照片确认
    • 中间展示当前照片预览大图。
    • 底部固定展示重拍确认两个按钮。
    • 点击重拍返回取景态,不向照片网格写入本张图片。
    • 点击确认后,本张图片写入当前页签照片数组,并返回提交页照片网格。
  • 上传结果模式下的异常图补拍沿用同一套“单张拍照 -> 单张确认”机制,但补拍对象固定为当前异常图片;确认后仅回写该异常图,不直接发起补拍上传。

上传中态

区域/控件展示规则交互与系统行为
上传标题提交后展示默认文案为正在上传中...;当全部成功时切换为全部上传成功;当存在异常图时切换为上传完成,有异常待处理
上传副文案提交后展示上传中展示已完成X/Y张,上传完成前将停留在当前页面;全部成功后改为共完成Y张,即将返回作业列表;存在异常时改为成功X张,异常Y张,即将跳转查看
进度条提交后展示按已完成数量实时推进;全部成功使用绿色完成色,存在异常时使用橙色完成色。
统计卡提交后展示固定显示成功异常等待3组统计;等待数 = 总数 - 成功数 - 异常数。
上传缩略图网格上传中展示按当前任务内全部图片渲染缩略图;每张缩略图展示当前图片的上传状态标记;上传完成后缩略图网格收起,仅保留汇总结果。
  • 提交动作与锁页规则:
    • 点击提交后,以当前个性化作业页签下全部照片生成上传队列;队列中每张图片都是独立上传项,初始状态均为pending
    • 上传开始后,页面进入锁定态:不允许切页签、不允许继续拍照、不允许删除图片、不允许退出页面。参见 R05。
    • 锁页期间若学生切到后台、重开小程序或再次进入本页,系统必须基于本地pendingUploadTask恢复同一上传队列,并直接回到当前上传任务页。参见 R07、R70。
    • 锁页期间所有相关操作按钮仍可见,但点击后必须给出明确反馈:
      • 点击拍照 Toast:提交后不可继续拍照
      • 点击删除 Toast:提交后图片不可删除
      • 点击返回 Toast:正在上传中,请等待完成
      • 点击切页签 Toast:提交后正在处理,请等待上传完成
  • 上传完成后的自动跳转:
    • 当本次队列全部上传成功时,系统 Toast 上传完成,即将返回作业列表,并在约1.5秒后自动返回s_homework_list.html
    • 当本次队列中存在任一异常图片时,系统 Toast 上传完成,{异常数}张图片标记为异常,并在约1.5秒后自动切换到s_submit.html?mode=upload_result&recordId={record_id}的上传结果模式。

上传结果与补拍

区域/控件展示规则交互与系统行为
结果摘要卡上传结果模式展示展示作业名称、提交时间、记录 ID、总图片数、正常图片数、异常图片数;异常数 > 0 时顶部状态文案为{N}张异常待处理,否则为全部上传正常
图片明细网格上传结果模式展示所有上传图片均可点击预览;异常图右上角显示!标记;已完成补拍但尚未提交补拍记录的图片额外显示已补拍标记。
返回提交记录上传结果模式展示点击后跳转s_history.html,用于查看本次原始提交记录。
补拍提交上传结果模式展示默认置灰;仅当当前结果页至少有1张异常图完成补拍确认后激活。点击后将本次结果页内所有已补拍图片打包为新的补拍上传任务,再回到本页继续上传。
  • 图片预览与补拍规则:
    • 点击任一结果图片,拉起图片预览浮层。
    • 正常图仅展示状态文案状态:上传正常关闭按钮,不展示补拍该图片按钮。
    • 异常图展示状态文案状态:异常图(可补拍)和异常原因;点击补拍该图片后进入该异常图的单张补拍流程。
    • 异常图完成补拍确认后:
      • 预览状态文案更新为状态:异常图已补拍
      • 异常原因文案更新为已补拍,等待补拍提交
      • 结果网格中的该图片增加已补拍标记
      • 底部补拍提交按钮激活
  • 补拍记录生成规则:
    • 补拍提交的批量作用范围是“当前上传结果页内,所有已完成补拍确认的异常图片”,不是仅当前预览中的单张图片。
    • 补拍提交必须生成新的补拍记录与新的上传任务,不覆盖原始提交记录;原始记录仍保留在s_history.html中。参见 R71。
    • 新补拍任务默认回到个性化作业页签继续上传,恢复任务上下文中的关联作业名按原作业名称(补拍)写入,但在提交记录页中仍应保持作业主体为原作业,不应让学生误解为新建了另一份作业。

文案和按钮状态变化

  • 底部提交按钮状态按以下顺序切换:
    • 默认态:置灰,文案固定为提交
    • 可提交态:当且仅当“已选个性化作业 + 至少1张照片”同时满足时激活,文案仍为提交
    • 上传中态:按钮展示加载动画,文案切换为正在提交...
    • 锁定完成态:上传请求已发出但页面仍处于锁定期时,按钮文案切换为提交处理中,按钮保持不可点击。
  • 拍照卡片状态按业务上下文切换:
    • 未选择作业:保持可见但为禁用态,点击仅提示请先选择作业
    • 已选择作业且未达上限:正常可点击,文案固定为拍照
    • 达到6张上限:卡片隐藏,不再展示新增入口。
  • 上传结果页顶部状态文案按异常数切换:
    • abnormal_count > 0:展示{N}张异常待处理,状态标签为警示态。
    • abnormal_count = 0:展示全部上传正常,状态标签为成功态。
  • 上传结果页底部补拍提交按钮状态按补拍完成度切换:
    • 默认态:置灰,不可点击,文案固定为补拍提交
    • 激活态:当至少1张异常图完成补拍确认后激活,文案仍为补拍提交
  • 图片预览浮层按钮按图片状态切换:
    • 正常图:仅展示关闭按钮。
    • 异常图未补拍:展示关闭补拍该图片
    • 异常图已补拍未提交:继续展示关闭补拍该图片,并将状态文案切换为状态:异常图已补拍

页面跳转和返回逻辑

  • s_homework_list.html -> s_submit.html
    • 学生通过作业列表底部提交作业进入统一提交页。
  • s_submit.html -> s_select_personal.html -> s_submit.html
    • 点击关联作业进入选择页。
    • 选择成功后返回本页,保留个性化作业页签,并回填所选作业。
    • 若只是进入选择页浏览、搜索或筛选但未重新点击选择,返回提交页后不得清空已选作业和已拍照片。
  • s_submit.html -> s_homework_list.html
    • 本次上传全部成功后自动返回作业列表。
    • 未选择任何作业且未拍任何照片时,点击顶部关闭按钮也直接返回作业列表。
  • s_history.html -> s_submit.html?mode=upload_result
    • 学生在提交记录页点击查看上传结果后进入本页上传结果模式。
    • 上传结果模式点击顶部关闭按钮或底部返回提交记录,都回到s_history.html,不回到作业列表。
  • 其他页面 -> s_submit.html
    • 当系统检测到存在未完成上传任务时,学生原计划进入作业列表、提交记录或其他学生端页面,均应先强制跳转到本页上传任务态。参见 R70。
  • 数据保留与回退策略:
    • 纸质教辅作业个性化作业两套临时数据上下文独立保存,切页签不互相覆盖。
    • 从选择页返回、从拍照浮层取消返回、从图片预览浮层关闭返回时,均留在当前提交页面,不丢失已拍照片和已选作业。
    • 退出确认仅清理“尚未正式提交的照片与已选对象”;已经进入上传队列的任务不允许通过返回直接中断。参见 R06、R07。

批量操作范围

  • 本页提交按钮的批量作用范围为“当前页签 + 当前已选个性化作业 + 当前页签下全部已拍照片”,单次最多6张。参见 R01。
  • 本页不提供批量删除照片能力,删除仅支持提交前逐张删除。
  • 上传结果页补拍提交的批量作用范围为“当前结果记录页内全部已完成补拍确认的异常图片”,一次提交生成1条新的补拍记录。参见 R71。
  • s_select_personal.html中的筛选能力仅作用于当前学生本人可见的个性化作业结果集,不跨账号、不跨角色、不跨权限空间。参见 R53。

弹窗/浮层规格

浮层 1:拍照取景与照片确认全屏浮层

要素内容
触发条件在个性化作业页签点击拍照卡片,且已选择关联作业
标题取景态顶部提示为拍照;确认态标题为照片确认
正文取景态展示取景框和引导文案将作业放在取景框内;确认态展示单张照片大图预览
主按钮取景态点击快门生成1张待确认照片;确认态点击确认后将照片写入当前页签照片数组
次按钮取景态点击取消关闭浮层;确认态点击重拍返回取景态
[x] 关闭原型无独立×,取景态由取消承担关闭动作;确认态不支持点遮罩关闭

弹窗 2:退出当前页面确认弹窗

要素内容
触发条件提交模式下点击顶部关闭按钮,且当前已选择作业或已拍照片数量 > 0
标题无独立标题,按原型展示正文型确认框
正文退出当前页面将不保留本次已拍的作业照片,确认退出吗?
主按钮确认退出 -> 关闭当前提交上下文并返回s_homework_list.html
次按钮取消 -> 关闭弹窗,停留当前页
[x] 关闭原型无独立×,点击遮罩不关闭,必须显式选择按钮

浮层 3:上传结果图片预览浮层

要素内容
触发条件在上传结果模式点击任一图片
标题图片预览
正文展示当前图片大图、状态文案和异常原因/正常说明
主按钮异常图展示补拍该图片 -> 进入单张补拍流程;正常图不展示主按钮
次按钮关闭 -> 收起预览浮层,回到上传结果列表
[x] 关闭点击右上角×或遮罩均关闭浮层

异常描述

异常场景处理方式
未选择个性化作业即点击拍照卡片不拉起相机,停留当前页,Toast 提示请先选择作业拍照卡片保持禁用态。
未选择个性化作业或未拍照片提交按钮保持置灰;若通过异常链路强制触发提交,返回错误文案请先选择作业并拍照后再提交
提交前校验发现关联作业已删除、已撤回、已停用、越权或不属于当前学生阻断正式提交并提示当前作业已不可关联,请重新选择;已拍照片保留,便于学生更换关联作业。
已达到6张上限仍继续拍照隐藏拍照卡片并提示已达到6张上限;不允许继续追加。
单张图片超过20MB拦截该图片入列,提示单张图片不能超过20MB,请重新拍摄或压缩后上传
相机权限被拒绝不拉起取景框,提示请开启相机权限后再拍照,并保留重试入口。
上传过程中网络中断、系统挂起或小程序被杀后台将未完成任务写入本地恢复上下文;下次进入本页时自动恢复并继续上传。参见 R07、R70。
本地恢复任务数据损坏、缺少必要字段或队列为空放弃自动恢复,清除损坏缓存,并提示未完成上传恢复失败,请重新提交
上传结果记录不存在、已删除或学生无权限查看上传结果模式不展示空白页,提示当前上传结果不可查看并返回s_history.html
上传全部成功展示成功态文案并自动返回s_homework_list.html,不进入上传结果页。
上传部分成功、部分异常自动进入上传结果页;正常图不可补拍,异常图保留补拍入口。
上传中点击切页签、拍照、删除、返回统一阻断操作并反馈明确 Toast,避免学生误以为操作已生效。
补拍后未点击补拍提交即离开结果页已补拍图片仅停留在当前结果会话内,不生成正式补拍记录;再次进入原记录时需重新补拍。
补拍提交时补拍图片为空按钮保持置灰,不允许点击。
结果预览中的异常图片补拍失败保持原异常图状态不变,提示补拍失败,请重新拍摄

数据需求

  • 接口:
    • GET /student/mp/homework/personal/list:获取学生本人可见的个性化作业列表,返回作业ID、标题、学科、页数、题数、发布时间、作业状态、来源标签。
    • GET /student/mp/homework/personal/filter-options:获取个性化作业筛选字典,至少包含学科、作业状态。
    • GET /student/mp/homework/personal/{homework_id}:获取已选个性化作业摘要,用于提交页回填关联作业卡片。
    • POST /student/mp/submission/upload-task:创建学生提交上传任务,返回task_id、关联作业信息和图片上传凭证。
    • POST /student/mp/submission/upload-image:上传单张图片,返回单图上传结果和质量状态。
    • GET /student/mp/submission/upload-task/{task_id}:查询或恢复上传任务状态,返回队列中各图片的pending/success/failed结果。
    • GET /student/mp/submission/record/{record_id}:获取上传结果详情,用于渲染上传结果页。
    • POST /student/mp/submission/record/{record_id}/retake:基于原记录提交补拍图片,生成新的补拍记录。
  • 本地缓存与状态:
    • 需缓存submit_context,至少包含active_tabpaper.selected_idpaper.photospersonal.selected_idpersonal.photos
    • 需缓存pending_upload_task,至少包含task_idtabselected_namephotosqueuecreated_atupdated_atqueue内每张图片需记录image_idlocal_urlupload_state
    • 页面模式至少区分submitupload_result;上传队列状态至少区分pendingsuccessfailed;结果图片状态至少区分successabnormal,并额外记录retaken布尔标记。
    • 补拍任务需与原提交记录建立关联字段,如parent_record_idsource_record_idsource_image_id,用于追溯“原记录 -> 补拍记录 -> 异常图片”关系。参见 R71。
  • 权限与校验:
    • 仅允许当前学生身份访问本人作业、本人提交任务和本人上传结果;家长/监护人协助操作时,仍走学生本人数据权限。参见 R53。
    • 最终提交前必须基于homework_id + student_id + 作业有效性 + 提交资格再次校验可提交性,不能仅依赖前端筛选结果;已完成状态不作为阻断学生再次提交的默认条件。参见 R88。
  • 埋点:
埋点事件触发时机关键参数
student_submit_view页面首屏渲染完成时source_pagedefault_tabresume_task
student_submit_tab_switch点击页签切换时from_tabto_tabhas_selected_homeworkphoto_count
student_personal_select_entry_click点击关联作业卡片时source_pagecurrent_tab
student_personal_filter_confirm在选择页点击确认筛选subject_filtersstatus_filtersresult_count
student_personal_select_confirm在选择页点击选择homework_idhomework_titlehomework_statussource_type
student_camera_blocked_no_homework未选择作业时点击拍照卡片被拦截tabphoto_count_before
student_camera_open点击拍照卡片拉起取景浮层时homework_idtabphoto_count_before
student_photo_capture点击快门生成待确认照片时homework_idtabcapture_mode=single_confirm
student_photo_confirm在照片确认页点击确认homework_idphoto_count_after
student_photo_retake在照片确认页点击重拍homework_id、`retake_source=submit
student_photo_delete提交前点击删除单张照片时homework_idphoto_indexphoto_count_after
student_submit_click点击底部提交按钮时homework_idtabphoto_count
student_upload_resume检测到未完成上传并自动恢复时task_idtabpending_count
student_upload_finish本次上传任务结束时task_idsuccess_countfailed_countnext_page
student_result_preview_open在上传结果页点击图片预览时record_idsource_image_idimage_status
student_result_retake_start在结果预览点击补拍该图片record_idsource_image_idabnormal_reason
student_result_retake_submit点击补拍提交record_idretake_countsource_page
student_submit_exit_confirm在退出确认弹窗点击确认退出current_tabselected_homeworkphoto_count
当前这页已经是“原型 + 页面 PRD”评审工作台。跨页面规则请维护在总览 / 全局规则文档,页面细节请直接维护右侧页面 PRD。
Review Workspace - Prototype + Page PRD