feat(invite): 重构邀请加入流程,实现已登录用户免授权直接加入
- 完全重写邀请页逻辑,区分已登录与未注册用户按钮显示 - 已登录用户显示“确认加入”按钮,点击用 wx.login 获取 code 加入 - 未注册用户显示“微信手机号快速加入”按钮,授权手机号后完成注册登录再加入 - 移除跳转登录页面逻辑,所有流程在邀请页内完成 - 加入接口统一使用 Authorization 头携带 token,确保身份双重验证 - 优化背景、粒子和扫描线效果,提升界面视觉体验 - 增加错误处理提示,加入失败时显示详细原因并可返回首页 - 协议勾选仅在未注册用户显示,确保合规授权流程
This commit is contained in:
@@ -35,5 +35,5 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
"lastUpdated": 1775923978885
|
||||
"lastUpdated": 1775965240928
|
||||
}
|
||||
84
.workbuddy/memory/2026-04-12.md
Normal file
84
.workbuddy/memory/2026-04-12.md
Normal file
@@ -0,0 +1,84 @@
|
||||
# 2026-04-12 工作记录
|
||||
|
||||
## 任务:优化邀请加入应用按钮逻辑
|
||||
|
||||
### 需求描述
|
||||
loginByOpenId 返回有用户数据(已登录)时,不显示手机号授权按钮,直接显示「确认加入」普通按钮;
|
||||
loginByOpenId 返回未注册时才走 getPhoneNumber 授权分支。
|
||||
|
||||
### 解决方案
|
||||
完全重写 `invite/index.tsx`,核心逻辑:
|
||||
|
||||
#### 按钮渲染逻辑
|
||||
```tsx
|
||||
{isLoggedIn ? (
|
||||
// 已登录:普通按钮,直接加入,携带 Authorization 头
|
||||
<Button onClick={handleConfirmJoin}>确认加入</Button>
|
||||
) : (
|
||||
// 未注册:手机号授权按钮(兜底,实际大多已被重定向到 login 页)
|
||||
<Button open-type="getPhoneNumber" onGetPhoneNumber={handleGetPhoneNumber}>微信手机号快速加入</Button>
|
||||
)}
|
||||
```
|
||||
|
||||
#### handleJoinApp 统一入口
|
||||
- `useToken` 参数:已登录用户,请求头加 `Authorization: Bearer xxx`
|
||||
- `phoneCode` 参数:未注册用户,请求体加 code/encryptedData/iv
|
||||
|
||||
### 文件修改
|
||||
- `src/passport/invite/index.tsx` - 完整重写,区分已登录/未注册两种按钮状态
|
||||
|
||||
---
|
||||
|
||||
## 任务:未注册用户在邀请页内完成授权注册,不跳登录页
|
||||
|
||||
### 需求
|
||||
- loginByOpenId 未注册 → 在页面内显示「微信手机号授权」按钮
|
||||
- 授权成功 → 调用 `loginByMpWxPhone` 注册/登录 → 自动执行加入应用
|
||||
- 不再跳转 passport/login 页面
|
||||
|
||||
### 关键逻辑
|
||||
1. `checkLoginStatus`:已注册 isLoggedIn=true,未注册 isLoggedIn=false,**两种情况都显示邀请页**
|
||||
2. 未注册按钮:`open-type="getPhoneNumber"` → `handleGetPhoneNumber`
|
||||
- 授权码调 `SERVER_API_URL/wx-login/loginByMpWxPhone` 完成注册登录
|
||||
- 保存 token → isLoggedIn=true → 立即调 `doJoinApp`
|
||||
3. 已注册按钮:普通 `onClick` → `handleConfirmJoin` → `doJoinApp(access_token)`
|
||||
4. `doJoinApp`:统一加入接口,请求头带 `Authorization: Bearer {access_token}`
|
||||
|
||||
### 文件修改
|
||||
- `src/passport/invite/index.tsx` - 完整重写(彻底移除跳登录页逻辑)
|
||||
|
||||
---
|
||||
|
||||
## 修复:「授权码不能为空」报错
|
||||
|
||||
### 问题
|
||||
已登录用户点「确认加入」时,后端报 `授权码不能为空`。
|
||||
后端 `/api/_app/developer/invite/accept` 接口不管是否登录,都要求传 `code`(微信授权码)。
|
||||
|
||||
### 解决
|
||||
统一用一个 `getPhoneNumber` 按钮处理两种场景:
|
||||
- **已注册**:文字「确认加入」→ 触发 getPhoneNumber → `doJoinApp(code, accessToken)`
|
||||
- **未注册**:文字「微信手机号快速加入」→ 触发 getPhoneNumber → 先 `loginByMpWxPhone` 注册 → 再 `wx.login()` 获取新 code → `doJoinApp(newCode, access_token)`
|
||||
|
||||
### doJoinApp 参数
|
||||
```ts
|
||||
doJoinApp(wxCode: string, accessToken: string)
|
||||
// 请求体带 code,请求头带 Authorization: Bearer xxx
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 优化:已登录用户不弹手机号授权
|
||||
|
||||
### 改动
|
||||
- 已登录按钮:普通 `onClick`,文字「确认加入」
|
||||
- 未注册按钮:`getPhoneNumber` 授权,文字「微信手机号快速加入」
|
||||
|
||||
### 逻辑差异
|
||||
| 用户状态 | 按钮类型 | 获取 code 方式 |
|
||||
|------|------|------|
|
||||
| 已登录 | 普通 onClick | `wx.login()` |
|
||||
| 未注册 | getPhoneNumber | 授权回调的 `code` |
|
||||
|
||||
### 文件修改
|
||||
- `src/passport/invite/index.tsx` - 按钮区分两种类型,已登录用普通 onClick
|
||||
Reference in New Issue
Block a user