85 lines
1.8 KiB
TypeScript
85 lines
1.8 KiB
TypeScript
|
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 => ({
|
||
|
username: undefined,
|
||
|
name: undefined,
|
||
|
avatar: undefined,
|
||
|
email: undefined,
|
||
|
phone: undefined,
|
||
|
createAt: undefined,
|
||
|
remark: undefined,
|
||
|
id: 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);
|
||
|
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;
|