axios.js 4.2 KB

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