bill-fontend/src/store/modules/user/index.ts

106 lines
2.3 KiB
TypeScript
Raw Normal View History

2023-11-16 17:11:49 +08:00
import { defineStore } from 'pinia';
import {
login as userLogin,
logout as userLogout,
switchRole,
2023-11-16 17:11:49 +08:00
getUserInfo,
LoginData,
2024-01-17 07:46:08 +08:00
me,
2023-11-16 17:11:49 +08:00
} 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,
2024-01-17 07:46:08 +08:00
nickName: undefined,
2023-11-16 17:11:49 +08:00
avatar: undefined,
email: undefined,
phone: undefined,
2024-01-17 07:46:08 +08:00
address: undefined,
2023-11-16 17:11:49 +08:00
createAt: undefined,
remark: undefined,
id: undefined,
role: undefined,
roles: undefined,
permissions: [],
2024-01-17 07:46:08 +08:00
headerName: '',
tokenDate: '',
2023-11-16 17:11:49 +08:00
}),
getters: {
userInfo(state: UserState): UserState {
return { ...state };
},
},
actions: {
// switchRoles() {
// return new Promise((resolve) => {
// this.permissions = this.permissions === 'user' ? 'admin' : 'user';
// resolve(this.permissions);
// });
// },
async switchRoles(roleId: number) {
const res = await switchRole(roleId);
this.setInfo(res.data);
return res;
2023-11-16 17:11:49 +08:00
},
// 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);
},
2024-01-17 07:46:08 +08:00
// Get user's crsf
async me() {
const res = await me();
this.headerName = res.data.csrf.headerName;
this.tokenDate = res.data.csrf.token;
return res;
},
2023-11-16 17:11:49 +08:00
// Login
2024-01-17 07:46:08 +08:00
async login(loginForm: LoginData, headerName: string, token: string) {
2023-11-16 17:11:49 +08:00
try {
2024-01-17 07:46:08 +08:00
const res = await userLogin(loginForm, headerName, token);
setToken(token);
2023-11-16 17:11:49 +08:00
} catch (err) {
clearToken();
throw err;
}
},
logoutCallBack() {
const appStore = useAppStore();
this.resetInfo();
clearToken();
removeRouteListener();
appStore.clearServerMenu();
},
// Logout
async logout() {
try {
await userLogout();
} finally {
this.logoutCallBack();
}
},
},
persist: true,
2023-11-16 17:11:49 +08:00
});
export default useUserStore;