import React, { useCallback } from 'react'; import { Box, Card, Flex, Grid, useTheme, Button, IconButton, useDisclosure } from '@chakra-ui/react'; import { useRouter } from 'next/router'; import { useUserStore } from '@/store/user'; import PageContainer from '@/components/PageContainer'; import { useConfirm } from '@/hooks/useConfirm'; import { AddIcon } from '@chakra-ui/icons'; import { useQuery } from '@tanstack/react-query'; import { useToast } from '@/hooks/useToast'; import { delKbById } from '@/api/plugins/kb'; import Avatar from '@/components/Avatar'; import MyIcon from '@/components/Icon'; import Tag from '@/components/Tag'; import { serviceSideProps } from '@/utils/i18n'; import dynamic from 'next/dynamic'; const CreateModal = dynamic(() => import('./component/CreateModal'), { ssr: false }); const Kb = () => { const theme = useTheme(); const router = useRouter(); const { toast } = useToast(); const { openConfirm, ConfirmModal } = useConfirm({ title: '删除提示', content: '确认删除该知识库?' }); const { myKbList, loadKbList, setKbList } = useUserStore(); const { isOpen: isOpenCreateModal, onOpen: onOpenCreateModal, onClose: onCloseCreateModal } = useDisclosure(); const { refetch } = useQuery(['loadKbList'], () => loadKbList()); /* 点击删除 */ const onclickDelKb = useCallback( async (id: string) => { try { delKbById(id); toast({ title: '删除成功', status: 'success' }); setKbList(myKbList.filter((item) => item._id !== id)); } catch (err: any) { toast({ title: err?.message || '删除失败', status: 'error' }); } }, [toast, setKbList, myKbList] ); return ( 我的知识库 {myKbList.map((kb) => ( router.push({ pathname: '/kb/detail', query: { kbId: kb._id } }) } > {kb.name} } variant={'base'} borderRadius={'md'} aria-label={'delete'} display={['', 'none']} _hover={{ bg: 'red.100' }} onClick={(e) => { e.stopPropagation(); openConfirm(() => onclickDelKb(kb._id))(); }} /> {kb.tags.map((tag, i) => ( {tag} ))} {kb.vectorModel.name} ))} {myKbList.length === 0 && ( 还没有知识库,快去创建一个吧! )} {isOpenCreateModal && } ); }; export async function getServerSideProps(content: any) { return { props: { ...(await serviceSideProps(content)) } }; } export default Kb;