user.ts 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. import { LoginProps, loginFetch, userInfoFetch, loginOutFetch } from "@/request";
  2. import { errorHook, gHeaders } from "@/request/state";
  3. import { UserInfo } from "@/request/type";
  4. import { encodePwd } from "@/util";
  5. import { ref, computed } from "vue";
  6. export const user = ref<UserInfo>();
  7. export enum UserStatus {
  8. NOT_LOGIN,
  9. LOGINED,
  10. UNKNOWN,
  11. }
  12. export const userStatus = ref<UserStatus>(UserStatus.UNKNOWN);
  13. export const isSuper = computed(() => user.value ? user.value.roles.filter(item => item.roleKey === "super_admin").length > 0 : false)
  14. export const login = async (props: LoginProps) => {
  15. const data = await loginFetch({
  16. ...props,
  17. password: encodePwd(props.password),
  18. });
  19. user.value = data.user;
  20. gHeaders.token = data.token;
  21. localStorage.setItem("token", data.token);
  22. await getUserInfo();
  23. };
  24. export const logout = async (isLogin = false) => {
  25. isLogin && await loginOutFetch();
  26. isLogin && localStorage.setItem("token", "");
  27. userStatus.value = UserStatus.NOT_LOGIN;
  28. };
  29. export const getUserInfo = async () => {
  30. user.value = await userInfoFetch();
  31. userStatus.value = UserStatus.LOGINED;
  32. };
  33. errorHook.push((code) => {
  34. if (code === 4008) {
  35. logout();
  36. }
  37. });
  38. export const logintAuth = getUserInfo;
  39. const token = localStorage.getItem("token");
  40. if (token) {
  41. gHeaders.token = token;
  42. } else {
  43. userStatus.value = UserStatus.NOT_LOGIN;
  44. }