user.ts 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. import { to } from 'await-to-js';
  2. import { getToken, removeToken, setToken } from '@/utils/auth';
  3. import { login as loginApi, logout as logoutApi, getInfo as getUserInfo } from '@/api/login';
  4. import { LoginData } from '@/api/types';
  5. import defAva from '@/assets/images/profile.jpg';
  6. import { ref } from 'vue';
  7. export const useUserStore = defineStore('user', () => {
  8. const token = ref(getToken());
  9. const name = ref('');
  10. const nickname = ref('');
  11. const userId = ref<string | number>('');
  12. const tenantId = ref<string>('');
  13. const avatar = ref('');
  14. const roles = ref<Array<string>>([]); // 用户角色编码集合 → 判断路由权限
  15. const permissions = ref<Array<string>>([]); // 用户权限编码集合 → 判断按钮权限
  16. /**
  17. * 登录
  18. * @param userInfo
  19. * @returns
  20. */
  21. const login = async (userInfo: LoginData): Promise<void> => {
  22. const [err, res] = await to(loginApi(userInfo));
  23. if (res) {
  24. const data = res.data;
  25. setToken(data.access_token);
  26. token.value = data.access_token;
  27. return Promise.resolve();
  28. }
  29. return Promise.reject(err);
  30. };
  31. // 获取用户信息
  32. const getInfo = async (): Promise<void> => {
  33. const [err, res] = await to(getUserInfo());
  34. if (res) {
  35. const data = res.data;
  36. const user = data.user;
  37. const profile = user.avatar == '' || user.avatar == null ? defAva : user.avatar;
  38. if (data.roles && data.roles.length > 0) {
  39. // 验证返回的roles是否是一个非空数组
  40. roles.value = data.roles;
  41. permissions.value = data.permissions;
  42. } else {
  43. roles.value = ['ROLE_DEFAULT'];
  44. }
  45. name.value = user.userName;
  46. nickname.value = user.nickName;
  47. avatar.value = profile;
  48. userId.value = user.userId;
  49. tenantId.value = user.tenantId;
  50. return Promise.resolve();
  51. }
  52. return Promise.reject(err);
  53. };
  54. // 注销
  55. const logout = async (): Promise<void> => {
  56. await logoutApi();
  57. token.value = '';
  58. roles.value = [];
  59. permissions.value = [];
  60. removeToken();
  61. };
  62. const setAvatar = (value: string) => {
  63. avatar.value = value;
  64. };
  65. return {
  66. userId,
  67. tenantId,
  68. token,
  69. nickname,
  70. avatar,
  71. roles,
  72. permissions,
  73. login,
  74. getInfo,
  75. logout,
  76. setAvatar
  77. };
  78. });