request.js 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. import axios from "axios";
  2. import $store from "../store";
  3. import toLogin from "@libs/login";
  4. import { VUE_APP_API_URL } from "@utils/index";
  5. const instance = axios.create({
  6. baseURL: VUE_APP_API_URL,
  7. timeout: 5000
  8. });
  9. const defaultOpt = { login: true };
  10. function baseRequest(options) {
  11. const token = $store.state.app.token;
  12. const headers = options.headers || {};
  13. headers["Authori-zation"] = "Bearer " + token;
  14. options.headers = headers;
  15. if (options.login && !token) {
  16. toLogin();
  17. return Promise.reject({ msg: "未登录", toLogin: true });
  18. }
  19. return instance(options).then(res => {
  20. const data = res.data || {};
  21. if (res.status !== 200)
  22. return Promise.reject({ msg: "请求失败", res, data });
  23. if ([410000, 410001, 410002].indexOf(data.status) !== -1) {
  24. toLogin();
  25. return Promise.reject({ msg: res.data.msg, res, data, toLogin: true });
  26. } else if (data.status === 200) {
  27. return Promise.resolve(data, res);
  28. } else {
  29. return Promise.reject({ msg: res.data.msg, res, data });
  30. }
  31. });
  32. }
  33. /**
  34. * http 请求基础类
  35. * 参考文档 https://www.kancloud.cn/yunye/axios/234845
  36. *
  37. */
  38. const request = ["post", "put", "patch"].reduce((request, method) => {
  39. /**
  40. *
  41. * @param url string 接口地址
  42. * @param data object get参数
  43. * @param options object axios 配置项
  44. * @returns {AxiosPromise}
  45. */
  46. request[method] = (url, data = {}, options = {}) => {
  47. return baseRequest(
  48. Object.assign({ url, data, method }, defaultOpt, options)
  49. );
  50. };
  51. return request;
  52. }, {});
  53. ["get", "delete", "head"].forEach(method => {
  54. /**
  55. *
  56. * @param url string 接口地址
  57. * @param params object get参数
  58. * @param options object axios 配置项
  59. * @returns {AxiosPromise}
  60. */
  61. request[method] = (url, params = {}, options = {}) => {
  62. return baseRequest(
  63. Object.assign({ url, params, method }, defaultOpt, options)
  64. );
  65. };
  66. });
  67. export default request;