This commit is contained in:
solosw
2026-01-05 14:11:34 +08:00
parent 35ef825371
commit 99b11b04e4
658 changed files with 99266 additions and 0 deletions
+302
View File
@@ -0,0 +1,302 @@
const config = {
baseURL: 'http://121.40.135.94:8090',
// baseURL: 'http://localhost:8090',
timeout: 100000, // 请求超时时间
header: {
'Content-Type': 'application/json'
}
};
// 处理图片URL,添加baseURL前缀
const getImageUrl = (url) => {
if (!url) return ''
// 如果已经是完整的URL(http开头),直接返回
if (url.startsWith('http://') || url.startsWith('https://')) {
return url
}
// 如果是相对路径,添加baseURL前缀
const baseUrl = config.baseURL
// 确保baseURL和url之间有正确的斜杠
if (url.startsWith('/')) {
return baseUrl + url
} else {
return baseUrl + '/' + url
}
}
// 请求拦截器
const requestInterceptor = (options) => {
// 显示加载提示
uni.showLoading({
title: '加载中...',
mask: true
});
// 拼接完整URL
if (options.url && !options.url.startsWith('http')) {
options.url = config.baseURL + options.url;
}
// 处理token
const token = options.token || uni.getStorageSync('token') || '';
// 合并请求头
options.header = {
...config.header,
...options.header
};
// 如果有token,添加到header中
if (token) {
options.header['token'] = token;
}
// 设置超时时间
options.timeout = options.timeout || config.timeout;
return options;
};
// 响应拦截器
const responseInterceptor = (response, resolve, reject) => {
// 隐藏加载提示
uni.hideLoading();
var { statusCode, data } = response;
statusCode=data.code
// HTTP状态码判断
if (statusCode === 200) {
// 业务状态码判断(根据后端接口规范调整)
if (data.code === 0 || data.success === true) {
resolve(data);
} else {
// 业务错误
uni.showToast({
title: data.message || '请求失败',
icon: 'none'
});
reject(data);
}
} else if (statusCode === 401) {
// token过期或无效
uni.showToast({
title: '登录已过期,请重新登录',
icon: 'none'
});
// 清除本地存储的token和用户信息
uni.removeStorageSync('token');
uni.removeStorageSync('userInfo');
// 跳转到登录页
uni.reLaunch({ url: '/pages/login/login' });
reject(response)
} else {
// 其他HTTP错误
uni.showToast({
title: ` ${data.message}`,
icon: 'none'
});
reject(response);
}
};
// 通用请求方法
const request = (options) => {
return new Promise((resolve, reject) => {
// 请求拦截
const finalOptions = requestInterceptor(options);
uni.request({
...finalOptions,
success: (response) => {
responseInterceptor(response, resolve, reject);
},
fail: (error) => {
uni.hideLoading();
uni.showToast({
title: '网络请求失败',
icon: 'none'
});
reject(error);
}
});
});
};
// GET请求
const get = (url, params = {}, options = {}) => {
// 将参数拼接到URL上
let finalUrl = url;
if (params && Object.keys(params).length > 0) {
const queryString = Object.keys(params)
.map(key => `${encodeURIComponent(key)}=${encodeURIComponent(params[key])}`)
.join('&');
finalUrl = url.includes('?') ? `${url}&${queryString}` : `${url}?${queryString}`;
}
return request({
url: finalUrl,
method: 'GET',
...options
});
};
// POST请求
const post = (url, data = {}, options = {}) => {
return request({
url,
method: 'POST',
data,
...options
});
};
// PUT请求
const put = (url, data = {}, options = {}) => {
return request({
url,
method: 'PUT',
data,
...options
});
};
// DELETE请求
const del = (url, data = {}, options = {}) => {
return request({
url,
method: 'DELETE',
data,
...options
});
};
// 文件上传
const upload = (url, filePath, options = {}) => {
return new Promise((resolve, reject) => {
uni.showLoading({
title: '上传中...',
mask: true
});
// 拼接完整URL
if (url && !url.startsWith('http')) {
url = config.baseURL + url;
}
// 处理token
const token = options.token || uni.getStorageSync('token') || '';
const uploadHeader = {
...options.header // 不要包含config.header,因为它包含Content-Type: application/json
};
// 如果有token,添加到header中
if (token) {
uploadHeader['token'] = token;
}
uni.uploadFile({
url,
filePath,
name: options.name || 'file',
header: uploadHeader,
formData: options.formData || {},
success: (response) => {
uni.hideLoading();
try {
const data = JSON.parse(response.data);
if (data.code === 0 || data.success === true) {
resolve(data);
} else {
uni.showToast({
title: data.message || '上传失败',
icon: 'none'
});
reject(data);
}
} catch (e) {
reject(response);
}
},
fail: (error) => {
uni.hideLoading();
uni.showToast({
title: '上传失败',
icon: 'none'
});
reject(error);
}
});
});
};
// 文件下载
const download = (url, options = {}) => {
return new Promise((resolve, reject) => {
uni.showLoading({
title: '下载中...',
mask: true
});
// 拼接完整URL
if (url && !url.startsWith('http')) {
url = config.baseURL + url;
}
// 处理token
const token = options.token || uni.getStorageSync('token') || '';
const downloadHeader = {
...config.header,
...options.header
};
// 如果有token,添加到header中
if (token) {
downloadHeader['token'] = token;
}
uni.downloadFile({
url,
header: downloadHeader,
success: (response) => {
uni.hideLoading();
if (response.statusCode === 200) {
resolve(response);
} else {
uni.showToast({
title: '下载失败',
icon: 'none'
});
reject(response);
}
},
fail: (error) => {
uni.hideLoading();
uni.showToast({
title: '下载失败',
icon: 'none'
});
reject(error);
}
});
});
};
module.exports = {
config,
request,
get,
post,
put,
delete: del,
upload,
download,
getImageUrl
};