request.ts 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import axios, { AxiosInstance, AxiosRequestConfig } from 'axios'
  2. import { ElMessage, ElMessageBox } from 'element-plus'
  3. import { Session, Local } from '/@/utils/storage'
  4. import qs from 'qs'
  5. import { adminTokenKey } from '/@/stores/userInfo'
  6. // 配置新建一个 axios 实例
  7. const service: AxiosInstance = axios.create({
  8. baseURL: import.meta.env.VITE_API_URL,
  9. timeout: 50000,
  10. headers: { 'Content-Type': 'application/json' },
  11. paramsSerializer: {
  12. serialize(params) {
  13. return qs.stringify(params, { allowDots: true })
  14. },
  15. },
  16. })
  17. // 添加请求拦截器
  18. service.interceptors.request.use(
  19. (config: AxiosRequestConfig) => {
  20. // 在发送请求之前做些什么 token
  21. if (Local.get(adminTokenKey)) {
  22. config.headers!['Authorization'] = `${Local.get(adminTokenKey)}`
  23. }
  24. return config
  25. },
  26. (error) => {
  27. // 对请求错误做些什么
  28. return Promise.reject(error)
  29. }
  30. )
  31. // 添加响应拦截器
  32. service.interceptors.response.use(
  33. (response) => {
  34. // 对响应数据做点什么
  35. const res = response.data
  36. if (res.code && res.code !== 0) {
  37. // `token` 过期或者账号已在别处登录
  38. if (res.code === 401 || res.code === 4001) {
  39. Local.remove(adminTokenKey)
  40. Session.clear() // 清除浏览器全部临时缓存
  41. window.location.href = '/' // 去登录页
  42. ElMessageBox.alert('你已被登出,请重新登录', '提示', {})
  43. .then(() => {})
  44. .catch(() => {})
  45. }
  46. return Promise.reject(service.interceptors.response)
  47. } else {
  48. return response.data
  49. }
  50. },
  51. (error) => {
  52. // 对响应错误做点什么
  53. if (error.message.indexOf('timeout') != -1) {
  54. ElMessage.error('网络超时')
  55. } else if (error.message == 'Network Error') {
  56. ElMessage.error('网络连接错误')
  57. } else {
  58. if (error.response.data) ElMessage.error(error.response.statusText)
  59. else ElMessage.error('接口路径找不到')
  60. }
  61. return Promise.reject(error)
  62. }
  63. )
  64. // 导出 axios 实例
  65. export default service