import Vue from "vue";
import router from "@/router"
import axios from 'axios'
import { message } from 'ant-design-vue';
import Storage from "@/utils/js/Storage"
const service = axios.create({
  baseURL: process.env.VUE_APP_API_BASE_URL,
  // timeout: 10000
})
service.interceptors.request.use(config => {
  Vue.prototype.$setLoading({
    spinning: true,
    tip: "请稍等",
  });
  config.data = JSON.stringify(config.data);
  config.headers = {
    'Content-Type': 'application/json;charset=utf-8'
  }
  const Authorization = JSON.parse(localStorage.getItem('Authorization'));
  if (Authorization) {
    config.headers.Authorization = Authorization;
  }
  return config
}, error => {
  Promise.reject(error)
})
service.interceptors.response.use(response => {
  Vue.prototype.$setLoading(false);
  if (response.data.code !== undefined && response.data.msg !== undefined) {
    let { code, msg } = response.data
    if (code === -1) {
      message.error({
        content: msg,
        maxCount: 1,
      })
    } else if (code === 401) {
      message.error({
        message: msg,
        maxCount: 1,
      })
      Storage.remove(2, "userInfo")
      Storage.remove(2, "siteId")
      Storage.remove(2, "Authorization")
      router.push('/')
    }
  }
  return response.data
}, error => {
  if (error && error.response) {
    switch (error.response.status) {
      case 400:
        error.message = '错误请求'
        break;
      case 401:
        error.message = '未授权,请重新登录'
        break;
      case 403:
        error.message = '拒绝访问'
        break;
      case 404:
        error.message = '请求错误,未找到该资源'
        break;
      case 405:
        error.message = '请求方法未允许'
        break;
      case 408:
        error.message = '请求超时'
        break;
      case 500:
        error.message = '服务器端出错'
        break;
      case 501:
        error.message = '网络未实现'
        break;
      case 502:
        error.message = '网络错误'
        break;
      case 503:
        error.message = '服务不可用'
        break;
      case 504:
        error.message = '网络超时'
        break;
      case 505:
        error.message = 'http版本不支持该请求'
        break;
      default:
        error.message = `连接错误${error.response.status}`
    }
  } else {
    if (JSON.stringify(error).includes('timeout')) {

      Vue.prototype.$message.error('服务器响应超时,请刷新当前页');
    }
    error.message = '连接服务器失败'

  }
  Vue.prototype.$setLoading(false);
  message.error(error.message);


  return Promise.resolve(error.response)
})
export default service