httputils.js 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. import axios from 'axios'
  2. import store from '@/store'
  3. import { MessageBox } from 'element-ui'
  4. var CancelToken = axios.CancelToken
  5. var cancel
  6. // 创建axios实例
  7. const axiosservice = axios.create({
  8. timeout: 30000, // 请求超时时间
  9. retry: 4, //重新请求次数
  10. retryDelay: 1000, //重新请求的间隔
  11. credentials: true, // 接口每次请求会跨域携带cookie
  12. cancelToken: new CancelToken(function executor(c) {
  13. // executor 函数接收一个 cancel 函数作为参数
  14. cancel = c
  15. }),
  16. })
  17. axiosservice.interceptors.request.use(
  18. (config) => {
  19. config.withCredentials = true // 允许携带token ,这个是解决跨域产生的相关问题
  20. let token = store.getters['ssoToken']
  21. let isPreview = store.getters['isPreview']
  22. if (config.url.indexOf('mapapp') < 0) {
  23. config.headers = {
  24. 'sso-token': token,
  25. isPreview: isPreview, //默认false,当预览开启的时候是true
  26. }
  27. }
  28. return config
  29. },
  30. (error) => {
  31. return Promise.reject(error)
  32. }
  33. )
  34. axiosservice.interceptors.response.use(
  35. function(res) {
  36. //在这里对返回的数据进行处理
  37. let resp = res.data
  38. if (resp.result === 'unauthc') {
  39. store.commit('logined', false)
  40. MessageBox.confirm('未登陆或登陆信息已失效, 是否重新登陆?', '提示', {
  41. confirmButtonText: '确定',
  42. cancelButtonText: '取消',
  43. type: 'error',
  44. })
  45. .then((resp) => {
  46. window.location.reload()
  47. })
  48. .catch((error) => {})
  49. } else if (resp.result == 'unauthorization') {
  50. MessageBox.alert('无权操作', { title: '警告', type: 'error' })
  51. }
  52. return res
  53. },
  54. function(err) {
  55. return Promise.reject(err)
  56. }
  57. )
  58. /* 下载方法 */
  59. function downFile(blob, fileName) {
  60. // 非IE下载
  61. if ('download' in document.createElement('a')) {
  62. let link = document.createElement('a')
  63. link.href = window.URL.createObjectURL(blob) // 创建下载的链接
  64. link.download = fileName // 下载后文件名
  65. link.style.display = 'none'
  66. document.body.appendChild(link)
  67. link.click() // 点击下载
  68. window.URL.revokeObjectURL(link.href) // 释放掉blob对象
  69. document.body.removeChild(link) // 下载完成移除元素
  70. } else {
  71. // IE10+下载
  72. window.navigator.msSaveBlob(blob, fileName)
  73. }
  74. }
  75. export default {
  76. //获取cookie
  77. getCookie(name) {
  78. var arr,
  79. reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)')
  80. if ((arr = document.cookie.match(reg))) {
  81. return unescape(arr[2])
  82. } else {
  83. /* 如果没有参数,那么就获取本域下的所有cookie */
  84. return document.cookie
  85. }
  86. },
  87. async getJson(url, params) {
  88. try {
  89. let response = await axiosservice({
  90. url,
  91. params,
  92. method: 'get',
  93. })
  94. return response.data
  95. } catch (err) {
  96. throw err
  97. }
  98. },
  99. async postJson(url, data) {
  100. try {
  101. let response = await axiosservice({
  102. url,
  103. data,
  104. method: 'post',
  105. })
  106. return response.data
  107. } catch (err) {
  108. throw err
  109. }
  110. },
  111. async fetchJson(url, params, data) {
  112. try {
  113. let response = await axiosservice({
  114. url,
  115. params,
  116. data,
  117. method: 'post',
  118. })
  119. return response
  120. } catch (err) {
  121. throw err
  122. }
  123. },
  124. async postupload(url, data) {
  125. try {
  126. let response = await axiosservice({
  127. url,
  128. data,
  129. method: 'post',
  130. headers: {
  131. 'Content-Type': 'multipart/form-data',
  132. },
  133. })
  134. return response.data
  135. } catch (err) {
  136. throw err
  137. }
  138. },
  139. download(url, requestData) {
  140. // 响应类型:arraybuffer, blob
  141. axiosservice
  142. .post(url, requestData, { responseType: 'blob' })
  143. .then((resp) => {
  144. let headers = resp.headers
  145. let contentType = headers['content-type']
  146. if (!resp.data) {
  147. console.error('响应异常:', resp)
  148. return false
  149. } else {
  150. //console.log("下载文件:", resp)
  151. const blob = new Blob([resp.data], { type: contentType })
  152. const contentDisposition = resp.headers['content-disposition']
  153. let fileName = 'unknown'
  154. if (contentDisposition) {
  155. fileName = window.decodeURI(resp.headers['content-disposition'].split('=')[1])
  156. }
  157. downFile(blob, fileName)
  158. }
  159. })
  160. .catch(function(error) {})
  161. },
  162. axios: axiosservice,
  163. }