"use client"; import { Loader2 } from "lucide-react"; import { useState } from "react"; import { cn } from "@/lib/utils"; export function ManageSubscriptionButton({ className, }: { className?: string; }) { const [isPending, setIsPending] = useState(false); async function handleOpenPortal() { if (isPending) { return; } setIsPending(true); try { const response = await fetch("/api/billing/portal", { method: "POST", }); const data = (await response.json()) as { error?: string; url?: string }; if (!response.ok || !data.url) { window.alert(data.error || "打开订阅管理失败,请稍后重试。"); return; } window.location.assign(data.url); } catch (error) { console.error("[ManageSubscriptionButton] portal error", error); window.alert("打开订阅管理失败,请稍后重试。"); } finally { setIsPending(false); } } return ( ); }