use-current-user.js 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. import { defineStore } from 'pinia';
  2. import { login, QueyrUserInfo, QueyrRoutesList } from '../../apis/login';
  3. import { kuky_Authorization, localST_UserInfo, localST_RoutesList } from '../storage';
  4. /**
  5. * 当前登录的用户信息
  6. */
  7. export const useCurrentUserStore = defineStore('current_user', {
  8. persist: {
  9. enabled: true,
  10. // 可选:自定义存储的 key 和要持久化的路径
  11. strategies: [
  12. {
  13. key: 'info',
  14. storage: localStorage,
  15. paths: ['username'] // 只持久化 username 属性
  16. }
  17. ]
  18. },
  19. state: () => {
  20. return {
  21. name: 'Jack',
  22. token_type: '',
  23. token: kuky_Authorization.get(),
  24. username: '',
  25. nickname: '',
  26. dept: [],
  27. roles: [],
  28. permissions: [],
  29. user: {}
  30. };
  31. },
  32. actions: {
  33. updateName(name) {
  34. this.name = name;
  35. },
  36. toLogin(data) {
  37. const { username, password } = data;
  38. return new Promise((resolve, reject) => {
  39. login({ username, password })
  40. .then((res) => {
  41. if (res.code == 200 && res.data.access_token.length) {
  42. this.token = res.data.access_token;
  43. this.token_type = res.data.token_type;
  44. this.username = res.data.username;
  45. this.nickname = res.data.nickname;
  46. kuky_Authorization.set(res.data.access_token);
  47. resolve(res.msg);
  48. /**
  49. * 获取用户信息
  50. * 暂时先在这里去调用,后续可以考虑放在路由拦截中去调用
  51. */
  52. this.getInfo();
  53. } else {
  54. reject(res.msg);
  55. }
  56. })
  57. .catch((err) => {
  58. reject(err);
  59. });
  60. });
  61. },
  62. // 获取并且存储用户路由列表
  63. async getRoutesList() {
  64. const {
  65. code,
  66. data: { routers }
  67. } = await QueyrRoutesList();
  68. if (code === 200) {
  69. // 将 setItem 包装在一个 Promise 中并等待完成
  70. return new Promise((resolve, reject) => {
  71. try {
  72. localST_RoutesList.setItem(JSON.stringify(routers));
  73. resolve();
  74. } catch (error) {
  75. reject(error);
  76. }
  77. });
  78. }
  79. },
  80. // 获取并且存储用户信息
  81. async getUserInfo() {
  82. const {
  83. code,
  84. data: { permissions, dept, roles }
  85. } = await QueyrUserInfo();
  86. if (code === 200) {
  87. return new Promise((resolve, reject) => {
  88. try {
  89. localST_UserInfo.setItem(JSON.stringify({ permissions, dept, roles }));
  90. resolve();
  91. } catch (error) {
  92. reject(error);
  93. }
  94. });
  95. }
  96. }
  97. }
  98. });