import React, { useEffect, useCallback, useState } from 'react'; import { Box, TableContainer, Table, Thead, Tbody, Tr, Th, Td, IconButton, Flex, Button, Modal, ModalOverlay, ModalContent, ModalHeader, Checkbox, CheckboxGroup, ModalCloseButton, useDisclosure, Input, Textarea, Stack } from '@chakra-ui/react'; import type { ModelSchema } from '@/types/mongoSchema'; import { ModelDataSchema } from '@/types/mongoSchema'; import { ModelDataStatusMap } from '@/constants/model'; import { usePaging } from '@/hooks/usePaging'; import ScrollData from '@/components/ScrollData'; import { getModelDataList, postModelDataInput, postModelDataSelect, delOneModelData, putModelDataById } from '@/api/model'; import { getDataList } from '@/api/data'; import { DeleteIcon } from '@chakra-ui/icons'; import { useForm, useFieldArray } from 'react-hook-form'; import { useToast } from '@/hooks/useToast'; import { useQuery } from '@tanstack/react-query'; import { customAlphabet } from 'nanoid'; const nanoid = customAlphabet('abcdefghijklmnopqrstuvwxyz1234567890', 12); type FormData = { text: string; q: { val: string }[] }; type TabType = 'input' | 'select'; const defaultValues = { text: '', q: [{ val: '' }] }; const ModelDataCard = ({ model }: { model: ModelSchema }) => { const { nextPage, isLoadAll, requesting, data: modelDataList, total, setData, getData } = usePaging({ api: getModelDataList, pageSize: 20, params: { modelId: model._id } }); const { toast } = useToast(); const { isOpen: isOpenImportModal, onOpen: onOpenImportModal, onClose: onCloseImportModal } = useDisclosure(); const { register, handleSubmit, reset, control } = useForm({ defaultValues }); const { fields: inputQ, append: appendQ, remove: removeQ } = useFieldArray({ control, name: 'q' }); const importDataTypes: { id: TabType; label: string }[] = [ { id: 'input', label: '手动输入' }, { id: 'select', label: '数据集导入' } ]; const [importDataType, setImportDataType] = useState(importDataTypes[0].id); const [importing, setImporting] = useState(false); const updateAnswer = useCallback(async (dataId: string, text: string) => { putModelDataById({ dataId, text }); }, []); const { data: dataList = [] } = useQuery(['getDataList'], getDataList); const [selectDataId, setSelectDataId] = useState([]); const sureImportData = useCallback( async (e: FormData) => { setImporting(true); try { if (importDataType === 'input') { await postModelDataInput({ modelId: model._id, data: [ { text: e.text, q: e.q.map((item) => ({ id: nanoid(), text: item.val })) } ] }); } else if (importDataType === 'select') { const res = await postModelDataSelect(model._id, selectDataId); console.log(res); } toast({ title: '导入数据成功,需要一段时间训练', status: 'success' }); onCloseImportModal(); getData(1, true); reset(defaultValues); } catch (err) { console.log(err); } setImporting(false); }, [getData, importDataType, model._id, onCloseImportModal, reset, toast] ); return ( <> 模型数据: {total}组 {modelDataList.map((item) => ( ))}
Question Text Status
{item.q.map((item, i) => ( Q{i + 1}: {item.text} ))} {ModelDataStatusMap[item.status]} } variant={'outline'} colorScheme={'gray'} aria-label={'delete'} size={'sm'} onClick={async () => { delOneModelData(item._id); setData((state) => state.filter((data) => data._id !== item._id)); }} />
选择数据导入 {importDataTypes.map((item) => ( ))} {importDataType === 'input' && ( <> 知识点: