import React, { useState, useCallback } from 'react'; import { Box, Flex, Button, Modal, ModalOverlay, ModalContent, ModalHeader, ModalCloseButton, Textarea } from '@chakra-ui/react'; import { useForm } from 'react-hook-form'; import { postKbDataFromList, putKbDataById } from '@/api/plugins/kb'; import { useToast } from '@/hooks/useToast'; import { TrainingModeEnum } from '@/constants/plugin'; import { getErrText } from '@/utils/tools'; export type FormData = { dataId?: string; a: string; q: string }; const InputDataModal = ({ onClose, onSuccess, kbId, defaultValues = { a: '', q: '' } }: { onClose: () => void; onSuccess: () => void; kbId: string; defaultValues?: FormData; }) => { const [loading, setLoading] = useState(false); const { toast } = useToast(); const { register, handleSubmit, reset } = useForm({ defaultValues }); /** * 确认导入新数据 */ const sureImportData = useCallback( async (e: FormData) => { if (e.a.length + e.q.length >= 3000) { toast({ title: '总长度超长了', status: 'warning' }); return; } setLoading(true); try { const { insertLen } = await postKbDataFromList({ kbId, mode: TrainingModeEnum.index, data: [ { a: e.a, q: e.q, source: '手动录入' } ] }); if (insertLen === 0) { toast({ title: '已存在完全一致的数据', status: 'warning' }); } else { toast({ title: '导入数据成功,需要一段时间训练', status: 'success' }); reset({ a: '', q: '' }); } onSuccess(); } catch (err: any) { toast({ title: getErrText(err, '出现了点意外~'), status: 'error' }); } setLoading(false); }, [kbId, onSuccess, reset, toast] ); const updateData = useCallback( async (e: FormData) => { if (!e.dataId) return; if (e.a !== defaultValues.a || e.q !== defaultValues.q) { setLoading(true); try { await putKbDataById({ dataId: e.dataId, a: e.a, q: e.q === defaultValues.q ? '' : e.q }); onSuccess(); } catch (error) {} setLoading(false); } toast({ title: '修改数据成功', status: 'success' }); onClose(); }, [defaultValues, onClose, onSuccess, toast] ); return ( {defaultValues.dataId ? '变更数据' : '手动导入数据'} {'匹配的知识点'}