http.js 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  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('/uims-message') !== -1) {
  19. config.url = config.url;
  20. } else if (config.url.indexOf('/operation-manager') !== -1) {
  21. config.url = config.url;
  22. }
  23. else if (config.url.indexOf('/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 {
  30. config.url = `/sc-user-center${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.$msgBox('你的登录已超时,请重新登录', '', 'warning', {
  58. width: '290px',
  59. showCancelButton: false,
  60. confirmButtonText: '确定',
  61. showClose: false
  62. }).then(() => {
  63. window.open(config.loginUrl, '_self');
  64. window.relogin = false;
  65. localStorage.removeItem('SC_token');
  66. }).catch(() => { });
  67. } else if (data == 1) {
  68. Vue.prototype.$msgBox('该账号已在其他地址登录,如需访问请重新登录', '', 'warning', {
  69. width: '290px',
  70. showCancelButton: false,
  71. confirmButtonText: '确定',
  72. showClose: false
  73. }).then(() => {
  74. window.open(config.loginUrl, '_self');
  75. window.relogin = false;
  76. localStorage.removeItem('SC_token');
  77. }).catch(() => { });
  78. } else {
  79. Vue.prototype.$msgBox('你的账号已被停用,如有问题请联系管理员', '', 'warning', {
  80. width: '290px',
  81. showCancelButton: false,
  82. confirmButtonText: '确定',
  83. showClose: false
  84. }).then(() => {
  85. window.open(config.loginUrl, '_self');
  86. window.relogin = false;
  87. localStorage.removeItem('SC_token');
  88. }).catch(() => { });
  89. }
  90. })
  91. return;
  92. }
  93. if (axios.isCancel(err)) return new Promise(() => { }); // 取消请求的情况下,终端Promise调用链
  94. return Promise.reject(err);
  95. }
  96. );
  97. export default {
  98. vm: '',
  99. post(url, data) {
  100. return new Promise((resolve, reject) => {
  101. http.post(url, data)
  102. .then((res) => {
  103. this.callback(resolve, res);
  104. })
  105. .catch((err) => {
  106. this.reject(reject, err);
  107. });
  108. });
  109. },
  110. postForm(url, data) {
  111. return new Promise((resolve, reject) => {
  112. http.post(url, qs.stringify(data))
  113. .then((res) => {
  114. this.callback(resolve, res);
  115. })
  116. .catch((err) => {
  117. this.reject(reject, err);
  118. });
  119. });
  120. },
  121. get(url, data) {
  122. for (let item in data) {
  123. if (data[item] && 'string' == typeof data[item]) {
  124. data[item] = data[item].replace(/[`!@#$%^&*()\[\]\\{}=\'\"\/<>]/g, '');
  125. }
  126. }
  127. return new Promise((resolve, reject) => {
  128. http.get(url, {
  129. params: data
  130. })
  131. .then((res) => {
  132. this.callback(resolve, res);
  133. })
  134. .catch((err) => {
  135. this.reject(reject, err);
  136. });
  137. });
  138. },
  139. delete(url, data) {
  140. return new Promise((resolve, reject) => {
  141. http.delete(url, {
  142. params: data
  143. })
  144. .then((res) => {
  145. this.callback(resolve, res);
  146. })
  147. .catch((err) => {
  148. this.reject(reject, err);
  149. });
  150. });
  151. },
  152. deleteJSON(url, data) {
  153. return new Promise((resolve, reject) => {
  154. http.delete(url, {
  155. data: data
  156. })
  157. .then((res) => {
  158. this.callback(resolve, res);
  159. })
  160. .catch((err) => {
  161. this.reject(reject, err);
  162. });
  163. });
  164. },
  165. putForm(url, data) {
  166. return new Promise((resolve, reject) => {
  167. http.put(url, qs.stringify(data))
  168. .then((res) => {
  169. this.callback(resolve, res);
  170. })
  171. .catch((err) => {
  172. this.reject(reject, err);
  173. });
  174. });
  175. },
  176. put(url, data) {
  177. return new Promise((resolve, reject) => {
  178. http.put(url, data)
  179. .then((res) => {
  180. this.callback(resolve, res);
  181. })
  182. .catch((err) => {
  183. this.reject(reject, err);
  184. });
  185. });
  186. },
  187. callback(resolve, res) {
  188. resolve(res);
  189. },
  190. reject(reject, err) {
  191. if (err instanceof Error) {
  192. ELEMENT.Message.error(err.message);
  193. }
  194. reject(err);
  195. }
  196. };