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) { // 从本地存储获取token var token = uni.getStorageSync("APP_TOKEN") || ""; 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) { // 声明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); } } else if(requestTime == 0) { requestTime += 1; } const fullUrl = `${BASE_URL}${url}`; console.log(`[网络请求] ${method} ${fullUrl}`, data); return new Promise((resolve, reject) => { uni.request({ url: fullUrl, method: method, header: { "Content-Type": "application/json;charset=utf-8", "Authorization": token }, dataType: 'json', data: data, success: res => { console.log(`[网络响应] ${method} ${fullUrl}`, res.data); // 首先检查HTTP状态码 if(res.statusCode === 200) { // 无论返回内容是什么格式,都视为成功 resolve(res) } else { reject(res) } }, fail: err => { 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; reject(err) } }) }) } export function SIMPLE_TOKEN(url, data, token, method) { const fullUrl = `${BASE_URL}${url}`; console.log(`[网络请求] ${method} ${fullUrl}`, data); return new Promise((resolve, reject) => { uni.request({ url: fullUrl, method: method, header: { "Content-Type": "application/json;charset=utf-8", "Authorization": token }, dataType: 'json', data: data, success: res => { console.log(`[网络响应] ${method} ${fullUrl}`, res.data); // 首先检查HTTP状态码 if(res.statusCode === 200) { // 无论返回内容是什么格式,都视为成功 resolve(res) } else { reject(res) } }, fail: err => { 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; reject(err) } }) }) } export default { GET, POST, DELETE, PUT, GET_TOKEN }