user.ts 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. import { defineStore } from "pinia";
  2. import { store } from "@/store";
  3. import type { userType } from "./types";
  4. import { routerArrays } from "@/layout/types";
  5. import { router, resetRouter } from "@/router";
  6. import { storageLocal } from "@pureadmin/utils";
  7. import { getLogin, refreshTokenApi } from "@/api/user";
  8. import type { UserResult, RefreshTokenResult } from "@/api/user";
  9. import { useMultiTagsStoreHook } from "@/store/modules/multiTags";
  10. import { type DataInfo, setToken, removeToken, userKey } from "@/utils/auth";
  11. export const useUserStore = defineStore({
  12. id: "pure-user",
  13. state: (): userType => ({
  14. // 用户名
  15. username: localStorage.getItem("userName") ?? "",
  16. password: "",
  17. // 页面级别权限
  18. roles: storageLocal().getItem<DataInfo<number>>(userKey)?.roles ?? [],
  19. // 是否勾选了登录页的免登录
  20. isRemembered: false,
  21. // 登录页的免登录存储几天,默认7天
  22. loginDay: 7
  23. }),
  24. actions: {
  25. /** 存储用户名 */
  26. SET_USERNAME(username: string) {
  27. this.username = username;
  28. },
  29. /** 存储角色 */
  30. SET_ROLES(roles: Array<string>) {
  31. this.roles = roles;
  32. },
  33. /** 存储是否勾选了登录页的免登录 */
  34. SET_ISREMEMBERED(bool: boolean) {
  35. this.isRemembered = bool;
  36. },
  37. /** 设置登录页的免登录存储几天 */
  38. SET_LOGINDAY(value: number) {
  39. this.loginDay = Number(value);
  40. },
  41. /** 登入 */
  42. async loginByUsername(data) {
  43. return new Promise<UserResult>((resolve, reject) => {
  44. getLogin(data)
  45. .then(data => {
  46. if (data) {
  47. setToken(data.data);
  48. resolve(data);
  49. }
  50. })
  51. .catch(error => {
  52. reject(error);
  53. });
  54. });
  55. },
  56. /** 前端登出(不调用接口) */
  57. logOut() {
  58. this.username = "";
  59. this.roles = [];
  60. removeToken();
  61. useMultiTagsStoreHook().handleTags("equal", [...routerArrays]);
  62. resetRouter();
  63. router.push("/login");
  64. },
  65. /** 刷新`token` */
  66. async handRefreshToken(data) {
  67. return new Promise<RefreshTokenResult>((resolve, reject) => {
  68. refreshTokenApi(data)
  69. .then(data => {
  70. if (data) {
  71. setToken(data.data);
  72. resolve(data);
  73. }
  74. })
  75. .catch(error => {
  76. reject(error);
  77. });
  78. });
  79. }
  80. }
  81. });
  82. export function useUserStoreHook() {
  83. return useUserStore(store);
  84. }