// 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; // http: //10.6.100.56:9290 // if (process.env.NODE_ENV == 'development') { // // axios.defaults.baseURL = 'http://10.6.100.142:9290'; // axios.defaults.baseURL = 'http://10.6.100.116:9290'; // } // else if (process.env.NODE_ENV == 'debug') { // axios.defaults.baseURL = 'http://10.6.100.116:9290'; // // axios.defaults.baseURL = 'http://127.0.0.1:9290'; // } // else if (process.env.NODE_ENV == 'production') { // axios.defaults.baseURL = 'http://10.6.100.116:9290'; // // axios.defaults.baseURL = 'http://127.0.0.1:9290'; // } // 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 } //------------- 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 = 'http://10.6.100.142:9290'; axios.defaults.baseURL = 'http://127.0.0.1:9290'; } else if (process.env.NODE_ENV == 'debug') { axios.defaults.baseURL = 'http://10.6.100.116:9290'; // axios.defaults.baseURL = 'http://127.0.0.1:9290'; } else if (process.env.NODE_ENV == 'production') { axios.defaults.baseURL = 'http://10.6.100.116:9290'; // axios.defaults.baseURL = 'http://127.0.0.1:9290'; } 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 = `API请求地址未找到: ${error.config.url}`; } else if (error.response.data && error.response.data.message) { httpMessage = error.response.data.message; } else { httpMessage = `服务器错误 ${error.response.status}: ${error.response.statusText}`; } } else if (error.request) { // 请求已发出,但没有收到响应 httpMessage = `无法连接到服务器: ${axios.defaults.baseURL}`; } else { httpMessage = `请求错误: ${error.message}`; } Message.error({ showClose: true, message: httpMessage, type: 'error' }); 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 }