user.ts 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. import { defineStore } from "pinia";
  2. import { store } from "/@/store";
  3. import { userType } from "./types";
  4. import { useRouter } from "vue-router";
  5. import { getLogin, refreshToken } from "/@/api/user";
  6. import { storageLocal, storageSession } from "/@/utils/storage";
  7. import { getToken, setToken, removeToken } from "/@/utils/auth";
  8. import { useMultiTagsStoreHook } from "/@/store/modules/multiTags";
  9. const data = getToken();
  10. let token = "";
  11. let name = "";
  12. if (data) {
  13. const dataJson = JSON.parse(data);
  14. if (dataJson) {
  15. token = dataJson?.accessToken;
  16. name = dataJson?.name ?? "admin";
  17. }
  18. }
  19. export const useUserStore = defineStore({
  20. id: "pure-user",
  21. state: (): userType => ({
  22. token,
  23. name
  24. }),
  25. actions: {
  26. SET_TOKEN(token) {
  27. this.token = token;
  28. },
  29. SET_NAME(name) {
  30. this.name = name;
  31. },
  32. // 登入
  33. async loginByUsername(data) {
  34. return new Promise<void>((resolve, reject) => {
  35. getLogin(data)
  36. .then(data => {
  37. if (data) {
  38. setToken(data);
  39. resolve();
  40. }
  41. })
  42. .catch(error => {
  43. reject(error);
  44. });
  45. });
  46. },
  47. // 登出 清空缓存
  48. logOut() {
  49. this.token = "";
  50. this.name = "";
  51. removeToken();
  52. storageLocal.clear();
  53. storageSession.clear();
  54. useMultiTagsStoreHook().handleTags("equal", [
  55. {
  56. path: "/welcome",
  57. parentPath: "/",
  58. meta: {
  59. title: "menus.hshome",
  60. icon: "home-filled",
  61. i18n: true
  62. }
  63. }
  64. ]);
  65. useRouter().push("/login");
  66. },
  67. // 刷新token
  68. async refreshToken(data) {
  69. return refreshToken(data).then(data => {
  70. if (data) {
  71. setToken(data);
  72. return data;
  73. }
  74. });
  75. }
  76. }
  77. });
  78. export function useUserStoreHook() {
  79. return useUserStore(store);
  80. }