user.ts 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. import { loginApi, logoutApi } from "@/api/auth";
  2. import { getUserInfoApi } from "@/api/user";
  3. import { resetRouter } from "@/router";
  4. import { store } from "@/store";
  5. import { LoginData } from "@/api/auth/types";
  6. import { UserInfo } from "@/api/user/types";
  7. export const useUserStore = defineStore(
  8. "user",
  9. () => {
  10. const user = ref<UserInfo>({
  11. roles: [],
  12. perms: [],
  13. });
  14. const isGetAuth = ref(false); //是否已经请求过auth接口活的role和menus了
  15. /**
  16. * 登录
  17. *
  18. * @param {LoginData}
  19. * @returns
  20. */
  21. function login(loginData: LoginData) {
  22. return new Promise<void>((resolve, reject) => {
  23. loginApi(loginData)
  24. .then(async (response) => {
  25. await getUserInfo();
  26. // const { tokenType, accessToken } = response.data;
  27. // localStorage.setItem("token", tokenType + " " + accessToken); // Bearer eyJhbGciOiJIUzI1NiJ9.xxx.xxx
  28. localStorage.setItem("token", response.data + "");
  29. resolve();
  30. })
  31. .catch((error) => {
  32. reject(error);
  33. });
  34. });
  35. }
  36. // 获取信息(用户昵称、头像、角色集合、权限集合)
  37. function getUserInfo() {
  38. return new Promise<any>((resolve, reject) => {
  39. getUserInfoApi()
  40. .then(({ data }) => {
  41. if (!data) {
  42. reject("Verification failed, please Login again.");
  43. return;
  44. }
  45. user.value.avatar =
  46. import.meta.env.VITE_APP_UPLOAD_URL + data.avatar;
  47. user.value.userId = data.id;
  48. user.value.username = data.userName;
  49. user.value.roles = data.roles;
  50. user.value.deptId = data.deptId;
  51. user.value.stationType = data.stationType;
  52. isGetAuth.value = true;
  53. user.value.perms = data.permissions ?? [];
  54. resolve(data);
  55. })
  56. .catch((error) => {
  57. reject(error);
  58. });
  59. });
  60. }
  61. // user logout
  62. function logout() {
  63. return new Promise<void>((resolve, reject) => {
  64. logoutApi()
  65. .then(() => {
  66. localStorage.setItem("token", "");
  67. location.reload(); // 清空路由
  68. user.value = { roles: [], perms: [] };
  69. resolve();
  70. })
  71. .catch((error) => {
  72. reject(error);
  73. });
  74. });
  75. }
  76. // remove token
  77. function resetToken() {
  78. console.log("resetToken");
  79. return new Promise<void>((resolve) => {
  80. localStorage.setItem("token", "");
  81. resetRouter();
  82. resolve();
  83. });
  84. }
  85. return {
  86. user,
  87. login,
  88. getUserInfo,
  89. logout,
  90. resetToken,
  91. isGetAuth,
  92. };
  93. },
  94. { persist: true }
  95. );
  96. // 非setup
  97. export function useUserStoreHook() {
  98. return useUserStore(store);
  99. }