Files
study-tool/OPTIMIZATION.md
T
study-tool 549a91af1d fix: 首次进入课程自动同步加入(syncSelf)
首次进入课程时课时树回 code=500「你还没有加入学习…」,前端把它渲染成挡路弹层,
人工点掉后 SPA 自己补发 syncSelf 才落库 —— 所以第二次进同一门课就正常。

- discover_study 返回值补 course_code(trainCourse/getById.courseCode)
- 新增 study_mod_get:/mod/* 只带 cookie + Referer,不带 Bearer
- 新增 study_sync_self:GET /mod/school/wanpeng/syncSelf?courseCode=…
- 新增 study_sync_identity:GET /mod/gjt/roleList 补一刀身份
- ensure_study_join 改为:已加入 → student/join → syncSelf + 轮询 getById → 刷新 jspx 页
- todo.md 收尾,新增 OPTIMIZATION.md 记录待实测确认项
2026-10-28 20:41:44 +08:00

2.0 KiB

OPTIMIZATION

已实现、但还需要你实测确认的事项。确认没问题后把对应条目删掉。

首次进入课程自动加入(syncSelf)

状态:已实现,待实测确认。

做了什么

首次进入没加入过的课程时,平台课时树会回 code=500「你还没有加入学习…」,前端把这句话 渲染成挡路的弹层,不点就进不去。真正把账号同步进课程的是页面自己发的这一发:

GET /mod/school/wanpeng/syncSelf?courseCode=<courseCode>

(抓包实录:isJoin=0 needJoin=1 → syncSelf 约 2s → 再拉 getById 就是 isJoin=1。) POST /course/front/student/join 对 isFreeJoin=0 的慕课课会被拒「该课程无法直接加入,请联系管理员」, 所以现在 ensure_study_join 的顺序是:已加入 → student/join → syncSelf + 轮询 getById(约 11s) → 刷新 jspx 课程页复查。course_code 取自 trainCourse/getById 的 courseCode。

怎么测

  1. 用一个没加入过该课程的账号,或把某课时的 studyLog 清掉(制造「首次进入」)。
  2. 跑一次自动学习,看日志里加入那一段。

预期出现其中一条:

  • 加入培训:同步课程页后已加入(student/join 被拒:…;syncSelf=请求成功)
  • 加入培训:刷新课程页后已加入(…)

确认点是:之后的 period/study/log 真记账(课时 completeTime 有值),且全程不需要人工点弹层。

如果没生效

  • 日志是 加入培训被拒:…;课程没有 courseCode,无法走同步接口 → 该账号/该课程的 getById 没返回 courseCode,需要再抓一次包定位它的来源 (抓包时重点看 syncSelf?courseCode= 参数是从哪个响应/本地状态来的)。
  • 日志显示 syncSelf 成功但 getById 一直 isJoin=0 → 同步在服务端没落库,先看 syncSelf 响应的 result.code,再考虑补 /mod/gjt/roleList 之外的接口。