import React, { useState, useEffect } from 'react'; import { Dialog, DialogTitle, DialogDescription, DialogRoot } from '~/components/ui/Dialog'; import { useAuth } from '~/hooks/useAuth'; import { toast } from 'react-toastify'; import type { PurchaseResponse } from '~/routes/api.purchase-token-reload'; interface TokenReloadModalProps { isOpen: boolean; onClose: () => void; onReloadSuccess: () => void; } interface TokenReloadPack { _id: string; name: string; tokens: number; price: number; description: string; } export function TokenReloadModal({ isOpen, onClose, onReloadSuccess }: TokenReloadModalProps) { const [tokenReloadPacks, setTokenReloadPacks] = useState([]); const [isLoading, setIsLoading] = useState(true); const { token } = useAuth(); useEffect(() => { if (isOpen) { fetchTokenReloadPacks(); } }, [isOpen]); const fetchTokenReloadPacks = async () => { setIsLoading(true); try { const response = await fetch('/api/token-reload-packs'); if (!response.ok) { throw new Error('获取代币充值包失败'); } const data = await response.json() as TokenReloadPack[]; setTokenReloadPacks(data); } catch (error) { console.error('获取代币充值包时出错:', error); toast.error('获取代币充值包失败,请稍后再试'); } finally { setIsLoading(false); } }; const handlePurchase = async (packId: string) => { if (!token) { toast.error('登录状态异常,请重新登录'); return; } try { const response = await fetch('/api/purchase-token-reload', { method: 'POST', headers: { 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json', }, body: JSON.stringify({ packId }), }); const result = await response.json() as PurchaseResponse; if (response.ok && result.success) { onReloadSuccess(); onClose(); } else { toast.error(result.error || '购买代币充值包失败,请稍后重试'); } } catch (error) { console.error('Error purchasing token reload pack:', error); toast.error('购买代币充值包过程中出现错误,请稍后重试'); } }; if (isLoading) return null; return ( 购买代币充值包
{tokenReloadPacks.map((pack) => (

{pack.name}

{(pack.tokens / 1000000).toFixed(0)}M 代币

{pack.description}

¥{pack.price.toFixed(2)}
))}
); }