httputils.js 5.5 KB

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