"use client"; import { useEffect, useState } from "react"; import { RefreshCcw } from "lucide-react"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Button } from "@/components/ui/button"; import { opsApi } from "@/lib/ops-api"; import type { MembershipEntry } from "@/types/ops"; export function MembershipsPageClient() { const [loading, setLoading] = useState(true); const [memberships, setMemberships] = useState([]); const load = async () => { setLoading(true); try { const data = await opsApi.memberships(); setMemberships((data as unknown as { memberships?: MembershipEntry[] }).memberships ?? []); } catch { /* */ } setLoading(false); }; useEffect(() => { void load(); }, []); if (loading) return
加载中...
; return (

会员订阅 ({memberships.length})

{memberships.map((m, i) => ( ))} {memberships.length === 0 && ( )}
邮箱 用户ID 方案 起始 到期 排队天数
{m.email ?? "—"} {m.user_id?.slice(0, 12) ?? "—"} {m.plan_code ?? "—"} {m.starts_at?.slice(0, 10) ?? "—"} {m.expires_at?.slice(0, 10) ?? "—"} {m.queued_days ?? 0}
暂无会员
); }