import axios from 'axios'
import VueAxios from 'vue-axios'
import Vue from 'vue'
import ElementUI, {
    Loading
} from 'element-ui';

let loading //定义loading变量

function startLoading() { //使用Element loading-start 方法
    loading = Loading.service({
        text: '请稍等...',
        background: 'rgba(0, 0, 0, 0.2)'
    })
}

function endLoading() { //使用Element loading-close 方法
    loading.close()
}

let needLoadingRequestCount = 0
export function showFullScreenLoading() {
    if (needLoadingRequestCount === 0) {
        startLoading()
    }
    needLoadingRequestCount++
}

export function tryHideFullScreenLoading() {
    if (needLoadingRequestCount <= 0) return
    needLoadingRequestCount--
    if (needLoadingRequestCount === 0) {
        endLoading()
    }
}



//axios配置和处理
Vue.use(VueAxios, axios);
axios.defaults.baseURL = ''; //项目的的基础url
axios.defaults.headers.common['Authorization'] = ""; //请求token信息配置
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'; //请求type设置
axios.defaults.timeout = 24000; //在超时前，所有请求都会等待24秒
axios.defaults.withCredentials = true;

// 添加请求拦截器
axios.interceptors.request.use(function (config) {
    // 在发送请求之前处理
    // 判断token在前台session中是否存在
    config.headers.common['Authorization'] = localStorage.getItem('Authorization');
    showFullScreenLoading();
    return config;
}, function (error) {
    // 对请求错误做处理
    return Promise.reject(error);
});
// 添加响应拦截器
axios.interceptors.response.use(function (response) {
    // 对响应数据处理
    tryHideFullScreenLoading();
    if (response && (response.status == 200)) {
        if (response.data.exceptionMes) {
            ElementUI.MessageBox({
                type: 'info',
                title: response.data.exceptionMes,
                message: '网络错误，请稍后再试！'
            });
        }
        return response.data;
    }
    return response;
}, function (error) {
    tryHideFullScreenLoading();
    console.log('网络异常');
    ElementUI.Message.error("网络异常");
    return Promise.reject(error);
});

Vue.prototype.$axios = axios; //定义调用方式





// 针对上传大文件
const instance = axios.create({
    baseURL: '',
});

instance.defaults.headers.common['Authorization'] = ""; //请求token信息配置
instance.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'; //请求type设置
instance.defaults.timeout = 1000 * 60 * 30; //在超时前，所有请求都会等待
instance.defaults.withCredentials = true;

instance.interceptors.request.use(function (config) {
    // 在发送请求之前处理
    // 判断token在前台session中是否存在
    config.headers.common['Authorization'] = localStorage.getItem('Authorization');
    showFullScreenLoading();
    return config;
}, function (error) {
    // 对请求错误做处理
    return Promise.reject(error);
});
// 添加响应拦截器
instance.interceptors.response.use(function (response) {
    // 对响应数据处理
    tryHideFullScreenLoading();
    if (response && (response.status == 200)) {
        if (response.data.exceptionMes) {
            ElementUI.MessageBox({
                type: 'info',
                title: response.data.exceptionMes,
                message: '网络错误，请稍后再试！'
            });
        }
        return response.data;
    }
    return response;
}, function (error) {
    tryHideFullScreenLoading();
    console.log('网络异常');
    ElementUI.Message.error("网络异常");
    return Promise.reject(error);
});

Vue.use(VueAxios, instance);
Vue.prototype.$instance = instance; //定义调用方式