数字化园区前端项目
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243
  1. /**axios封装
  2. * 请求拦截、相应拦截、错误统一处理
  3. */
  4. import axios from "axios";
  5. import { Message } from "element-ui";
  6. // import QS from "qs";
  7. // 环境的切换
  8. axios.defaults.baseURL = process.env.VUE_APP_BASE_API;
  9. // 请求超时时间
  10. axios.defaults.timeout = 300000;
  11. // post请求头
  12. axios.defaults.headers.post["Content-Type"] = "application/x-www-form-urlencoded;charset=UTF-8";
  13. // delete请求头
  14. axios.defaults.headers.delete["Content-Type"] = "application/x-www-form-urlencoded;charset=UTF-8";
  15. let pending = []; //声明一个数组用于存储每个请求的取消函数和axios标识
  16. let cancelRepeatUrl = [
  17. "/mall/registry/registrationHall.action",
  18. "/rentalProduct/getAreaRentalProductListAll.action",
  19. ]; // 园区服务、物业租售
  20. let cancelToken = axios.CancelToken;
  21. let removePending = config => {
  22. // console.log(config);
  23. for (let i in pending) {
  24. if (pending[i].url === axios.defaults.baseURL + config.url) {
  25. //在当前请求在数组中存在时执行取消函数
  26. pending[i].f(); //执行取消操作
  27. // pending.splice(i, 1); // 根据具体情况决定是否在这里就把pending去掉
  28. // console.log("重复的:" + pending[i].url);
  29. }
  30. }
  31. };
  32. // 请求拦截器
  33. axios.interceptors.request.use(
  34. config => {
  35. // 每次发送请求之前判断是否存在token,如果存在,则统一在http请求的header都加上token,不用每次请求都手动添加了
  36. // 即使本地存在token,也有可能token是过期的,所以在响应拦截器中要对返回状态进行判断
  37. // const token = store.state.token;
  38. // token && (config.headers.Authorization = token);
  39. // return config;
  40. removePending(config); //在一个axios发送前执行一下判定操作,在removePending中执行取消操作
  41. // console.log(config.url);
  42. config.cancelToken = new cancelToken(function executor(c) {
  43. //本次axios请求的配置添加cancelToken
  44. if (cancelRepeatUrl.indexOf(config.url) > -1) {
  45. pending.push({
  46. // url: config.url,
  47. url: axios.defaults.baseURL + config.url,
  48. f: c,
  49. });
  50. // console.log(axios.defaults.baseURL + config.url);
  51. //将本次的url添加到pending中,因此对于某个url第一次发起的请求不会被取消,因为还没有配置取消函数
  52. }
  53. });
  54. return Promise.resolve(config);
  55. },
  56. error => {
  57. return Promise.error(error);
  58. }
  59. );
  60. // 响应拦截器
  61. axios.interceptors.response.use(
  62. response => {
  63. if (response.status === 200) {
  64. // removePending(response.config); //在一个axios响应后再执行一下取消操作,把已经完成的请求从pending中移除
  65. return Promise.resolve(response);
  66. } else {
  67. return Promise.reject(response);
  68. }
  69. },
  70. // 服务器状态码不是200的情况
  71. error => {
  72. if (error.response.status) {
  73. return Promise.reject(error.response);
  74. }
  75. }
  76. );
  77. /**
  78. * get方法,对应get请求
  79. * @param {String} url [请求的url地址]
  80. * @param {Object} params [请求时携带的参数]
  81. */
  82. export function get(url, params) {
  83. return new Promise((resolve, reject) => {
  84. axios
  85. .get(url, {
  86. params: params,
  87. })
  88. .then(res => {
  89. if (res.data.status === 1) {
  90. Message.error("意外错误!");
  91. return;
  92. }
  93. if (res.data.status === 101) {
  94. Message.error("非法请求!");
  95. return;
  96. }
  97. if (res.data.status === 103) {
  98. Message.error("权限不足!");
  99. if (location.pathname.indexOf("independent-product") > -1) {
  100. location.href = "/page/managerIndex.action";
  101. }
  102. return;
  103. }
  104. if (res.data.status === 110) {
  105. Message.error("CRM系统异常!");
  106. return;
  107. }
  108. if (res.data.status === 113) {
  109. Message.error("请求过于频繁!");
  110. return;
  111. }
  112. resolve(res);
  113. })
  114. .catch(err => {
  115. reject(err);
  116. });
  117. });
  118. }
  119. /**
  120. * post方法,对应post请求
  121. * @param {String} url [请求的url地址]
  122. * @param {Object} params [请求时携带的参数]
  123. */
  124. export function post(url, params) {
  125. return new Promise((resolve, reject) => {
  126. axios
  127. .post(url, params)
  128. .then(res => {
  129. if (res.data.status === 1) {
  130. Message.error("意外错误!");
  131. return;
  132. }
  133. if (res.data.status === 101) {
  134. Message.error("非法请求!");
  135. return;
  136. }
  137. if (res.data.status === 103) {
  138. Message.error("权限不足!");
  139. return;
  140. }
  141. if (res.data.status === 110) {
  142. Message.error("CRM系统异常!");
  143. return;
  144. }
  145. if (res.data.status === 113) {
  146. Message.error("请求过于频繁!");
  147. return;
  148. }
  149. resolve(res);
  150. })
  151. .catch(err => {
  152. reject(err);
  153. });
  154. });
  155. }
  156. /**
  157. * put方法,对应put请求
  158. * @param {String} url [请求的url地址]
  159. * @param {Object} params [请求时携带的参数]
  160. */
  161. export function put(url, params) {
  162. return new Promise((resolve, reject) => {
  163. axios
  164. .put(url, params)
  165. .then(res => {
  166. if (res.data.status === 1) {
  167. Message.error("意外错误!");
  168. return;
  169. }
  170. if (res.data.status === 101) {
  171. Message.error("非法请求!");
  172. return;
  173. }
  174. if (res.data.status === 103) {
  175. Message.error("权限不足!");
  176. return;
  177. }
  178. if (res.data.status === 110) {
  179. Message.error("CRM系统异常!");
  180. return;
  181. }
  182. if (res.data.status === 113) {
  183. Message.error("请求过于频繁!");
  184. return;
  185. }
  186. resolve(res);
  187. })
  188. .catch(err => {
  189. reject(err);
  190. });
  191. });
  192. }
  193. /**
  194. * delete方法,对应delete请求,delete是保留字,使用del代替
  195. * @param {String} url [请求的url地址]
  196. * @param {Object} params [请求时携带的参数]
  197. */
  198. export function del(url, params) {
  199. return new Promise((resolve, reject) => {
  200. axios
  201. .delete(url, {
  202. params: params,
  203. })
  204. .then(res => {
  205. if (res.data.status === 1) {
  206. Message.error("意外错误!");
  207. return;
  208. }
  209. if (res.data.status === 101) {
  210. Message.error("非法请求!");
  211. return;
  212. }
  213. if (res.data.status === 103) {
  214. Message.error("权限不足!");
  215. return;
  216. }
  217. if (res.data.status === 110) {
  218. Message.error("CRM系统异常!");
  219. return;
  220. }
  221. if (res.data.status === 113) {
  222. Message.error("请求过于频繁!");
  223. return;
  224. }
  225. resolve(res);
  226. })
  227. .catch(err => {
  228. reject(err);
  229. });
  230. });
  231. }