request2.js 4.0 KB

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