import { CopyToClipboard } from "react-copy-to-clipboard"; import { useTranslation } from "react-i18next"; import { CopyOutlined as CopyOutlinedIcon, DownOutlined as DownOutlinedIcon, LikeOutlined as LikeOutlinedIcon } from "@ant-design/icons"; import { Button, Dropdown, Form, Input, Space, Tooltip, message } from "antd"; import dayjs from "dayjs"; import { type CertificateModel } from "@/domain/certificate"; import { saveFiles2Zip } from "@/utils/file"; export type CertificateDetailProps = { className?: string; style?: React.CSSProperties; data: CertificateModel; }; const CertificateDetail = ({ data, ...props }: CertificateDetailProps) => { const { t } = useTranslation(); const [messageApi, MessageContextHolder] = message.useMessage(); const handleDownloadPEMClick = async () => { const zipName = `${data.id}-${data.subjectAltNames}.zip`; const files = [ { name: `${data.subjectAltNames}.pem`, content: data.certificate ?? "", }, { name: `${data.subjectAltNames}.key`, content: data.privateKey ?? "", }, ]; await saveFiles2Zip(zipName, files); }; return (
{MessageContextHolder}
{ messageApi.success(t("common.text.copied")); }} >
{ messageApi.success(t("common.text.copied")); }} >
, onClick: () => handleDownloadPEMClick(), }, { key: "PFX", label: "PFX", onClick: () => { alert("TODO: 暂时不支持下载 PFX 证书"); }, }, { key: "JKS", label: "JKS", onClick: () => { alert("TODO: 暂时不支持下载 JKS 证书"); }, }, ], }} >
); }; export default CertificateDetail;