http-kit.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. import {Message} from 'element-ui'
  2. import NProgress from 'nprogress'
  3. import axios from 'axios'
  4. // import Cookies from 'js-cookie'
  5. axios.defaults.baseURL = process.env.VUE_APP_HOME_API_URL
  6. axios.defaults.timeout = 30 * 1000 // 设置接口响应时间
  7. // let token = Cookies.get('token')
  8. let token = 'swagger-ui'
  9. /* URL地址token白名单 */
  10. const URL_WHITE_TOKEN_LIST = [
  11. '/admin/account/login'
  12. ]
  13. /**
  14. * 功能描述:Http Request 拦截器
  15. */
  16. axios.interceptors.request.use((request) => {
  17. NProgress.start() // 展示进度条
  18. /* 当前请求地址不是白名单,则增加请求头token */
  19. if (URL_WHITE_TOKEN_LIST.indexOf(request.url) === -1) {
  20. request.headers.common['Authorization'] = `Bearer ${token}`
  21. }
  22. request.headers.common['Content-Type'] = 'application/json;charset=UTF-8'
  23. return request
  24. }, (error) => { // 请求错误时做些事(接口错误、超时等)
  25. NProgress.done() // 隐藏进度条
  26. Message.error(`请求参数错误`, 10)
  27. /* 1.判断请求超时 */
  28. if (error.code === 'ECONNABORTED' && error.message.indexOf('timeout') !== -1) {
  29. // return service.request(originalRequest);//例如再重复请求一次
  30. }
  31. /* 2.需要重定向到错误页面 */
  32. if (error.response) {
  33. // error =errorInfo.data//页面那边catch的时候就能拿到详细的错误信息,看最下边的Promise.reject
  34. // router.push({
  35. // path: `/error/${errorInfo.status}`// 404 403 500 ... 等
  36. // })
  37. }
  38. return Promise.reject(error) // 在调用的那边可以拿到(catch)你想返回的错误信息
  39. })
  40. /**
  41. * 功能描述:Http Response 拦截器
  42. */
  43. axios.interceptors.response.use((res) => {
  44. NProgress.done() // 隐藏进度条
  45. /* 判断当前请求响应是Excel导出的,直接返回 */
  46. if (res.config.url.indexOf('/export-excel') >= 0) {
  47. return Promise.resolve(res)
  48. }
  49. let isTips = res.config.showMessage === undefined || res.config.showMessage === true
  50. let data = res.data
  51. /* 根据返回的code值来做不同的处理(和后端约定) */
  52. switch (data.code) {
  53. case 200:
  54. return Promise.resolve(data)
  55. default:
  56. isTips && Message.error(`服务器返回异常:${data.message}`, 10)
  57. return Promise.reject(res)
  58. }
  59. }, (error) => {
  60. Message.error(`服务器返回异常:${error}`, 10)
  61. if (error && error.response) {
  62. switch (error.response.status) {
  63. case 400:
  64. break
  65. default:
  66. break
  67. }
  68. }
  69. return Promise.reject(error)
  70. })
  71. export default {
  72. get (url, data = {}, config = {}) {
  73. return new Promise((resolve, reject) => {
  74. axios.get(url, data, config).then(response => {
  75. resolve(response)
  76. }).catch(err => {
  77. reject(err)
  78. })
  79. })
  80. },
  81. delete (url, data = {}, config = {}) {
  82. return new Promise((resolve, reject) => {
  83. axios.delete(url, data, config).then(response => {
  84. resolve(response)
  85. }).catch(err => {
  86. reject(err)
  87. })
  88. })
  89. },
  90. post (url, data = {}, config = {}) {
  91. return new Promise((resolve, reject) => {
  92. axios.post(url, data, config).then(response => {
  93. resolve(response)
  94. }, err => {
  95. reject(err)
  96. })
  97. })
  98. },
  99. put (url, data = {}, config = {}) {
  100. return new Promise((resolve, reject) => {
  101. axios.put(url, data, config).then(response => {
  102. resolve(response)
  103. }, err => {
  104. reject(err)
  105. })
  106. })
  107. },
  108. patch (url, data = {}, config = {}) {
  109. return new Promise((resolve, reject) => {
  110. axios.patch(url, data, config).then(response => {
  111. resolve(response)
  112. }, err => {
  113. reject(err)
  114. })
  115. })
  116. }
  117. }