httputils.js 5.7 KB

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