http.ts 3.0 KB

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