diff --git a/docs/superpowers/specs/2026-06-03-login-route-fix-design.md b/docs/superpowers/specs/2026-06-03-login-route-fix-design.md new file mode 100644 index 0000000..fc7cc16 --- /dev/null +++ b/docs/superpowers/specs/2026-06-03-login-route-fix-design.md @@ -0,0 +1,63 @@ +# 登录后路由跳转修复设计文档 + +## 问题描述 + +当前小程序登录成功后,系统会根据用户是否已有资料(`hasProfile`)进行分支路由: +- 有资料 → 爽文生成页面 (`/pages/main/index?tab=script`) +- 无资料 → 编辑资料页面 (`/pages/onboarding/index`) + +这导致新用户或资料不完整的用户登录后被迫进入编辑资料页面,而非核心的爽文生成页面。产品要求登录后统一进入爽文生成页,不再强制填写资料。 + +## 方案概述 + +采用**方案 A**:直接移除登录后的资料检查,统一路由到爽文生成页。 + +编辑资料页面(`onboarding/index.vue`)继续保留,用户可从"我的" tab 中的编辑资料入口主动进入。 + +## 具体改动 + +### 1. `mini-program/src/pages/login/index.vue` + +修改 `routeAfterLogin` 函数,移除 `profileReady` 参数和条件判断,登录成功后一律跳转至爽文生成页: + +```javascript +const routeAfterLogin = () => { + uni.redirectTo({ url: '/pages/main/index?tab=script' }) +} +``` + +调用处同步更新: +- `handleWechatLogin` 中:`routeAfterLogin()` +- `handleLogin` 中:`routeAfterLogin()` + +### 2. `mini-program/src/pages/splash/index.vue` + +修改 `resolveInitialRoute` 函数中已登录用户的跳转逻辑: + +```javascript +if (session.status === store.SESSION_STATUS.AUTHENTICATED) { + routeOnce('/pages/main/index?tab=script', { reason: session.reason }) + return +} +``` + +不再根据 `session.hasProfile` 进行分支。 + +### 3. 保留内容 + +- `stores/app.js` 中的 `hasProfile` computed 属性**不做修改**,它仍可在其他场景(如判断是否需要引导补充资料)中使用。 +- `onboarding/index.vue` 页面**不做修改**,保留为独立的编辑资料页面。 + +## 数据流影响 + +- 登录流程:`login/splash` → `main/index?tab=script` +- 资料编辑入口:用户主动从"我的" tab 进入 `profile/index` 或 `onboarding/index` +- 无后端接口变更 + +## 测试验证 + +1. 新用户手机号登录成功后,直接进入爽文生成页面(底部 tab 高亮"爽文生成") +2. 新用户微信登录成功后,同样直接进入爽文生成页面 +3. 已登录用户冷启动(splash 页恢复会话),直接进入爽文生成页面 +4. 从"我的" tab 点击编辑资料,仍可正常进入资料编辑页面 +5. 资料编辑页面保存后,仍可正常返回爽文生成页面