2026-02-26 14:44:36 +08:00

49 lines
1.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# user.ts (Store)
**路径**`src/stores/user.ts`
## 功能用途
用户登录态与基础信息的 Pinia Store管理 token、user、余额并提供鉴权请求头。登录数据持久化到 localStorage`poly-user`)。
## 核心能力
- `token``user`:登录凭证与用户信息
- `isLoggedIn``avatarUrl`:派生状态
- `balance`USDC 余额显示(如 "0.00"),支持 **UserSocket** 实时推送更新
- `setUser`:设置登录数据并持久化,登录成功后自动连接 UserSocket
- `logout`:清空并断开 UserSocket
- `getAuthHeaders`:返回 `{ 'x-token', 'x-user-id' }`,未登录时返回 `undefined`
- `fetchUserInfo``fetchUsdcBalance`:拉取并更新用户信息与余额;`fetchUserInfo` 兼容多种 API 字段名
- `connectUserSocket``disconnectUserSocket`:连接/断开 `sdk/userSocket` 的 UserSdk用于订单/持仓/余额实时推送
## 使用方式
```typescript
import { useUserStore } from '@/stores/user'
const userStore = useUserStore()
// 登录后设置
userStore.setUser({ token: 'xxx', user: { id: 1, nickName: 'User' } })
// 鉴权请求
const headers = userStore.getAuthHeaders()
if (headers) {
await someApiCall(undefined, { headers })
}
// 刷新余额
await userStore.fetchUsdcBalance()
```
## 扩展方式
1. **订单/持仓推送**:在 `connectUserSocket` 中注册 `onOrderUpdate``onPositionUpdate`,触发 Wallet 刷新
2. **多端登录**:扩展 `setUser` 支持多设备 token 管理
3. **Token 刷新**:在 `getAuthHeaders` 或请求拦截器中加入 refresh 逻辑
## 登录后刷新用户信息
钱包登录Login.vue成功后需调用 `fetchUserInfo()` 以获取完整用户信息头像、昵称。App.vue 在 `onMounted``watch(isLoggedIn)` 时也会调用,确保自动登录或刷新页面后能正确显示。