import { ApiError, createApiClient } from "../lib/apiClient"; import type { PagedResultDto, RoleDto, RoleGetListInput } from "../types/role"; const api = createApiClient({ getToken: () => { try { return localStorage.getItem("access_token") ?? localStorage.getItem("token") ?? null; } catch { return null; } }, }); // ABP Conventional Controller for RoleService const PATH = "/role"; export async function getRoles(input: RoleGetListInput, signal?: AbortSignal): Promise> { return api.requestJson>({ path: PATH, method: "GET", query: { SkipCount: input.skipCount, MaxResultCount: input.maxResultCount, RoleName: input.roleName, RoleCode: input.roleCode, State: input.state, }, signal, }); } function getBaseUrl(): string { return import.meta.env.VITE_API_BASE_URL ?? "http://localhost:19001"; } function getToken(): string | null { try { return localStorage.getItem("access_token") ?? localStorage.getItem("token") ?? null; } catch { return null; } } function joinUrl(baseUrl: string, path: string): string { const b = baseUrl.endsWith("/") ? baseUrl.slice(0, -1) : baseUrl; const p = path.startsWith("/") ? path : `/${path}`; return `${b}${p}`; } function toQueryString(params: Record): string { const qs = new URLSearchParams(); for (const [k, v] of Object.entries(params)) { if (v === undefined || v === null || v === "") continue; if (typeof v === "boolean") { qs.set(k, v ? "true" : "false"); continue; } qs.set(k, String(v)); } const s = qs.toString(); return s ? `?${s}` : ""; } export type RoleExportQuery = { roleName?: string; roleCode?: string; state?: boolean; }; /** POST /api/app/role/export-pdf — ABP `Export*` 为 POST */ export async function exportRolesPdf(input: RoleExportQuery, signal?: AbortSignal): Promise { const baseUrl = getBaseUrl(); const token = getToken(); const url = joinUrl( baseUrl, `/api/app/role/export-pdf${toQueryString({ RoleName: input.roleName, RoleCode: input.roleCode, State: input.state, })}`, ); const headers: Record = {}; if (token) headers.Authorization = `Bearer ${token}`; const res = await fetch(url, { method: "POST", headers, signal }); if (!res.ok) { const ct = res.headers.get("content-type") ?? ""; let msg = "Export failed."; if (ct.includes("application/json")) { const payload = await res.json().catch(() => null); const m = (payload as { error?: { message?: string } })?.error?.message?.trim() || (payload as { message?: string })?.message?.trim(); if (m) msg = m; } else { const t = await res.text().catch(() => ""); if (t.trim()) msg = t.trim(); } throw new ApiError(msg, res.status, null); } return res.blob(); }