request.js 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. import axios, { CancelToken, isCancel } from 'axios'
  2. import { ElMessage, ElNotification } from 'element-plus'
  3. import errorCode from './errorCode.js'
  4. import { useUserStore } from '@/store/modules/user'
  5. axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'
  6. // 创建axios实例
  7. const service = axios.create({
  8. baseURL: import.meta.env.VITE_APP_BASE_API,
  9. timeout: 60000
  10. })
  11. console.log(import.meta.env.VITE_APP_BASE_API);
  12. let cancel
  13. // request拦截器
  14. service.interceptors.request.use(
  15. async (config) => {
  16. if (cancel) cancel('取消了')
  17. if (config.cancel) {
  18. config.cancelToken = new CancelToken((c) => {
  19. cancel = c
  20. })
  21. }
  22. // 处理GET请求,将data参数拼接到URL
  23. if (config.method === 'get' && config.data) {
  24. // 将data对象转换为URL参数
  25. let params = Object.keys(config.data)
  26. .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(config.data[key])}`)
  27. .join('&');
  28. // 拼接到URL
  29. if (params) {
  30. config.url += (config.url.includes('?') ? '&' : '?') + params;
  31. }
  32. // 清空data,避免重复发送
  33. config.data = undefined;
  34. }
  35. console.log(config.url);
  36. const {token} = await new Promise((resolve) => {
  37. chrome.storage.local.get(['token'], (result) => {
  38. resolve(result)
  39. })
  40. })
  41. // 当token不存在时,执行退出登录
  42. // if (!token && !config.url.includes('/login')) {
  43. // return Promise.reject('请先登录')
  44. // }
  45. if (token) {
  46. config.headers['Authorization'] = 'Bearer ' + token
  47. }
  48. return config
  49. },
  50. (error) => {
  51. Promise.reject(error)
  52. }
  53. )
  54. // 响应拦截器
  55. service.interceptors.response.use(
  56. (res) => {
  57. console.log(res,85888);
  58. // 未设置状态码则默认成功状态
  59. const code = res.data.code || 200
  60. // 获取错误信息
  61. const msg = errorCode[code] || res.data.msg || errorCode['default']
  62. // 二进制数据则直接返回
  63. if (
  64. res.request.responseType === 'blob' ||
  65. res.request.responseType === 'arraybuffer'
  66. ) {
  67. let filename = res.headers['content-disposition'].split('filename=')[1]
  68. return { fileName: filename, data: res.data }
  69. }
  70. if (code === '401') {
  71. // if (!isRelogin.show) {
  72. // isRelogin.show = true;
  73. // ElMessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', { confirmButtonText: '重新登录', cancelButtonText: '取消', type: 'warning' }).then(() => {
  74. // isRelogin.show = false;
  75. // useUserStore().logOut().then(() => {
  76. // location.href = '/index';
  77. // })
  78. // }).catch(() => {
  79. // isRelogin.show = false;
  80. // });
  81. // }
  82. ElMessage.error('您的登录状态已过期,请重新登录。')
  83. const userStore = useUserStore()
  84. userStore.logout()
  85. return Promise.reject('无效的会话,或者会话已过期,请重新登录。')
  86. } else if (code === 500) {
  87. ElMessage({ message: msg, type: 'error', grouping: true })
  88. return Promise.reject(msg)
  89. } if (code === '1') {
  90. ElMessage({ message: '接口异常', type: 'error', grouping: true })
  91. return Promise.reject(msg)
  92. } else if (code === 601) {
  93. ElMessage({ message: msg, type: 'warning', grouping: true })
  94. return Promise.reject(new Error(msg))
  95. } else {
  96. return Promise.resolve(res.data)
  97. }
  98. },
  99. (error) => {
  100. if (isCancel(error)) {
  101. // console.log('用户取消')
  102. } else {
  103. let { message } = error
  104. if (message === 'Network Error') {
  105. message = '后端接口连接异常'
  106. } else if (message.includes('timeout')) {
  107. message = '系统接口请求超时'
  108. } else if (message.includes('Request failed with status code')) {
  109. message = '系统接口' + message.substr(message.length - 3) + '异常'
  110. }
  111. ElMessage({
  112. message: message,
  113. type: 'error',
  114. duration: 5 * 1000,
  115. grouping: true
  116. })
  117. return Promise.reject(error)
  118. }
  119. }
  120. )
  121. export default service