123 lines
2.8 KiB
JavaScript
123 lines
2.8 KiB
JavaScript
/**
|
|
* HTTP请求封装 - 基于 uni.request
|
|
* 风格参考 gym-manage-cuit 的 request.ts
|
|
*/
|
|
|
|
// 后端API基础地址
|
|
// H5端: 使用 /gym-api 前缀走vite代理(避免与源码 api/ 目录冲突),代理重写为 /api
|
|
// App端: 直接请求后端域名
|
|
// #ifdef H5
|
|
const BASE_URL = '/gym-api'
|
|
// #endif
|
|
// #ifndef H5
|
|
const BASE_URL = 'http://localhost:8084'
|
|
// #endif
|
|
|
|
// token存储key
|
|
const TOKEN_KEY = 'coach_access_token'
|
|
const REFRESH_TOKEN_KEY = 'coach_refresh_token'
|
|
const USER_INFO_KEY = 'coach_user_info'
|
|
|
|
function getToken() {
|
|
return uni.getStorageSync(TOKEN_KEY) || ''
|
|
}
|
|
|
|
function getRefreshToken() {
|
|
return uni.getStorageSync(REFRESH_TOKEN_KEY) || ''
|
|
}
|
|
|
|
function setToken(token) {
|
|
uni.setStorageSync(TOKEN_KEY, token)
|
|
}
|
|
|
|
function setRefreshToken(token) {
|
|
uni.setStorageSync(REFRESH_TOKEN_KEY, token)
|
|
}
|
|
|
|
function clearAuth() {
|
|
uni.removeStorageSync(TOKEN_KEY)
|
|
uni.removeStorageSync(REFRESH_TOKEN_KEY)
|
|
uni.removeStorageSync(USER_INFO_KEY)
|
|
}
|
|
|
|
/**
|
|
* 发起请求
|
|
*/
|
|
function request(options) {
|
|
return new Promise((resolve, reject) => {
|
|
const token = getToken()
|
|
const header = {
|
|
'Content-Type': 'application/json',
|
|
...(options.header || {})
|
|
}
|
|
|
|
if (token) {
|
|
header['Authorization'] = `Bearer ${token}`
|
|
}
|
|
|
|
uni.request({
|
|
url: BASE_URL + options.url,
|
|
method: options.method || 'GET',
|
|
data: options.data || {},
|
|
header: header,
|
|
timeout: options.timeout || 15000,
|
|
success: (res) => {
|
|
const statusCode = res.statusCode
|
|
if (statusCode >= 200 && statusCode < 300) {
|
|
resolve(res.data)
|
|
} else if (statusCode === 401) {
|
|
// token过期,清除登录状态
|
|
const isLoginRequest = options.url?.includes('/auth/login')
|
|
if (!isLoginRequest) {
|
|
clearAuth()
|
|
uni.reLaunch({ url: '/pages/login/login' })
|
|
}
|
|
reject(res)
|
|
} else {
|
|
reject(res)
|
|
}
|
|
},
|
|
fail: (err) => {
|
|
uni.showToast({
|
|
title: '网络请求失败',
|
|
icon: 'none',
|
|
duration: 2000
|
|
})
|
|
reject(err)
|
|
}
|
|
})
|
|
})
|
|
}
|
|
|
|
// 导出便捷方法
|
|
request.get = function(url, params = {}) {
|
|
let query = ''
|
|
if (Object.keys(params).length > 0) {
|
|
const parts = []
|
|
for (const key in params) {
|
|
if (params[key] !== undefined && params[key] !== null && params[key] !== '') {
|
|
parts.push(`${encodeURIComponent(key)}=${encodeURIComponent(params[key])}`)
|
|
}
|
|
}
|
|
if (parts.length > 0) {
|
|
query = '?' + parts.join('&')
|
|
}
|
|
}
|
|
return request({ url: url + query, method: 'GET' })
|
|
}
|
|
|
|
request.post = function(url, data = {}) {
|
|
return request({ url, method: 'POST', data })
|
|
}
|
|
|
|
request.put = function(url, data = {}) {
|
|
return request({ url, method: 'PUT', data })
|
|
}
|
|
|
|
request.delete = function(url, data = {}) {
|
|
return request({ url, method: 'DELETE', data })
|
|
}
|
|
|
|
export { request, getToken, setToken, setRefreshToken, clearAuth, TOKEN_KEY, USER_INFO_KEY }
|
|
export default request
|