Refactor user store and persist configuration

This commit is contained in:
wangqiao
2025-08-29 10:27:19 +08:00
parent 41922df68b
commit 0de028d6eb

View File

@ -1,113 +1,106 @@
import { defineStore, skipHydrate } from "pinia"; import { defineStore, skipHydrate } from 'pinia'
import refreshToken from "~/utils/RefreshToken"; import refreshToken from '~/utils/RefreshToken'
import { getUserInfo } from "~/api/common/index"; import { getUserInfo } from '~/api/common/index'
import type { AppMemberUserInfoRespVO } from "~/api/common/types"; import type { AppMemberUserInfoRespVO } from '~/api/common/types'
import MQTTClient from "~/utils/mqttClient"; import MQTTClient from '~/utils/mqttClient'
import { socialLoginByCode } from "~/api/pay"; import { socialLoginByCode } from '~/api/pay'
export default defineStore("useUserStore", {
export default defineStore('useUserStore', {
state: () => ({ state: () => ({
token: refreshToken.getToken().token || '', token: refreshToken.getToken().token || '',
refreshToken: refreshToken.getToken().refreshToken || "", refreshToken: refreshToken.getToken().refreshToken || '',
userId: refreshToken.getToken().userId || "", userId: refreshToken.getToken().userId || '',
userName: refreshToken.getToken().userName || "", userName: refreshToken.getToken().userName || '',
userInfoRes: (refreshToken.getToken().userInfo || userInfoRes: (refreshToken.getToken().userInfo || {}) as AppMemberUserInfoRespVO,
{}) as AppMemberUserInfoRespVO,
mqttClient: null as MQTTClient | null, mqttClient: null as MQTTClient | null,
}), }),
actions: { actions: {
setToken(token: string) { setToken(token: string) {
this.token = token; this.token = token
}, },
setRefreshToken(refreshToken: string) { setRefreshToken(refreshToken: string) {
this.refreshToken = refreshToken; this.refreshToken = refreshToken
}, },
setUserId(userId: string) { setUserId(userId: string) {
this.userId = userId; this.userId = userId
}, },
setUserName(userName: string) { setUserName(userName: string) {
this.userName = userName; this.userName = userName
}, },
logout() { logout() {
refreshToken.removeToken(); refreshToken.removeToken()
localStorage.removeItem('tuxixi-store')
if (self === top) { if (self === top) {
navigateTo("/"); navigateTo('/')
} else { } else {
window.top?.postMessage({ event: "logout" }, "*"); window.top?.postMessage({ event: 'logout' }, '*')
} }
}, },
async getUserInfo() { async getUserInfo() {
const user = useUserInfo(); const user = useUserInfo()
const res = await getUserInfo(); const res = await getUserInfo()
if (res.code === 0) { if (res.code === 0) {
this.userInfoRes = res.data; this.userInfoRes = res.data
refreshToken.setUserInfo(res.data); refreshToken.setUserInfo(res.data)
user.value = res.data; user.value = res.data
// 建立连接mqtt // 建立连接mqtt
this.connectMqtt(); this.connectMqtt()
} }
}, },
// 建立连接mqtt // 建立连接mqtt
async connectMqtt() { async connectMqtt() {
if (import.meta.client) { if (import.meta.client) {
this.mqttClient = new MQTTClient("wss://www.tuxixi.net/mqtt", { this.mqttClient = new MQTTClient('wss://www.tuxixi.net/mqtt', {
clientId: this.userInfoRes.id, clientId: this.userInfoRes.id,
}); })
await this.mqttClient.connect(); await this.mqttClient.connect()
await this.mqttClient?.subscribe( await this.mqttClient?.subscribe(`zbjk_message_single/${this.userInfoRes.id}`)
`zbjk_message_single/${this.userInfoRes.id}` await this.mqttClient?.subscribe(`zbjk_message_kefu/${this.userInfoRes.id}`)
);
await this.mqttClient?.subscribe(
`zbjk_message_kefu/${this.userInfoRes.id}`
);
} }
}, },
async getToken(row: any) { async getToken(row: any) {
const app = useNuxtApp(); const app = useNuxtApp()
try { try {
// 验证state // 验证state
if ( if (localStorage.getItem('wechat_login_state') !== row.state && localStorage.getItem('qq_login_state') !== row.state) {
localStorage.getItem("wechat_login_state") !== row.state && ElMessage.error('验证失败,请重新登录')
localStorage.getItem("qq_login_state") !== row.state return
) {
ElMessage.error("验证失败,请重新登录");
return;
} }
const res = await socialLoginByCode({ const res = await socialLoginByCode({
code: row.code, code: row.code,
state: row.state, state: row.state,
type: Number(row.type), // type: 32-微信开放平台 35-腾讯QQ type: Number(row.type), // type: 32-微信开放平台 35-腾讯QQ
}); })
const { code, data } = res; const { code, data } = res
if (code === 0 && data.openid) { if (code === 0 && data.openid) {
// 打开登录界面 // 打开登录界面
if (!data.accessToken) { if (!data.accessToken) {
ElMessage.error("因你未绑定手机号,请先绑定手机号"); ElMessage.error('因你未绑定手机号,请先绑定手机号')
app.$openLogin("verify", row.code, row.type, row.state); app.$openLogin('verify', row.code, row.type, row.state)
} else { } else {
refreshToken.setToken(data.accessToken, data.refreshToken); refreshToken.setToken(data.accessToken, data.refreshToken)
refreshToken.setUserId(data.userId.toString()); refreshToken.setUserId(data.userId.toString())
// refreshToken.setUserName(loginForm.mobile) // refreshToken.setUserName(loginForm.mobile)
this.setToken(data.accessToken); this.setToken(data.accessToken)
this.setUserId(data.userId.toString()); this.setUserId(data.userId.toString())
// userStore.setUserName(loginForm.mobile) // userStore.setUserName(loginForm.mobile)
this.setRefreshToken(data.refreshToken); this.setRefreshToken(data.refreshToken)
// 获取信息 // 获取信息
await this.getUserInfo(); await this.getUserInfo()
} }
} else { } else {
console.error("获取token失败:", res.msg); console.error('获取token失败:', res.msg)
} }
} catch (error) { } catch (error) {
console.error("getToken error:", error); console.error('getToken error:', error)
} }
}, },
}, },
persist: import.meta.client && { persist: import.meta.client && {
storage: localStorage, key: 'tuxixi-store',
pick: ['token', 'refreshToken', 'userId', 'userName', 'userInfoRes'], storage: localStorage,
} pick: ['token', 'refreshToken', 'userId', 'userName', 'userInfoRes'],
}); },
})