httputils.js 5.7 KB

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