httpParamsFormatting.js 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import axios from 'axios'
  2. import { Loading, Message } from 'element-ui'
  3. export default function axiosFormatting (customConfig) {
  4. //将请求头和请求参数的值转化为对象形式
  5. const headers = arrToObject(customConfig.headers)
  6. const params = arrToObject(customConfig.params)
  7. const httpConfig = {
  8. timeout: 1000 * 30,
  9. baseURL: '',
  10. headers
  11. }
  12. // let loadingInstance = null // 加载全局的loading
  13. const instance = axios.create(httpConfig)
  14. /** 添加请求拦截器 **/
  15. instance.interceptors.request.use(config => {
  16. /**
  17. * 在这里:可以根据业务需求可以在发送请求之前做些什么。
  18. * config.headers['token'] = sessionStorage.getItem('token') || ''
  19. */
  20. // 执行请求脚本
  21. eval(customConfig.requestScript)
  22. return config
  23. }, error => {
  24. // 对请求错误做些什么
  25. return Promise.reject(error)
  26. })
  27. /** 添加响应拦截器 **/
  28. instance.interceptors.response.use(response => {
  29. if (response.data.code === 200) {
  30. // 执行响应脚本
  31. const data = response.data.data
  32. eval(customConfig.responseScript)
  33. Message({
  34. message: '执行成功',
  35. type: 'success'
  36. })
  37. return Promise.resolve(data)
  38. } else {
  39. Message({
  40. message: response.data.message,
  41. type: 'error'
  42. })
  43. return Promise.reject(response.data.message)
  44. }
  45. })
  46. return new Promise((resolve, reject) => {
  47. instance({
  48. method: customConfig.method,
  49. url: customConfig.url,
  50. params,
  51. data: customConfig.method === 'post' ? customConfig.body : undefined
  52. }).then(response => {
  53. resolve(response)
  54. }).catch(error => {
  55. reject(error)
  56. })
  57. })
  58. }
  59. // 数组转化为对象
  60. function arrToObject(list) {
  61. const obj = {}
  62. list.forEach(item=>{
  63. obj[item.key] = item.value
  64. })
  65. return obj
  66. }