import { forwardRef, useEffect, useImperativeHandle, useState } from 'react'; import { Form, Select, InputNumber } from 'antd'; import { useTranslation } from 'react-i18next'; import type { KnowledgeConfigModalRef, KnowledgeBase, KnowledgeConfigForm, RetrieveType } from './types' import RbModal from '@/components/RbModal' import RbSlider from '@/components/RbSlider' import { formatDateTime } from '@/utils/format'; const FormItem = Form.Item; interface KnowledgeConfigModalProps { refresh: (values: KnowledgeConfigForm, type: 'knowledgeConfig') => void; } const retrieveTypes: RetrieveType[] = ['participle', 'semantic', 'hybrid'] const KnowledgeConfigModal = forwardRef(({ refresh, }, ref) => { const { t } = useTranslation(); const [visible, setVisible] = useState(false); const [form] = Form.useForm(); const [data, setData] = useState(null); const values = Form.useWatch([], form); // 封装取消方法,添加关闭弹窗逻辑 const handleClose = () => { setVisible(false); form.resetFields(); setData(null) }; const handleOpen = (data: KnowledgeBase) => { form.setFieldsValue({ retrieve_type: data?.config?.retrieve_type || retrieveTypes[0], kb_id: data.id, top_k: data?.config?.top_k || 5, similarity_threshold: data?.config?.similarity_threshold || 0.5, vector_similarity_weight: data?.config?.vector_similarity_weight || 0.5, ...(data || {}), ...(data?.config || {}), }) setData({...data}) setVisible(true); }; // 封装保存方法,添加提交逻辑 const handleSave = () => { form .validateFields() .then(() => { refresh(values, 'knowledgeConfig') handleClose() }) .catch((err) => { console.log('err', err) }); } // 暴露给父组件的方法 useImperativeHandle(ref, () => ({ handleOpen, handleClose })); useEffect(() => { if (values?.retrieve_type) { const fieldsToReset = Object.keys(values).filter(key => key !== 'kb_id' && key !== 'retrieve_type' ) as (keyof KnowledgeConfigForm)[]; form.resetFields(fieldsToReset); } }, [values?.retrieve_type]) return (
{data && (
{data.name}
{t('application.contains', {include_count: data.doc_num})}
{formatDateTime(data.updated_at, 'YYYY-MM-DD HH:mm:ss')}
)}