http.js 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. /**
  2. * author 赵越
  3. * 2018-11-04
  4. */
  5. import axios from 'axios'
  6. import Vue from 'vue'
  7. /**
  8. *
  9. * @param {string} path 请求地址的 path
  10. * @param {string} data 请求实体
  11. * @param {object} payload 其他选项
  12. * @param {object} promise 返回一个 promise
  13. */
  14. const get = async (path, data, payload) => {
  15. let result = await request('get', path, data, payload)
  16. return result
  17. }
  18. /**
  19. *
  20. * @param {string} path 请求地址的 path
  21. * @param {string} data 请求实体
  22. * @param {object} payload 其他选项
  23. * @param {object} promise 返回一个 promise
  24. */
  25. const post = async (path, data = {}, payload) => {
  26. let formData = ''
  27. for(const key in data) {
  28. if(data.hasOwnProperty(key)) {
  29. const element = data[key]
  30. if(element || element === 0) formData += `${key}=${encodeURIComponent(element)}&`
  31. }
  32. }
  33. formData = formData.slice(0, formData.length - 1)
  34. let result = await request('post', path, formData, { config: { headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' } } })
  35. return result
  36. }
  37. /**
  38. *
  39. * @param {method} method 请求方法
  40. * @param {string} path 请求地址的 path
  41. * @param {string} data 请求实体
  42. * @param {object} payload 其他选项
  43. * @param {object} promise 返回一个 promise
  44. */
  45. const request = async (method, path, data, payload = {}) => {
  46. let host = ''
  47. let url = host + path
  48. const body = {
  49. url,
  50. data,
  51. method,
  52. params: data,
  53. }
  54. if(payload.config) Object.assign(body, payload.config, { params: '' })
  55. // console.log(`url: ${url}`)
  56. consoleFormat({ body })
  57. const res = await axios.request(body)
  58. let rData = res.data
  59. if(typeof rData !== 'object') rData = JSON.parse(rData)
  60. // consoleFormat({ rData })
  61. if(rData.status === 1) return rData
  62. else if(rData.status === -99) {
  63. location.href = '/login'
  64. return
  65. } else {
  66. Vue.prototype.$message.error(rData.info)
  67. rData.status = 0
  68. return rData
  69. }
  70. }
  71. const consoleFormat = obj => {
  72. const key = Object.keys(obj)[0]
  73. // console.log(key + ':')
  74. // console.dir(obj[key])
  75. // console.log()
  76. }
  77. Vue.prototype.$get = get
  78. Vue.prototype.$post = post
  79. Vue.prototype.$request = request