95 lines
2.8 KiB
TypeScript
95 lines
2.8 KiB
TypeScript
import { ref } from 'vue'
|
|
|
|
// 基础配置
|
|
// const BASE_URL = "http://192.168.41.118:9090/api"
|
|
const BASE_URL = "/api"
|
|
|
|
export function useRequest() {
|
|
const loading = ref(false)
|
|
const error = ref<any>(null)
|
|
|
|
// 核心请求方法
|
|
const sendRequest = <T = any>(options: UniApp.RequestOptions): Promise<T> => {
|
|
loading.value = true
|
|
error.value = null
|
|
|
|
return new Promise((resolve, reject) => {
|
|
// 处理URL
|
|
const url = options.url.startsWith('http')
|
|
? options.url
|
|
: `${BASE_URL}/${options.url.replace(/^\//, '')}`
|
|
|
|
// 添加token
|
|
const token = uni.getStorageSync('token')
|
|
const headers = {
|
|
'Content-Type': 'application/json',
|
|
'X-Requested-With': 'XMLHttpRequest',
|
|
...(token ? { 'Authorization': `Bearer ${token}` } : {}),
|
|
...options.header
|
|
}
|
|
|
|
uni.request({
|
|
url,
|
|
method: options.method || 'GET',
|
|
data: options.data,
|
|
header: headers,
|
|
timeout: options.timeout || 10000,
|
|
success: (res) => {
|
|
if (res.statusCode >= 200 && res.statusCode < 300) {
|
|
if(res.data.code === 0){
|
|
resolve(res.data as T)
|
|
}else if(res.data.code === 600098){
|
|
// 未登录
|
|
uni.removeStorageSync('token')
|
|
uni.reLaunch({
|
|
url: '/pages/login/index'
|
|
})
|
|
}else {
|
|
const err = new Error(res.data?.msg || '请求失败')
|
|
error.value = err
|
|
reject(err)
|
|
}
|
|
} else {
|
|
const err = new Error(res.data?.msg || '请求失败')
|
|
error.value = err
|
|
reject(err)
|
|
}
|
|
},
|
|
fail: (err) => {
|
|
error.value = err
|
|
reject(err)
|
|
},
|
|
complete: () => {
|
|
loading.value = false
|
|
}
|
|
})
|
|
})
|
|
}
|
|
|
|
// GET请求
|
|
const get = <T = any>(url: string, params?: any) => {
|
|
return sendRequest<T>({
|
|
url,
|
|
method: 'GET',
|
|
data: params
|
|
})
|
|
}
|
|
|
|
// POST请求
|
|
const post = <T = any>(url: string, data?: any) => {
|
|
return sendRequest<T>({
|
|
url,
|
|
method: 'POST',
|
|
data
|
|
})
|
|
}
|
|
|
|
return {
|
|
loading,
|
|
error,
|
|
request: sendRequest,
|
|
get,
|
|
post
|
|
}
|
|
}
|