import axios from 'axios' 
 | 
import store from '../store/index' 
 | 
// import {getCurrentInstance} from 'vue' 
 | 
import { useRouter, useRoute } from 'vue-router' 
 | 
const router = useRouter(); 
 | 
axios.defaults.timeout = 50000; 
 | 
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8'; 
 | 
  
 | 
import { ElLoading as Loading, ElMessage as Message } from 'element-plus'; 
 | 
  
 | 
  
 | 
let loadingInstance; 
 | 
let loadingStatus = false; 
 | 
if (process.env.NODE_ENV == 'development') { 
 | 
    axios.defaults.baseURL = window.webConfig.webApiProduction; 
 | 
} 
 | 
else if (process.env.NODE_ENV == 'debug') { 
 | 
    axios.defaults.baseURL = window.webConfig.webApiDebug; 
 | 
} 
 | 
  
 | 
else if (process.env.NODE_ENV == 'production') { 
 | 
    axios.defaults.baseURL = window.webConfig.webApiProduction; 
 | 
} 
 | 
if (!axios.defaults.baseURL.endsWith('/')) { 
 | 
    axios.defaults.baseURL+="/"; 
 | 
} 
 | 
  
 | 
  
 | 
let ipAddress = axios.defaults.baseURL; 
 | 
axios.interceptors.request.use((config) => { 
 | 
    return config; 
 | 
}, (error) => { 
 | 
    return Promise.reject(error); 
 | 
}); 
 | 
  
 | 
axios.interceptors.response.use((res) => { 
 | 
  
 | 
    closeLoading(); 
 | 
  
 | 
    checkResponse(res); 
 | 
  
 | 
    return Promise.resolve(res); 
 | 
}, (error) => { 
 | 
    closeLoading(); 
 | 
    let httpMessage = ''; 
 | 
    if (error.response) { 
 | 
        if (error.response.status == '401') { 
 | 
            if (error.response.data && error.response.data.code == 401) { 
 | 
                if (!localStorage.getItem('user')) { 
 | 
                    Message.error({ 
 | 
                        showClose: true, 
 | 
                        message: '登陆已过期', 
 | 
                        type: 'error' 
 | 
                    }); 
 | 
                } 
 | 
                toLogin(); 
 | 
                return; 
 | 
            } 
 | 
  
 | 
        } 
 | 
        if (error.response.status == '404') { 
 | 
            httpMessage = "未找到请求地址"; 
 | 
        } 
 | 
        else if (error.response.data && error.response.data.message) { 
 | 
            httpMessage = error.response.data.message; 
 | 
        } 
 | 
    } 
 | 
    else { 
 | 
        httpMessage = '服务器处理异常' 
 | 
    } 
 | 
    redirect(httpMessage); 
 | 
    return Promise.reject(error.response || {}, httpMessage); 
 | 
}); 
 | 
function closeLoading () { 
 | 
    if (loadingInstance) { 
 | 
        loadingInstance.close(); 
 | 
    } 
 | 
    if (loadingStatus) { 
 | 
        loadingStatus = false; 
 | 
        if (loadingInstance) { 
 | 
            loadingInstance.close(); 
 | 
        } 
 | 
    } 
 | 
  
 | 
} 
 | 
function checkResponse (res) { 
 | 
    //刷新token 
 | 
    if (!res.headers) { 
 | 
        if (res.getResponseHeader("wideseawcs_exp") == "1") { 
 | 
            replaceToken(); 
 | 
        } 
 | 
    } 
 | 
    else if (res.headers.wideseawcs_exp == "1") { 
 | 
        replaceToken(); 
 | 
    } 
 | 
} 
 | 
  
 | 
const _Authorization = 'Authorization'; 
 | 
  
 | 
function showLoading (loading) { 
 | 
    if (!loading || loadingStatus) { 
 | 
        return; 
 | 
    } 
 | 
    loadingInstance = Loading.service({ 
 | 
        lock: true, 
 | 
        text: 'Loading', 
 | 
        customClass:"http-loading", 
 | 
        background: typeof loading == "string" ? loading : '正在处理.....', 
 | 
        background: 'rgba(58, 61, 63, 0.32)' 
 | 
    }); 
 | 
} 
 | 
  
 | 
function getToken () { 
 | 
    return store.getters.getToken(); 
 | 
} 
 | 
  
 | 
/* 
 | 
  url 
 | 
  params请求后台的参数,如:{name:123,values:['a','b','c']} 
 | 
  loading是否显示遮罩层,可以传入true.false.及提示文本 
 | 
  config配置信息,如{timeout:3000,headers:{token:123}} 
 | 
*/ 
 | 
function post (url, params, loading, config) { 
 | 
    showLoading(loading); 
 | 
    axios.defaults.headers[_Authorization] = getToken(); 
 | 
    return new Promise((resolve, reject) => { 
 | 
        axios.post(url, params, config) 
 | 
            .then(response => { 
 | 
                resolve(response.data); 
 | 
            }, err => { 
 | 
                reject(err && err.data && err.data.message ? err.data.message : '服务器处理异常'); 
 | 
            }) 
 | 
            .catch((error) => { 
 | 
                reject(error) 
 | 
            }) 
 | 
    }) 
 | 
} 
 | 
  
 | 
//=true异步请求时会显示遮罩层,=字符串,异步请求时遮罩层显示当前字符串 
 | 
function get (url, param, loading, config) { 
 | 
    showLoading(loading); 
 | 
    axios.defaults.headers[_Authorization] = getToken(); 
 | 
    return new Promise((resolve, reject) => { 
 | 
        axios.get(url, config) 
 | 
            .then(response => { 
 | 
                // console.log(response) 
 | 
                resolve(response.data) 
 | 
            }, err => { 
 | 
                reject(err) 
 | 
            }) 
 | 
            .catch((error) => { 
 | 
                reject(error) 
 | 
            }) 
 | 
    }) 
 | 
} 
 | 
  
 | 
//url:url地址 
 | 
//params:请求参数 
 | 
//fileName:下载的文件名 
 | 
//loading:是否显示加载状态 
 | 
function download (url, params, fileName, loading,callback) { 
 | 
    fileName = fileName.replace(">", ">").replace("<", "<"); 
 | 
    post(url, params, loading, { responseType: 'blob' }).then(content => { 
 | 
        const blob = new Blob([content]) 
 | 
        if ('download' in document.createElement('a')) { // 非IE下载 
 | 
            const elink = document.createElement('a') 
 | 
            elink.download = fileName 
 | 
            elink.style.display = 'none' 
 | 
            elink.href = URL.createObjectURL(blob) 
 | 
            document.body.appendChild(elink) 
 | 
            elink.click() 
 | 
            URL.revokeObjectURL(elink.href) // 释放URL 对象 
 | 
            document.body.removeChild(elink) 
 | 
        } else { // IE10+下载 
 | 
            navigator.msSaveBlob(blob, fileName) 
 | 
        } 
 | 
        callback&&callback(); 
 | 
    }) 
 | 
} 
 | 
  
 | 
  
 | 
function createXHR () { 
 | 
    if (XMLHttpRequest) { 
 | 
        return new XMLHttpRequest(); 
 | 
    } 
 | 
    if (ActiveXObject) { 
 | 
        if (typeof arguments.callee.activeXString != "string") { 
 | 
            var versions = [ 
 | 
                "MSXML2.XMLHttp.6.0", 
 | 
                "MSXML2.XMLHttp", 
 | 
                "MSXML2.XMLHttp.3.0" 
 | 
            ]; 
 | 
            for (var i = 0; i < versions.length; i++) { 
 | 
                try { 
 | 
                    new ActiveXObject(versions[i]); 
 | 
                    arguments.callee.activeXString = versions[i]; 
 | 
                    break; 
 | 
                } catch (e) { 
 | 
                    console.log(e); 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
        return new ActiveXObject(arguments.callee.activeXString); 
 | 
    } 
 | 
} 
 | 
  
 | 
function redirect (responseText, message) { 
 | 
    try { 
 | 
        let responseData = typeof responseText == 'string' ? JSON.parse(responseText) : responseText; 
 | 
        if ((responseData.hasOwnProperty('code') && responseData.code == 401) 
 | 
            || (responseData.data && responseData.data.code == 401)) { 
 | 
            closeLoading(); 
 | 
            toLogin(); 
 | 
        } else { 
 | 
            if (message) { 
 | 
                Message.error({ 
 | 
                    showClose: true, 
 | 
                    message: message, 
 | 
                    type: 'error' 
 | 
                }); 
 | 
            } 
 | 
        } 
 | 
    } catch (error) { 
 | 
        console.log(error); 
 | 
        Message.error({ 
 | 
            showClose: true, 
 | 
            message: responseText, 
 | 
            type: 'error' 
 | 
        }); 
 | 
    } 
 | 
} 
 | 
  
 | 
  
 | 
function toLogin () { 
 | 
    //  const vueinstance=  getCurrentInstance(); 
 | 
    if (window.location.hash) { 
 | 
        window.location.href = window.location.origin + '/#/login' 
 | 
        return 
 | 
    } 
 | 
    window.location.href = window.location.origin + '/login' 
 | 
    //  router.push({ path: '/login', params: { r: Math.random() } }); 
 | 
} 
 | 
//动态刷新token 
 | 
function replaceToken () { 
 | 
    ajax({ 
 | 
        url: "/api/User/replaceToken", 
 | 
        param: {}, 
 | 
        json: true, 
 | 
        success: function (x) { 
 | 
            if (x.status) { 
 | 
                let userInfo = store.getters.getUserInfo(); 
 | 
                userInfo.token = x.data; 
 | 
                store.commit('setUserInfo', userInfo); 
 | 
            } else { 
 | 
                console.log(x.message); 
 | 
                toLogin(); 
 | 
            } 
 | 
        }, 
 | 
        errror: function (ex) { 
 | 
            console.log(ex); 
 | 
            toLogin(); 
 | 
        }, 
 | 
        type: "post", 
 | 
        async: false 
 | 
    }); 
 | 
  
 | 
  
 | 
} 
 | 
  
 | 
function ajax (param) { 
 | 
    let httpParam = 
 | 
        Object.assign({ 
 | 
            url: '', headers: {}, 
 | 
            param: {}, json: true, 
 | 
            success: function () { }, 
 | 
            errror: function () { }, 
 | 
            type: 'post', async: true 
 | 
        }, param); 
 | 
  
 | 
    httpParam.url = axios.defaults.baseURL + httpParam.url.replace(/\/?/, ''); 
 | 
    httpParam.headers[_Authorization] = getToken(); 
 | 
    var xhr = createXHR(); 
 | 
    xhr.onreadystatechange = function () { 
 | 
        if (xhr.status == 403 || xhr.status == 401) { 
 | 
            redirect(xhr.responseText); 
 | 
            return; 
 | 
        } 
 | 
        checkResponse(xhr); 
 | 
        if (xhr.readyState == 4 && xhr.status == 200) { 
 | 
            httpParam.success(httpParam.json ? JSON.parse(xhr.responseText) : xhr.responseText); 
 | 
            return; 
 | 
        } 
 | 
        if (xhr.status != 0 && xhr.readyState != 1) { 
 | 
            httpParam.errror(xhr); 
 | 
        } 
 | 
    }; 
 | 
    //初始化请求 
 | 
    xhr.open( 
 | 
        httpParam.type, 
 | 
        httpParam.url, 
 | 
        httpParam.async 
 | 
    ); 
 | 
    xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
 | 
    for (const key in httpParam.headers) { 
 | 
        xhr.setRequestHeader(key, httpParam.headers[key]); 
 | 
    } 
 | 
    let dataStr = ''; 
 | 
    for (const key in httpParam.param) { 
 | 
        dataStr += key + "=" + httpParam.param[key]; 
 | 
    } 
 | 
    try { 
 | 
        xhr.send(dataStr); 
 | 
    } catch (error) { 
 | 
        toLogin(); 
 | 
    } 
 | 
} 
 | 
  
 | 
ajax.post = function (url, param, success, errror) { 
 | 
    ajax({ url: url, param: param, success: success, error: errror, type: 'post' }) 
 | 
} 
 | 
ajax.get = function (url, param, success, errror) { 
 | 
    ajax({ url: url, param: param, success: success, error: errror, type: 'get' }) 
 | 
} 
 | 
export default { post, get,download, ajax, ipAddress } 
 |