index.ts 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. import useUserStore from '@/store/modules/user'
  2. import { ApiInstance } from './type'
  3. import axios from 'axios'
  4. // import qs from 'qs'
  5. import Message from 'vue-m-message'
  6. // 导入 API 模块
  7. import appApi from './modules/app'
  8. import userApi from './modules/user'
  9. import roleApi from './modules/role'
  10. const axiosInstance:ApiInstance = axios.create({
  11. baseURL: (import.meta.env.DEV && import.meta.env.VITE_OPEN_PROXY === 'true') ? '/proxy/' : import.meta.env.VITE_APP_API_BASEURL,
  12. timeout: 1000 * 60,
  13. responseType: 'json',
  14. })
  15. axiosInstance.interceptors.request.use(
  16. (request) => {
  17. // 全局拦截请求发送前提交的参数
  18. const userStore = useUserStore()
  19. // 设置请求头
  20. if (request.headers) {
  21. if (userStore.isLogin) {
  22. request.headers.Authorization = userStore.token
  23. }
  24. }
  25. // 是否将 POST 请求参数进行字符串化处理
  26. if (request.method === 'post') {
  27. // request.data = qs.stringify(request.data, {
  28. // arrayFormat: 'brackets',
  29. // })
  30. }
  31. return request
  32. },
  33. )
  34. axiosInstance.interceptors.response.use(
  35. (response) => {
  36. /**
  37. * 全局拦截请求发送后返回的数据,如果数据有报错则在这做全局的错误提示
  38. * 假设返回数据格式为:{ status: 1, error: '', data: '' }
  39. * 规则是当 status 为 1 时表示请求成功,为 0 时表示接口需要登录或者登录状态失效,需要重新登录
  40. * 请求出错时 error 会返回错误信息
  41. */
  42. if (response.data.code === 500) {
  43. if (response.data.msg !== '') {
  44. // 错误提示
  45. Message.error(response.data.msg, {
  46. zIndex: 2000,
  47. })
  48. return Promise.resolve(response.data)
  49. }
  50. }
  51. else {
  52. if (response.data.code === 401) {
  53. Message({
  54. message: '登录信息已过期,请重新登录!!!',
  55. type: 'error',
  56. duration: 2000,
  57. })
  58. // useUserStore().logout()
  59. }
  60. // useUserStore().logout()
  61. }
  62. return Promise.resolve(response.data)
  63. },
  64. (error) => {
  65. let message = error.message
  66. if (message === 'Network Error') {
  67. message = '后端网络故障'
  68. }
  69. else if (message.includes('timeout')) {
  70. message = '接口请求超时'
  71. }
  72. else if (message.includes('Request failed with status code')) {
  73. message = `接口${message.substr(message.length - 3)}异常`
  74. }
  75. Message.error(message, {
  76. zIndex: 2000,
  77. })
  78. return Promise.reject(error)
  79. },
  80. )
  81. // API 模块
  82. const api = {
  83. appApi: appApi(axiosInstance),
  84. userApi: userApi(axiosInstance),
  85. roleApi: roleApi(axiosInstance),
  86. }
  87. export default api