feat(MYSY): 新增「实际上课时间」时间表(上午 4 节),导入时可与教务课表时间二选一 - #9
Merged
Conversation
绵阳师范学院教务课表页(#kbtable 的 th[rowspan] 时间块)给出的是教务口径的 13 小节(08:00-21:25),而学校作息表是 11 节(08:15 起,上午 2+2、 下午 2+2+1、晚上 2)。两套作息节数不同、编号也错位(作息表第 5 节 14:00 = 教务第 6 节 14:00),此前脚本固定使用页面推导结果, 想按学校作息显示课表的用户没有选择权。 改动: - 把 generateTimeSlots() 内的内联 fallback 数组提为 PRESET_TIME_SLOTS 常量 (内容不变,仍是学校作息表 11 节),避免同一份作息表在文件里出现两次 - 新增 chooseTimeSlots():通过 bridgePromise.showSingleSelection 弹单选, 让用户在「教务系统时间表(13 节)」与「预设作息时间表(11 节)」间二选一 - 默认选中「教务系统时间表」,与课表节次编号保持一致 - 桥接层回传 number / 字符串 / null 都归一化;取消、越界、 旧桥接层没有 showSingleSelection 时一律回落教务系统时间表,不阻断导入 - generateTimeSlots() 的页面推导逻辑保持不变 验证:jsdom 加载真实课表页面,7 项用例全通过(选 0/1、字符串回传、 取消 null/-1、越界、旧桥接层回落),端到端 runImportFlow 分别保存 13 节与 11 节,均导入 14 门课程。
页面存在 #kbtable 但读不到 th[rowspan] 时间块时,fallback 原指向预设作息表, 会让「教务系统时间表」和「预设作息时间表」两个选项都是 11 节。 新增 JWC_FALLBACK_TIME_SLOTS(13 小节,与页面推导口径一致)作为兜底。
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
背景
绵阳师范学院实际上课时间与教务系统课表时间不一致,脚本此前只能把教务课表的时间直接交给 App,课表显示的上课时间与实际作息对不上。本 PR 新增「实际上课时间」时间表,导入时让用户二选一。
教务系统课表时间(13 小节)
实际上课时间(11 节,本 PR 新增)
上午只有 4 节 —— 教务第 5 节(11:35-12:20)实际无课;晚上 2 节。
与教务口径的差异:上午 4 节 vs 5 节;下午第 1 节 14:00(教务第 6 节);晚上 2 节 vs 3 节;上午第 1 节晚 15 分钟(08:15 vs 08:00)。
改动
导入时弹窗二选一(默认「教务系统课表时间」,不改变现有行为):
ACTUAL_TIME_SLOTS:上表的 11 节实际作息JWC_TO_ACTUAL_SECTION+remapCoursesToActualSections():选择「实际上课时间」时把课程节次由教务口径换算为实际作息口径(教务 6→实际 5、7→6…),避免只换时间表导致的节次错位chooseTimeSlots()返回{useActual, slots},runImportFlow()据此决定是否换算节次showSingleSelection→ 回落「教务系统课表时间」,不阻断导入JWC_FALLBACK_TIME_SLOTS仍为教务口径兜底(#kbtable存在但读不到时间块时)验证
jsdom 加载真实课表页(
jw.mtc.edu.cn/jsxsd/xskb/xskb_list.do的#kbtable,14 门课程),22 项断言全部通过:兼容性
showSingleSelection/saveImportedCourses/savePresetTimeSlots,均已在docs/SCRIPT_API.md定义_decodeImportedSections()只取startTime/endTime(忽略number),两套表均按数组顺序生效