// app/services/base_service.ts - 前端请求基础封装,保持和其他项目相近的调用风格 /** GET query 可接受的基础值类型 */ type QueryValue = string | number | boolean | null | undefined; /** GET query 对象;空值会在请求前被过滤掉 */ type QueryParams = Record; /** 把 undefined/null/空字符串从 query 中移除,避免拼出无意义参数 */ const cleanQuery = (query?: QueryParams) => { if (!query) return undefined; return Object.fromEntries( Object.entries(query).filter(([, value]) => { return value !== undefined && value !== null && value !== ""; }) ); }; /** * 基础请求类 * * 其他项目里 service 方法返回 axios response,这里用 `$fetch` 包一层 `{ data }`, * 让 store 层仍然可以写成 `res.data`,后续替换请求库也不会影响组件。 */ export default class BaseClientService { /** 发起 GET 请求 */ public static async get(url: string, query?: QueryParams) { const data = await $fetch(url, { method: "GET", query: cleanQuery(query) }); return { data }; } /** 发起 POST 请求 */ public static async post( url: string, body?: B ) { const data = await $fetch(url, { method: "POST", body }); return { data }; } }