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({ roles: [], perms: [], }); const isGetAuth = ref(false); //是否已经请求过auth接口活的role和menus了 /** * 登录 * * @param {LoginData} * @returns */ function login(loginData: LoginData) { return new Promise((resolve, reject) => { loginApi(loginData) .then(async (response) => { await getUserInfo(); // const { tokenType, accessToken } = response.data; // localStorage.setItem("token", tokenType + " " + accessToken); // Bearer eyJhbGciOiJIUzI1NiJ9.xxx.xxx localStorage.setItem("token", response.data + ""); resolve(); }) .catch((error) => { reject(error); }); }); } // 获取信息(用户昵称、头像、角色集合、权限集合) function getUserInfo() { return new Promise((resolve, reject) => { getUserInfoApi() .then(({ data }) => { if (!data) { reject("Verification failed, please Login again."); return; } user.value.avatar = import.meta.env.VITE_APP_UPLOAD_URL + data.avatar; user.value.userId = data.id; user.value.username = data.userName; user.value.roles = data.roles; user.value.deptId = data.deptId; user.value.stationType = data.stationType; isGetAuth.value = true; user.value.perms = data.permissions ?? []; resolve(data); }) .catch((error) => { reject(error); }); }); } // user logout function logout() { return new Promise((resolve, reject) => { logoutApi() .then(() => { localStorage.setItem("token", ""); location.reload(); // 清空路由 user.value = { roles: [], perms: [] }; resolve(); }) .catch((error) => { reject(error); }); }); } // remove token function resetToken() { console.log("resetToken"); return new Promise((resolve) => { localStorage.setItem("token", ""); resetRouter(); resolve(); }); } return { user, login, getUserInfo, logout, resetToken, isGetAuth, }; }, { persist: true } ); // 非setup export function useUserStoreHook() { return useUserStore(store); }