"use client"; import { useEffect, useState } from "react"; import { useSession } from "next-auth/react"; import { Card, CardContent, CardHeader, CardTitle, CardDescription } from "@/components/ui/card"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from "@/components/ui/dialog"; import { Crown, Check, X, Loader2, AlertTriangle, CheckCircle } from "lucide-react"; import { api } from "@/lib/api"; interface PlanFeature { name: string; included: boolean; } interface PlanDetail { id: string; name: string; price: number; max_queries: number; features: PlanFeature[]; } interface SubscriptionData { id: string; plan: string; status: string; start_date: string; end_date: string; amount: number | null; payment_method: string | null; created_at: string; } function ProfileTab() { const { data: session, update } = useSession(); const [name, setName] = useState(session?.user?.name || ""); const [loading, setLoading] = useState(false); const [error, setError] = useState(""); const [success, setSuccess] = useState(false); const handleSave = async (e: React.FormEvent) => { e.preventDefault(); if (!session?.accessToken) return; setLoading(true); setError(""); setSuccess(false); try { await api.auth.updateProfile(session.accessToken, { name }); await update({ name }); setSuccess(true); } catch (err: unknown) { const message = err instanceof Error ? err.message : "保存失败"; setError(message); } finally { setLoading(false); } }; return (
); } function PasswordTab() { const { data: session } = useSession(); const [oldPassword, setOldPassword] = useState(""); const [newPassword, setNewPassword] = useState(""); const [confirmPassword, setConfirmPassword] = useState(""); const [loading, setLoading] = useState(false); const [error, setError] = useState(""); const [success, setSuccess] = useState(false); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setError(""); setSuccess(false); if (newPassword.length < 8) { setError("新密码至少需要 8 位"); return; } if (newPassword !== confirmPassword) { setError("两次输入的新密码不一致"); return; } if (!session?.accessToken) { setError("登录已过期,请重新登录"); return; } setLoading(true); try { await api.auth.changePassword(session.accessToken, oldPassword, newPassword); setSuccess(true); setOldPassword(""); setNewPassword(""); setConfirmPassword(""); } catch (err: unknown) { const message = err instanceof Error ? err.message : "修改失败"; setError(message); } finally { setLoading(false); } }; return ( ); } function SubscriptionTab() { const { data: session } = useSession(); const [plans, setPlans] = useState{currentPlanName}
有效期: {currentSub.start_date} 至 {currentSub.end_date}
{currentSub.amount &&金额: ¥{currentSub.amount}
}管理您的账户和订阅信息