'use client'; import { useQuery } from '@tanstack/react-query'; import { EmptyState } from '@/components/feedback/empty-state'; import { ErrorState } from '@/components/feedback/error-state'; import { LoadingState } from '@/components/feedback/loading-state'; import { AppModal } from '@/components/ui/app-modal'; import { StatusBadge } from '@/components/ui/status-badge'; import { getTlsCertificate } from '@/features/tls-certificates/api/tls-certificates'; import { getCertificateStatus, getErrorMessage } from '@/features/websites/utils'; import { CodeBlock, DangerButton, PrimaryButton, SecondaryButton, } from '@/features/shared/components/resource-primitives'; import { formatDateTime } from '@/lib/utils/date'; interface CertificateDetailModalProps { certificateId: number | null; isOpen: boolean; onClose: () => void; onEdit: () => void; onDelete: () => void; deleting?: boolean; } export function CertificateDetailModal({ certificateId, isOpen, onClose, onEdit, onDelete, deleting = false, }: CertificateDetailModalProps) { const certificateQuery = useQuery({ queryKey: ['tls-certificates', 'detail', certificateId], queryFn: () => getTlsCertificate(certificateId as number), enabled: isOpen && certificateId !== null, }); const certificate = certificateQuery.data; const status = certificate ? getCertificateStatus(certificate) : null; return ( 关闭 编辑证书 {deleting ? '删除中...' : '删除证书'} } > {certificateQuery.isLoading ? ( ) : certificateQuery.isError ? ( ) : !certificate ? ( ) : (

证书名称

{certificate.name}

状态

{status ? ( ) : null}

生效时间

{formatDateTime(certificate.not_before)}

到期时间

{formatDateTime(certificate.not_after)}

备注

{certificate.remark || '暂无备注'}

证书 PEM

{certificate.cert_pem}

私钥 PEM

{certificate.key_pem}
)}
); }