http.ts 2.4 KB

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