axios.js 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. // 引入axios
  2. import axios from 'axios';
  3. import BASE from '@tools/basicTool.js';
  4. axios.defaults.withCredentials = true;
  5. /**
  6. * 通用请求函数
  7. * @param {Object} options 详细配置项,使用方法与所有配置项说明如下:
  8. this.API.requestData({
  9. isMust: true, // 请求是否携带 token ,默认为 true ,可缺省
  10. showLoading: false, // 请求是否显示加载中遮罩层,默认 false ,可缺省
  11. method: "GET", // 请求方式,默认为 GET ,可缺省
  12. baseURL: "http://192.168.10.23:8082/", // 请求服务器地址 + 端口,可缺省
  13. subUrl: "api/repassword", // 请求接口地址,必传项
  14. timeout: 3000, // 请求超时时间,默认 3s ,可缺省
  15. body: { id: "151", name: "张三" }, // 请求体所携带的 Body ,如果后端要求 Body 传参的话需要携带此参数,且请求方式需为 POST
  16. data: { name: "admin", pasword: "123456" }, // 请求所携带参数,默认为空,可缺省
  17. success (res) {
  18. // 请求成功的回调
  19. },
  20. fail (error) {
  21. // 请求失败的回调
  22. }
  23. });
  24. */
  25. export function requestData(options) {
  26. return new Promise((resolve, reject) => {
  27. if (options.showLoading) {
  28. BASE.showLoading();
  29. }
  30. // 包装请求头
  31. let headers = options.headers || {
  32. 'Content-Type': 'application/x-www-form-urlencoded',
  33. 'Access-Control-Allow-Origin': '*',
  34. 'Access-Control-Allow-Credentials': 'true'
  35. };
  36. // 请求是否携带 token
  37. const isMust = (options.isMust == true || options.isMust == false) ? options.isMust : true;
  38. if (isMust) headers.authToken = localStorage.getItem('authToken');
  39. // 创建请求实例
  40. const XHRReq = axios.create({
  41. headers,
  42. withCredentials: true,
  43. crossDomain: true,
  44. baseURL: options.baseURL || window.__MODE__.baseURL || '/api/',
  45. timeout: options.timeout || 30000, // 请求超时时间 - 3s
  46. });
  47. // 请求拦截器
  48. XHRReq.interceptors.request.use((config) => {
  49. return config;
  50. }, (err) => {
  51. return Promise.reject(err);
  52. });
  53. // 统一格式包装请求参数
  54. let params = new URLSearchParams();
  55. for (let key in (options.data || {})) {
  56. params.append(key, options.data[key]);
  57. }
  58. // 发起请求
  59. XHRReq({
  60. url: options.subUrl,
  61. method: options.method || 'GET',
  62. params,
  63. }).then(response => {
  64. if (options.showLoading) {
  65. BASE.closeLoading();
  66. }
  67. if (response.data.code === 2002) { // 用户类请求错误code (账号密码错误、用户锁定、token过期等)
  68. localStorage.removeItem('authToken');
  69. BASE.showMsg({
  70. msg: (response.data && response.data.msg) || ("请求出错[" + response.data.code + "]")
  71. });
  72. // window.location.reload();
  73. // window.__STATICVUE__.$router.replace('/login');
  74. } else if (response.data.code === 200 || response.data.length >= 0 || response.data.records) { // 请求成功 code
  75. options.success && options.success(response.data);
  76. resolve(response);
  77. } else { // 其他code
  78. if (options.showLoading) {
  79. BASE.closeLoading();
  80. }
  81. BASE.showMsg({
  82. msg: (response.data.msg) || ("请求出错[" + response.data.code + "]")
  83. });
  84. }
  85. }).catch(error => {
  86. if (options.showLoading) {
  87. BASE.closeLoading();
  88. }
  89. options.fail && options.fail(error);
  90. reject(error);
  91. });
  92. });
  93. }
  94. /**
  95. * 原生 axios 请求方法
  96. * @param {Object} options 请求配置项,调用方法:
  97. this.API.get({
  98. showLoading: false, // 请求是否显示加载中遮罩层,默认 false ,可缺省
  99. baseURL: "http://192.168.10.23:8082/", // 请求服务器地址 + 端口,可缺省
  100. subUrl: "api/repassword", // 请求接口地址,必传项
  101. success (res) {
  102. // 请求成功的回调
  103. },
  104. });
  105. */
  106. export function request(options) {
  107. return new Promise((resolve, reject) => {
  108. if (options.showLoading) {
  109. BASE.showLoading();
  110. }
  111. axios({
  112. method: options.method || "GET",
  113. url: (options.baseURL || window.__MODE__.baseURL) + options.subUrl,
  114. timeout: options.timeout || 30000, // 请求超时时间 - 3s,
  115. data: options.data,
  116. header: {
  117. "Content-Type": "application/json",
  118. 'Access-Control-Allow-Origin': '*',
  119. 'Access-Control-Allow-Credentials': 'true'
  120. },
  121. }).then((response) => {
  122. if (options.showLoading) {
  123. BASE.closeLoading();
  124. }
  125. if (response.data.code === 2002) { // 用户类请求错误code (账号密码错误、用户锁定、token过期等)
  126. localStorage.removeItem('authToken');
  127. BASE.showMsg({
  128. msg: (response.data && response.data.msg) || ("请求出错[" + response.data.code + "]")
  129. });window.__STATICVUE__.$router.replace('/login');
  130. } else if (response.data.code === 200 || response.data.length >= 0 || response.data.records) { // 请求成功 code
  131. options.success && options.success(response.data);
  132. resolve(response);
  133. } else { // 其他code
  134. BASE.closeLoading();
  135. BASE.showMsg({
  136. msg: (response.data && response.data.msg) || ("请求出错[" + response.data.code + "]")
  137. });
  138. }
  139. }).catch(error => {
  140. if (options.showLoading) {
  141. BASE.closeLoading();
  142. }
  143. options.fail && options.fail(error);
  144. reject(error);
  145. });
  146. })
  147. }
  148. export default {
  149. requestData,
  150. request,
  151. }