import { useTranslation } from "react-i18next"; import { Button, Dropdown, Form, Input, message, Space, Tooltip } from "antd"; import { CopyToClipboard } from "react-copy-to-clipboard"; import { ChevronDown as ChevronDownIcon, Clipboard as ClipboardIcon, ThumbsUp as ThumbsUpIcon } from "lucide-react"; import { type Certificate } from "@/domain/certificate"; import { saveFiles2Zip } from "@/utils/file"; type CertificateDetailProps = { data: Certificate; }; const CertificateDetail = ({ data }: CertificateDetailProps) => { const { t } = useTranslation(); const [messageApi, MessageContextHolder] = message.useMessage(); const handleDownloadPEMClick = async () => { const zipName = `${data.id}-${data.san}.zip`; const files = [ { name: `${data.san}.pem`, content: data.certificate ?? "", }, { name: `${data.san}.key`, content: data.privateKey ?? "", }, ]; await saveFiles2Zip(zipName, files); }; return (
{MessageContextHolder}
{ messageApi.success(t("common.copy.done")); }} >
{ messageApi.success(t("common.copy.done")); }} >
, onClick: () => handleDownloadPEMClick(), }, { key: "PFX", label: "PFX", onClick: () => { // TODO: 下载 PFX 格式证书 alert("TODO"); }, }, { key: "JKS", label: "JKS", onClick: () => { // TODO: 下载 JKS 格式证书 alert("TODO"); }, }, ], }} >
); }; export default CertificateDetail;