Update store paths and add persistence plugin

This commit is contained in:
wangqiao
2025-08-26 16:25:58 +08:00
parent e021ac1e05
commit 4263a0a235
27 changed files with 61 additions and 31 deletions

4
stores/index.ts Normal file
View File

@ -0,0 +1,4 @@
import { createPinia } from 'pinia'
const store = createPinia()
export default store

60
stores/permissions.ts Normal file
View File

@ -0,0 +1,60 @@
import { defineStore } from 'pinia'
// import { getPermissions } from '~/api/common'
import type { IPermissions } from '~/api/common/types'
// type TPayload = {
// menuId: string
// fullPath: string
// }
export default defineStore('usePermissionStore', {
state() {
return {
// menuPermission 作为Key
permissionKeysMap: new Map<string, IPermissions>(),
// 路由作为Key 用作缓存
permissionRouteMap: new Map<string, IPermissions>(),
// 菜单权限原值
permissions: [],
}
},
actions: {
SET_PERMISSIONS(payload: { list: IPermissions[]; fullPath: string }) {
if (payload && Array.isArray(payload.list) && payload.fullPath) {
const btnsMap = new Map()
const permissionRouteMap = new Map()
payload.list.forEach((item) => {
btnsMap.set(item.menuPermission, item)
})
permissionRouteMap.set(payload.fullPath, payload.list)
this.permissionKeysMap = btnsMap
this.permissionRouteMap = permissionRouteMap
this.permissions = payload.list as never[]
}
},
// fetchPermissions(payload: TPayload) {
// return new Promise(async (resolve) => {
// const permissions: {
// fullPath: string
// menuId: string
// list: IPermissions[]
// } = {
// menuId: '',
// fullPath: payload.fullPath,
// list: [],
// }
// try {
// const res = await getPermissions({
// menuId: payload.menuId,
// })
// if ((res.statusCode === '00000' || res.code === 0) && res.data && Array.isArray(res.data)) {
// permissions.list = res.data
// }
// } catch (error) {
// permissions.list = []
// }
// this.SET_PERMISSIONS(permissions)
// resolve(true)
// })
// },
},
})

113
stores/user.ts Normal file
View File

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