feat: init
This commit is contained in:
86
src/store/modules/user/index.ts
Normal file
86
src/store/modules/user/index.ts
Normal file
@@ -0,0 +1,86 @@
|
||||
import { LoginData, getUserInfo, login as userLogin, logout as userLogout } from '@/api/user'
|
||||
import { clearToken, setToken } from '@/utils/auth'
|
||||
import { removeRouteListener } from '@/utils/route-listener'
|
||||
import { defineStore } from 'pinia'
|
||||
import useAppStore from '../app'
|
||||
import { UserState } from './types'
|
||||
|
||||
const useUserStore = defineStore('user', {
|
||||
state: (): UserState => ({
|
||||
name: undefined,
|
||||
avatar: undefined,
|
||||
job: undefined,
|
||||
organization: undefined,
|
||||
location: undefined,
|
||||
email: undefined,
|
||||
introduction: undefined,
|
||||
personalWebsite: undefined,
|
||||
jobName: undefined,
|
||||
organizationName: undefined,
|
||||
locationName: undefined,
|
||||
phone: undefined,
|
||||
registrationDate: undefined,
|
||||
accountId: undefined,
|
||||
certification: undefined,
|
||||
role: '',
|
||||
}),
|
||||
|
||||
getters: {
|
||||
userInfo(state: UserState): UserState {
|
||||
return { ...state }
|
||||
},
|
||||
},
|
||||
|
||||
actions: {
|
||||
switchRoles() {
|
||||
return new Promise((resolve) => {
|
||||
this.role = this.role === 'user' ? 'admin' : 'user'
|
||||
resolve(this.role)
|
||||
})
|
||||
},
|
||||
// Set user's information
|
||||
setInfo(partial: Partial<UserState>) {
|
||||
this.$patch(partial)
|
||||
},
|
||||
|
||||
// Reset user's information
|
||||
resetInfo() {
|
||||
this.$reset()
|
||||
},
|
||||
|
||||
// Get user's information
|
||||
async info() {
|
||||
const res = await getUserInfo()
|
||||
|
||||
this.setInfo(res.data)
|
||||
},
|
||||
|
||||
// Login
|
||||
async login(loginForm: LoginData) {
|
||||
try {
|
||||
const res = await userLogin(loginForm)
|
||||
setToken(res.data.token)
|
||||
} catch (err) {
|
||||
clearToken()
|
||||
throw err
|
||||
}
|
||||
},
|
||||
logoutCallBack() {
|
||||
const appStore = useAppStore()
|
||||
this.resetInfo()
|
||||
clearToken()
|
||||
removeRouteListener()
|
||||
appStore.clearServerMenu()
|
||||
},
|
||||
// Logout
|
||||
async logout() {
|
||||
try {
|
||||
await userLogout()
|
||||
} finally {
|
||||
this.logoutCallBack()
|
||||
}
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
export default useUserStore
|
||||
Reference in New Issue
Block a user