2025-11-11 17:07:13 +08:00
|
|
|
|
import { BASE_URL } from './CommonValues.js';
|
|
|
|
|
|
import { loginSystem } from '@/api/login.js';
|
|
|
|
|
|
|
|
|
|
|
|
export function GET(url, data) {
|
|
|
|
|
|
return SIMPLE(url, data, 'GET');
|
|
|
|
|
|
}
|
|
|
|
|
|
export function GET_TOKEN(url, data, token) {
|
|
|
|
|
|
return SIMPLE_TOKEN(url, data, token, 'GET');
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
export function POST(url, data) {
|
|
|
|
|
|
return SIMPLE(url, data, 'POST');
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
export function POST_TOKEN(url, data) {
|
2025-11-24 16:01:45 +08:00
|
|
|
|
// 从本地存储获取token
|
|
|
|
|
|
var token = uni.getStorageSync("APP_TOKEN") || "";
|
2025-11-11 17:07:13 +08:00
|
|
|
|
return SIMPLE_TOKEN(url, data, token, 'POST');
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
export function DELETE(url, data) {
|
|
|
|
|
|
return SIMPLE(url, data, 'DELETE');
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
export function PUT(url, data) {
|
|
|
|
|
|
return SIMPLE(url, data, 'PUT');
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
let requestTime = 0;
|
|
|
|
|
|
|
|
|
|
|
|
export async function SIMPLE(url, data, method) {
|
2025-11-24 16:01:45 +08:00
|
|
|
|
// 声明token变量
|
|
|
|
|
|
let token = uni.getStorageSync("APP_TOKEN") || "";
|
|
|
|
|
|
|
|
|
|
|
|
// 在开发环境下跳过自动登录,避免网络请求失败
|
|
|
|
|
|
// 微信小程序无法访问localhost,需要使用实际IP或域名
|
|
|
|
|
|
if(requestTime == 0 && process.env.NODE_ENV !== 'development') {
|
|
|
|
|
|
try {
|
|
|
|
|
|
token = await loginSystem();
|
|
|
|
|
|
if(typeof token === 'string') {
|
|
|
|
|
|
requestTime += 1;
|
|
|
|
|
|
}
|
|
|
|
|
|
} catch (error) {
|
|
|
|
|
|
console.log("登录系统失败:", error);
|
2025-11-11 17:07:13 +08:00
|
|
|
|
}
|
2025-11-24 16:01:45 +08:00
|
|
|
|
} else if(requestTime == 0) {
|
2025-11-11 17:07:13 +08:00
|
|
|
|
requestTime += 1;
|
|
|
|
|
|
}
|
2025-11-24 16:01:45 +08:00
|
|
|
|
|
|
|
|
|
|
const fullUrl = `${BASE_URL}${url}`;
|
|
|
|
|
|
console.log(`[网络请求] ${method} ${fullUrl}`, data);
|
|
|
|
|
|
|
2025-11-11 17:07:13 +08:00
|
|
|
|
return new Promise((resolve, reject) => {
|
|
|
|
|
|
uni.request({
|
2025-11-24 16:01:45 +08:00
|
|
|
|
url: fullUrl,
|
2025-11-11 17:07:13 +08:00
|
|
|
|
method: method,
|
|
|
|
|
|
header: {
|
|
|
|
|
|
"Content-Type": "application/json;charset=utf-8",
|
|
|
|
|
|
"Authorization": token
|
|
|
|
|
|
},
|
|
|
|
|
|
dataType: 'json',
|
|
|
|
|
|
data: data,
|
|
|
|
|
|
success: res => {
|
2025-11-24 16:01:45 +08:00
|
|
|
|
console.log(`[网络响应] ${method} ${fullUrl}`, res.data);
|
|
|
|
|
|
// 首先检查HTTP状态码
|
|
|
|
|
|
if(res.statusCode === 200) {
|
|
|
|
|
|
// 无论返回内容是什么格式,都视为成功
|
|
|
|
|
|
resolve(res)
|
2025-11-11 17:07:13 +08:00
|
|
|
|
} else {
|
|
|
|
|
|
reject(res)
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
fail: err => {
|
2025-11-24 16:01:45 +08:00
|
|
|
|
console.error(`[网络错误] ${method} ${fullUrl}`, err);
|
|
|
|
|
|
// 提供更友好的错误信息
|
|
|
|
|
|
let errorMsg = "网络请求失败";
|
|
|
|
|
|
if(err.errMsg && err.errMsg.includes('url not in domain list')) {
|
|
|
|
|
|
errorMsg = "请求地址未在小程序管理后台配置,请联系管理员";
|
|
|
|
|
|
// 在开发环境下显示更详细的解决方案
|
|
|
|
|
|
if (process.env.NODE_ENV === 'development') {
|
|
|
|
|
|
console.error('\n=== 开发环境网络请求错误解决方案 ===');
|
|
|
|
|
|
console.error('错误原因:请求的URL不在小程序合法域名列表中');
|
|
|
|
|
|
console.error('当前请求URL:', fullUrl);
|
|
|
|
|
|
console.error('解决方案:');
|
|
|
|
|
|
console.error('1. 在微信开发者工具中,点击右上角的"详情"');
|
|
|
|
|
|
console.error('2. 选择"本地设置"');
|
|
|
|
|
|
console.error('3. 勾选"不校验合法域名、web-view(业务域名)、TLS 版本以及 HTTPS 证书"');
|
|
|
|
|
|
console.error('4. 重新编译小程序');
|
|
|
|
|
|
console.error('==================================\n');
|
|
|
|
|
|
}
|
|
|
|
|
|
} else if(err.errMsg && err.errMsg.includes('connect fail')) {
|
|
|
|
|
|
errorMsg = "网络连接失败,请检查网络设置";
|
|
|
|
|
|
} else if(err.errMsg && err.errMsg.includes('localhost')) {
|
|
|
|
|
|
errorMsg = "无法连接到本地服务器,请检查BASE_URL配置";
|
|
|
|
|
|
}
|
|
|
|
|
|
err.userFriendlyMsg = errorMsg;
|
2025-11-11 17:07:13 +08:00
|
|
|
|
reject(err)
|
|
|
|
|
|
}
|
|
|
|
|
|
})
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
export function SIMPLE_TOKEN(url, data, token, method) {
|
2025-11-24 16:01:45 +08:00
|
|
|
|
const fullUrl = `${BASE_URL}${url}`;
|
|
|
|
|
|
console.log(`[网络请求] ${method} ${fullUrl}`, data);
|
|
|
|
|
|
|
2025-11-11 17:07:13 +08:00
|
|
|
|
return new Promise((resolve, reject) => {
|
|
|
|
|
|
uni.request({
|
2025-11-24 16:01:45 +08:00
|
|
|
|
url: fullUrl,
|
2025-11-11 17:07:13 +08:00
|
|
|
|
method: method,
|
|
|
|
|
|
header: {
|
|
|
|
|
|
"Content-Type": "application/json;charset=utf-8",
|
|
|
|
|
|
"Authorization": token
|
|
|
|
|
|
},
|
|
|
|
|
|
dataType: 'json',
|
|
|
|
|
|
data: data,
|
|
|
|
|
|
success: res => {
|
2025-11-24 16:01:45 +08:00
|
|
|
|
console.log(`[网络响应] ${method} ${fullUrl}`, res.data);
|
|
|
|
|
|
// 首先检查HTTP状态码
|
|
|
|
|
|
if(res.statusCode === 200) {
|
|
|
|
|
|
// 无论返回内容是什么格式,都视为成功
|
|
|
|
|
|
resolve(res)
|
2025-11-11 17:07:13 +08:00
|
|
|
|
} else {
|
|
|
|
|
|
reject(res)
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
fail: err => {
|
2025-11-24 16:01:45 +08:00
|
|
|
|
console.error(`[网络错误] ${method} ${fullUrl}`, err);
|
|
|
|
|
|
// 提供更友好的错误信息
|
|
|
|
|
|
let errorMsg = "网络请求失败";
|
|
|
|
|
|
if(err.errMsg && err.errMsg.includes('url not in domain list')) {
|
|
|
|
|
|
errorMsg = "请求地址未在小程序管理后台配置,请联系管理员";
|
|
|
|
|
|
} else if(err.errMsg && err.errMsg.includes('connect fail')) {
|
|
|
|
|
|
errorMsg = "网络连接失败,请检查网络设置";
|
|
|
|
|
|
}
|
|
|
|
|
|
err.userFriendlyMsg = errorMsg;
|
2025-11-11 17:07:13 +08:00
|
|
|
|
reject(err)
|
|
|
|
|
|
}
|
|
|
|
|
|
})
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
export default {
|
|
|
|
|
|
GET,
|
|
|
|
|
|
POST,
|
|
|
|
|
|
DELETE,
|
|
|
|
|
|
PUT,
|
|
|
|
|
|
GET_TOKEN
|
|
|
|
|
|
}
|