77 lines
1.9 KiB
JavaScript
77 lines
1.9 KiB
JavaScript
import { getBaseUrl } from './config'
|
||
import { getToken, clearToken } from './auth'
|
||
|
||
// 用于存储认证失败的回调
|
||
let authFailureCallback = null
|
||
|
||
// 设置认证失败的回调函数
|
||
export function setAuthFailureCallback(callback) {
|
||
authFailureCallback = callback
|
||
}
|
||
|
||
export function request(options) {
|
||
const baseUrl = getBaseUrl()
|
||
const token = getToken()
|
||
const headers = Object.assign({}, options.header || {})
|
||
if (token) {
|
||
const normalized = token.startsWith('Bearer ') ? token : ('Bearer ' + token)
|
||
headers['Authorization'] = normalized
|
||
console.log('请求URL:', baseUrl + options.url)
|
||
console.log('Authorization头:', normalized.substring(0, 50) + '...')
|
||
} else {
|
||
console.warn('请求时没有token:', baseUrl + options.url)
|
||
}
|
||
|
||
return new Promise((resolve, reject) => {
|
||
uni.request({
|
||
...options,
|
||
url: baseUrl + options.url,
|
||
header: headers,
|
||
success: (res) => {
|
||
const data = res.data
|
||
// 统一处理认证失败
|
||
if (data && (data.code === 401 || data.code === 403)) {
|
||
console.error('认证失败,清除token并显示登录弹窗:', data.msg)
|
||
// 清除过期的token
|
||
clearToken()
|
||
// 调用认证失败回调(显示登录弹窗)
|
||
if (authFailureCallback) {
|
||
authFailureCallback()
|
||
}
|
||
}
|
||
resolve(res)
|
||
},
|
||
fail: (err) => {
|
||
console.error('请求失败:', err)
|
||
reject(err)
|
||
}
|
||
})
|
||
})
|
||
}
|
||
|
||
export function uploadFile({ url, filePath, name = 'file', formData = {} }) {
|
||
const baseUrl = getBaseUrl()
|
||
const token = getToken()
|
||
const header = {}
|
||
if (token) {
|
||
const normalized = token.startsWith('Bearer ') ? token : ('Bearer ' + token)
|
||
header['Authorization'] = normalized
|
||
}
|
||
|
||
return new Promise((resolve, reject) => {
|
||
uni.uploadFile({
|
||
url: baseUrl + url,
|
||
filePath,
|
||
name,
|
||
formData,
|
||
header,
|
||
success: (res) => {
|
||
resolve(res)
|
||
},
|
||
fail: (err) => {
|
||
reject(err)
|
||
}
|
||
})
|
||
})
|
||
}
|