126 lines
2.8 KiB
TypeScript
126 lines
2.8 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() {
|
|
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'],
|
|
// },
|
|
// ],
|
|
// },
|
|
// })
|