| 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.webApiBaseUrl; | 
| } | 
| else if (process.env.NODE_ENV == 'debug') { | 
|     axios.defaults.baseURL = 'http://127.0.0.1:8098/'; | 
| } | 
|   | 
| 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("widesea_exp") == "1") { | 
|             replaceToken(); | 
|         } | 
|     } | 
|     else if (res.headers.widesea_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 } |