axios.js 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  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.code === 501) { // 用户类请求错误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) { // 请求成功 code
  75. options.success && options.success(response.data);
  76. resolve(response);
  77. } else { // 其他code
  78. BASE.closeLoading();
  79. BASE.showMsg({
  80. msg: (response.data && response.data.msg) || ("请求出错[" + response.data.code + "]")
  81. });
  82. }
  83. }).catch(error => {
  84. if (options.showLoading) {
  85. BASE.closeLoading();
  86. }
  87. options.fail && options.fail(error);
  88. reject(error);
  89. });
  90. });
  91. }
  92. export default {
  93. requestData
  94. }