user.ts 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. import axios from './instance'
  2. import {
  3. GET_USER,
  4. POST_LOGIN,
  5. GET_USER_META,
  6. POST_LOGOUT,
  7. UPLOAD_FILE
  8. } from './constant'
  9. import { jsonToForm } from '@/shared'
  10. import type { Role } from './'
  11. import { RoutesName } from '@/router'
  12. export interface User {
  13. nickname: string
  14. phone: string
  15. avatar: string
  16. email: string
  17. }
  18. type SUser = {
  19. head: string
  20. nickName: string
  21. userName: string
  22. email: string
  23. }
  24. const toLocal = (data: SUser): User => ({
  25. nickname: data.nickName,
  26. avatar: data.head,
  27. phone: data.userName,
  28. email: data.email
  29. })
  30. export const fetchUser = async (): Promise<User> => {
  31. const data = await axios.post<SUser>(GET_USER)
  32. return toLocal(data)
  33. }
  34. export type LoginState = {
  35. phone: string
  36. password: string
  37. }
  38. export const postLogin = async (state: LoginState) => {
  39. const data = await axios.post<{ token: string; user: SUser }>(POST_LOGIN, {
  40. phoneNum: state.phone,
  41. password: state.password
  42. })
  43. return {
  44. token: data.token,
  45. user: toLocal(data.user)
  46. }
  47. }
  48. export const postLogout = async () => axios.post(POST_LOGOUT)
  49. export type UserMeta = {
  50. projectCount: number
  51. projectFileCount: number
  52. projectSceneCount: number
  53. projectOverCount: number
  54. }
  55. export const fetchUserMeta = () => axios.get<UserMeta>(GET_USER_META)
  56. export const uploadFile = async (file: File | Blob) =>
  57. await axios<string>({
  58. url: UPLOAD_FILE,
  59. method: 'POST',
  60. data: jsonToForm({ file }),
  61. headers: {
  62. 'Content-Type': 'multipart/form-data'
  63. }
  64. })