110 lines
2.5 KiB
TypeScript
110 lines
2.5 KiB
TypeScript
import { defineStore } from 'pinia';
|
|||
|
|
import {
|
||
|
|
login as userLogin,
|
||
|
|
logout as userLogout,
|
||
|
|
getUserInfo,
|
||
|
|
LoginData,
|
||
|
|
getUserPermission,
|
||
|
|
} 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: '',
|
||
|
|
permission: [],
|
||
|
|
}),
|
||
|
|
|
||
|
|
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);
|
||
|
|
},
|
||
|
|
|
||
|
|
// 登陆
|
||
|
|
async login(loginForm: LoginData) {
|
||
|
|
try {
|
||
|
|
const res = await userLogin(loginForm);
|
||
|
|
setToken(res.data.token);
|
||
|
|
// 登录成功后立即获取用户权限
|
||
|
|
// await this.getUserPermissionData();
|
||
|
|
} catch (err) {
|
||
|
|
clearToken();
|
||
|
|
throw err;
|
||
|
|
}
|
||
|
|
},
|
||
|
|
logoutCallBack() {
|
||
|
|
const appStore = useAppStore();
|
||
|
|
this.resetInfo();
|
||
|
|
clearToken();
|
||
|
|
removeRouteListener();
|
||
|
|
appStore.clearServerMenu();
|
||
|
|
},
|
||
|
|
// Logout
|
||
|
|
async logout() {
|
||
|
|
try {
|
||
|
|
await userLogout();
|
||
|
|
} finally {
|
||
|
|
this.logoutCallBack();
|
||
|
|
}
|
||
|
|
},
|
||
|
|
async getUserPermissionData() {
|
||
|
|
try {
|
||
|
|
const res = await getUserPermission();
|
||
|
|
console.log(res, '权限数据');
|
||
|
|
|
||
|
|
// 将权限数据存储到store中
|
||
|
|
if (res.data && res.data.length > 0) {
|
||
|
|
this.setInfo({ permission: res.data[0].permission });
|
||
|
|
}
|
||
|
|
} catch (err) {
|
||
|
|
console.error('获取权限失败:', err);
|
||
|
|
throw err;
|
||
|
|
}
|
||
|
|
},
|
||
|
|
},
|
||
|
|
});
|
||
|
|
|
||
|
|
export default useUserStore;
|