Skip to content

fix(SCUEC): 修复多段周次丢失与地点识别,避免未排课课程错位 - #7

Merged
Mutx163 merged 1 commit into
Mutx163:mainfrom
Guzheng3:fix/scuec-multiweek-and-room
Sep 9, 2026
Merged

Mutx163 merged 1 commit into
Mutx163:mainfrom
Guzheng3:fix/scuec-multiweek-and-room

Conversation

@Guzheng3

@Guzheng3 Guzheng3 commented Sep 9, 2026

Copy link
Copy Markdown

目标分支确认清单 (Target Branch Checklist)

  • 文件已经上传到对应的学校资源目录
  • 确认目标分支是 main(本仓库不使用上游的 pending 分支流程)

PR 描述 (Description)

改动对象

resources/SCUEC/scuec.js(中南民族大学 · 教务系统网页登录导入)

解决的问题

1. 多段周次只解析出第一段(周次数据缺失)

中南民大课表的周次列存在多段、乱序写法,例如:

高等数学A(2) 1-7周,14-16周,9-9周,12-12周 (第1-2节)
高等数学A(2) 10-11周,8-8周,13-13周 (第5-6节)

parseWeeks() 本身已支持按逗号拆段,但 parseSingleCourse() 里的 weekMatch 只匹配第一段:

/\d+(?:\s*[-~]\s*\d+)?(?:\((?:|)\))?/

结果只拿到 1-7周14-16周,9-9周,12-12周 全部丢失。现改为整体提取多段串后再交给 parseWeeks()

实测(2025-2026-2):星期五 1-2 节 高等数学A(2)由 [1..7] 修正为 [1,2,3,4,5,6,7,9,12,14,15,16];星期四 5-6 节由 [10,11] 修正为 [8,10,11,13]

2. 地点识别漏掉「工程训练中心」

地点行判定为正则 /[楼馆场室厅]/工程训练中心 不含这些字,被判为「待定」。补充 中心|基地|操场|球场 后正确识别(3 条工程训练A 全部修正)。

3. 未安排时间课程混入导入数据(导入后错位)

table.NoFitCourse 的课程被以 day: 0, startSection: 0, endSection: 0 塞进 courses。而 App 端 _parseWarehouseCourses() 会做:

final normalizedDay = Course.normalizeDayOfWeek(day);        // < 1 → 1
final normalizedSections = Course.normalizeSections(...);    // 0 → 1

即被夹到「周一第 1 节」,与真实课程重叠显示;周次为空的课程(如 软件开发实习[03])还会因 weeks.isEmpty 被 App 直接丢弃。
docs/SCRIPT_API.md 也写明 day 为 1-7、weeks 必填,无时间课程不在导入契约内。
因此改为只输出 console.warn 清单、不再混入导入数据(如后续 App 端支持「无时间课程」字段,可再回填)。

是否新增字段 / 轻屿专用行为

无新增字段,无脚本 API 变更。

是否与上游兼容

仅修改 resources/SCUEC/scuec.js 内部实现,目录结构与上游保持兼容。

测试环境

  • 网页:WebVPN 登录后打开课表页,取 2026-2027-1、2025-2026-2 两个学期真实页面
  • 用 jsdom 离线回归 extractCoursesFromTable(),与页面 DOM 逐条核对:
    • 2026-2027-1:16 门,周次 16/16、地点 16/16 一致
    • 2025-2026-2:19 门,周次 19/19、地点 19/19 一致(修复前分别为 17/19、16/19)

- parseSingleCourse 改为提取完整的多段周次串(如 "1-7周,14-16周,9-9周,12-12周")
  再交给 parseWeeks,原先只匹配第一段,导致后续周次全部丢失
  (实测 2025-2026-2:高等数学A(2)星期五 1-2 节只剩 1-7 周,9/12/14-16 周丢失)
- 地点行识别补充关键词(中心/基地/操场/球场),修复 "工程训练中心" 被判为 "待定"
- 未安排时间课程不再混入导入数据:day=0 / startSection=0 会被 App 端
  normalizeDayOfWeek/normalizeSections 夹到「周一第 1 节」,与真实课程重叠;
  周次为空的课程还会被 App 直接丢弃。改为只输出 console.warn 清单。

验证:用两份真实课表 HTML(2026-2027-1 / 2025-2026-2)在 jsdom 中回归,
周次与地点解析 19/19、16/16 全部与页面一致。
@Mutx163
Mutx163 merged commit b1a1f7c into Mutx163:main Sep 9, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants