import { store } from "@/store"; import { usePermissionStoreHook } from "@/store/modules/permission"; import { useDictStoreHook } from "@/store/modules/dict"; import AuthAPI, { type loginRequest } from "@/api/account/login"; import UserAPI, { type UserInfo } from "@/api/system/user"; import { setToken, setRefreshToken, getRefreshToken, clearToken } from "@/utils/auth"; export const useUserStore = defineStore("user", () => { const userInfo = useStorage("userInfo", {} as UserInfo); const promissionList = useStorage("promissionList", [] as string[]); localStorage.setItem("shopId", "" + userInfo.value.shopId); /** * 登录 * * @param {loginRequest} * @returns */ function login(loginRequest: loginRequest) { return new Promise((resolve, reject) => { AuthAPI.login(loginRequest) .then((data) => { Object.assign(userInfo.value, { ...data.shopInfo }); promissionList.value = data.promissionList; const token = data.tokenInfo.tokenValue; setToken(token); // Bearer eyJhbGciOiJIUzI1NiJ9.xxx.xxx setRefreshToken(token); resolve(); }) .catch((error) => { reject(error); }); }); } /** * 获取用户信息 * * @returns {UserInfo} 用户信息 */ function getUserInfo() { return new Promise((resolve, reject) => { UserAPI.getInfo(userInfo.value.shopId) .then((data) => { if (!data) { reject("Verification failed, please Login again."); return; } localStorage.setItem("shopId", "" + userInfo.value.shopId); Object.assign(userInfo.value, { ...data }); resolve(data); }) .catch((error) => { reject(error); }); }); } /** * 登出 */ function logout() { return new Promise((resolve, reject) => { clearUserData(); resolve(); // AuthAPI.logout() // .then(() => { // clearUserData(); // resolve(); // }) // .catch((error) => { // reject(error); // }); }); } /** * 刷新 token */ function refreshToken() { const refreshToken = getRefreshToken(); return new Promise((resolve, reject) => { // AuthAPI.refreshToken(refreshToken) // .then((data) => { // const { token } = data; // setToken(token); // setRefreshToken(refreshToken); // resolve(); // }) // .catch((error) => { // console.log(" refreshToken 刷新失败", error); // reject(error); // }); }); } /** * 清理用户数据 * * @returns */ function clearUserData() { return new Promise((resolve) => { clearToken(); usePermissionStoreHook().resetRouter(); useDictStoreHook().clearDictionaryCache(); resolve(); }); } return { userInfo, promissionList, getUserInfo, login, logout, clearUserData, refreshToken, }; }); /** * 用于在组件外部(如在Pinia Store 中)使用 Pinia 提供的 store 实例。 * 官方文档解释了如何在组件外部使用 Pinia Store: * https://pinia.vuejs.org/core-concepts/outside-component-usage.html#using-a-store-outside-of-a-component */ export function useUserStoreHook() { return useUserStore(store); }