user.ts 2.5 KB

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