mcwl-pc/app/stores/user.ts

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'],
// },
// ],
// },
// })