user.ts 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. import { LoginProps, loginFetch, userInfoFetch } 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 = () => {
  25. localStorage.removeItem("token");
  26. userStatus.value = UserStatus.NOT_LOGIN;
  27. };
  28. export const getUserInfo = async () => {
  29. user.value = await userInfoFetch();
  30. userStatus.value = UserStatus.LOGINED;
  31. };
  32. errorHook.push((code) => {
  33. if (code === 4008) {
  34. logout();
  35. }
  36. });
  37. export const logintAuth = getUserInfo;
  38. const token = localStorage.getItem("token");
  39. if (token) {
  40. gHeaders.token = token;
  41. } else {
  42. userStatus.value = UserStatus.NOT_LOGIN;
  43. }