1.0
This commit is contained in:
@@ -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
|
||||
};
|
||||
Reference in New Issue
Block a user