import { defineStore } from 'pinia'
import {
login as userLogin,
logout as userLogout,
getUserInfo,
LoginData
} from '@/api/user'
import {setToken, clearToken, clearPublckey} from '@/utils/auth'
import { removeRouteListener } from '@/utils/route-listener'
import useAppStore from '../app'
const useUserStore = defineStore('user', {
state: (): any => ({
userName: '',
nickName: '',
userId: undefined,
phonenumber: '',
email: undefined,
remark: undefined,
avatar: undefined
}),
getters: {
userInfo (state: any): any {
return { ...state }
}
},
actions: {
setInfo (partial: any) {
this.$patch(partial)
},
resetInfo () {
this.$reset()
},
async info () {
const res = await getUserInfo()
this.setInfo(res.data)
},
async login (loginForm: LoginData) {
try {
const res: any = await userLogin(loginForm)
setToken(res.token)
} catch (err) {
clearPublckey()
clearToken()
throw err
}
},
logoutCallBack () {
const appStore = useAppStore()
this.resetInfo()
clearPublckey()
clearToken()
removeRouteListener()
appStore.clearServerMenu()
},
async logout () {
try {
await userLogout()
} finally {
this.logoutCallBack()
}
}
}
})
export default useUserStore