request.ts 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import axios, {AxiosResponse} from 'axios'
  2. import {ElMessage} from 'element-plus'
  3. import router from "../router";
  4. import {getToken} from "@/util/tokenUtil";
  5. axios.defaults.baseURL = import.meta.env.VITE_API_BASE_URL
  6. axios.interceptors.request.use(config => {
  7. const token = getToken()
  8. if (token) {
  9. config.headers["Authorization"] = token
  10. }
  11. return config;
  12. }, error => Promise.reject(error))
  13. interface Res<T> {
  14. code: number;
  15. msg: string;
  16. fieldValidations: { field: string, msg: string }[];
  17. data: T;
  18. }
  19. axios.interceptors.response.use((config: AxiosResponse<Res<object>>) => {
  20. if (config.data.code === 0) {
  21. if (config.data.msg) {
  22. ElMessage({type: 'success', message: config.data.msg});
  23. }
  24. } else if (config.data.code === 100) {
  25. ElMessage({type: 'warning', message: config.data.msg});
  26. router.push("/login").then()
  27. return Promise.reject()
  28. } else {
  29. if (config.data.msg) {
  30. ElMessage({type: 'warning', message: config.data.msg});
  31. }
  32. if (config.data.fieldValidations) {
  33. config.data.fieldValidations.forEach((item: { msg: string }) => {
  34. ElMessage({type: 'warning', message: item.msg});
  35. })
  36. }
  37. }
  38. return config
  39. }, error => {
  40. ElMessage({type: 'error', message: error});
  41. return Promise.reject(error)
  42. })
  43. export default axios