// utils/http.js
|
const BASE_URL = 'https://reagent.sinanoaq.cn';
|
// const BASE_URL = 'http://47.108.222.15:8001';
|
// 全局配置
|
const config = {
|
showToast: true, // 默认显示Toast提示
|
autoToken: true, // 自动携带token
|
contentType: 'application/json' // 默认Content-Type
|
};
|
|
/**
|
* 核心请求函数
|
* @param {object} options 请求配置
|
* @returns {Promise}
|
*/
|
function service(options = {}) {
|
// 合并配置
|
options.url = `${BASE_URL}${options.url}`;
|
|
// 配置请求头
|
const token = wx.getStorageSync('tk');
|
options.header = {
|
'Content-Type': options.header || config.contentType,
|
'Authorization': config.autoToken ? token : ''
|
};
|
|
return new Promise((resolve, reject) => {
|
// 成功回调
|
options.success = (res) => {
|
// 处理403/401未授权情况
|
if (res.data.code === 403 || res.data.code === 401) {
|
showToast(res.data.message || '登录已过期');
|
clearStorageAndRedirect();
|
reject(res.data);
|
}
|
// 处理200成功情况
|
else if (res.data.code === 200) {
|
if (res.data.msg === '您点击太快了,请稍后尝试') {
|
showToast(res.data.message || '操作过于频繁');
|
}
|
resolve(res.data);
|
}
|
// 其他情况直接返回数据
|
else {
|
resolve(res.data);
|
}
|
};
|
|
// 失败回调
|
options.fail = (err) => {
|
showToast('服务响应失败');
|
clearStorageAndRedirect();
|
reject(err);
|
};
|
|
// 发起请求
|
wx.request(options);
|
});
|
}
|
|
/**
|
* 显示Toast提示
|
* @param {string} title 提示内容
|
*/
|
function showToast(title) {
|
if (config.showToast) {
|
wx.showToast({
|
title: title,
|
icon: 'none',
|
duration: 2000
|
});
|
}
|
}
|
|
/**
|
* 清除缓存并跳转到首页
|
*/
|
function clearStorageAndRedirect() {
|
if(!wx.getStorageSync('isSave') || wx.getStorageSync('isSave') == false){
|
wx.clearStorageSync();
|
}
|
setTimeout(() => {
|
wx.reLaunch({
|
url: '/pages/index/index' // 替换为你的登录页路径
|
});
|
}, 2000);
|
}
|
|
// ===== 快捷方法 =====
|
module.exports = {
|
// GET请求
|
get: (url, data, options = {}) => {
|
return service({
|
url,
|
data,
|
method: 'GET',
|
...options
|
});
|
},
|
|
// POST请求
|
post: (url, data, options = {}) => {
|
return service({
|
url,
|
data,
|
method: 'POST',
|
...options
|
});
|
},
|
|
// PUT请求
|
put: (url, data, options = {}) => {
|
return service({
|
url,
|
data,
|
method: 'PUT',
|
...options
|
});
|
},
|
|
// DELETE请求
|
delete: (url, data, options = {}) => {
|
return service({
|
url,
|
data,
|
method: 'DELETE',
|
...options
|
});
|
},
|
|
// 文件上传
|
upload: (url, filePath, formData = {}, options = {}) => {
|
return new Promise((resolve, reject) => {
|
wx.uploadFile({
|
url: `${BASE_URL}${url}`,
|
filePath,
|
name: 'file',
|
formData,
|
header: {
|
'Authorization': wx.getStorageSync('tk'),
|
...options.header
|
},
|
success: (res) => {
|
try {
|
const data = JSON.parse(res.data);
|
if (data.code === 200) {
|
resolve(data);
|
} else {
|
reject(data);
|
}
|
} catch (e) {
|
reject(new Error('上传失败'));
|
}
|
},
|
fail: (err) => {
|
showToast('上传失败');
|
reject(err);
|
}
|
});
|
});
|
},
|
|
// 全局配置修改
|
setConfig: (newConfig) => {
|
Object.assign(config, newConfig);
|
}
|
};
|