150 lines
3.9 KiB
JavaScript
150 lines
3.9 KiB
JavaScript
// 导入当前目录下的auth.js,使用更具体的路径以避免混淆
|
||
import { getToken } from './auth.js';
|
||
|
||
// 配置API基础URL
|
||
const baseURL = 'http://10.160.0.5:8907/'
|
||
|
||
// 是否显示重新登录
|
||
export let isRelogin = { show: false }
|
||
|
||
/**
|
||
* 封装uni.request
|
||
* @param {Object} options - 请求配置
|
||
*/
|
||
export function request(options) {
|
||
// 显示加载状态
|
||
if (options.load) {
|
||
uni.showLoading({
|
||
title: '请稍候',
|
||
mask: true
|
||
})
|
||
}
|
||
|
||
return new Promise((resolve, reject) => {
|
||
// 是否需要设置token
|
||
const isToken = options.headers && options.headers.isToken === false
|
||
|
||
// 添加固定的Authorization token
|
||
if (!isToken) {
|
||
options.headers = options.headers || {}
|
||
options.headers['Authorization'] = 'Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpblR5cGUiOiJsb2dpbiIsImxvZ2luSWQiOiJzeXNfdXNlcjoxIiwicm5TdHIiOiJsNDRvNmhxckdOOW1XcG1pWlpJcXZ0UXJMdGsyTlFhQSIsInVzZXJJZCI6MX0.K5H-Rpof9oI1CCIEtheEQ96XGAxPWS7tzyjPbXwAXrQ'
|
||
}
|
||
|
||
// 确保URL是字符串类型
|
||
let url = options.url;
|
||
console.log("options.url:", url)
|
||
if (typeof url !== 'string') {
|
||
console.error('URL must be a string:', url);
|
||
url = String(url);
|
||
}
|
||
|
||
// 发起请求
|
||
uni.request({
|
||
url: baseURL + url,
|
||
method: options.method || 'GET',
|
||
data: options.data || {},
|
||
header: options.headers || {
|
||
'Content-Type': 'application/json;charset=utf-8'
|
||
},
|
||
timeout: options.timeout || 60000,
|
||
success: (res) => {
|
||
// 二进制数据直接返回
|
||
if (res.header['content-type'] && res.header['content-type'].includes('application/octet-stream')) {
|
||
resolve(res.data)
|
||
return
|
||
}
|
||
|
||
// 处理状态码
|
||
const code = res.data.code || 200
|
||
|
||
// 401错误处理
|
||
if (code === 401) {
|
||
if (!isRelogin.show) {
|
||
isRelogin.show = true
|
||
uni.showModal({
|
||
title: '登录过期',
|
||
content: '登录状态已过期,是否重新登录?',
|
||
success: (res) => {
|
||
isRelogin.show = false
|
||
if (res.confirm) {
|
||
// 跳转到登录页面
|
||
uni.navigateTo({
|
||
url: '/packageRc/pages/login/login'
|
||
})
|
||
}
|
||
}
|
||
})
|
||
}
|
||
reject(new Error('登录过期,请重新登录'))
|
||
return
|
||
}
|
||
|
||
// 其他错误处理
|
||
if (code !== 200) {
|
||
uni.showToast({
|
||
title: res.data.msg || '请求失败',
|
||
icon: 'none'
|
||
})
|
||
reject(res.data)
|
||
return
|
||
}
|
||
|
||
resolve(res.data)
|
||
},
|
||
fail: (error) => {
|
||
uni.showToast({
|
||
title: '网络错误,请稍后重试',
|
||
icon: 'none'
|
||
})
|
||
reject(error)
|
||
},
|
||
complete: () => {
|
||
// 隐藏加载状态
|
||
if (options.load) {
|
||
uni.hideLoading()
|
||
}
|
||
}
|
||
})
|
||
})
|
||
}
|
||
|
||
// 封装GET请求
|
||
export function get(config) {
|
||
if (typeof config === 'string') {
|
||
// 兼容旧的调用方式: get(url, params, options)
|
||
const params = arguments[1] || {};
|
||
const options = arguments[2] || {};
|
||
return request({
|
||
url: config,
|
||
method: 'GET',
|
||
data: params,
|
||
...options
|
||
})
|
||
}
|
||
// 支持配置对象的调用方式: get({url, data, ...})
|
||
return request({
|
||
method: 'GET',
|
||
...config
|
||
})
|
||
}
|
||
|
||
// 封装POST请求
|
||
export function post(config) {
|
||
if (typeof config === 'string') {
|
||
// 兼容旧的调用方式: post(url, data, options)
|
||
const data = arguments[1] || {};
|
||
const options = arguments[2] || {};
|
||
return request({
|
||
url: config,
|
||
method: 'POST',
|
||
data,
|
||
...options
|
||
})
|
||
}
|
||
// 支持配置对象的调用方式: post({url, data, ...})
|
||
return request({
|
||
method: 'POST',
|
||
...config
|
||
})
|
||
}
|