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:
@@ -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` 之外的接口。
|
||||
Reference in New Issue
Block a user