Files
front/src/store/modules/user/index.ts

98 lines
2.4 KiB
TypeScript
Raw Normal View History

2026-03-07 20:11:25 +08:00
import { login, logout } from '@/api/module/user'
import { LoginData } from '@/api/types'
import { request } from '@/api/request'
2026-03-05 23:45:39 +08:00
import { clearToken, setToken } from '@/utils/auth'
import { removeRouteListener } from '@/utils/route-listener'
import { defineStore } from 'pinia'
2026-03-07 20:11:25 +08:00
import SafeStorage, { AppStorageKey } from "@/utils/safeStorage";
2026-03-05 23:45:39 +08:00
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: '',
2026-03-07 20:11:25 +08:00
userInfo: SafeStorage.get(AppStorageKey.USER_INFO)
2026-03-05 23:45:39 +08:00
}),
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() {
2026-03-07 20:11:25 +08:00
// const res = await request.post('/rbac2/v1/user/info') as any
// request 拦截器已经返回 response.data所以 res 就是用户信息
// this.setInfo(res.data || res)
2026-03-05 23:45:39 +08:00
},
// Login
async login(loginForm: LoginData) {
try {
2026-03-07 20:11:25 +08:00
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 {
2026-03-28 15:44:57 +08:00
throw new Error('登录失败')
2026-03-07 20:11:25 +08:00
}
2026-03-05 23:45:39 +08:00
} catch (err) {
clearToken()
throw err
}
},
logoutCallBack() {
const appStore = useAppStore()
this.resetInfo()
clearToken()
removeRouteListener()
appStore.clearServerMenu()
2026-03-07 20:11:25 +08:00
SafeStorage.clearAppStorage()
2026-03-05 23:45:39 +08:00
},
// Logout
async logout() {
try {
2026-03-07 20:11:25 +08:00
// await logout()
2026-03-05 23:45:39 +08:00
} finally {
this.logoutCallBack()
}
},
},
})
export default useUserStore