教学文件管理系统
创建于 2025 年 5 月 29 日
项目介绍
教学文件管理系统是基于若依 RuoYi 3.8.9 后台管理框架二次开发的教务检查场景系统,业务代码集中在 com.ruoyi.te 包,前端为若依标准 ruoyi-ui(Vue 2 + Element UI)并新增 views/te 业务页面。系统围绕高校”教学文件检查”的典型工作流展开:每学期由教务发布教学任务(课程号、课序号、课程名、授课教师、班级、人数),任课教师按任务上传课程表、成绩表、成绩分析、考核方式申请表、课程总结、课程目标达成明细表、期末试卷与评分标准等教学文件,系主任逐项审核并给出合格/不合格结论与检查意见。
项目预置了三个业务角色:js(教师)、zr(系主任)、ms(教学秘书),配合超级管理员形成完整的分级权限矩阵——教师负责上传和维护自己的文件,系主任负责审核,教学秘书与管理员负责查阅与统筹。种子数据预置”2025-2026 上学期”为当前学期、七个文件类型字典与两条教学任务示例,导入 SQL 即可完整体验”建任务 → 传文件 → 审核 → 归档”的闭环流程。
项目架构
后端为若依标准多模块 Maven 工程(ruoyi-admin / ruoyi-common / ruoyi-framework / ruoyi-system),Spring Boot 2.5.15 + Java 8,数据库 MySQL(表结构见 20250529-jiaoxue.sql,共四张 te_ 业务表)。本项目的持久层实现与常规若依二次开发有明显差异:在保留 MyBatis-Plus 3.5.4 实体注解(@TableName、@TableId)的基础上,引入 EasyQuery 2.5.17 的代理模式(sql-api-proxy + sql-processor + sql-springboot-starter),通过 @EntityProxy 注解在编译期生成类型安全的代理类,控制器直接用 easyEntityQuery.queryable(TeTeachingFiles.class).where(x -> x.fileName().like(...)) 链式构建查询,完全替代传统 Mapper XML 手写 SQL。
多表联查同样由 EasyQuery 承担:教学文件列表通过 leftJoin 同时关联 te_file_types 与 sys_user,一次查询带出文件类型名称(fileTypeName)和上传者昵称(nickName);教学任务列表左联 te_term 带出学年与学期名称,前端拼接展示为”2025-2026上学期”。分页复用若依的 startPage() + TableSupport.buildPageRequest(),导出沿用若依 ExcelUtil 注解式 Excel 导出。删除操作刻意调用 disableLogicDelete() 与 allowDeleteStatement(true) 走物理删除,与若依默认逻辑删除行为不同,符合教学文件这类归档数据直接清理的需求。
核心功能
- 学期管理(
TeTermController+views/te/term/index.vue):维护学年(school_year)与学期名称(term_name),term_status区分当前学期(1)与历史学期(0);设置某学期为”当前学期”时,后端先批量将其他所有学期置 0 再更新目标学期,保证任意时刻只存在一个当前学期;新增时校验”学期已存在”,学年下拉由字典te_term_year驱动。 - 文件类型管理(
TeFileTypesController+views/te/fileTypes/index.vue):维护课程表、成绩表、成绩分析、考核方式申请表、课程总结、课程目标达成明细表、期末试卷与评分标准共七类教学文件,新增与修改均做名称唯一性校验(重名返回”已存在”),并提供listForSelect接口供文件上传表单下拉使用。 - 教学任务管理(
TeTeachingTasksController+views/te/task/index.vue):任务包含课程号、课序号、课程名、教师、班级、人数与学期;教师下拉通过TeTeacherController的/te/teacher/authUser/allocatedList按教师角色(roleId=100)筛选sys_user返回,选择教师后后端自动回填教师姓名;列表支持按课程号、课程名、教师、班级、学期、是否合格多条件筛选,is_qualified以 待审核/合格/不合格 三种标签展示;行内”审核”弹出对话框由系主任判定合格与否并填写检查意见。 - 教学文件管理(
TeTeachingFilesController+views/te/taskFile/index.vue):从教学任务列表点击”文件管理”经路由参数taskId进入对应任务的文件页;教师通过若依file-upload组件上传 PDF(限 10MB、单文件),后端新增时强制isApproved=0(待审核)并将当前登录用户写为上传者,再基于本地存储路径用 HutoolFileUtil.getName/FileUtil.size自动解析真实文件名与文件大小落库,文件名以链接形式直链预览/下载;页面内提供”下载模板”按钮,由匿名接口/te/files/common/download/template返回uploadPath/template目录下的《教学文件模板.docx》。 - 分级审核与数据隔离:文件审核接口
PUT /te/files/audit由系主任设置isApproved(通过/拒绝)与checkOpinion审核意见;数据权限方面,查询构建器在用户仅持有js角色时强制追加x.uploader().eq(当前用户)(任务则为x.teacherId().eq(当前用户)),实现教师只能看到自己的任务与文件,而系主任、教学秘书与管理员可见全量;前端按钮同样用v-has-role指令按角色显隐,并限制教师只能修改/删除自己上传的文件(scope.row.uploader !== userId时禁用)。 - Excel 导出:任务与文件列表均支持导出,前端
download('te/tasks/export', ...)触发后端@Log记录操作日志的ExcelUtil.exportExcel导出 xlsx,操作全程留痕于若依操作日志。
功能截图
暂无运行截图。
快速上手
项目为若依标准多模块 Maven 工程(ruoyi-admin / ruoyi-common / ruoyi-framework / ruoyi-system / ruoyi-ui)。后端:导入工程后修改 ruoyi-admin/src/main/resources/application-druid.yml 的 MySQL 连接,直接导入完整库脚本 20250529-jiaoxue.sql(已含若依基础表、菜单(教学管理目录 te 挂载学期管理/文件类型管理/教学任务)、角色(教师 js、系主任 zr、教学秘书 ms)与业务种子数据),启动 RuoYiApplication 即运行后端服务。前端:进入 20250529-教学文件管理系统-web 执行 npm install 与 npm run dev,默认代理访问后端 8080 端口;使用 admin/admin123 登录后,在”教学管理”菜单下维护学期与文件类型,在”教学任务”中新建任务并进入文件管理上传文件,切换系主任账号即可体验审核流程。
总结
项目展示了在若依框架上搭建”上传—审核”类教务系统的典型路径,最具学习价值的有三点:一是持久层改造——用 EasyQuery 代理模式完全替代手写 Mapper,@EntityProxy 编译期生成代理类后,连表、分页、条件拼接全部以类型安全的链式 API 完成,代码量显著小于传统 XML 方案,为若依二次开发提供了另一种 ORM 实践;二是分级审核工作流——教学任务(合格/不合格)与教学文件(通过/拒绝)双审核闭环,配合 check_opinion 意见回填,完整还原了教务检查的业务语义;三是权限控制的双层设计——后端在查询构建器内按角色追加数据过滤条件实现行级隔离,前端再用 v-has-role 与上传者归属判断收敛操作入口,前后端协同而非单纯依赖按钮显隐。整体业务模型清晰、注解规范,适合作为若依二次开发、RBAC 数据权限与教学管理系统设计的学习参考。