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 记录待实测确认项
This commit is contained in:
study-tool
2026-10-28 20:41:44 +08:00
parent ba23888771
commit 549a91af1d
3 changed files with 149 additions and 83 deletions
+41
View File
@@ -0,0 +1,41 @@
# 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` 之外的接口。