Spaces:
Sleeping
Sleeping
File size: 2,255 Bytes
bb9df9e | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 | import { loginApi, logoutApi } from "@/api/auth";
import { getUserInfoApi } from "@/api/user";
import { resetRouter } from "@/router";
import { store } from "@/store";
import { LoginData } from "@/api/auth/types";
import { UserInfo } from "@/api/user/types";
export const useUserStore = defineStore("user", () => {
const user = ref<UserInfo>({
roles: [],
perms: [],
});
/**
* 登录
*
* @param {LoginData}
* @returns
*/
function login(loginData: LoginData) {
return new Promise<void>((resolve, reject) => {
loginApi(loginData)
.then((response) => {
const { tokenType, accessToken } = response.data;
localStorage.setItem("accessToken", tokenType + " " + accessToken); // Bearer eyJhbGciOiJIUzI1NiJ9.xxx.xxx
resolve();
})
.catch((error) => {
reject(error);
});
});
}
// 获取信息(用户昵称、头像、角色集合、权限集合)
function getUserInfo() {
return new Promise<UserInfo>((resolve, reject) => {
getUserInfoApi()
.then(({ data }) => {
if (!data) {
reject("Verification failed, please Login again.");
return;
}
if (!data.roles || data.roles.length <= 0) {
reject("getUserInfo: roles must be a non-null array!");
return;
}
Object.assign(user.value, { ...data });
resolve(data);
})
.catch((error) => {
reject(error);
});
});
}
// user logout
function logout() {
return new Promise<void>((resolve, reject) => {
logoutApi()
.then(() => {
localStorage.setItem("accessToken", "");
location.reload(); // 清空路由
resolve();
})
.catch((error) => {
reject(error);
});
});
}
// remove token
function resetToken() {
console.log("resetToken");
return new Promise<void>((resolve) => {
localStorage.setItem("accessToken", "");
resetRouter();
resolve();
});
}
return {
user,
login,
getUserInfo,
logout,
resetToken,
};
});
// 非setup
export function useUserStoreHook() {
return useUserStore(store);
}
|