Files
tk-mini-program-PC/src/utils/axios.js
pengxiaolong aa74346232 优化代码
2025-08-29 13:31:08 +08:00

225 lines
6.6 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* 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