/** * 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 { ref } from 'vue'; import { defineStore } from 'pinia' import { setStorage , getStorage } from '@/utils/storage.js'; // 请求地址前缀 let baseURL = '' if (process.env.NODE_ENV === 'development') { // 生产环境 baseURL = "https://pk.zhukeping.com/" } else { // 测试环境 baseURL = "https://pk.zhukeping.com/" } // 请求拦截器 axios.interceptors.request.use((config) => { const tokenCache = getStorage('token') const url = sliceUrl(config.url) // 请求超时时间 - 毫秒 config.timeout = 60000 config.baseURL = baseURL // 自定义Content-type config.headers['Content-type'] = 'application/json' if (!(config.url == 'getVxQrcode' || config.url == 'getScanResult'||config.url == 'register')) { config.headers['token'] = tokenCache; } return config; }, (error) => { return Promise.reject(error) }) // 响应拦截器 axios.interceptors.response.use((response) => { return addPrefixToHeaderIcon(response.data) }, (error) => { // 可添加请求失败后的处理逻辑 return Promise.reject(error) }) import { translateCountryName } from './countryUtil'; // 处理headerIcon的前缀和country的翻译 function addPrefixToHeaderIcon(data) { // 处理数组:递归处理每个元素 if (Array.isArray(data)) { data.forEach(item => addPrefixToHeaderIcon(item)); return; } // 处理对象:递归处理每个属性 if (typeof data === 'object' && data !== null) { for (const key in data) { if (key === 'headerIcon' || key === 'anchorIcon' && data.hasOwnProperty(key)) { // 在headerIcon值前添加前缀(处理各种类型)anchorIconA anchorIconB anchorIcon const value = data[key]; data[key] = "https://vv-1317974657.cos.ap-shanghai.myqcloud.com/headerIcon/" + ( typeof value === 'string' ? value : value != null ? String(value) : "" ); } else if (key === 'country' && data.hasOwnProperty(key)) { // 翻译country值 const value = data[key]; if (typeof value === 'string') { data[key] = translateCountryName(value); } } else if (typeof data[key] === 'object' && data[key] !== null) { // 递归处理嵌套对象或数组 addPrefixToHeaderIcon(data[key]); } } } return data; } // axios的get请求 export function getAxios({ url, params }) { // 使用axios发送GET请求 return new Promise((resolve, reject) => { axios.get(url, { params // 请求成功,将返回的数据传递给resolve函数 }).then(res => { if (res.code == 200) { resolve(res.data) } else if (res.code == 40400) { router.push('/') ElMessage.error(res.code + '' + res.msg); reject(); } else { ElMessage.error(res.code + '' + res.msg); reject(); } }).catch(err => { reject(err) }) }) } // axios的post请求 export function postAxios({ url, data }) { console.log("postAxios", url, data); return new Promise((resolve, reject) => { axios.post( url, data, { headers: { 'Content-Type': 'application/x-www-form-urlencoded' } } ).then(res => { if (res.code == 200) { resolve(res.data) } else if (res.code == 40400) { router.push('/') console.log(res.msg); ElMessage.error(res.code + '' + res.msg); reject(); } else { console.log(res.msg); ElMessage.error(res.code + '' + res.msg); reject(); } }).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() { // const userCache = UserStore() // const tokenCache = tokenStore() // axios.post('api/account/cheekalive', { // userId: userCache.user.id, // currcode: tokenCache.token, // }, // { // headers: { // 'Content-Type': 'application/x-www-form-urlencoded' // } // } // ).then(res => { // console.log(res.data) // if (res.data) { // } else { // 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