fetch-api.js 3.64 KB
import axios from 'axios';

import {
  Toast
} from 'vant';

import router from '@/router'
import {
  getToken,
  setToken,
  removeToken
} from '@/utils/auth'

// axios的默认url
// axios.defaults.baseURL = ""

// 服务器地址
let base = "http://api.bh.kdao.xin";
if (location.href.indexOf("//k.wxpai.cn") > 0) {
  base = "https://api.k.wxpai.cn/bizproxy"
}
// let base = COM.baseUrl;

// 请求拦截器
// axios.interceptors.request.use(
//   config => {
//     // 每次发送请求之前判断是否存在token,如果存在,则统一在http请求的header都加上token,不用每次请求都手动添加了
//     // 即使本地存在token,也有可能token是过期的,所以在响应拦截器中要对返回状态进行判断
//     const token = "token"; //这里写入token
//     token && (config.headers.Authorization = token);
//     return config;
//   },
//   error => {
//     return Promise.error(error);
//   })

// 响应拦截器
axios.interceptors.response.use(
  response => {
    let {
      config
    } = response;
    let {
      opt
    } = config;
    // 服务器状态码
    if (response.status === 200) {

      // 业务状态码
      if (response.data.code === 200) {
        return Promise.resolve(response);
      } else {
        if (typeof (opt) == "undefined" || typeof (opt.toast) == "undefined" || opt.toast) {
          Toast(response.data.errMsg);
        }
        switch (response.data.code) {

          /**
           * 登陆失败
           * 清除cookies
           * 根据业务可能要引导回登陆页
           */
          case 403:
            removeToken();
            break;

          default:
            break;
        }

        return Promise.reject(response);
      }
    } else {
      return Promise.reject(response);
    }
  },
  // 服务器状态码不是200的情况
  error => {
    if (error.response.status) {
      switch (error.response.status) {
        // 其他错误,直接抛出错误提示
        default:
          Toast({
            message: error.response.data.message,
            duration: 1500,
            forbidClick: true
          });
      }
      return Promise.reject(error.response);
    }
  }
);


//formDataHeaders设置
let formDataHeaders = {
  headers: {
    "Content-Type": "multipart/form-data"
  }
}

/**
 * 封装get方法
 * @param {*} params
 * 
 */
export const httpGet = params => {
  let {
    url,
    data,
    mode,
    opt = Object.assign({}, params.opt),
    sid = true
  } = params;
  let reqUrl = `${base}${url}`;
  if (mode == "custom") {
    reqUrl = `${url}`
  }
  let headers = {}
  if (sid) {
    headers.sessionId = getToken();
  }
  return axios.get(reqUrl, {
    params: data,
    headers,
    opt
  }).then(res => res.data.content);
}

/**
 * 封装post方法
 * @param {*} params
 */
export const httpPost = params => {
  let {
    url,
    data,
    mode,
    opt = Object.assign({}, params.opt),
    sid = true
  } = params;
  let reqUrl = `${base}${url}`;
  if (mode == "custom") {
    reqUrl = `${url}`
  }
  let headers = {}
  if (sid) {
    headers.sessionId = getToken();
  }
  return axios.post(reqUrl, data, {
    headers,
    opt
  }).then(res => res.data.content);
}


/**
 * 封装post方法
 * @param {*} params
 * data数据是 formdata格式
 * 例如:
 *          this.file = file
 let data = new FormData() //使用formData对象
 data.append('path', '/pro/mzczcradmin/')
 data.append('file', file.file)
 */
export const formdata = params => {
  let {
    url,
    data,
    config,
  } = params;
  if (!config) {
    config = {}
  }
  config.header = formDataHeaders.headers
  return axios.post(`${base}${url}`, data, config).then(res => res.data.content);
}