You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
91 lines
1.9 KiB
91 lines
1.9 KiB
import { defineStore } from 'pinia';
|
|
import {
|
|
login as userLogin,
|
|
logout as userLogout,
|
|
getUserInfo,
|
|
LoginData,
|
|
} from '@/api/user';
|
|
import { setToken, clearToken } from '@/utils/auth';
|
|
import { removeRouteListener } from '@/utils/route-listener';
|
|
import { UserState } from './types';
|
|
import useAppStore from '../app';
|
|
|
|
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;
|
|
|