| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- 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<any>} 登录接口返回的结果。
- * @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<any>} 退出登录的结果。
- * @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<any>} 用户信息数据。
- * @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;
|