/**
 *  axios 工具函数层
 */
import axios from 'axios';
import router from '@/router';
import store from '@/store';
import { message } from '@/utils/resetMessage';
import { responseErr, loginErr } from '@/config';
// 加载条插件
// import NProgress from "nprogress";

// 接口地址
const baseURL = process.env.VUE_APP_API_BASE_URL;
// 请求超时
const timeout = 60 * 1000;

// 请求拦截（成功）
function reqSuccess(config) {
  let token = store.getters['user/token'];
  if (token) {
    config.headers.Authorization = token;
  }
  // NProgress.start();
  return config;
}

// 响应拦截(成功)
function resSuccess(response) {
  if (response.data.code !== undefined && response.data.msg !== undefined) {
    // 取出数据
    let { code, msg } = response.data;
    if (code == -1) {
      message.error({
        message: msg
      });
      if (msg === '非法用户,不可访问') {
        // 重置store下的user模块
        store.commit('user/reset');
        router.push('/');
      }
    } else if (loginErr.includes(code)) {
      message.error({
        message: msg
      });
      // 重置store下的user模块
      store.commit('user/reset');
      setTimeout(() => {
        location.href = process.env.VUE_APP_API_portal_URL;
      }, 2000);
    }
  }
  // NProgress.done();
  return response;
}
// 响应拦截(错误)
function resError(error) {
  if (error && error.response) {
    let msg = responseErr[error.response.status];
    error.message = msg || `连接错误${error.response.status}`;
  } else {
    if (JSON.stringify(error).includes('timeout')) {
      error.message = '服务器响应超时，请刷新当前页';
    } else {
      error.message = '连接服务器失败';
    }
  }
  message.error({
    message: error.message
  });

  return Promise.resolve(error.response);
}

// 请求配置
const request = axios.create({
  // 请求超时时间
  timeout,
  // 设置统一服务器地址
  baseURL,
  headers: {
    'Content-Type': 'application/json;charset=UTF-8'
  }
});

request.interceptors.request.use(reqSuccess, (err) => {
  return Promise.reject(err);
});
request.interceptors.response.use(resSuccess, resError);

export { request };
