http.ts 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. import axios from 'axios'
  2. import history from './history'
  3. import { getTokenInfo, removeTokenInfo } from './storage'
  4. import store from '@/store'
  5. import { MessageFu } from './message'
  6. import { domShowFu } from './domShow'
  7. const envFlag = process.env.NODE_ENV === 'development'
  8. const baseUrlTemp = 'https://sit-hqbooking.4dage.com' // 测试环境
  9. // const baseUrlTemp = 'http://192.168.20.61:8091' // 线下环境
  10. const baseFlag = baseUrlTemp.includes('https://')
  11. // 请求基地址
  12. export const baseURL = envFlag ? `${baseUrlTemp}${baseFlag ? '' : '/api/'}` : ''
  13. // 处理 类型“AxiosResponse<any, any>”上不存在属性“code”
  14. declare module 'axios' {
  15. interface AxiosResponse {
  16. code: number
  17. timestamp: string
  18. // 这里追加你的参数
  19. }
  20. }
  21. // 创建 axios 实例
  22. const http = axios.create({
  23. baseURL: `${baseURL}${baseFlag ? '/api/' : ''}`,
  24. timeout: 10000
  25. })
  26. let axajInd = 0
  27. // 请求拦截器
  28. http.interceptors.request.use(
  29. function (config: any) {
  30. // 发请求前打开加载提示
  31. domShowFu('#AsyncSpinLoding', true)
  32. axajInd++
  33. const { token } = getTokenInfo()
  34. if (token) config.headers.token = token
  35. return config
  36. },
  37. function (err) {
  38. return Promise.reject(err)
  39. }
  40. )
  41. let timeId = -1
  42. // 响应拦截器
  43. http.interceptors.response.use(
  44. function (response) {
  45. // 请求回来的关闭加载提示
  46. axajInd--
  47. if (axajInd === 0) {
  48. domShowFu('#AsyncSpinLoding', false)
  49. }
  50. if (response.data.code === 5001 || response.data.code === 5002) {
  51. removeTokenInfo()
  52. history.replace('/login')
  53. clearTimeout(timeId)
  54. timeId = window.setTimeout(() => {
  55. MessageFu.warning('登录失效!')
  56. }, 200)
  57. } else if (response.data.code === 0) {
  58. // MessageFu.success(response.data.msg);
  59. } else if (response.data.code !== 3014) MessageFu.warning(response.data.msg)
  60. return response.data
  61. },
  62. async function (err) {
  63. clearTimeout(timeId)
  64. timeId = window.setTimeout(() => {
  65. axajInd = 0
  66. domShowFu('#AsyncSpinLoding', false)
  67. // 如果因为网络原因,response没有,给提示消息
  68. if (!err.response) {
  69. if (store.getState().A0Layout.closeUpFile.state) MessageFu.warning('取消上传!')
  70. else MessageFu.error('网络繁忙,请稍后重试!')
  71. } else {
  72. if (
  73. err.response &&
  74. err.response.data &&
  75. err.response.data.msg &&
  76. err.response.data.msg.length < 30
  77. ) {
  78. MessageFu.error(err.response.data.msg)
  79. // 没有权限
  80. if (err.response.data.code === 5003) {
  81. removeTokenInfo()
  82. history.replace('/login')
  83. }
  84. } else MessageFu.error('响应错误,请联系管理员!')
  85. }
  86. }, 100)
  87. return Promise.reject(err)
  88. }
  89. )
  90. // 导出 axios 实例
  91. export default http