user.ts 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  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((response) => {
  25. 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. isGetAuth.value = true;
  52. user.value.perms = data.permissions ?? [];
  53. resolve(data);
  54. })
  55. .catch((error) => {
  56. reject(error);
  57. });
  58. });
  59. }
  60. // user logout
  61. function logout() {
  62. return new Promise<void>((resolve, reject) => {
  63. logoutApi()
  64. .then(() => {
  65. localStorage.setItem("token", "");
  66. location.reload(); // 清空路由
  67. resolve();
  68. })
  69. .catch((error) => {
  70. reject(error);
  71. });
  72. });
  73. }
  74. // remove token
  75. function resetToken() {
  76. console.log("resetToken");
  77. return new Promise<void>((resolve) => {
  78. localStorage.setItem("token", "");
  79. resetRouter();
  80. resolve();
  81. });
  82. }
  83. return {
  84. user,
  85. login,
  86. getUserInfo,
  87. logout,
  88. resetToken,
  89. isGetAuth,
  90. };
  91. },
  92. { persist: true }
  93. );
  94. // 非setup
  95. export function useUserStoreHook() {
  96. return useUserStore(store);
  97. }