import { defineStore } from 'pinia'; import { ref, computed } from 'vue'; import { getUserInfo, login } from '@/apis/user'; import tokenInfo from '@/stores/modules/token'; import client from '@/stores/modules/client'; import { useRouter } from 'vue-router'; export const useUserInfo = defineStore('userInfo', () => { // 状态(State) const tokenInfoStore = new tokenInfo() const loginShow = ref(false); // 控制登录弹窗的显示状态 const userInfo = ref({}); // 用户的详细信息 // Actions(操作) /** * 更新用户信息。 * * @param {any} data - 新的用户信息数据。 */ const updateUserInfo = (data: any) => { userInfo.value = data; }; /** * 更新用户的登录令牌。 * * @param {string} data - 新的登录令牌。 */ const updateToken = (data: string) => { tokenInfoStore.updateToken(data) }; /** * 更新登录弹窗的显示状态。 * * @param {boolean} data - 是否显示登录弹窗。 */ const updateLoginShow = (data: boolean) => { loginShow.value = data; }; /** * 执行用户登录操作。 * * @param {any} data - 登录所需的用户凭据。 * @returns {Promise} 登录接口返回的结果。 * @throws {Error} 如果登录失败,抛出错误。 */ const loginAction = async (data: any) => { try { const res = await login(data); // 调用登录接口 await updateToken(res.data.token); // 更新登录令牌 // await getInfo(); // 获取用户信息 return res; } catch (error) { console.error('登录失败:', error); throw error; } }; /** * 执行用户退出登录操作。 * * @param {any} data - 退出登录所需的参数。 * @returns {Promise} 退出登录的结果。 * @throws {Error} 如果退出登录失败,抛出错误。 */ const loginOut = async (data: any) => { try { // 关闭所有子窗口 try { const clientStore = client(); await clientStore.ipc.invoke('controller.utils.closeAllWindows'); console.log('所有子窗口已关闭'); } catch (error) { console.error('关闭子窗口失败:', error); // 关闭窗口失败不影响退出登录流程 } // 清空用户信息 await updateToken(''); // 更新登录令牌 await updateUserInfo({}); // 跳转到首页 try { window.location.href = '/' console.log('已跳转到首页'); } catch (error) { console.error('跳转到首页失败:', error); // 跳转失败不影响退出登录流程 } } catch (error) { console.error('退出登录失败:', error); throw error; } }; /** * 获取用户信息并更新状态。 * * @returns {Promise} 用户信息数据。 * @throws {Error} 如果获取用户信息失败,抛出错误。 */ const getInfo = async () => { try { const res = await getUserInfo({ device:'aigc', }); // 调用获取用户信息接口 const { data } = res; if (!data) { updateToken(''); // 如果没有数据,清空令牌 throw new Error('请重新登录!'); } updateUserInfo(data); // 更新用户信息 return data; } catch (error) { console.error('获取用户信息失败:', error); throw error; } }; return { loginShow, userInfo, updateUserInfo, updateLoginShow, loginAction, loginOut, getInfo, }; }); export default useUserInfo;