axios.js 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. import axios from "axios";
  2. import qs from "qs";
  3. import { MessageBox, Notification } from "element-ui";
  4. import router from "../router";
  5. import Vue from "vue";
  6. // 防止鉴权失效之后多次弹窗。
  7. let unauthMsgBoxIsShow = false;
  8. const mdData = datas => {
  9. let nData = {};
  10. if (!datas) return nData;
  11. Object.entries(datas).forEach(([key, val]) => {
  12. if (val === null || val === "null" || val === "") return;
  13. nData[key] = val;
  14. });
  15. return nData;
  16. };
  17. /**
  18. * errorCallback 请求失败的回调
  19. * @param {Object} error 请求失败时的错误信息
  20. */
  21. const errorCallback = error => {
  22. let message = "";
  23. if (error.response) {
  24. message =
  25. (error.response.data && error.response.data.message) || "服务错误";
  26. } else if (error.request) {
  27. message = "请求错误";
  28. if (error.message.indexOf("timeout") > -1) {
  29. message = "请求超时";
  30. }
  31. } else {
  32. return error;
  33. }
  34. message = message.indexOf("###") !== -1 ? "参数错误" : message;
  35. Notification.error({ title: "错误提示", message });
  36. return error;
  37. };
  38. /**
  39. * errorDataCallback 请求成功,结果有误的回调
  40. * @param {Object} error Response中的data信息
  41. */
  42. const errorDataCallback = error => {
  43. let message = error.message || "数据错误";
  44. message = message.indexOf("###") !== -1 ? "参数错误" : message;
  45. if (error.code === 106) {
  46. if (unauthMsgBoxIsShow) return error;
  47. unauthMsgBoxIsShow = true;
  48. message = "身份验证失效,请重新登录";
  49. MessageBox.confirm(message, "重新登陆?", {
  50. type: "warning",
  51. cancelButtonClass: "el-button--danger is-plain",
  52. confirmButtonClass: "el-button--primary",
  53. closeOnClickModal: false,
  54. closeOnPressEscape: false,
  55. showClose: false,
  56. callback: action => {
  57. unauthMsgBoxIsShow = false;
  58. if (action !== "confirm") return;
  59. Vue.ls.clear();
  60. router.push({ name: "Login" });
  61. }
  62. });
  63. } else {
  64. Notification.error({ title: "错误提示", message });
  65. }
  66. return error;
  67. };
  68. /**
  69. * response format
  70. * {
  71. config, header, data, request, status, statusText
  72. }
  73. *
  74. */
  75. /**
  76. * successCallback 请求成功的回调
  77. * @param {Object} data Response中的data信息
  78. */
  79. const successCallback = data => {
  80. if (data.code === 200) {
  81. return data.data;
  82. } else {
  83. throw new Error(errorDataCallback(data));
  84. }
  85. };
  86. /**
  87. * get请求
  88. * @param {String} url 请求地址
  89. * @param {Object} datas 请求数据
  90. */
  91. const $get = (url, datas) => {
  92. const sqDatas = qs.stringify(mdData(datas), {
  93. arrayFormat: "brackets"
  94. });
  95. url += "?" + sqDatas;
  96. return axios
  97. .get(url)
  98. .then(rep => {
  99. return successCallback(rep.data);
  100. })
  101. .catch(error => {
  102. throw new Error(errorCallback(error));
  103. });
  104. };
  105. /**
  106. * get请求
  107. * @param {String} url 请求地址
  108. * @param {Object} datas 请求数据
  109. */
  110. const $postParam = (url, datas, config = {}) => {
  111. const sqDatas = qs.stringify(mdData(datas), {
  112. arrayFormat: "brackets"
  113. });
  114. url += "?" + sqDatas;
  115. return axios
  116. .post(url, {}, config)
  117. .then(rep => {
  118. return successCallback(rep.data);
  119. })
  120. .catch(error => {
  121. throw new Error(errorCallback(error));
  122. });
  123. };
  124. /**
  125. * post请求
  126. * @param {String} url 请求地址
  127. * @param {Object} datas 请求数据
  128. */
  129. const $post = (url, datas, config = {}) => {
  130. let sqDatas = {};
  131. if (datas.constructor === Object) {
  132. sqDatas = mdData(datas);
  133. } else {
  134. sqDatas = datas;
  135. }
  136. return axios
  137. .post(url, sqDatas, config)
  138. .then(rep => {
  139. return successCallback(rep.data);
  140. })
  141. .catch(error => {
  142. throw new Error(errorCallback(error));
  143. });
  144. };
  145. /**
  146. * delete请求
  147. * @param {String} url
  148. * @param {Object} datas
  149. */
  150. const $del = (url, datas) => {
  151. let sqDatas = "";
  152. if (datas) {
  153. sqDatas = qs.stringify(datas, { arrayFormat: "brackets" });
  154. url += "?" + sqDatas;
  155. }
  156. return axios
  157. .delete(url)
  158. .then(rep => {
  159. return rep.data;
  160. })
  161. .catch(error => {
  162. throw new Error(errorCallback(error));
  163. });
  164. };
  165. /**
  166. * put 请求
  167. * @param {String} url 请求地址
  168. * @param {Object} datas 请求数据
  169. */
  170. const $put = (url, datas) => {
  171. let sqDatas = "";
  172. if (datas) {
  173. sqDatas = qs.stringify(datas);
  174. }
  175. return axios
  176. .put(url, sqDatas)
  177. .then(rep => {
  178. return rep.data;
  179. })
  180. .catch(error => {
  181. throw new Error(errorCallback(error));
  182. });
  183. };
  184. /**
  185. * patch请求
  186. * @param {String} url 请求地址
  187. * @param {Object} datas 请求数据
  188. */
  189. const $patch = (url, datas) => {
  190. let sqDatas = "";
  191. if (datas) {
  192. sqDatas = qs.stringify(datas);
  193. }
  194. return axios
  195. .patch(url, sqDatas)
  196. .then(rep => {
  197. return rep.data;
  198. })
  199. .catch(error => {
  200. throw new Error(errorCallback(error));
  201. });
  202. };
  203. export { $get, $postParam, $post, $del, $put, $patch };