fetch.js 2.04 KB
Newer Older
姜雷 committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
import axios from 'axios';
import { Message, MessageBox } from 'element-ui';
import store from '../store';
import config from '../config/index';
import { errorHandle } from './validate';

// 创建axios实例
const service = axios.create({
  baseURL: config.SERVER_URL, // api的base_url
  timeout: 10000,
});
let logout = false;
// request拦截器
service.interceptors.request.use(
  conf => {
    store.dispatch('fetchStart');
    // if(conf.method)

    conf.headers = {
      ...conf.headers,
      reqSource: 'pc',
      token: store.getters.token ? store.getters.token : '',
    };
    if (conf.method != 'get') {
      conf.params = null;
    }
    return conf;
  },
  error => {
    // Do something with request error
    console.log(error); // for debug
    Promise.reject(error);
  }
);

// respone拦截器
service.interceptors.response.use(response => {
  const res = response.data;
  /**
姜雷 committed
40
   * code为非'1000'是抛错
姜雷 committed
41 42 43 44
   */
  setTimeout(() => {
    store.dispatch('fetchDone');
  }, 500);
姜雷 committed
45
  if (res.code !== 1000) {
姜雷 committed
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
    if (
      response.headers &&
      response.headers['content-type'] === 'application/octet-stream'
    ) {
      return response;
    }
    Message({
      message: res.msg || '网络错误!',
      type: 'error',
      duration: 5 * 1000,
    });

    // -2:其他客户端登录了;Token 过期了;
    if (res.code === '-2') {
      if (logout) return;
      logout = true;
      MessageBox.confirm(
        '你已被登出,可以取消继续留在该页面,或者重新登录',
        '确定登出',
        {
          confirmButtonText: '重新登录',
          cancelButtonText: '取消',
          type: 'warning',
        }
      )
        .then(() => {
          store.dispatch('FedLogOut').then(() => {
            location.reload(); // 为了重新实例化vue-router对象 避免bug
          });
        })
        .catch(err => {
          console.log(err);
          logout = false;
        });
    }
    return Promise.reject(response.data);
  } else {
    return response.data;
  }
}, errorHandle);

export default service;