非课程类资料报送实例用于承载上传型资料收集:每条记录代表一位负责人、一个专业、一个班级或一个单位,按「报送单位 — 记录名称 — 负责人 — 备注(及扩展字段)」录入并上传资料文件,经审批流程归档。它与「教学课件报送」共用同一套三层模板架构与同一套列表 / 导入 / 编辑 / 提交 / 审批代码,区别只在于它没有「授课教师 / 课程」语义,记录归属靠导入名单里的工号确定,而不是按本人授课课程自动匹配。
本页覆盖用四步向导(或专家模式)新建的各类非课程类上传型项目,例如「学生学业发展评价报告」「应届毕业要求达成评价报告」「专业持续改进报告」等。这些项目归属「教学资料报送」模块(teaching_material_submission),与教学课件报送出现在同一个下拉菜单里。
2026-09-25 起,原先代码内置、从未启用的「通用资料报送」实例(generic_document_submission)已删除,非课程类项目一律由母模板派生运行态实例承载。
凡是没有更具体帮助页的报送列表 / 导入 / 编辑页,都会落到本页。同一模块下可以有多个报送实例,每个实例用各自的 archive_type 区分数据、分别统计、分别发布,互不串台。
标记删除是报送记录的安全清理流程:先把记录标为“建议删除”并进入待删除清单复核,不是立即物理删除;确认删除时会先备份快照,再设置软删除字段,附件通常延迟到后台清理。
/submissions/<实例key>。下拉只列出本学院已开通、已发布给学院、本学院在该项目适用学院内、且当前账号有权限的项目,所以不同老师看到的菜单项可能不同;学生看不到本模块。/admin/submission_templates),仅超级管理员可见,用于新建(向导)/ 发布报送项目、调整列表展示、设置报送学期与截止日期。下拉中的「流程设计」只对超管、教务处级管理员和持「校级管理」动作的人显示,二级学院管理员看不到。
图中 ① 为顶部导航的「教学资料报送」,② 为下拉中的具体项目;下方几项(学生学业发展评价报告、应届毕业要求达成评价报告、专业持续改进报告)就是本页所说的非课程类上传型项目。
各角色在列表页能做的事(以当前代码的按钮显示条件为准):
| 角色 | 能做什么 | 做不了什么 |
|---|---|---|
| 负责人本人(授课教师 / 学业导师等) | 只看到记录工号与本人账号一致的记录(记录无工号时按姓名匹配);上传附件、填写扩展字段、提交;被退回后修改重交 | 截止日次日起转只读 |
| 审核人(课程(群)责任教授、专业负责人、系室主任、教学办主任、分管教学副院长) | 在本人节点「审核通过」或「退回」,列表页批量「审批」「退回」 | —— |
| 教学办主任 | 除审核外还可「新增」记录、「分学院导出」「统计表」「附件下载」,不受截止日期限制可代为补交 | 看不到「导入」「初始化」 |
| 学院系统管理员(admin) | 本院「导入」「新增」「分学院导出」「统计表」「附件下载」「审批」「退回」「初始化」「标记删除」与「标记删除清单」、催交/催办(学院开通时);不受截止日期限制;本院草稿记录「纠错」(不含报送单位/系部/课程编号) | 没有「删除」,也看不到「全校导出」「全校统计」「一键全校附件」「流程设计」「撤销本次导入」 |
| 教务处级管理员 / 持「校级管理」动作者 | 全校导出与统计、一键全校附件、「纠错」、批量「删除」、确认执行标记删除;教务处类可设置截止日期 | 结构类动作 |
| 超级管理员 | 以上全部 + 四步向导、模板结构类动作、报送学期、撤销本次导入 | —— |
school_department 类型 OrgUnit)管理员设置;但发布/撤回、草稿创建与发布、母模板编辑、实例差异、软停用、发布给学院、备份目录登记等结构类动作第一期仅超管——不要用「能进模板管理页」的宽权限去推断结构写入权。有两条路径。新建实例优先走四步向导,专家模式保留为逃生通道,两者产物同源。
入口:模板管理页 →「新建报送项目(向导)」(路由 /admin/submission_templates/wizard,仅超管;教务处类管理员能进模板管理页,但看不到也进不了向导)。全程中文填选,英文系统标识与全部结构化配置由系统生成,不需要手写 JSON。页面顶部四个步骤标签可点击跳转,但往后跳会先检查前面各步是否填全,没填全会停在出错的那一步。
module_key)。2025-2026-1 或英文短名 accreditation_2026)。2025-2026(学年)或 2025-2026-1(学期,小学期为 -3),手输变体会自动归一化。上传型留空=不限学期;在线填表留空=自动取当前学期。填了周期也不会让长期项目改名或另建实例。teacher_card_id,用于让负责人只看到自己那条。报送名单样表.xlsx(工作表「导入名单」,只有一行真实导入表头、不含示例数据)。课程类的导入表头固定是「开课学院 / 课程编号 / 课程名称 / 授课教师 / 教工号」,与第 2 步填的列名无关——以预览为准。预览校验不通过时会列出问题,并禁用两个创建按钮。系统标识怎么来(2026-09-21 起的新规则):
key,向导约定 archive_type、upload_subdir 与它同名,三者决定数据落哪、附件存哪。<记录对象>_<业务主题>[_<批次范围>],不再用标题全拼、长期复用项目默认不带年份。当前词库只登记 6 个主题:课程达成报告 attainment_report、学业发展评价报告 student_development_report、毕业要求达成报告 graduation_attainment_report、持续改进报告 continuous_improvement_report、整改汇总 rectification_summary、教学课件 teaching_material。例:专业的持续改进报告 → program_continuous_improvement_report;负责人/导师的学业发展评价 → advisor_student_development_report;按课程的达成报告 → course_attainment_report。2025-2026-1 → _2025_2026_s1,学年 2025-2026 → _2025_2026,英文短名原样拼上(如 _accreditation_2026)。key / archive_type / upload_subdir 或任何草稿占用的标识重名时,页面当场标红并提示「系统不会自动加序号」(若撞的是某个草稿,还会点名该草稿的项目名称,提示去继续那个草稿)。只能改名:换主题、补批次范围,或手动填一个有业务含义的新标识。创建时服务端会再查一次。unit_…_2026 全拼加年份)建的实例、目录和数据一律保持原样。草稿:保存、续编与刷新:
drafts.json(部署时为 runtime/submission_template_state/drafts.json),与专家模式的「编辑中实例」同一个文件,但向导草稿单独标记为第 2 版格式,保存的是你填的原始业务输入(含停在第几步、切换过的报送方式各自的字段),不是运行态配置。…/wizard?draft_id=…,在模板管理页「草稿(可继续配置)」区点铅笔图标也回到这里,内容与停留的步骤原样恢复。在步骤之间「上一步 / 下一步」来回切换不会丢已填内容;切换报送方式前会确认,原方式的字段会保留,切回去可继续编辑。正式创建时系统做了什么、失败怎么办:
publish_draft 写运行态配置 → 写报送周期 → 写截止日期 →(仅「创建并开放」)开放前检查 → publish_to_colleges。开放永远是最后一步。创建之后:
draft_id 打开会被引回项目列表并提示「该草稿已生成正式项目」)。原因是正式项目已占用归档类型与附件目录、可能已有数据,重开草稿再发布会把运行态整份覆盖。之后请在项目列表用「实例编辑」维护字段、材料、导入配置与适用学院,用「调整列表展示」维护列宽、筛选等展示项,用「设置截止日期」改截止(见下节「超管:维护已上线实例」)。向导是加壳层不是旁路:产物仍依次过 validate_template_data → 发布前不可变字段闸 → publish_draft → publish_to_colleges,与手工建的实例结构完全一致。
复制 → 草稿(或在母模板区选「非课程类」母模板「新建实例」),得到一个「编辑中实例」(草稿落在 runtime/submission_template_state/drafts.json)。key(唯一)、title、menu_label、archive_type(数据隔离键,务必唯一)、upload_subdir、materials(资料文件要求)、list_columns、import_columns 等;module_key 保持 teaching_material_submission(资料报送模块)。published 仍为 False,仅本机注册)。published=True)。资料报送模块全校默认开通,发布后有权限的账号即可在菜单看到该项目。母模板(master_templates.py+ runtime 状态)只管可继承的展示/导入/搜索字段;materials / archive_type / upload_subdir / module_key / published / deadline等是实例私有,禁止经母模板或实例差异覆盖。后台实例差异 sidecar 第一期只允许写list_columns_patch(label/width/filterable/filter_weight/order/hidden)。

图中 ② 为「报送资料信息」卡片(学院、学业导师为只读,班级、辅导员可直接改并点「保存」),③ 为材料项的回形针上传按钮;未上传的必传项显示「(必传缺失)」并以红色边框标出,「操作」卡片同时提示「资料未完整,无法提交:缺少……」。

图中 ② 为「审批意见」输入框,③ 为「提交」按钮。本学院未启用任何审核节点时,提交即完成报送;否则进入审核流程,被退回后按页面底部「审批记录」中的意见修改并重新提交。
记录在别的学院时:学业导师等负责人的记录若不在本人主学院,需先切换学院——在页面右上角「学院」下拉中选中记录所在学院,再点右侧的切换按钮(悬停提示「切换学院」),然后重新从「教学资料报送」菜单进入项目。停在主学院不会报错,只是看到的是主学院那份列表。

图中 ② 为「学院」下拉框,③ 为切换按钮。顶部没有「学院」下拉或下拉里没有目标学院,说明您在该学院还没有可用角色,需联系该学院管理员(或由导入时的「为负责人授予「学业导师」角色」自动补授)。
max_files 决定(超管在模板管理「实例编辑」→「材料项」页签里设):1 是覆盖式单文件,新传的文件替换旧文件;大于 1 是最多 N 个,编辑页显示「已传 / 上限」;0 表示不限数量(2026-09-21 起),编辑页只显示已传个数并提示「本材料不限文件数量,可按班级分别上传」,适合一条记录要按班级分写多份报告的场景。留空按 1 处理,负数不允许保存。「导入」按钮只对学院系统管理员、教务处级管理员、本单位 OrgUnit 管理员和超管显示(教学办主任看不到)。导入采用「有则更新、无则新增」:同一学期、同一学院、同一「报送单位 + 记录名称」已存在时更新该记录,否则新增;导入不会删除任何记录。课程目标达成情况评价报告等课程类实例也走本页,教学课件报送用它自己的导入页(见 教学资料报送)。
页面顶部显示三个步骤「① 上传 Excel」「② 配置导入规则与预检」「③ 正式写入」:
2025-2026,小学期以 -3 结尾),选择 .xlsx 或 .xls 文件,点击「下一步」。
图中 ① 为「导入范围」:有「全校」和「仅当前学院」两个选项,默认全校(按表内报送单位列分发到各学院库);只授权了一个学院的账号固定为「仅当前学院」且选项置灰,表内其他学院的行被跳过并在预检中单独计数(这不代表源表有问题)。② 标出的是需要重点核对的映射:「报送单位(学院)」要选负责人所在学院列(不要选学生所在院系列),「工号」要选教工号列。每个字段后的下拉框已按表头名称猜好,猜错就改选;不需要的字段选「— 不导入这一项 —」;带红色星号的是必选项;允许多个字段选同一列(如「学业导师」一列同时作记录名称和负责人)。

图中 ① 为「同一负责人的多行合并为一条记录」,② 为「为负责人授予「学业导师」角色」(默认勾选),③ 为「工号前缀清除」(示例填 10618),④ 为「学院名自动规范化匹配」(默认勾选);其下还有「学院名对不上时仍按当前学院导入」(默认不勾)和「找不到学院时改用列」(默认「不启用」)。各项的规则见下方「导入要点」。

图中 ① 为预检后收成一行的导入配置摘要(字段映射 N 项 · 按负责人合并:开),点「修改导入配置」可展开修改;④ 为「返回上一步」,第 2 步的学期只读显示,学期或文件有误时从这里返回重新上传。预检结果从上到下依次是:红色「报送单位与负责人账号主学院不一致」提示、蓝色「已按负责人合并」、黄色「已按前缀 10618 清洗 N 条记录的工号」、绿色「工号能匹配到系统账号的记录:6 / 6」,以及学院名「已自动规范化匹配」的对照(如「河海学院(港航方向)→ 河海学院」)。③ 为「导出预检清单」,右上角「正式写入」旁显示「将写入 N 个学院库、共 M 条」。

图中 ④ 为写入后自动收起的预检结果,点「展开预检明细」可回看(含暂停课程的原因);⑤ 为「导出写入清单」;⑥ 为「返回列表」「再导入一次」。写入结果常显新增记录、更新记录、失败三项,其他计数有值时才显示;明细中每行标「新增」或「更新」,合并写入的会注明「由源表 N 行合并(第……行)」。超管在此区域还能看到「撤销本次导入」(见下文「导错了怎么办」),学院管理员看不到。
导入要点:
.xls 与 .xlsx(2026-09-18 起)。把 HTML/XML 表格直接改名成 .xls 的文件会被提前识别并提示,不会再抛看不懂的「Unsupported format」。智慧城市学院(重庆智慧城市学院))→ 唯一包含匹配(如 重庆交通大学航空学院)。每级都要求只命中一个学院,命中多个(例如一格里写了两个学院)仍按未匹配处理。匹配成功的行按系统学院名入库(源表的括号后缀不会写进记录),预检会逐条列出对照关系供核对。关掉开关则只认完全一致。10618990202400083)。在第 2 步「清洗规则 → 工号前缀清除」里填上前缀(多个用空格分隔,留空即不处理)即可去掉。为防误剥有四道守卫:前缀须为 3 位以上纯数字、去掉后仍须是 6 位以上纯数字、原值在系统里已能查到账号时一律不剥,并在预检给出清洗样例与「工号能匹配到系统账号的记录 N/M」。这条很重要:记录一旦带了工号,列表就只按工号精确匹配、不再按姓名兜底,工号不对等于负责人本人看不到也传不了自己的材料。/submissions/<key>/<id>/admin_correct):分两级(2026-09-24 起)。校级=超管、教务处管理员和对该模块持「校级管理」动作的人,任意状态记录均可改,可改报送单位、记录名称、负责人、备注及扩展字段(课程类为开课单位、系部、课程编号、课程名称、授课教师)。学院管理员只能改本人主学院的草稿且未归档记录,只能改记录名称/课程名称、负责人/授课教师、备注及扩展字段;报送单位、课程编号参与重新导入时的记录匹配,改了会让下次导入新增一条重复记录,故只由校级改;系部走编辑页「系部调整」。其余行的按钮置灰。改负责人/授课教师时会自动同步工号:单人且在本院教师库或本院账号中唯一匹配时写入其工号,多人、同名或查不到时清空工号并提示(同名教师请写成「姓名(工号)」,工号须与账号实名一致)。弹窗标题为「纠错」,操作日志记为「纠错(校级)」或「纠错(学院管理员)」。大批量错误仍建议修正 Excel 后重新导入(导入会更新已有记录)。bulk_delete):同样仅教务处级 / 校级管理 / 超管可见;学院管理员处理误建、重复记录请用「标记删除」。attachment_export_tasks)。非课程类实例的基础字段(与教学课件报送字段名复用同一张 CourseArchive 表,但 label 改为通用语义):
| 字段 | 含义 | 备注 |
|---|---|---|
teaching_unit | 报送单位 | 教学课件里是「开课单位」 |
course_name | 资料名称(必填) | 教学课件里是「课程名称」 |
teacher_name | 责任人 | 教学课件里是「授课教师 教工号」 |
remark | 备注 | 通用类专有展示列 |
submission_status | 资料报送状态 | 列标题「资料报送」 |
workflow_status | 流程状态 | 审批进度 |
报送情况口径(通用类):附件齐全且已归档 = 已报送;齐全未归档 = 报送中;缺附件 = 全缺;已提交正在审核时显示「送审中」,被退回显示「送审中(退回)」或「全缺(退回)」等。
流程状态口径:列表的「流程状态」列只显示「草稿」「已提交」「已退回」「报送完成」四种,审核中的记录不区分节点,统一显示「已提交」;具体停在哪个节点(责任教授 / 专业负责人 / 系室主任 / 教学办主任 / 分管教学副院长),进入编辑页看顶部流程条(当前节点高亮)。
学期字段支持三种口径:YYYY-YYYY-1/2/3(学期,-3 为小学期)与 YYYY-YYYY(学年)。手输的 2024-2025第二学期、2025-2026小学期、2025-2026学年、全角数字等变体会统一归一化后落库。像「学生学业发展评价」「毕业要求达成评价」「持续改进报告」这类列表列本就叫「学年」的项目,直接填学年即可。
extra_fields):加列但不动表结构CourseArchive 原生可承载业务语义的只有 semester/teaching_unit/course_name/teacher_name/course_code/remark 六个,几个实例就用满。需要「班级」「辅导员」「专业」「年级」这类列时,上传附件型实例可在模板配置里声明 extra_fields(向导第 2 步把「这一项是什么」选成普通文字 / 数字 / 多行文字 / 下拉选择即可,不需要手写),值统一存进既有的 form_data JSON 列——不建表、不加列。
约束(向导会自动遵守,专家模式手工配置时须注意):
submission_status/workflow_status/department 同名,否则取值时原生分支会抢先,扩展值永远显示不出来(发布校验会拦)。form_fields,也不用 extra_fields。list_columns_patch 允许改 filterable),不必发版。单元格本身不会被撑坏:内容超宽会省略显示,完整值在鼠标悬停提示里。关键区分字段:module_key 决定菜单/学院开关/用户授权归属;archive_type 决定数据落在哪个实例——同一 module_key 下多实例靠 archive_type 物理隔离记录与统计。category=non_course_based、uses_course_fields=False、teacher_self_record_scope=False、supports_department_change=False 是通用类与课程类的核心行为差异开关。
标记删除 / 待删除清单:标记删除不是立即物理删除,而是把某条报送记录标成“建议删除”,用于把误建、重复或需清理的记录先集中到「待删除清单」复核。可见该记录的非预览登录用户可以发起标记,标记理由必填;超管、教务处校级角色、学院管理员或原标记者可取消标记。已标记但尚未软删除的记录进入「待删除清单 / 标记删除清单」(/submissions/<template_key>/marked_deletion),普通用户只能按自己的可见范围查看,真正执行删除只限超管或教务处校级角色。执行删除时系统会先把 archive 主表、材料项、附件记录、审批日志备份为 JSON,再设置 deleted_at / deleted_by 做软删除;列表会立刻不再显示该记录,附件不会当场物理删除,通常保留 7 天后再由后台清理。
二者是同一套模板引擎下的两类实例,关系与区别如下:
| 维度 | 教学课件报送 | 非课程类实例 |
|---|---|---|
| 来源 | 代码内置 | 向导 / 专家模式创建的运行态实例 |
module_key | teaching_material_submission | teaching_material_submission(同属资料报送模块) |
分类 category | course_based(课程类) | non_course_based(通用类) |
| 教师本人记录归属 | 是(按课程/授课教师自动可见) | 否(无授课教师语义,按导入名单里的工号认定负责人) |
| 系部变更 / 课程字段 | 启用 | 关闭 |
| 发布 / 撤回 / 定向预览 | 有(2026-09-25 起;从未操作过时视为已发布) | 有(新建后默认待开放) |
| 停用 | 无(学期间用「撤回」暂停) | 有(仅 0 条记录时) |
| 列表渲染 | 走旧专用页 teaching_material_submission_list(按 key 委托) | 走通用页 submission_template_list.html |
| 备份目录 | teaching_material_submission(系统固定登记) | 各实例 upload_subdir,在模板管理登记并选全量/增量 |
共用部分:OrgUnit 的五个 MATERIAL_ACTION_*(提交/审核/校级查看/校级管理/配置管理)权限命名空间、提交与审批链路、截止日期机制、标记删除、附件导出、模板三层架构。/submissions/<template_key>/... 这套通用路由对两者通吃,仅教学课件列表页因历史 UI 差异被特判委托到旧专用渲染。
CourseArchive 表,每条带 archive_type。列表查询、计数(如模板管理页的 archive_count)、删除/停用前置检查都按 CourseArchive.archive_type == template.archive_type 过滤,因此即使多个实例同属资料报送模块,数据也不会互相混入。archive_type;同一 module_key 下有多个已发布实例时,系统按 iter_submission_templates() 枚举模板、以各自 archive_type 分别统计、分别渲染卡片。teaching_material 每日全量单目录 9.2G,曾撑爆目标机磁盘。已登记的目录可在模板管理页「备份」列点徽章切换;由系统固定登记的目录会显示为锁定、不可在页面改。archive_count=0,且停用只标记 enabled=false、保留历史 archive 与附件不物理删除,并在停用前写快照备份。停用后可在「已停用项目」卡片「恢复为待开放」或「复制为新草稿」。导入是「有则更新、无则新增」(upsert),所以重新导入只能改不能删——学院选错、字段映射错、
合并规则选错而多写进去的记录,靠再导一次是清不掉的。
写入完成后,结果页会给出「撤销本次导入」(仅超级管理员可见;学院管理员导错时请记下导入时间与源文件名,联系超管处理):
database_backups/marked_deletion/。granted_roles),撤销时先删记录、再逐行复核回收——只有「角色、账号、学院」三者仍与登记时一致的行才删;导入后被人在用户管理页改过(删了重建、换了学院)的行跳过并在提示里列出「角色行已被改动,未回收」,需要人工到用户管理页处理。撤销按钮在哪里:
注意事项:
teacher 等角色,撤销不会回收它们——账号可能已经被用过了,需要清理请走账号管理。能被撤销回收的只有非课程类导入授予的「学业导师」。撤销按钮不见了,怎么办:
点「附件下载」(勾选记录)或「一键全校附件」时,会先弹出命名设置:
/ 分隔可生成子目录。
可用字段共 10 个:记录序号(记录 ID){seq}、记录名称 {record}(课程名称,无则用模板的记录标签)、课程编号 {course_code}、课程名称 {course_name}、授课教师/负责人 {teacher}(多人取首位加「等」)、学院 {college}、学期 {semester}、材料项名称 {material}、原文件名 {original}(不含扩展名)、该记录内的附件序号 {index}。
{seq}-{record}/{original},即「每条记录一个子目录 + 原文件名」。模板写错或只含未知字段时自动回退默认值,不会导致下载失败。为什么需要它:附件落地时的命名规则是按实例写死的,只有课程目标达成度报告那类实例能落成
「序号-课程编号-课程名称-教师姓名-学院」;其它实例兜底是「记录名称-材料项名称」,如果导入时
没有映射「记录名称」列,同一材料项的附件就会全部同名,打包后只能靠 -2、-3 区分,打开前
根本分不清是谁交的。用命名模板补上学院、学期、负责人等字段即可解决。
教学课件报送走的是旧专用列表页,两个附件按钮都不弹命名窗口:「附件下载」沿用原有打包方式;「一键全校附件」按默认命名 {seq}-{record}/{original} 创建导出任务。
published=True),仅本地发布不等于对学院可见。max_files 是 1(覆盖式单文件)。需要多份请超管在该实例的材料项配置里把它改成上限数,或改成 0(不限数量)。list_columns_patch;若把 materials/archive_type/published/deadline 等写进差异不会生效,这些由实例配置/发布/截止日期文件各自负责。archive_type 下仍有 archive 数据时拒绝删除/停用,需先妥善处理历史记录(不可强删)。10618 之类前缀时,用导入第 2 步的「工号前缀清除」处理,预检的「工号能匹配到系统账号的记录 N/M」可以当场看出对不对。{seq}、{teacher}、{college} 等字段即可区分,不需要改已上传的附件。