fix(登录): 带 code 进 /plans 时卡在「正在进入召回工作台…」
复现条件:localStorage **已经有票**(第二次进来)+ URL 带 ?code=。
干净浏览器不复现,所以第一次测没发现。
时序:
① store 反水合 → isAuthenticated 立刻 true → AuthGate 放行 children
② /plans 落地解析器跑起来 → 主管 → router.replace('/supervisor')
③ `await exchangeCode()` 才回来,然后 replaceState 把地址写回 /plans
③ 把 ② 那次跳转冲掉了 —— Next 的路由树被拉回 plans(实测 history.state 里
`__PRIVATE_NEXTJS_INTERNALS_TREE` 停在 plans),而解析器已经 return、不会再试,
于是永远停在占位文案上。
⇒ 剥 code 与 exchange 成不成功无关,提到 await **之前**做。本 effect 跑在首次提交上
(那时 mounted 还是 false、children 尚未挂载),任何页面的落地跳转都必然在它之后,
不会再被回写覆盖。
⚠ ️ replaceState 第二个参数改传 window.history.state 而不是 `{}` ——
App Router 的路由树就存在 history state 里,传空对象等于把它抹掉。
实测三种都过:
已登录 + /plans?code= → 落 /supervisor
已登录 + /plans?exec=1&code= → 走执行页(exec=1 没被剥 code 时一起吃掉)
清空 storage + /plans?code= → 落 /supervisor
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Found errors in your .gitlab-ci.yml:
- jobs:openapi-drift config contains unknown keys: rules
| Status | Job ID | Name | Coverage |
|---|