http.js 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. import axios from 'axios';
  2. import qs from 'qs';
  3. import Vue from 'vue';
  4. import config from '@/config';
  5. // 获取CancelToken
  6. const CancelToken = axios.CancelToken;
  7. const source = CancelToken.source();
  8. var http = axios.create({
  9. timout: 30000
  10. });
  11. // axios request 拦截器
  12. http.interceptors.request.use(
  13. (config) => {
  14. if (config.url.indexOf('/sc-user-auth') !== -1) {
  15. config.url = config.url;
  16. } else if (config.url.indexOf('/sc-message') !== -1) {
  17. config.url = config.url;
  18. } else if (config.url.indexOf('/operation-manager') !== -1) {
  19. config.url = config.url;
  20. } else if (config.url.indexOf('/zoniot-water') !== -1) {
  21. config.url = config.url;
  22. } else if (config.url.indexOf('/sc-user-center') !== -1) {
  23. config.url = config.url;
  24. } else if (config.url.indexOf('/sc-community') !== -1) {
  25. config.url = config.url;
  26. } else if (config.url.indexOf('/sc-charge') !== -1) {
  27. config.url = config.url;
  28. }
  29. // else {
  30. // config.url = `/sc-community${config.url}`;
  31. // }
  32. // config.headers['Accept'] = '*/*'
  33. config.headers[localStorage.getItem('SC_token') && 'Authorization'] = 'Bearer ' + localStorage.getItem('SC_token');
  34. // 全局添加cancelToken
  35. config.cancelToken = source.token;
  36. return config;
  37. },
  38. (err) => {
  39. return Promise.reject(err);
  40. }
  41. );
  42. // axios响应拦截
  43. http.interceptors.response.use(
  44. (res) => {
  45. return Promise.resolve(res.data);
  46. },
  47. (err) => {
  48. if (err.response.status == 401) {
  49. axios({
  50. url: '/sc-user-auth/user/getUserStatus?accessToken=' + localStorage.getItem('SC_token'),
  51. method: 'get'
  52. }).then((response) => {
  53. if (window.relogin) return false;
  54. window.relogin = true;
  55. let data = response.data.data;
  56. if (data == 0) {
  57. Vue.prototype
  58. .$msgBox('你的登录已超时,请重新登录', '', 'warning', {
  59. width: '290px',
  60. showCancelButton: false,
  61. confirmButtonText: '确定',
  62. showClose: false
  63. })
  64. .then(() => {
  65. window.open(config.loginUrl, '_self');
  66. window.relogin = false;
  67. localStorage.removeItem('SC_token');
  68. })
  69. .catch(() => {});
  70. } else if (data == 1) {
  71. ELEMENT.MessageBox('该账号已在其他地址登录,如需访问请重新登录', '提示', 'warning', {
  72. confirmButtonText: '确定',
  73. showClose: false
  74. })
  75. .then(() => {
  76. window.open(config.loginUrl, '_self');
  77. window.relogin = false;
  78. localStorage.removeItem('SC_token');
  79. sessionStorage.removeItem('tabs');
  80. localStorage.removeItem('menupath');
  81. })
  82. .catch(() => {});
  83. } else {
  84. Vue.prototype
  85. .$msgBox('你的账号已被停用,如有问题请联系管理员', '', 'warning', {
  86. width: '290px',
  87. showCancelButton: false,
  88. confirmButtonText: '确定',
  89. showClose: false
  90. })
  91. .then(() => {
  92. window.open(config.loginUrl, '_self');
  93. window.relogin = false;
  94. localStorage.removeItem('SC_token');
  95. })
  96. .catch(() => {});
  97. }
  98. });
  99. return;
  100. }
  101. if (axios.isCancel(err)) return new Promise(() => {}); // 取消请求的情况下,终端Promise调用链
  102. return Promise.reject(err);
  103. }
  104. );
  105. export default {
  106. vm: '',
  107. post(url, data) {
  108. return new Promise((resolve, reject) => {
  109. http.post(url, data)
  110. .then((res) => {
  111. this.callback(resolve, res);
  112. })
  113. .catch((err) => {
  114. this.reject(reject, err);
  115. });
  116. });
  117. },
  118. postForm(url, data) {
  119. return new Promise((resolve, reject) => {
  120. http.post(url, qs.stringify(data))
  121. .then((res) => {
  122. this.callback(resolve, res);
  123. })
  124. .catch((err) => {
  125. this.reject(reject, err);
  126. });
  127. });
  128. },
  129. get(url, data) {
  130. for (let item in data) {
  131. if (data[item] && 'string' == typeof data[item]) {
  132. data[item] = data[item].replace(/[`!@#$%^&*()\[\]\\{}=\'\"\/<>]/g, '');
  133. }
  134. }
  135. return new Promise((resolve, reject) => {
  136. http.get(url, {
  137. params: data
  138. })
  139. .then((res) => {
  140. this.callback(resolve, res);
  141. })
  142. .catch((err) => {
  143. this.reject(reject, err);
  144. });
  145. });
  146. },
  147. delete(url, data) {
  148. return new Promise((resolve, reject) => {
  149. http.delete(url, {
  150. params: data
  151. })
  152. .then((res) => {
  153. this.callback(resolve, res);
  154. })
  155. .catch((err) => {
  156. this.reject(reject, err);
  157. });
  158. });
  159. },
  160. deleteJSON(url, data) {
  161. return new Promise((resolve, reject) => {
  162. http.delete(url, {
  163. data: data
  164. })
  165. .then((res) => {
  166. this.callback(resolve, res);
  167. })
  168. .catch((err) => {
  169. this.reject(reject, err);
  170. });
  171. });
  172. },
  173. putForm(url, data) {
  174. return new Promise((resolve, reject) => {
  175. http.put(url, qs.stringify(data))
  176. .then((res) => {
  177. this.callback(resolve, res);
  178. })
  179. .catch((err) => {
  180. this.reject(reject, err);
  181. });
  182. });
  183. },
  184. put(url, data) {
  185. return new Promise((resolve, reject) => {
  186. http.put(url, data)
  187. .then((res) => {
  188. this.callback(resolve, res);
  189. })
  190. .catch((err) => {
  191. this.reject(reject, err);
  192. });
  193. });
  194. },
  195. callback(resolve, res) {
  196. resolve(res);
  197. },
  198. reject(reject, err) {
  199. if (err instanceof Error) {
  200. ELEMENT.Message.error(err.message);
  201. }
  202. reject(err);
  203. }
  204. };