import React, { useState, useMemo } from 'react'; import { useRouter } from 'next/router'; import { Box, Flex, Button, IconButton, Input, Textarea } from '@chakra-ui/react'; import { DeleteIcon } from '@chakra-ui/icons'; import { delDatasetById } from '@/web/core/dataset/api'; import { useSelectFile } from '@/web/common/file/hooks/useSelectFile'; import { useDatasetStore } from '@/web/core/dataset/store/dataset'; import { useConfirm } from '@/web/common/hooks/useConfirm'; import { useForm } from 'react-hook-form'; import { compressImgFileAndUpload } from '@/web/common/file/controller'; import type { DatasetItemType } from '@fastgpt/global/core/dataset/type.d'; import Avatar from '@/components/Avatar'; import MyTooltip from '@/components/MyTooltip'; import { useTranslation } from 'next-i18next'; import PermissionRadio from '@/components/support/permission/Radio'; import { useSystemStore } from '@/web/common/system/useSystemStore'; import { useRequest } from '@/web/common/hooks/useRequest'; import { MongoImageTypeEnum } from '@fastgpt/global/common/file/image/constants'; import MySelect from '@fastgpt/web/components/common/MySelect'; import AIModelSelector from '@/components/Select/AIModelSelector'; const Info = ({ datasetId }: { datasetId: string }) => { const { t } = useTranslation(); const { datasetDetail, loadDatasets, updateDataset } = useDatasetStore(); const { getValues, setValue, register, handleSubmit } = useForm({ defaultValues: datasetDetail }); const { datasetModelList, vectorModelList } = useSystemStore(); const router = useRouter(); const [refresh, setRefresh] = useState(false); const { openConfirm, ConfirmModal } = useConfirm({ content: t('core.dataset.Delete Confirm'), type: 'delete' }); const { File, onOpen: onOpenSelectFile } = useSelectFile({ fileType: '.jpg,.png', multiple: false }); /* 点击删除 */ const { mutate: onclickDelete, isLoading: isDeleting } = useRequest({ mutationFn: () => { return delDatasetById(datasetId); }, onSuccess() { router.replace(`/dataset/list`); }, successToast: t('common.Delete Success'), errorToast: t('common.Delete Failed') }); const { mutate: onclickSave, isLoading: isSaving } = useRequest({ mutationFn: (data: DatasetItemType) => { return updateDataset({ id: datasetId, ...data }); }, onSuccess() { loadDatasets(); }, successToast: t('common.Update Success'), errorToast: t('common.Update Failed') }); const { mutate: onSelectFile, isLoading: isSelecting } = useRequest({ mutationFn: (e: File[]) => { const file = e[0]; if (!file) return Promise.resolve(null); return compressImgFileAndUpload({ type: MongoImageTypeEnum.datasetAvatar, file, maxW: 300, maxH: 300 }); }, onSuccess(src: string | null) { if (src) { setValue('avatar', src); setRefresh((state) => !state); } }, errorToast: t('common.avatar.Select Failed') }); const btnLoading = useMemo(() => isDeleting || isSaving, [isDeleting, isSaving]); return ( {t('core.dataset.Dataset ID')} {datasetDetail._id} {t('core.dataset.Avatar')} {t('core.dataset.Name')} {t('core.ai.model.Vector Model')} {getValues('vectorModel').name} {t('core.Max Token')} {getValues('vectorModel').maxToken} {t('core.ai.model.Dataset Agent Model')} ({ label: item.name, value: item.model }))} onchange={(e) => { const agentModel = datasetModelList.find((item) => item.model === e); if (!agentModel) return; setValue('agentModel', agentModel); setRefresh((state) => !state); }} /> {t('common.Intro')}