mirror of
https://github.com/memohai/Memoh.git
synced 2026-04-25 07:00:48 +09:00
57 lines
1.1 KiB
TypeScript
57 lines
1.1 KiB
TypeScript
import { defineStore } from 'pinia'
|
|
import { reactive,watch } from 'vue'
|
|
import { useLocalStorage } from '@vueuse/core'
|
|
import { useRouter } from 'vue-router'
|
|
|
|
|
|
type user={
|
|
'id': string,
|
|
'username': string,
|
|
'role': string,
|
|
'displayName': string
|
|
}
|
|
|
|
|
|
export const useUserStore = defineStore('user', () => {
|
|
const userInfo = reactive<user>({
|
|
'id': '',
|
|
'username': '',
|
|
'role': '',
|
|
'displayName': ''
|
|
})
|
|
|
|
const localToken=useLocalStorage('token','')
|
|
|
|
|
|
const login = (userData: user,token:string) => {
|
|
localToken.value=token
|
|
for (const key of Object.keys(userData) as (keyof user)[]) {
|
|
userInfo[key] = userData[key]
|
|
}
|
|
}
|
|
|
|
const exitLogin = () => {
|
|
localToken.value=''
|
|
for (const key of Object.keys(userInfo) as (keyof user)[]) {
|
|
userInfo[key]=''
|
|
}
|
|
}
|
|
const router=useRouter()
|
|
watch(localToken, () => {
|
|
|
|
if (!localToken.value) {
|
|
exitLogin()
|
|
router.replace({name:'Login'})
|
|
}
|
|
}, {
|
|
immediate: true
|
|
})
|
|
return {
|
|
userInfo,
|
|
login,
|
|
exitLogin
|
|
}
|
|
}, {
|
|
persist:true
|
|
})
|