http.js 6.3 KB

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