97 lines
2.9 KiB
JavaScript
97 lines
2.9 KiB
JavaScript
// API配置文件
|
||
|
||
// 基础配置
|
||
//export const BASE_URL = 'http://yishi.com'
|
||
export const BASE_URL = 'https://ckbapi.quwanzhi.com'
|
||
|
||
// APP配置
|
||
export const APP_CONFIG = {
|
||
version: '1.1.0', // 当前APP版本号(与manifest.json保持一致)
|
||
type: 'aiStore' // APP类型标识
|
||
}
|
||
|
||
// 获取请求头
|
||
const getHeaders = (options = {}) => {
|
||
const token = uni.getStorageSync('token');
|
||
return {
|
||
'content-type': 'application/json',
|
||
...(token ? { 'Authorization': `Bearer ${token}` } : {}),
|
||
...options.header
|
||
};
|
||
};
|
||
|
||
// 请求配置
|
||
export const request = (options) => {
|
||
return new Promise((resolve, reject) => {
|
||
const requestTask = uni.request({
|
||
url: BASE_URL + options.url,
|
||
method: options.method || 'GET',
|
||
data: options.data,
|
||
header: getHeaders(options),
|
||
success: (res) => {
|
||
if (res.statusCode === 200) {
|
||
resolve(res.data)
|
||
} else if (res.statusCode === 401) {
|
||
// token过期或无效
|
||
uni.removeStorageSync('token');
|
||
uni.removeStorageSync('member');
|
||
uni.removeStorageSync('token_expired');
|
||
uni.showToast({
|
||
title: '登录已过期,请重新登录',
|
||
icon: 'none'
|
||
});
|
||
setTimeout(() => {
|
||
uni.reLaunch({
|
||
url: '/pages/login/index'
|
||
});
|
||
}, 1500);
|
||
reject(res);
|
||
} else {
|
||
handleError(res)
|
||
reject(res)
|
||
}
|
||
},
|
||
fail: (err) => {
|
||
handleError(err)
|
||
reject(err)
|
||
}
|
||
})
|
||
|
||
// 超时处理
|
||
setTimeout(() => {
|
||
if (requestTask) {
|
||
requestTask.abort()
|
||
handleError({ message: '请求超时,请稍后重试' })
|
||
reject({ message: '请求超时,请稍后重试' })
|
||
}
|
||
}, options.timeout || 30000)
|
||
})
|
||
}
|
||
|
||
// 错误处理函数
|
||
const handleError = (error) => {
|
||
let message = '网络请求失败,请稍后重试'
|
||
|
||
if (error.errMsg && error.errMsg.includes('解析失败')) {
|
||
message = '网页解析失败,可能是不支持的网页类型,请稍后重试'
|
||
}
|
||
|
||
console.log(message)
|
||
// uni.showToast({
|
||
// title: message,
|
||
// icon: 'none',
|
||
// duration: 2000
|
||
// })
|
||
}
|
||
|
||
// 请求重试函数
|
||
export const requestWithRetry = async (options, maxRetries = 3) => {
|
||
for (let i = 0; i < maxRetries; i++) {
|
||
try {
|
||
return await request(options)
|
||
} catch (error) {
|
||
if (i === maxRetries - 1) throw error
|
||
await new Promise(resolve => setTimeout(resolve, 1000 * (i + 1)))
|
||
}
|
||
}
|
||
}
|