import React, { useState } from 'react'; import { Box, Button, Modal, ModalOverlay, ModalContent, Flex, ModalFooter, ModalBody, ModalCloseButton, Table, Thead, Tbody, Tr, Th, Td, TableContainer, IconButton } from '@chakra-ui/react'; import { getOpenApiKeys, createAOpenApiKey, delOpenApiById } from '@/api/openapi'; import { useQuery, useMutation } from '@tanstack/react-query'; import { useLoading } from '@/hooks/useLoading'; import dayjs from 'dayjs'; import { AddIcon, DeleteIcon } from '@chakra-ui/icons'; import { getErrText, useCopyData } from '@/utils/tools'; import { useToast } from '@/hooks/useToast'; import MyIcon from '../Icon'; const APIKeyModal = ({ onClose }: { onClose: () => void }) => { const { Loading } = useLoading(); const { toast } = useToast(); const { data: apiKeys = [], isLoading: isGetting, refetch } = useQuery(['getOpenApiKeys'], getOpenApiKeys); const [apiKey, setApiKey] = useState(''); const { copyData } = useCopyData(); const { mutate: onclickCreateApiKey, isLoading: isCreating } = useMutation({ mutationFn: () => createAOpenApiKey(), onSuccess(res) { setApiKey(res); refetch(); }, onError(err) { toast({ status: 'warning', title: getErrText(err) }); } }); const { mutate: onclickRemove, isLoading: isDeleting } = useMutation({ mutationFn: async (id: string) => delOpenApiById(id), onSuccess() { refetch(); } }); return ( API 秘钥管理 如果你不想 API 秘钥被滥用,请勿将秘钥直接放置在前端使用~ {apiKeys.map(({ id, apiKey, createTime, lastUsedTime }) => ( ))}
Api Key 创建时间 最后一次使用时间
{apiKey} {dayjs(createTime).format('YYYY/MM/DD HH:mm:ss')} {lastUsedTime ? dayjs(lastUsedTime).format('YYYY/MM/DD HH:mm:ss') : '没有使用过'} } size={'xs'} aria-label={'delete'} variant={'base'} colorScheme={'gray'} onClick={() => onclickRemove(id)} />
setApiKey('')}> 新的 API 秘钥 请保管好你的秘钥,秘钥不会再次展示~ copyData(apiKey)} > {apiKey}
); }; export default APIKeyModal;