Files
front/src/store/modules/user/index.ts
2026-05-02 09:59:06 +08:00

98 lines
2.4 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { login, logout } from '@/api/module/user'
import { LoginData } from '@/api/types'
import { request } from '@/api/request'
import { clearToken, setToken } from '@/utils/auth'
import { removeRouteListener } from '@/utils/route-listener'
import { defineStore } from 'pinia'
import SafeStorage, { AppStorageKey } from '@/utils/safeStorage'
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: '',
userInfo: SafeStorage.get(AppStorageKey.USER_INFO),
}),
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 request.post('/rbac2/v1/user/info') as any
// request 拦截器已经返回 response.data所以 res 就是用户信息
// this.setInfo(res.data || res)
},
// Login
async login(loginForm: LoginData) {
try {
const { code, details } = (await login(loginForm as any)) as any
if (code === 0 && details?.token) {
setToken(details.token)
SafeStorage.set(AppStorageKey.USER_INFO, details)
this.userInfo = details
} else {
throw new Error('登录失败')
}
} catch (err) {
clearToken()
throw err
}
},
logoutCallBack() {
const appStore = useAppStore()
this.resetInfo()
clearToken()
removeRouteListener()
appStore.clearServerMenu()
SafeStorage.clearAppStorage()
},
// Logout
async logout() {
try {
// await logout()
} finally {
this.logoutCallBack()
}
},
},
})
export default useUserStore