import { createApiClient } from "../lib/apiClient"; import { authorizedGetBlobDownload } from "../lib/batchFileHttp"; import type { GroupCreateInput, GroupDetailDto, GroupGetListInput, GroupListResult, GroupUpdateInput, } from "../types/group"; const api = createApiClient({ getToken: () => { try { return localStorage.getItem("access_token") ?? localStorage.getItem("token") ?? null; } catch { return null; } }, }); const PATH = "/group"; export async function getGroups(input: GroupGetListInput, signal?: AbortSignal): Promise { return api.requestJson({ path: PATH, method: "GET", query: { SkipCount: input.skipCount, MaxResultCount: input.maxResultCount, Sorting: input.sorting, Keyword: input.keyword, PartnerId: input.partnerId, State: input.state, }, signal, }); } export async function getGroup(id: string, signal?: AbortSignal): Promise { return api.requestJson({ path: `/group/${encodeURIComponent(id)}`, method: "GET", signal, }); } export async function createGroup(input: GroupCreateInput, signal?: AbortSignal): Promise { return api.requestJson({ path: PATH, method: "POST", body: { groupName: input.groupName.trim(), partnerId: input.partnerId.trim(), state: input.state ?? true, }, signal, }); } export async function updateGroup(id: string, input: GroupUpdateInput, signal?: AbortSignal): Promise { return api.requestJson({ path: `/group/${encodeURIComponent(id)}`, method: "PUT", body: { groupName: input.groupName.trim(), partnerId: input.partnerId.trim(), state: input.state ?? true, }, signal, }); } export async function deleteGroup(id: string, signal?: AbortSignal): Promise { await api.requestJson({ path: `/group/${encodeURIComponent(id)}`, method: "DELETE", signal, }); } export type GroupExportQuery = { keyword?: string; partnerId?: string; state?: boolean; sorting?: string; }; /** * 与文档及后端 `ExportPdfAsync([FromQuery] GroupGetListInputVo)` 一致:`GET /api/app/group/export-pdf`, * Query:`Keyword`、`PartnerId`、`State`、`Sorting`(全量导出,分页参数不传)。 */ export async function exportGroupsPdf(input: GroupExportQuery, signal?: AbortSignal): Promise { await authorizedGetBlobDownload({ path: `${PATH}/export-pdf`, query: { Keyword: input.keyword, PartnerId: input.partnerId, State: input.state, Sorting: input.sorting, }, defaultFileName: "regions-export.pdf", signal, }); }