axios.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  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. data: { name: "admin", pasword: "123456" }, // 请求所携带参数,默认为空,可缺省
  16. success (res) {
  17. // 请求成功的回调
  18. },
  19. fail (error) {
  20. // 请求失败的回调
  21. }
  22. });
  23. */
  24. export function requestData(options) {
  25. return new Promise((resolve, reject) => {
  26. if (options.showLoading) {
  27. BASE.showLoading();
  28. }
  29. // 包装请求头
  30. let headers = options.headers || {
  31. 'Content-Type': 'application/x-www-form-urlencoded',
  32. 'Access-Control-Allow-Origin': '*',
  33. 'Access-Control-Allow-Credentials': 'true'
  34. };
  35. // 请求是否携带 token
  36. const isMust = (options.isMust == true || options.isMust == false) ? options.isMust : true;
  37. if (isMust) headers.authToken = localStorage.getItem('authToken');
  38. // 创建请求实例
  39. const XHRReq = axios.create({
  40. headers,
  41. withCredentials: true,
  42. crossDomain: true,
  43. baseURL: options.baseURL || window.__MODE__.baseURL || '/api/',
  44. timeout: options.timeout || 30000, // 请求超时时间 - 3s
  45. });
  46. // 请求拦截器
  47. XHRReq.interceptors.request.use((config) => {
  48. return config;
  49. }, (err) => {
  50. return Promise.reject(err);
  51. });
  52. // 统一格式包装请求参数
  53. let params = new URLSearchParams();
  54. for (let key in (options.data || {})) {
  55. params.append(key, options.data[key]);
  56. }
  57. // 发起请求
  58. XHRReq({
  59. url: options.subUrl,
  60. method: options.method || 'GET',
  61. params,
  62. }).then(response => {
  63. if (options.showLoading) {
  64. BASE.closeLoading();
  65. }
  66. if (response.code === 501) { // 用户类请求错误code (账号密码错误、用户锁定、token过期等)
  67. localStorage.removeItem('authToken');
  68. BASE.showMsg({
  69. msg: (response.data && response.data.msg) || ("请求出错[" + response.data.code + "]")
  70. });
  71. // window.location.reload();
  72. // window.__STATICVUE__.$router.replace('/login');
  73. } else if (response.data.code === 200) { // 请求成功 code
  74. options.success && options.success(response.data);
  75. resolve(response);
  76. } else { // 其他code
  77. BASE.showMsg({
  78. msg: (response.data && response.data.msg) || ("请求出错[" + response.data.code + "]")
  79. });
  80. }
  81. }).catch(error => {
  82. if (options.showLoading) {
  83. BASE.closeLoading();
  84. }
  85. options.fail && options.fail(error);
  86. reject(error);
  87. });
  88. });
  89. }
  90. export default {
  91. requestData
  92. }