Refactor user store and persist configuration
This commit is contained in:
111
stores/user.ts
111
stores/user.ts
@ -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'],
|
||||||
});
|
},
|
||||||
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user