http.ts 2.8 KB

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