http.ts 2.8 KB

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