长城汽车软件包管理平台
whychdw
2025-04-26 be81587ef4c7a1711884d7ca8f27cbf85e2d7558
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
import { store } from "@/store";
import { usePermissionStoreHook } from "@/store/modules/permission.store";
import { useDictStoreHook } from "@/store/modules/dict.store";
 
import { setAccessToken, clearToken } from "@/utils/auth";
import UserApi, { type LoginFormData, LoginResult, UserInfo } from "@/api/user";
 
export const useUserStore = defineStore("user", () => {
  const userInfo = useStorage<UserInfo>("userInfo", {} as UserInfo);
 
  /**
   * 登录
   *
   * @returns
   * @param loginData
   */
  function login(loginData: LoginFormData) {
    return new Promise<void>((resolve, reject) => {
      const { username: name, password: pwd } = loginData;
      UserApi.login(name, pwd)
        .then((result: LoginResult) => {
          console.log(result);
          const { code, data, data2 } = result;
          if (code === 1 && data) {
            console.log(123);
            setAccessToken("fg");
            Object.assign(userInfo.value, { ...data2, ...{ roles: [], perms: [] } });
            if (userInfo.value.roleId === 2) {
              userInfo.value.roles = ["admin"];
              userInfo.value.perms = [
                "sys:user:add",
                "sys:user:edit",
                "sys:user:delete",
                "sys:user:upload",
              ];
            } else {
              userInfo.value.roles = ["customer"];
            }
            resolve();
          } else {
            reject("登录失败");
          }
        })
        .catch((error) => {
          reject(error);
        });
    });
  }
 
  /**
   * 登出
   */
  function logout() {
    return new Promise<void>((resolve, reject) => {
      UserApi.logout()
        .then(() => {
          clearSessionAndCache();
          resolve();
        })
        .catch((error) => {
          reject(error);
        });
    });
  }
 
  /**
   * 清除用户会话和缓存
   */
  function clearSessionAndCache() {
    return new Promise<void>((resolve) => {
      clearToken();
      usePermissionStoreHook().resetRouter();
      useDictStoreHook().clearDictCache();
      resolve();
    });
  }
 
  return {
    userInfo,
    login,
    logout,
    clearSessionAndCache,
  };
});
 
/**
 * 用于在组件外部(如在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);
}