axios.js 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. import axios from 'axios';
  2. import { ElMessage, ElMessageBox, ElLoading } from 'element-plus';
  3. import { nextTick } from "vue";
  4. import {baseURL, socketURL} from './config';
  5. import JSONBIG from 'json-bigint';
  6. // 配置新建一个 axios 实例
  7. var loading = null;
  8. const service = axios.create({
  9. baseURL: baseURL,
  10. timeout: 200000,
  11. headers: { 'Content-Type': 'application/json'},
  12. transformResponse: [
  13. function (data) {
  14. const json = JSONBIG({
  15. storeAsString: true
  16. });
  17. const res = json.parse(data);
  18. return res;
  19. }
  20. ],
  21. showLoading: {
  22. statu: true,
  23. text: '加载中...'
  24. }
  25. });
  26. // 添加请求拦截器
  27. service.interceptors.request.use(
  28. (config) => {
  29. if (config.showLoading.statu) {
  30. loading = ElLoading.service({
  31. lock: true,
  32. text: config.showLoading.text,
  33. spinner: 'el-icon-loading',
  34. background: 'rgba(0, 0, 0, 0.3)'
  35. });
  36. }
  37. // 在发送请求之前做些什么 token
  38. let token = sessionStorage.getItem('token')
  39. if (token) {
  40. config.headers.common['token'] = token;
  41. }
  42. return config
  43. },
  44. (error) => {
  45. // 对请求错误做些什么
  46. return Promise.reject(error);
  47. }
  48. );
  49. // 添加响应拦截器
  50. service.interceptors.response.use(
  51. (response) => {
  52. // 对响应数据做点什么
  53. nextTick(async () => {
  54. loading && await loading.close()
  55. })
  56. const res = response.data;
  57. console.warn(res);
  58. if (response.status === 401 || response.status === 4001 || response.status == 521) {
  59. sessionStorage.clear(); // 清除浏览器全部临时缓存
  60. window.location.href = '/'; // 去登录页
  61. ElMessage.error(res.msg)
  62. } else {
  63. if(response.status === 200 && res.code && res.code !== 200){
  64. ElMessage.error(res.msg)
  65. }
  66. return response.data;
  67. }
  68. },
  69. (error) => {
  70. nextTick(async () => {
  71. loading && await loading.close()
  72. })
  73. // 对响应错误做点什么
  74. if (error.message.indexOf('timeout') != -1) {
  75. // ElMessage.error('网络超时');
  76. } else if (error.message == 'Network Error') {
  77. // ElMessage.error('网络连接错误');
  78. } else {
  79. if (error.response.data) ElMessage.error(error.response.statusText);
  80. // else ElMessage.error('接口路径找不到');
  81. }
  82. return Promise.reject(error);
  83. }
  84. );
  85. // 导出 axios 实例
  86. export default service;
  87. export {
  88. baseURL,
  89. socketURL
  90. }