mcwl-pc/app/stores/user.ts

128 lines
2.9 KiB
TypeScript

import defaultAvatar from '@/assets/img/default-avatar.png'
// stores/user.ts
import { defineStore } from 'pinia'
import { ref } from 'vue'
export interface UserInfoType {
nickName: string
avatar: string
brief: string
userId: number | string
}
export const useUserStore = defineStore('user', () => {
const isLoggedIn = ref(false)
const token = ref('')
// const userInfo = ref<UserInfoType>({})
const userInfo = ref<UserInfoType | null>(null)
function setToken(userToken: string) {
isLoggedIn.value = true
token.value = userToken
// localStorage.setItem('token', userToken)
}
function setUserInfo(info: any) {
userInfo.value = info
if (!info.avatar) {
userInfo.value.avatar = defaultAvatar
}
}
async function getUserInfo() {
if (token.value) {
const res = await request.get('/system/user/selectUserById', {
token: token.value,
})
if (res.code === 200) {
res.data.avatar = res.data.avatar || defaultAvatar
setUserInfo(res.data)
}
}
}
// 登出
function logout() {
isLoggedIn.value = false
token.value = ''
userInfo.value = {} as UserInfoType
}
// 检查登录状态
function checkLoginStatus() {
const savedToken = localStorage.getItem('token')
if (savedToken) {
isLoggedIn.value = true
token.value = savedToken
}
}
return {
isLoggedIn,
token,
logout,
checkLoginStatus,
setToken,
setUserInfo,
userInfo,
getUserInfo,
}
}, {
persist: {
key: 'mc-user-store',
// paths: ['isLoggedIn', 'mymcname', 'token', 'userInfo'], // 只持久化 token
storage: import.meta.client ? localStorage : undefined,
},
// persist: {
// storage: {
// getItem(key) {
// return window.localStorage.getItem(key)
// },
// setItem(key, value) {
// window.localStorage.setItem(key, value)
// },
// },
// serializer: {
// deserialize: parse,
// serialize: stringify,
// },
// },
})
// import { defineStore } from 'pinia'
// interface State {
// token: string
// userInfo: Record<string, any> // 或者定义一个更具体的类型
// }
// export const useUserStore = defineStore('user', {
// state: (): State => ({
// token: '',
// userInfo: {},
// }),
// actions: {
// setToken(token: string) {
// this.token = token
// },
// setUserInfo(userInfo: Record<string, any>) {
// this.userInfo = userInfo
// },
// // logout() {
// // getLogout().then(() => {
// // this.userInfo = {}
// // this.token = ''
// // })
// // }
// },
// getters: {
// // 定义计算属性
// },
// persist: {
// enabled: true,
// strategies: [
// {
// // key: 'userInfo',
// Storage: localStorage,
// paths: ['userInfo', 'token'],
// },
// ],
// },
// })