2025-03-29 16:01:43 +08:00
|
|
|
|
import {
|
|
|
|
|
base_url
|
|
|
|
|
} from './config.js'
|
|
|
|
|
const timeout = 5000;
|
|
|
|
|
let showModal = false
|
2025-04-03 00:24:29 +08:00
|
|
|
|
|
2025-04-04 13:00:55 +08:00
|
|
|
|
// 定义错误码
|
|
|
|
|
const ErrorCode = {
|
|
|
|
|
SUCCESS: 200,
|
|
|
|
|
UNAUTHORIZED: 401,
|
|
|
|
|
FORBIDDEN: 403,
|
|
|
|
|
SERVER_ERROR: 500
|
|
|
|
|
}
|
|
|
|
|
|
2025-04-03 00:24:29 +08:00
|
|
|
|
// 定义公开API白名单
|
|
|
|
|
const publicApis = [
|
|
|
|
|
'/beer/list', // 啤酒列表
|
|
|
|
|
'/beer/detail', // 啤酒详情
|
2025-04-03 01:11:33 +08:00
|
|
|
|
'/beer/favor/status', // 收藏状态
|
|
|
|
|
'/beer/review/score', // 评分
|
|
|
|
|
'/beer/review/list', // 评价列表
|
2025-04-03 00:24:29 +08:00
|
|
|
|
'/activity/list', // 活动列表
|
|
|
|
|
'/activity/detail', // 活动详情
|
|
|
|
|
'/bar/detail', // 酒吧详情
|
|
|
|
|
'/bar/list', // 酒吧列表
|
|
|
|
|
'/common/', // 公共接口
|
2025-04-03 01:11:33 +08:00
|
|
|
|
'/bar/brewery/getBeerInfo', // 获取酒款信息
|
|
|
|
|
'/bar/brewery/getReviewList', // 获取酒评列表
|
|
|
|
|
'/bar/brewery/getReviewScoreList', // 获取酒评评分列表
|
2025-04-03 02:20:07 +08:00
|
|
|
|
'/bar/brewery/getActivities', // 获取活动列表
|
|
|
|
|
'/bar/brewery/getActivityInfo', // 获取活动详情
|
|
|
|
|
'/bar/brewery/getBreweryInfo', // 获取品牌详情
|
2025-04-03 00:24:29 +08:00
|
|
|
|
]
|
|
|
|
|
|
2025-04-04 13:00:55 +08:00
|
|
|
|
// 检查是否是公开API - 使用更精确的匹配
|
2025-04-03 00:24:29 +08:00
|
|
|
|
const isPublicApi = (url) => {
|
2025-04-03 02:20:07 +08:00
|
|
|
|
return publicApis.some(api => {
|
2025-04-04 13:00:55 +08:00
|
|
|
|
if (api.endsWith('/')) {
|
|
|
|
|
return url.startsWith(api);
|
2025-04-03 02:20:07 +08:00
|
|
|
|
}
|
2025-04-04 13:00:55 +08:00
|
|
|
|
return url === api || url.startsWith(api + '/');
|
2025-04-03 02:20:07 +08:00
|
|
|
|
});
|
2025-04-03 00:24:29 +08:00
|
|
|
|
}
|
|
|
|
|
|
2025-04-04 13:00:55 +08:00
|
|
|
|
// 处理错误提示
|
|
|
|
|
const handleErrorMessage = (code, msg, url) => {
|
|
|
|
|
// 如果是公开API,不显示错误提示
|
|
|
|
|
if (isPublicApi(url)) return;
|
|
|
|
|
|
|
|
|
|
switch (code) {
|
|
|
|
|
case ErrorCode.UNAUTHORIZED:
|
|
|
|
|
if (!showModal) {
|
|
|
|
|
showModal = true;
|
|
|
|
|
// 直接触发登录事件,显示登录弹窗
|
|
|
|
|
uni.$emit('needLogin');
|
|
|
|
|
setTimeout(() => {
|
|
|
|
|
showModal = false;
|
|
|
|
|
}, 100);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case ErrorCode.FORBIDDEN:
|
|
|
|
|
uni.showToast({
|
|
|
|
|
title: msg || '暂无权限',
|
|
|
|
|
icon: 'none',
|
|
|
|
|
duration: 2000
|
|
|
|
|
});
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case ErrorCode.SERVER_ERROR:
|
|
|
|
|
uni.showToast({
|
|
|
|
|
title: '服务器异常,请稍后重试',
|
|
|
|
|
icon: 'none',
|
|
|
|
|
duration: 2000
|
|
|
|
|
});
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
default:
|
|
|
|
|
if (msg) {
|
|
|
|
|
uni.showToast({
|
|
|
|
|
title: msg,
|
|
|
|
|
icon: 'none',
|
|
|
|
|
duration: 2000
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2025-03-29 16:01:43 +08:00
|
|
|
|
export default (params) => {
|
|
|
|
|
let url = params.url;
|
|
|
|
|
let method = params.method || "get";
|
|
|
|
|
let data = params.data || {};
|
|
|
|
|
let header = {}
|
|
|
|
|
|
|
|
|
|
let token = uni.getStorageSync('token')
|
|
|
|
|
console.log(token)
|
|
|
|
|
if (token) {
|
|
|
|
|
header['Authorization'] = 'Bearer ' + token
|
|
|
|
|
}
|
|
|
|
|
// if (method == "post") {
|
|
|
|
|
// header['Content-Type'] = 'multipart/form-data'
|
|
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
return new Promise((resolve, reject) => {
|
|
|
|
|
uni.request({
|
2025-03-31 21:44:37 +08:00
|
|
|
|
url: base_url +'/api'+ url,
|
2025-03-29 16:01:43 +08:00
|
|
|
|
method: method,
|
|
|
|
|
header: header,
|
|
|
|
|
data: data,
|
|
|
|
|
dataType: 'json',
|
|
|
|
|
timeout,
|
|
|
|
|
success(response) {
|
|
|
|
|
const res = response
|
|
|
|
|
|
|
|
|
|
if (res.statusCode == 200) {
|
|
|
|
|
console.log(res.data, '接口返回值')
|
2025-04-04 13:00:55 +08:00
|
|
|
|
if (res.data.code == ErrorCode.SUCCESS) {
|
2025-03-29 16:01:43 +08:00
|
|
|
|
resolve(res.data);
|
|
|
|
|
} else {
|
2025-04-04 13:00:55 +08:00
|
|
|
|
// 处理401未授权错误
|
|
|
|
|
if (res.data.code == ErrorCode.UNAUTHORIZED) {
|
|
|
|
|
// 只有非公开API才清除token
|
|
|
|
|
if (!isPublicApi(url)) {
|
|
|
|
|
uni.removeStorageSync('token')
|
|
|
|
|
}
|
2025-04-03 01:11:33 +08:00
|
|
|
|
}
|
2025-04-04 13:00:55 +08:00
|
|
|
|
|
|
|
|
|
// 显示错误提示
|
|
|
|
|
handleErrorMessage(res.data.code, res.data.msg, url);
|
2025-03-29 16:01:43 +08:00
|
|
|
|
reject(res.data)
|
|
|
|
|
}
|
2025-04-03 00:24:29 +08:00
|
|
|
|
} else {
|
2025-04-04 13:00:55 +08:00
|
|
|
|
handleErrorMessage(res.statusCode, '服务器异常', url);
|
|
|
|
|
reject(response)
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
fail(err) {
|
|
|
|
|
if (!isPublicApi(url)) {
|
2025-04-03 00:24:29 +08:00
|
|
|
|
uni.showToast({
|
2025-04-04 13:00:55 +08:00
|
|
|
|
title: '网络异常,请检查网络连接',
|
2025-04-03 00:24:29 +08:00
|
|
|
|
icon: 'none',
|
|
|
|
|
duration: 2000
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
reject(err)
|
2025-03-29 16:01:43 +08:00
|
|
|
|
},
|
|
|
|
|
// complete() {
|
|
|
|
|
// }
|
|
|
|
|
});
|
|
|
|
|
})
|
|
|
|
|
}
|