fix: preserve billing response shape

This commit is contained in:
brother7 committed 2026-08-17 11:28:08 +08:00
1 parent 600cba023c
commit 2ef3da7af5
7 files changed
+488 -6

No files matched your search

+8 -5
View File
@@ -20,6 +20,7 @@ import {
X
} from "lucide-react";
import { billingUnitLabel, formatBillingAmount } from "@/lib/billing";
import { parseAdminBillingPayload, parseMemberBillingPayload } from "@/lib/client/billing-api";
import { pulseFeedback, revealChildren, runScopedMotion } from "@/lib/ui/motion";
import type { BillingAccountConfig, BillingParameterDimension, BillingParameterTier, BillingPriceRule, OrganizationWallet } from "@/lib/types";
@@ -161,8 +162,9 @@ export function BillingManager({ isSuperAdmin }: { isSuperAdmin: boolean }) {
try {
if (isSuperAdmin) {
const adminResponse = await fetch("/api/admin/billing", { cache: "no-store" });
const adminPayload = await readApiPayload<AdminPayload>(adminResponse);
if (!adminResponse.ok) throw new Error(adminPayload.error || "读取超管计费数据失败");
const rawAdminPayload = await readApiPayload<AdminPayload>(adminResponse);
if (!adminResponse.ok) throw new Error(rawAdminPayload.error || "读取超管计费数据失败");
const adminPayload = parseAdminBillingPayload(rawAdminPayload);
setAdmin(adminPayload);
setBilling(buildAdminBillingPayload(adminPayload));
setAccountDraft({ ...emptyAccountDraft, ...adminPayload.billingAccount });
@@ -172,8 +174,9 @@ export function BillingManager({ isSuperAdmin }: { isSuperAdmin: boolean }) {
}));
} else {
const billingResponse = await fetch("/api/billing", { cache: "no-store" });
const billingPayload = await readApiPayload<BillingPayload>(billingResponse);
if (!billingResponse.ok) throw new Error(billingPayload.error || "读取计费数据失败");
const rawBillingPayload = await readApiPayload<BillingPayload>(billingResponse);
if (!billingResponse.ok) throw new Error(rawBillingPayload.error || "读取计费数据失败");
const billingPayload = parseMemberBillingPayload(rawBillingPayload);
setBilling(billingPayload);
}
} catch (nextError) {
@@ -324,7 +327,7 @@ async function readApiPayload<T extends Record<string, unknown>>(response: Respo
} catch {
return {
error: response.status >= 500
? "计费服务返回了服务器错误,请检查服务端日志,并确认已执行 npm run db:migrate。"
? "计费服务返回了服务器错误,请检查 Go API 状态和服务端日志。"
: `服务器返回了无效响应(HTTP ${response.status})。`
} as T & { error?: string };
}