Files
hmc_gbhd/frontend/src/util/request.ts
T
2025-04-24 15:53:31 +08:00

82 lines
2.2 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',
...(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) {
resolve(res.data as T)
} else {
const err = new Error(res.data?.message || '请求失败')
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
}
}