http.js 6.7 KB

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