user.ts 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  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 } 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 login = async (props: LoginProps) => {
  14. const data = await loginFetch({
  15. ...props,
  16. password: encodePwd(props.password),
  17. });
  18. user.value = data.user;
  19. gHeaders.token = data.token;
  20. localStorage.setItem("token", data.token);
  21. await getUserInfo();
  22. };
  23. export const logout = () => {
  24. localStorage.removeItem("token");
  25. userStatus.value = UserStatus.NOT_LOGIN;
  26. };
  27. export const getUserInfo = async () => {
  28. user.value = await userInfoFetch();
  29. userStatus.value = UserStatus.LOGINED;
  30. };
  31. errorHook.push((code) => {
  32. if (code === 4008) {
  33. logout();
  34. }
  35. });
  36. const token = localStorage.getItem("token");
  37. if (token) {
  38. gHeaders.token = token;
  39. getUserInfo();
  40. } else {
  41. userStatus.value = UserStatus.NOT_LOGIN;
  42. }