Commit Graph
64 Commits
  • 已完成,学生端考勤记录现在按课程展示。
    每门课程会独立显示:
    课程名称、代码、教学班和任课教师。
    课程总体出勤率。
    出勤、迟到、缺勤、请假、免修次数。
    按日期排列的历次点名记录。
    缺勤或迟到记录仍可单独申诉。
  • ge
    xiufu
  • 新增显式命令:--seed-demo-data --confirm-production-demo-data
    仅允许非 Development 环境运行。
    只允许写入没有业务数据的独立空库。
    演示数据使用单个 InnoDB 事务,失败整体回滚;迁移 DDL 仍单独执行,因为 MySQL 8.4 的 DDL 会隐式提交。MySQL 事务文档、隐式提交说明
    不包含通用测试密码或学生、教师登录账号。
    包含校区、学期、30 间教室、16 个学院、52 个专业、104 个班级、128 名教师、3,640 名学生和148门课程。
  • 新增“课程统计”模式,展示总体出勤率、状态分布、历次趋势和每位学生的出勤明细。
    支持按姓名/学号、行政班及异常情况筛选,默认优先显示低出勤率学生。
    新增课程统计 Excel 导出,包含课程概览、学生出勤明细、历次点名趋势三个工作表。
    统计仅使用已提交点名;出勤和迟到计为到课,免修不计入应到次数。
    修复了枚举兼容问题,已提交点名不会再错误显示为“草稿”,考勤状态中文标签恢复正常。
    统计与导出接口均执行教师/数据范围权限校验。
  • ---
    成绩册 Excel 导入/导出 — 已完成
    
      后端 (GradesController.cs)
    
      GET /api/grades/sheets/{id}/template — 下载成绩导入模板
      - 根据成绩单的动态分项(GradeItems)生成对应的 Excel 列:学号 | 姓名 | 班级 | 平时成绩 | [分项1] | [分项2] | ... | 期末成绩 | 考试状态 | 备注
      - 预填已有学生信息和已有成绩
      - 附带填写说明工作表
    
      POST /api/grades/sheets/{id}/import — 从 Excel 导入成绩
      - 按学号匹配学生,批量更新平时成绩、分项成绩、期末成绩、考试状态、备注
      - 支持留空(不覆盖已有成绩)、0-100 范围校验、考试状态校验(正常/缺考/缓考/免修)
      - 导入后自动重新计算总评成绩和绩点
      - 仅限 Draft/Returned 状态的成绩单,仅限有编辑权限的用户
      - 错误时整批回滚,最多显示 50 条错误详情
    
      前端 (GradesView.vue)
    
      在成绩登记册底部操作栏新增两个按钮(仅在 canEdit 时显示):
      - 下载模板 — 调用 downloadApiFile 下载当前成绩单的 Excel 模板
      - Excel导入 — 通过隐藏 file input 选择 .xlsx 文件,调用 importExcel 上传
    
      工作流程
    
      1. 教师打开成绩单 → 点击「下载模板」
      2. 在 Excel 中填写/修改学生成绩
      3. 点击「Excel导入」选择文件上传
      4. 系统自动校验、合并成绩、重新计算总评 → 提示更新条数
      5. 成绩表刷新显示最新数据
    
    ✻ Crunched for 5m 50s
  • 全部完成。定时检测系统概览:
    新增组件
    
      ┌────────────────────────────────┬─────────────────────────────────────────────────────────┐
      │              组件              │                          说明                           │
      ├────────────────────────────────┼─────────────────────────────────────────────────────────┤
      │ WarningSchedule 实体           │ 定时配置:学期、星期几、时、分、启用/禁用、上次执行时间 │
      ├────────────────────────────────┼─────────────────────────────────────────────────────────┤
      │ WarningCheckWorker             │ BackgroundService,每分钟轮询一次,匹配到时间就执行检测 │
      ├────────────────────────────────┼─────────────────────────────────────────────────────────┤
      │ GET/PUT /api/warnings/schedule │ 读取/保存定时配置                                       │
      └────────────────────────────────┴─────────────────────────────────────────────────────────┘
    
      页面配置
    
      在学业预警页面顶部新增「定时检测」区域:
      - 启用开关:一键开/关自动检测
      - 星期选择:周一至周日
      - 时分选择:精确到分钟
      - 上次执行时间:自动显示
    
      工作流程
    
      每分钟 Worker 轮询
        → 查询 WarningSchedules 表,匹配当前星期+时+分
        → 检查是否已在本分钟执行过(防止重复)
        → 加载该学期全部启用规则 + 在籍学生
        → 逐条规则、逐个学生检测
        → 已存在的同型预警跳过,新预警写入 + 通知学生/辅导员
        → 更新 LastRunAt
    
      管理员配置"每周一 08:00 自动检测",系统就会在每周一早上 8 点整自动执行一次完整的学业预警检测。
  • deepseek
    前台 — 路由 (router/index.ts)
    
      - my-timetable 路由的角色从 ['Student'] 扩展为 ['Student', 'Teacher']
      - 新增 teacher-timetable/:teacherId 路由,用于查看指定教师的课表
    
      前台 — 课表视图 (TimetableView.vue)
    
      - 新增 isTeacherView 和 isTeacher 计算属性,区分教师个人课表和查看他人课表
      - 教师个人课表:标题显示"我的授课课表",描述改为"展示本人本学期所有授课安排"
      - 查看他人课表:标题显示"教师课表"
      - 两种模式均隐藏资源筛选面板,只保留学期选择
      - 加载逻辑适配教师模式 API
    
      前台 — 教师档案页 (PersonnelView.vue)
    
      - 教师行操作列新增 "课表" 按钮(带日历图标),仅在职教师可点击
      - 点击后跳转到该教师的授课课表页面
    
      前台 — 侧边导航 (AdminLayout.vue)
    
      - 教师角色可见"我的授课课表"菜单项,与学生的"我的课表"并列
  • deepseek
    2 处改动:
    
      1. ValidateRequestAsync — 当 classIds 为空时跳过行政班验证(选修课可不选班)
      2. ValidatePublishingTasksAsync — 移除了"发布前至少需要关联一个行政班"的强制校验,允许无行政班的教学任务直接发布
  • 已改成后台“检查并发布”任务,原来的超时主要就是同步逐条校验导致的。
    发布接口立即返回 202 Accepted,页面轮询显示检查进度。
    校验改为批量读取,减少重复数据库查询。
    检查失败保留草稿并显示具体原因;成功后原子完成旧课表归档和新课表发布。
    同一学期禁止两个发布任务并发,服务重启后未完成任务会自动恢复。
    发布期间锁定编辑、自动排课等冲突操作。
    已补齐 SQLite 开发迁移及 MySQL 生产迁移。
  • 已完成教学任务归档纠错功能:
    已归档任务新增“撤销归档”和“删除”,支持单条及批量操作。
    撤销后恢复为“已发布”状态。
    已发布任务仍不可直接删除;被排课、选课、成绩或考试引用的归档任务也会拒绝删除并明确提示。
    状态与操作文案统一为“归档”
  • 自动排课完成后逐条显示“需人工处理”的任务和原因,并提供“检查排课约束”入口;刷新页面后仍可读取最近一次结果。
    批量排课约束新增校区、教学楼、多教室统一指定,也支持清除原有限定。
    课表新增“总视图”,同一时段、不同周次课程会并列显示。
    周视图按教学周过滤,支持上一周、下一周、周次下拉和回到本周。
    日视图按周次过滤;连续两节课程会跨两行完整占格。
  • 教师档案增加“激活账号”:管理员设置初始密码,服务端校验管理权限、学院数据范围、在职状态、工号冲突,并自动关联教师角色与档案。
    已发布课表增加“发布后修改”:创建修订草稿,旧课表继续生效;修订版重新发布后再替换旧版本。
    修复 390px 窄屏下课表页头按钮溢出。
  • 已发布方案可修改名称、总学分、说明、课程模块及课程配置。
    适用专业、入学年级、版本号保持锁定;前端禁用,后端也会返回 409 拒绝篡改。
    归档方案仍只读。
    修改已发布方案前增加即时生效警示和二次确认。
  • 课程库:保留并验证现有 Excel 导入,支持模板下载、按编码新增/更新、整批校验及事务回滚。
    授课资格:学院可直接选择本院教师、学期和课程并分配资格,服务端强制学院数据范围。[后端接口 (line 178)](/E:/jiaowu/src/Jiaowu.Api/Controllers/TeacherCourseApplicationsController.cs:178) · [页面 (line 151)](/E:/jiaowu/web/src/views/TeachingPreferencesView.vue:151)
    学生培养方案:新增“我的培养方案”,展示学分进度及已完成、在读、重修中、未通过、待完成、未修读课程,并支持搜索筛选。[学生接口 (line 15)](/E:/jiaowu/src/Jiaowu.Api/Controllers/StudentCurriculumController.cs:15) · [学生页面 (line 88)](/E:/jiaowu/web/src/views/StudentCurriculumView.vue:88)
  • 主要更新:
    班级课表支持年级、学院、专业、行政班分级筛选。
    管理员课表查询中心支持班级、教师、场地三种课表。
    超级管理员、校级教务、学院教务、领导可查询草稿和已发布版本;学院管理员保留学院数据范围。
    增加周视图、日视图切换。
    支持 Excel 导出和当前视图 PDF 导出。
    学生端增加“空闲教室”,支持学期、周次、星期、连续节次、校区、教学楼、容量筛选,并按教学楼分组、分页展示。
    空闲教室只依据正式课表计算;未配置节次表时自动提供默认节次。
  • 教学任务按 授课周数 × 周学时 = 课程总学时 双端校验,不匹配会显示具体差额并阻止保存;公共课批量生成同样校验。
    排课约束增加课程、教师、学院、授课方式、场地要求、约束状态筛选,并支持批量修改当前筛选结果。
    新增“非排时课程”授课方式:不进入自动排课
    不占星期、节次和教室
    不阻塞课表发布
    允许正常选课
    在班级课表和学生个人课表中单独展示
  • 取消新增/Excel 导入档案时自动创建账号。
    取消修改人员档案时同步登录账号。
    Excel 人员模板恢复为不含“初始密码”。
    登录页新增“学生首次登录?自助激活账号”入口。
    公开激活地址:http://127.0.0.1:5255/activate
  • 主要改动:
    自动排课接口立即返回 202 + jobId
    后台服务独立执行,不受浏览器关闭或前端超时影响
    进度、成功、失败状态持久化到数据库
    服务重启后自动恢复排队中或中断的任务
    同一草稿禁止重复提交后台任务
    运行期间禁止编辑、发布或删除该课表
    排课结果和任务成功状态在同一事务中提交
    前端每秒轮询进度,显示已处理教学班和已规划安排数
  • 已修复:
    新增不受 100 条分页限制的课程选项接口。
    培养方案、教学任务全部改用新接口。
    教师课程申报使用独立接口,可查看全部启用课程。
    学院教务仍只能使用公共课和本院专业课,不会越权看到外院专业课。
    实际接口验证:
    校级教务:152 门,其中公共课 29 门。
    学院教务:40 门,其中公共课 29 门,其余为本院专业课。
    教师申报:152 门,其中公共课 29 门。
  • 已完成“专业课教学任务下放学院管理”。
    专业必修、专业选修、实践课程:由课程所属学院创建、修改、删除、发布和关闭。
    公共必修、公共选修:仍由校级教务管理。
    校级教务可以查看全校专业课任务,但不能代替学院维护。
    超级管理员保留跨学院纠错权限。
    教师分配统一要求:教师已申报该课程,并通过学院审核。
    兼岗账号同时拥有校级公共课和本学院专业课职责。
  • 自动排课:保留手工安排,按教师、行政班、周次、节次、容量和场地约束补排。
    课程约束:可限定校区、教学楼、指定教室、允许上课日、最早/最晚节次。
    无教室课程:教室可为空,但仍校验教师和班级冲突。
    作息维护:按学期维护节次、上下课时间和启用状态。
    发布保护:发布前重新检查全部约束,并阻止学时未排满的课表发布。
    工作台升级:增加“排课规则与作息”“自动排课”入口,自动生成后仍支持手工微调。
    同时兼容 SQLite 和 MySQL,已生成正式迁移。
  • 课程库 Excel 导入导出已完成:
    支持下载标准导入模板。
    导出严格沿用当前关键词、学院、分类、课程性质和状态筛选。
    以课程编码为唯一键:存在则更新,不存在则新增。
    校验学院编码、课程分类、课程性质、学分学时及考核方式。
    整批原子导入,任一行错误则全部不写入,并提示具体行号。
    学院管理员仍只能维护本学院的专业课和实践课,无法借 Excel 越权。
    界面入口沿用现有课程库工具栏样式。
  • 培养方案下放学院维护,学院账号被后端限制在本学院范围;新增按年级、学院、专业联动筛选及维护范围提示。
    课程库实行分级维护:学院只能维护本学院的专业必修、专业选修和实践课程;通识课程可查看、引用但不可修改。校级账号保留全校统筹权限。
    “排课与课表”已从“教学建设”迁移到“教学运行”,原路由保持不变。
    权限规则同时落实在前端和 API,并新增专项测试。