You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

83 lines
2.0 KiB

3 years ago
3 years ago
  1. import { defineStore } from "pinia";
  2. import { store } from "/@/store";
  3. import { userType } from "./types";
  4. import { router } from "/@/router";
  5. import { routerArrays } from "/@/layout/types";
  6. import { storageSession } from "@pureadmin/utils";
  7. import { getLogin, refreshToken } from "/@/api/user";
  8. import { getToken, setToken, removeToken } from "/@/utils/auth";
  9. import { useMultiTagsStoreHook } from "/@/store/modules/multiTags";
  10. const data = getToken();
  11. let token = "";
  12. let name = "";
  13. if (data) {
  14. const dataJson = JSON.parse(data);
  15. if (dataJson) {
  16. token = dataJson?.accessToken;
  17. name = dataJson?.name ?? "admin";
  18. }
  19. }
  20. export const useUserStore = defineStore({
  21. id: "pure-user",
  22. state: (): userType => ({
  23. token,
  24. name,
  25. // 前端生成的验证码(按实际需求替换)
  26. verifyCode: "",
  27. // 登录显示组件判断 0:登录 1:手机登录 2:二维码登录 3:注册 4:忘记密码,默认0:登录
  28. currentPage: 0
  29. }),
  30. actions: {
  31. SET_TOKEN(token) {
  32. this.token = token;
  33. },
  34. SET_NAME(name) {
  35. this.name = name;
  36. },
  37. SET_VERIFYCODE(verifyCode) {
  38. this.verifyCode = verifyCode;
  39. },
  40. SET_CURRENTPAGE(value) {
  41. this.currentPage = value;
  42. },
  43. // 登入
  44. async loginByUsername(data) {
  45. return new Promise<void>((resolve, reject) => {
  46. getLogin(data)
  47. .then(data => {
  48. if (data) {
  49. setToken(data);
  50. resolve();
  51. }
  52. })
  53. .catch(error => {
  54. reject(error);
  55. });
  56. });
  57. },
  58. // 登出 清空缓存
  59. logOut() {
  60. this.token = "";
  61. this.name = "";
  62. removeToken();
  63. storageSession.clear();
  64. useMultiTagsStoreHook().handleTags("equal", routerArrays);
  65. router.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. }