Files
admin/www/app/composables/useRequest.ts
T
2026-07-31 19:02:00 +08:00

52 lines
1.2 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* 统一请求封装(基于 Nuxt 内置 ofetch
*
* 与 dashboard 后端约定响应格式:{ code, msg, data }
* - code = 1:成功
* - code = 0:业务错误
* - code = 2:无数据
*/
export interface ApiResponse<T = unknown> {
code: number;
msg: string;
data: T | null;
}
export class ApiError extends Error {
code: number;
constructor(msg: string, code: number) {
super(msg);
this.code = code;
}
}
export function useRequest() {
const config = useRuntimeConfig();
const baseURL = config.public.apiBaseUrl as string;
async function request<T = unknown>(url: string, options?: Parameters<typeof $fetch>[1]): Promise<T | null> {
const res = await $fetch<ApiResponse<T>>(url, {
baseURL,
...options
});
if (res.code === 0) {
throw new ApiError(res.msg || '请求失败', res.code);
}
// code = 2(无数据)时 data 为 null,正常返回
return res.data;
}
function get<T = unknown>(url: string, params?: Record<string, unknown>) {
return request<T>(url, { method: 'GET', params });
}
function post<T = unknown>(url: string, body?: Record<string, unknown>) {
return request<T>(url, { method: 'POST', body });
}
return { request, get, post };
}