import { ChatContext } from '@/app/chat-context'; import { apiInterceptors, delSpace, getSpaceConfig, getSpaceList, newDialogue } from '@/client/api'; import DocPanel from '@/components/knowledge/doc-panel'; import DocTypeForm from '@/components/knowledge/doc-type-form'; import DocUploadForm from '@/components/knowledge/doc-upload-form'; import Segmentation from '@/components/knowledge/segmentation'; import SpaceForm from '@/components/knowledge/space-form'; import BlurredCard, { ChatButton, InnerDropdown } from '@/new-components/common/blurredCard'; import ConstructLayout from '@/new-components/layout/Construct'; import { File, ISpace, IStorage, StepChangeParams } from '@/types/knowledge'; import { PlusOutlined, ReadOutlined, SearchOutlined, WarningOutlined } from '@ant-design/icons'; import { Button, Input, Modal, Spin, Steps, Tag } from 'antd'; import classNames from 'classnames'; import { debounce } from 'lodash'; import moment from 'moment'; import { useRouter } from 'next/router'; import { useContext, useEffect, useState } from 'react'; import { useTranslation } from 'react-i18next'; const Knowledge = () => { const { setCurrentDialogInfo } = useContext(ChatContext); const [spaceList, setSpaceList] = useState | null>([]); const [isAddShow, setIsAddShow] = useState(false); const [isPanelShow, setIsPanelShow] = useState(false); const [currentSpace, setCurrentSpace] = useState(); const [activeStep, setActiveStep] = useState(0); const [spaceName, setSpaceName] = useState(''); const [files, setFiles] = useState>([]); const [docType, setDocType] = useState(''); const [addStatus, setAddStatus] = useState(''); const [loading, setLoading] = useState(false); const [spaceConfig, setSpaceConfig] = useState(null); const { t } = useTranslation(); const addKnowledgeSteps = [ { title: t('Knowledge_Space_Config') }, { title: t('Choose_a_Datasource_type') }, { title: t('Upload') }, { title: t('Segmentation') }, ]; const router = useRouter(); async function getSpaces(params?: any) { setLoading(true); const [_, data] = await apiInterceptors(getSpaceList({ ...params })); setLoading(false); setSpaceList(data); } async function getSpaceConfigs() { const [_, data] = await apiInterceptors(getSpaceConfig()); if (!data) return null; setSpaceConfig(data.storage); } useEffect(() => { getSpaces(); getSpaceConfigs(); }, []); const handleChat = async (space: ISpace) => { const [_, data] = await apiInterceptors( newDialogue({ chat_mode: 'chat_knowledge', }), ); // 知识库对话都默认私有知识库应用下 if (data?.conv_uid) { setCurrentDialogInfo?.({ chat_scene: data.chat_mode, app_code: data.chat_mode, }); localStorage.setItem( 'cur_dialog_info', JSON.stringify({ chat_scene: data.chat_mode, app_code: data.chat_mode, }), ); router.push(`/chat?scene=chat_knowledge&id=${data?.conv_uid}&knowledge_id=${space.name}`); } }; const handleStepChange = ({ label, spaceName, docType, files }: StepChangeParams) => { if (label === 'finish') { setIsAddShow(false); getSpaces(); setSpaceName(''); setDocType(''); setAddStatus('finish'); localStorage.removeItem('cur_space_id'); } else if (label === 'forward') { activeStep === 0 && getSpaces(); setActiveStep(step => step + 1); } else { setActiveStep(step => step - 1); } files && setFiles(files); spaceName && setSpaceName(spaceName); docType && setDocType(docType); }; function onAddDoc(spaceName: string) { setSpaceName(spaceName); setActiveStep(1); setIsAddShow(true); setAddStatus('start'); } const showDeleteConfirm = (space: ISpace) => { Modal.confirm({ title: t('Tips'), icon: , content: `${t('Del_Knowledge_Tips')}?`, okText: 'Yes', okType: 'danger', cancelText: 'No', async onOk() { await apiInterceptors(delSpace({ name: space?.name })); getSpaces(); }, }); }; const onSearch = async (e: any) => { getSpaces({ name: e.target.value }); }; return (
{/* */}
} placeholder={t('please_enter_the_keywords')} onChange={debounce(onSearch, 300)} allowClear className='w-[230px] h-[40px] border-1 border-white backdrop-filter backdrop-blur-lg bg-white bg-opacity-30 dark:border-[#6f7f95] dark:bg-[#6f7f95] dark:bg-opacity-60' />
{spaceList?.map((space: ISpace) => ( { setCurrentSpace(space); setIsPanelShow(true); localStorage.setItem('cur_space_id', JSON.stringify(space.id)); }} description={space.desc} name={space.name} key={space.id} logo={ space.domain_type === 'FinancialReport' ? '/models/fin_report.jpg' : space.vector_type === 'KnowledgeGraph' ? '/models/knowledge-graph.png' : space.vector_type === 'FullText' ? '/models/knowledge-full-text.jpg' : '/models/knowledge-default.jpg' } RightTop={ showDeleteConfirm(space)}> {t('Delete')} ), }, ], }} /> } rightTopHover={false} Tags={
{space.docs} {space.domain_type || 'Normal'} {space.vector_type ? ( {space.vector_type} ) : null}
} LeftBottom={
{space.owner} {space?.gmt_modified && {moment(space?.gmt_modified).fromNow() + ' ' + t('update')}}
} RightBottom={ { handleChat(space); }} /> } /> ))}
setIsPanelShow(false)} footer={null} destroyOnClose={true} > { setIsAddShow(false); }} width={1000} afterClose={() => { setActiveStep(0); getSpaces(); }} footer={null} > {activeStep === 0 && } {activeStep === 1 && } {activeStep === 3 && ( )}
); }; export default Knowledge;