feat: init

This commit is contained in:
ygx
2026-03-05 23:45:39 +08:00
commit 8fab91c5c7
214 changed files with 33682 additions and 0 deletions

View 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