http.js 6.6 KB

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