107 lines
2.1 KiB
TypeScript
107 lines
2.1 KiB
TypeScript
// stores/user.ts
|
|
import { defineStore } from 'pinia'
|
|
import { ref } from 'vue'
|
|
import {
|
|
parse,
|
|
stringify,
|
|
} from 'zipson'
|
|
|
|
export const useUserStore = defineStore('user', () => {
|
|
const isLoggedIn = ref(false)
|
|
const token = ref('')
|
|
const userInfo = ref({})
|
|
|
|
function setToken(userToken: string) {
|
|
isLoggedIn.value = true
|
|
token.value = userToken
|
|
localStorage.setItem('token', userToken)
|
|
}
|
|
|
|
function setUserInfo(info: any) {
|
|
userInfo.value = info
|
|
}
|
|
|
|
// 登出
|
|
function logout() {
|
|
isLoggedIn.value = false
|
|
token.value = ''
|
|
localStorage.removeItem('token')
|
|
}
|
|
|
|
// 检查登录状态
|
|
function checkLoginStatus() {
|
|
const savedToken = localStorage.getItem('token')
|
|
if (savedToken) {
|
|
isLoggedIn.value = true
|
|
token.value = savedToken
|
|
}
|
|
}
|
|
|
|
return {
|
|
isLoggedIn,
|
|
token,
|
|
logout,
|
|
checkLoginStatus,
|
|
setToken,
|
|
setUserInfo,
|
|
userInfo,
|
|
}
|
|
}, {
|
|
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
|
|
// debugger
|
|
// },
|
|
// setUserInfo(userInfo: Record<string, any>) {
|
|
// this.userInfo = userInfo
|
|
// debugger
|
|
// },
|
|
// // logout() {
|
|
// // getLogout().then(() => {
|
|
// // this.userInfo = {}
|
|
// // this.token = ''
|
|
// // })
|
|
// // }
|
|
// },
|
|
// getters: {
|
|
// // 定义计算属性
|
|
// },
|
|
// persist: {
|
|
// enabled: true,
|
|
// strategies: [
|
|
// {
|
|
// // key: 'userInfo',
|
|
// Storage: localStorage,
|
|
// paths: ['userInfo', 'token'],
|
|
// },
|
|
// ],
|
|
// },
|
|
// })
|