/** * axios请求封装 * https://rudon.blog.csdn.net/ */ import axios from 'axios' import { getToken, getUser } from '@/utils/storage' import router from '@/router' import { ElMessage } from 'element-plus'; import { usePythonBridge, } from '@/utils/pythonBridge' const { stopScript } = usePythonBridge(); // 请求地址前缀 let baseURL = '' if (process.env.NODE_ENV === 'development') { // 生产环境 // baseURL = "https://api.tkpage.yolozs.com" baseURL = "http://47.79.98.113:8101" // baseURL = "http://192.168.0.103:8085/" } else { // 测试环境 // baseURL = "http://120.26.251.180:8085/" // 开发环境 // baseURL = "https://api.tkpage.yolozs.com" baseURL = "http://47.79.98.113:8101" // baseURL = "http://api.tkpage.vvtiktok.cn" } // 请求拦截器 axios.interceptors.request.use((config) => { console.log("config", config) const url = sliceUrl(config.url) console.log("url", url) if (!(config.url == 'bigbrother-doLogin' || config.url == 'get-id-by-name')) { config.headers['vvtoken'] = getToken(); } // 请求超时时间 - 毫秒 config.timeout = 60000 config.baseURL = baseURL // 自定义Content-type config.headers['Content-type'] = 'application/json' return config; }, (error) => { return Promise.reject(error) }) // 响应拦截器 axios.interceptors.response.use((response) => { console.log("response", response.data) if (response.data.code == 0) { console.log("response", response.data.data) return response.data.data } else if (response.data.code == 40400) { router.push('/') ElMessage.error(response.data.code + '' + response.data.message); }else{ ElMessage.error(response.data.code + '' + response.data.message); } }, (error) => { // 可添加请求失败后的处理逻辑 return Promise.reject(error) }) // axios的get请求 export function getAxios({ url, params }) { // 使用axios发送GET请求 return new Promise((resolve, reject) => { axios.get(url, { params // 请求成功,将返回的数据传递给resolve函数 }).then(res => { resolve(res) // 请求失败,将错误信息传递给reject函数 }).catch(err => { reject(err) }) }) } // axios的post请求 export function postAxios({ url, data }) { return new Promise((resolve, reject) => { axios.post( url, data, { headers: { 'Content-Type': 'application/x-www-form-urlencoded' } } ).then(res => { resolve(res) }).catch(err => { reject(err) }) }) } export const downFile = async (urlstr, data) => { // 发送请求,获取文件流 const response = await axios.post(urlstr, data, { responseType: 'blob' }); // 获取文件名(如果后端设置了 Content-Disposition) const contentDisposition = response.headers['content-disposition']; let fileName = 'default-file-name'; // 默认文件名 console.log(contentDisposition) console.log(response) if (contentDisposition) { // 从响应头中提取文件名 const fileNameMatch = contentDisposition.match(/filename="(.+)"/); if (fileNameMatch && fileNameMatch.length > 1) { fileName = fileNameMatch[1]; } } // 创建一个临时的下载链接 const blob = new Blob([response.data], { type: response.headers['content-type'] }); const url = window.URL.createObjectURL(blob); const a = document.createElement('a'); a.href = url; a.download = fileName; // 设置下载的文件名 a.click(); // 释放 URL 对象 window.URL.revokeObjectURL(url); } //请求前验证 function cheekalive() { axios.post('api/account/cheekalive', { userId: getUser().userId, currcode: getToken(), }, { headers: { 'Content-Type': 'application/x-www-form-urlencoded' } } ).then(res => { console.log(res.data) if (res.data) { } else { stopScript(); alert("账号在其他地方登录!") window.location.href = '/'; } }) } //节流函数 function throttle(func, limit) { let inThrottle; return function () { const args = arguments; const context = this; if (!inThrottle) { func.apply(context, args); inThrottle = true; setTimeout(() => inThrottle = false, limit); } } } function sliceUrl(url) { const lastSlash = url.lastIndexOf('/'); const questionMark = url.indexOf('?'); if (questionMark == -1) { const result = url.slice(lastSlash + 1, url.length); return result; } else { const result = url.slice(lastSlash + 1, questionMark); return result; } } export default axios