import React, { useCallback, useState } from 'react'; import { Flex, Box, Button, TableContainer, Table, Thead, Tr, Th, Td, Tbody, useDisclosure, Modal, ModalOverlay, ModalContent, ModalHeader, ModalFooter, ModalBody, ModalCloseButton, FormControl, Slider, SliderTrack, SliderFilledTrack, SliderThumb, SliderMark, Input } from '@chakra-ui/react'; import { QuestionOutlineIcon } from '@chakra-ui/icons'; import MyIcon from '@/components/Icon'; import { useToast } from '@/hooks/useToast'; import { useLoading } from '@/hooks/useLoading'; import { useQuery } from '@tanstack/react-query'; import { getShareChatList, delShareChatById, createShareChat } from '@/api/chat'; import { formatTimeToChatTime, useCopyData, getErrText } from '@/utils/tools'; import { useForm } from 'react-hook-form'; import { defaultShareChat } from '@/constants/model'; import type { ShareChatEditType } from '@/types/app'; import MyTooltip from '@/components/MyTooltip'; const Share = ({ appId }: { appId: string }) => { const { toast } = useToast(); const { Loading, setIsLoading } = useLoading(); const { copyData } = useCopyData(); const { isOpen: isOpenCreateShareChat, onOpen: onOpenCreateShareChat, onClose: onCloseCreateShareChat } = useDisclosure(); const { register: registerShareChat, getValues: getShareChatValues, setValue: setShareChatValues, handleSubmit: submitShareChat, reset: resetShareChat } = useForm({ defaultValues: defaultShareChat }); const [refresh, setRefresh] = useState(false); const { isFetching, data: shareChatList = [], refetch: refetchShareChatList } = useQuery(['initShareChatList', appId], () => getShareChatList(appId)); const onclickCreateShareChat = useCallback( async (e: ShareChatEditType) => { try { setIsLoading(true); const id = await createShareChat({ ...e, appId }); onCloseCreateShareChat(); refetchShareChatList(); const url = `对话地址为:${location.origin}/chat/share?shareId=${id}`; copyData(url, '已复制分享地址'); resetShareChat(defaultShareChat); } catch (err) { toast({ title: getErrText(err, '创建分享链接异常'), status: 'warning' }); console.log(err); } setIsLoading(false); }, [ appId, copyData, onCloseCreateShareChat, refetchShareChatList, resetShareChat, setIsLoading, toast ] ); // format share used token const formatTokens = (tokens: number) => { if (tokens < 10000) return tokens; return `${(tokens / 10000).toFixed(2)}万`; }; return ( 免登录聊天窗口 {shareChatList.map((item) => ( ))}
名称 最大上下文 tokens消耗 最后使用时间 操作
{item.name} {item.maxContext} {formatTokens(item.tokens)} {item.lastTime ? formatTimeToChatTime(item.lastTime) : '未使用'} { const url = `${location.origin}/chat/share?shareId=${item.shareId}`; copyData(url, '已复制分享地址'); }} /> { setIsLoading(true); try { await delShareChatById(item._id); refetchShareChatList(); } catch (error) { console.log(error); } setIsLoading(false); }} />
{shareChatList.length === 0 && !isFetching && ( 没有创建分享链接 )} {/* create shareChat modal */} 创建免登录窗口 名称: 最长上下文(组) { setShareChatValues('maxContext', e); setRefresh(!refresh); }} > {getShareChatValues('maxContext')}
); }; export default Share;