userAxios.js 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. // import axios from 'axios'
  2. import Router from '@/router/index'
  3. // import store from '@/store'
  4. import urlConfig from '@/apis/url-config'
  5. import {
  6. getToken, removeMenu,
  7. removeBtn, removeToken
  8. } from '@/utils/auth'
  9. const header = {
  10. // "X-Requested-With": "XMLHttpRequest",
  11. // "X-Frame-Options": "DENY", // 告诉浏览器不要(DENY)把这个网页放在iFrame内,通常的目的就是要帮助用户对抗点击劫持。
  12. // "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"
  13. }
  14. window.ajaxTimeout = 20000
  15. export default async(
  16. url = '',
  17. data = {},
  18. type = 'GET',
  19. params = {},
  20. headers = header,
  21. onUploadProgress
  22. ) => {
  23. type = type.toLowerCase()
  24. const obj = {
  25. method: type,
  26. baseURL: '',
  27. url: urlConfig.baseURL + url,
  28. data,
  29. params,
  30. // // `onUploadProgress` 允许为上传处理进度事件
  31. // onUploadProgress: function(progressEvent) {
  32. // // 对原生进度事件的处理
  33. // },
  34. // // `onDownloadProgress` 允许为下载处理进度事件
  35. // onDownloadProgress: function(progressEvent) {
  36. // // 对原生进度事件的处理
  37. // },
  38. // `cancelToken` 指定用于取消请求的 cancel token
  39. // (查看后面的 Cancellation 这节了解更多)
  40. // cancelToken: new CancelToken(function (cancel) {
  41. // }),
  42. processData: true, // 告诉axios不要去处理发送的数据(重要参数)
  43. timeout: window.ajaxTimeout,
  44. headers,
  45. onUploadProgress
  46. }
  47. if (onUploadProgress && typeof onUploadProgress === 'function') {
  48. obj.onUploadProgress = onUploadProgress
  49. }
  50. // return await axios(obj)
  51. // .then(response => {
  52. // return response;
  53. // })
  54. // .catch(res => {
  55. // return res;
  56. // });
  57. // 请求拦截器
  58. axios.interceptors.request.use(
  59. config => {
  60. if (!config.data.token) {
  61. config.data.token = getToken()
  62. }
  63. return config
  64. },
  65. error => {
  66. // 错误抛到业务代码
  67. return Promise.reject(new Error('服务器异常,请联系管理员!'))
  68. }
  69. )
  70. // 添加响应拦截器
  71. axios.interceptors.response.use(
  72. async response => {
  73. if (response.status === 200) {
  74. const code = response.data.code
  75. if (code >= 100 && code <= 104) {
  76. removeToken()
  77. removeMenu()
  78. removeBtn()
  79. }
  80. }
  81. return response
  82. },
  83. error => {
  84. return Promise.reject(error.response.data)
  85. }
  86. )
  87. return new Promise((resolve, reject) => {
  88. axios(obj)
  89. .then(response => {
  90. resolve(response.data)
  91. })
  92. .catch(res => {
  93. if (res.response && res.response.data) {
  94. reject(res.response.data)
  95. } else {
  96. reject(res)
  97. }
  98. })
  99. })
  100. }