httputils.js 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. import axios from "axios"
  2. import store from "@/store"
  3. import { MessageBox } from "element-ui"
  4. const CancelToken = axios.CancelToken
  5. let 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. const token = store.getters["token"]
  21. if (config.url.indexOf('mapapp') < 0) {
  22. config.headers = {
  23. 'sso-token': 'admin:lengqiang',
  24. isPreview: false, //默认false,当预览开启的时候是true
  25. }
  26. }
  27. return config
  28. },
  29. (error) => {
  30. return Promise.reject(error)
  31. }
  32. )
  33. axiosservice.interceptors.response.use(
  34. function(res) {
  35. //在这里对返回的数据进行处理
  36. //console.log('axios interceptors res = ', res.status, res)
  37. const 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. //console.log('--------------------------- confirm', resp)
  47. //router.push('/login')
  48. window.location.reload()
  49. })
  50. .catch((error) => {
  51. //console.log('--------------------------- cancel', error)
  52. console.log("")
  53. })
  54. } else if (resp.result == "unauthorization") {
  55. MessageBox.alert("无权操作", { title: "警告", type: "error" })
  56. }
  57. //console.log('axios interceptors resp2 = ', resp.success, resp.errorCode, resp.errorMessage, res)
  58. return res
  59. },
  60. function(err) {
  61. //Do something with response error
  62. console.log("axios interceptors err = ", err)
  63. return Promise.reject(err)
  64. }
  65. )
  66. /* 下载方法 */
  67. function downFile(blob, fileName) {
  68. // 非IE下载
  69. if ("download" in document.createElement("a")) {
  70. const 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. let 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. const 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. const 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. const 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. const 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. const headers = resp.headers
  153. const contentType = headers["content-type"]
  154. console.log("响应头信息", headers)
  155. if (!resp.data) {
  156. console.error("响应异常:", resp)
  157. return false
  158. } else {
  159. console.log("下载文件:", resp)
  160. const blob = new Blob([resp.data], { type: contentType })
  161. const contentDisposition = resp.headers["content-disposition"]
  162. let fileName = "unknown"
  163. if (contentDisposition) {
  164. fileName = window.decodeURI(resp.headers["content-disposition"].split("=")[1])
  165. }
  166. console.log("文件名称:", fileName)
  167. downFile(blob, fileName)
  168. }
  169. })
  170. .catch(function(error) {
  171. console.log(error)
  172. })
  173. },
  174. axios: axiosservice,
  175. }