user.ts 2.2 KB

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