request.js 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  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. // console.log(options);
  20. return instance(options).then(res => {
  21. const data = res.data || {};
  22. if (res.status !== 200)
  23. return Promise.reject({ msg: "请求失败", res, data });
  24. if ([410000, 410001, 410002].indexOf(data.status) !== -1) {
  25. toLogin();
  26. return Promise.reject({ msg: res.data.msg, res, data, toLogin: true });
  27. } else if (data.status === 200) {
  28. return Promise.resolve(data, res);
  29. } else {
  30. return Promise.reject({ msg: res.data.msg, res, data });
  31. }
  32. });
  33. }
  34. /**
  35. * http 请求基础类
  36. * 参考文档 https://www.kancloud.cn/yunye/axios/234845
  37. *
  38. */
  39. const request = ["post", "put", "patch"].reduce((request, method) => {
  40. /**
  41. *
  42. * @param url string 接口地址
  43. * @param data object get参数
  44. * @param options object axios 配置项
  45. * @returns {AxiosPromise}
  46. */
  47. request[method] = (url, data = {}, options = {}) => {
  48. return baseRequest(
  49. Object.assign({ url, data, method }, defaultOpt, options)
  50. );
  51. };
  52. return request;
  53. }, {});
  54. ["get", "delete", "head"].forEach(method => {
  55. /**
  56. *
  57. * @param url string 接口地址
  58. * @param params object get参数
  59. * @param options object axios 配置项
  60. * @returns {AxiosPromise}
  61. */
  62. request[method] = (url, params = {}, options = {}) => {
  63. return baseRequest(
  64. Object.assign({ url, params, method }, defaultOpt, options)
  65. );
  66. };
  67. });
  68. export default request;