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

1.8 KiB
Raw Blame History

user.ts (Store)

路径src/stores/user.ts

功能用途

用户登录态与基础信息的 Pinia Store管理 token、user、余额并提供鉴权请求头。登录数据持久化到 localStoragepoly-user)。

核心能力

  • tokenuser:登录凭证与用户信息
  • isLoggedInavatarUrl:派生状态
  • balanceUSDC 余额显示(如 "0.00"),支持 UserSocket 实时推送更新
  • setUser:设置登录数据并持久化,登录成功后自动连接 UserSocket
  • logout:清空并断开 UserSocket
  • getAuthHeaders:返回 { 'x-token', 'x-user-id' },未登录时返回 undefined
  • fetchUserInfofetchUsdcBalance:拉取并更新用户信息与余额;fetchUserInfo 兼容多种 API 字段名
  • connectUserSocketdisconnectUserSocket:连接/断开 sdk/userSocket 的 UserSdk用于订单/持仓/余额实时推送

使用方式

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 中注册 onOrderUpdateonPositionUpdate,触发 Wallet 刷新
  2. 多端登录:扩展 setUser 支持多设备 token 管理
  3. Token 刷新:在 getAuthHeaders 或请求拦截器中加入 refresh 逻辑

登录后刷新用户信息

钱包登录Login.vue成功后需调用 fetchUserInfo() 以获取完整用户信息头像、昵称。App.vue 在 onMountedwatch(isLoggedIn) 时也会调用,确保自动登录或刷新页面后能正确显示。