'use client'; import {useMutation, useQuery, useQueryClient} from '@tanstack/react-query'; import {useMemo, useState} from 'react'; import {Cloud, Plus, Trash2} from 'lucide-react'; import {toast} from 'sonner'; import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, } from '@/components/ui/alert-dialog'; import {Button} from '@/components/ui/button'; import {Card, CardContent, CardDescription, CardHeader, CardTitle} from '@/components/ui/card'; import {EmptyStateWithBorder} from '@/components/layout/empty'; import {ErrorInline} from '@/components/layout/error'; import {LoadingStateWithBorder} from '@/components/layout/loading'; import type {DnsAccountItem} from '@/lib/services/openflare'; import {DnsAccountService} from '@/lib/services/openflare'; import {formatDateTime} from '@/lib/utils'; import {DnsAccountCreateDialog} from '../websites/components/dns-account-create-dialog'; import {getErrorMessage} from '../websites/components/website-utils'; const dnsAccountsQueryKey = ['openflare', 'dns-accounts']; export default function DnsAccountsPage() { const queryClient = useQueryClient(); const [createOpen, setCreateOpen] = useState(false); const [deleteTarget, setDeleteTarget] = useState(null); const dnsAccountsQuery = useQuery({ queryKey: dnsAccountsQueryKey, queryFn: () => DnsAccountService.list(), }); const deleteMutation = useMutation({ mutationFn: (id: number) => DnsAccountService.deleteById(id), onSuccess: async () => { toast.success('DNS 账号已删除'); setDeleteTarget(null); await queryClient.invalidateQueries({queryKey: dnsAccountsQueryKey}); }, onError: (error) => toast.error(getErrorMessage(error)), }); const accounts = useMemo( () => dnsAccountsQuery.data ?? [], [dnsAccountsQuery.data], ); return (

DNS 账号

DNS 账号列表 统一管理 DNS 服务商账号,用于 ACME 证书的 DNS 验证申请。 {dnsAccountsQuery.isLoading ? ( ) : dnsAccountsQuery.isError ? (
void dnsAccountsQuery.refetch()} className="justify-center" />
) : accounts.length === 0 ? ( ) : (
{accounts.map((account) => (

{account.name}{' '} ({account.type})

创建于:{formatDateTime(account.created_at)}

))}
)}
toast.success('DNS 账号已添加')} /> !open && setDeleteTarget(null)} > 确认删除 DNS 账号 确认删除 DNS 账号 {deleteTarget?.name} 吗? 取消 deleteTarget && deleteMutation.mutate(deleteTarget.id)} > 删除
); }