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