diff --git a/packages/global/core/dataset/constants.ts b/packages/global/core/dataset/constants.ts index a417ae748..337d1c446 100644 --- a/packages/global/core/dataset/constants.ts +++ b/packages/global/core/dataset/constants.ts @@ -12,17 +12,17 @@ export const DatasetTypeMap = { collectionLabel: 'common.Folder' }, [DatasetTypeEnum.dataset]: { - icon: 'core/dataset/commonDataset', + icon: 'core/dataset/commonDatasetOutline', label: 'common_dataset', collectionLabel: 'common.File' }, [DatasetTypeEnum.websiteDataset]: { - icon: 'core/dataset/websiteDataset', + icon: 'core/dataset/websiteDatasetOutline', label: 'website_dataset', collectionLabel: 'common.Website' }, [DatasetTypeEnum.externalFile]: { - icon: 'core/dataset/externalDataset', + icon: 'core/dataset/externalDatasetOutline', label: 'external_file', collectionLabel: 'common.File' } diff --git a/packages/web/components/common/Icon/constants.ts b/packages/web/components/common/Icon/constants.ts index a94f868d5..32b7d7fe9 100644 --- a/packages/web/components/common/Icon/constants.ts +++ b/packages/web/components/common/Icon/constants.ts @@ -8,6 +8,10 @@ export const iconPaths = { collectionLight: () => import('./icons/collectionLight.svg'), collectionSolid: () => import('./icons/collectionSolid.svg'), 'common/add2': () => import('./icons/common/add2.svg'), + 'common/setting': () => import('./icons/common/setting.svg'), + 'common/addUser': () => import('./icons/common/addUser.svg'), + 'common/monitor': () => import('./icons/common/monitor.svg'), + 'common/list': () => import('./icons/common/list.svg'), 'common/addCircleLight': () => import('./icons/common/addCircleLight.svg'), 'common/addLight': () => import('./icons/common/addLight.svg'), 'common/backFill': () => import('./icons/common/backFill.svg'), @@ -37,8 +41,10 @@ export const iconPaths = { 'common/language/en': () => import('./icons/common/language/en.svg'), 'common/language/zh': () => import('./icons/common/language/zh.svg'), 'common/leftArrowLight': () => import('./icons/common/leftArrowLight.svg'), + 'common/arrowLeft': () => import('./icons/common/arrowLeft.svg'), 'common/lineChange': () => import('./icons/common/lineChange.svg'), 'common/linkBlue': () => import('./icons/common/linkBlue.svg'), + 'common/folderImport': () => import('./icons/common/folderImport.svg'), 'common/loading': () => import('./icons/common/loading.svg'), 'common/logLight': () => import('./icons/common/logLight.svg'), 'common/navbar/pluginFill': () => import('./icons/common/navbar/pluginFill.svg'), diff --git a/packages/web/components/common/Icon/icons/common/addUser.svg b/packages/web/components/common/Icon/icons/common/addUser.svg new file mode 100644 index 000000000..cc5d5a18e --- /dev/null +++ b/packages/web/components/common/Icon/icons/common/addUser.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/packages/web/components/common/Icon/icons/common/arrowLeft.svg b/packages/web/components/common/Icon/icons/common/arrowLeft.svg new file mode 100644 index 000000000..e48bd5d7d --- /dev/null +++ b/packages/web/components/common/Icon/icons/common/arrowLeft.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/web/components/common/Icon/icons/common/folderImport.svg b/packages/web/components/common/Icon/icons/common/folderImport.svg new file mode 100644 index 000000000..a05312cc0 --- /dev/null +++ b/packages/web/components/common/Icon/icons/common/folderImport.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/web/components/common/Icon/icons/common/list.svg b/packages/web/components/common/Icon/icons/common/list.svg new file mode 100644 index 000000000..a4f9d158b --- /dev/null +++ b/packages/web/components/common/Icon/icons/common/list.svg @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/packages/web/components/common/Icon/icons/common/monitor.svg b/packages/web/components/common/Icon/icons/common/monitor.svg new file mode 100644 index 000000000..1479b96db --- /dev/null +++ b/packages/web/components/common/Icon/icons/common/monitor.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/packages/web/components/common/Icon/icons/common/setting.svg b/packages/web/components/common/Icon/icons/common/setting.svg new file mode 100644 index 000000000..ffd6215f9 --- /dev/null +++ b/packages/web/components/common/Icon/icons/common/setting.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/packages/web/components/common/Tabs/LightRowTabs.tsx b/packages/web/components/common/Tabs/LightRowTabs.tsx index 09a1773fd..7395fe5a3 100644 --- a/packages/web/components/common/Tabs/LightRowTabs.tsx +++ b/packages/web/components/common/Tabs/LightRowTabs.tsx @@ -9,6 +9,7 @@ type Props = Omit & { value: ValueType; size?: 'sm' | 'md' | 'lg'; inlineStyles?: FlexProps; + activatedColor?: string; onChange: (value: ValueType) => void; }; @@ -16,6 +17,7 @@ const LightRowTabs = ({ list, size = 'md', value, + activatedColor = 'primary.600', onChange, inlineStyles, ...props @@ -64,13 +66,12 @@ const LightRowTabs = ({ borderBottom={'2px solid transparent'} px={3} whiteSpace={'nowrap'} - {...inlineStyles} {...(value === item.value ? { - color: 'primary.600', + color: activatedColor, cursor: 'default', fontWeight: 'bold', - borderBottomColor: 'primary.600' + borderBottomColor: activatedColor } : { cursor: 'pointer' @@ -79,13 +80,14 @@ const LightRowTabs = ({ if (value === item.value) return; onChange(item.value); }} + {...inlineStyles} > {item.icon && ( <> - + )} - {typeof item.label === 'string' ? t(item.label as any) : item.label} + {typeof item.label === 'string' ? t(item.label as any) : item.label} ))} diff --git a/packages/web/i18n/en/common.json b/packages/web/i18n/en/common.json index 00447dc5c..4c9889e64 100644 --- a/packages/web/i18n/en/common.json +++ b/packages/web/i18n/en/common.json @@ -221,6 +221,7 @@ "Select Avatar": "Click to select avatar", "Select Failed": "Select avatar failed" }, + "base_config": "Basic configuration", "choosable": "Choosable", "confirm": { "Common Tip": "Operation confirmation" @@ -782,7 +783,8 @@ "QA mode": "Question and answer split", "Vector queue": "Index queue", "Waiting": "Estimated 5 minutes", - "Website Sync": "Web site sync" + "Website Sync": "Web site sync", + "tag": "queue situation" }, "website": { "Base Url": "Base URL", diff --git a/packages/web/i18n/zh/common.json b/packages/web/i18n/zh/common.json index 54b800351..aeb8ecdc2 100644 --- a/packages/web/i18n/zh/common.json +++ b/packages/web/i18n/zh/common.json @@ -119,6 +119,7 @@ "Cancel": "取消", "Choose": "选择", "Close": "关闭", + "base_config": "基础配置", "Config": "配置", "Confirm": "确认", "Confirm Create": "确认创建", @@ -638,8 +639,7 @@ "success": "开始同步" } }, - "training": { - } + "training": {} }, "data": { "Auxiliary Data": "辅助数据", @@ -775,6 +775,7 @@ "test result tip": "根据知识库内容与测试文本的相似度进行排序,你可以根据测试结果调整对应的文本。\n注意:测试记录中的数据可能已经被修改过,点击某条测试数据后将展示最新的数据。" }, "training": { + "tag": "排队情况", "Agent queue": "QA 训练排队", "Auto mode": "增强处理(实验)", "Auto mode Tip": "通过子索引以及调用模型生成相关问题与摘要,来增加数据块的语义丰富度,更利于检索。需要消耗更多的存储空间和增加 AI 调用次数。", diff --git a/projects/app/src/components/common/Modal/EditResourceModal.tsx b/projects/app/src/components/common/Modal/EditResourceModal.tsx index 935ef13dc..95aaf218c 100644 --- a/projects/app/src/components/common/Modal/EditResourceModal.tsx +++ b/projects/app/src/components/common/Modal/EditResourceModal.tsx @@ -85,7 +85,7 @@ const EditResourceModal = ({ w={'2rem'} h={'2rem'} cursor={'pointer'} - borderRadius={'md'} + borderRadius={'sm'} onClick={onOpenSelectFile} /> diff --git a/projects/app/src/components/core/dataset/DatasetTypeTag.tsx b/projects/app/src/components/core/dataset/DatasetTypeTag.tsx index 13a76cdea..682ef0952 100644 --- a/projects/app/src/components/core/dataset/DatasetTypeTag.tsx +++ b/projects/app/src/components/core/dataset/DatasetTypeTag.tsx @@ -15,9 +15,10 @@ const DatasetTypeTag = ({ type, ...props }: { type: `${DatasetTypeEnum}` } & Fle bg={'myGray.100'} borderWidth={'1px'} borderColor={'myGray.200'} - px={4} - py={'6px'} - borderRadius={'md'} + px={3} + py={1.5} + h={'1.75rem'} + borderRadius={'sm'} fontSize={'xs'} alignItems={'center'} {...props} diff --git a/projects/app/src/components/support/permission/DefaultPerList/index.tsx b/projects/app/src/components/support/permission/DefaultPerList/index.tsx index c0c284229..60feeb466 100644 --- a/projects/app/src/components/support/permission/DefaultPerList/index.tsx +++ b/projects/app/src/components/support/permission/DefaultPerList/index.tsx @@ -1,4 +1,4 @@ -import { Box, BoxProps } from '@chakra-ui/react'; +import { Box, BoxProps, ButtonProps } from '@chakra-ui/react'; import MySelect from '@fastgpt/web/components/common/MySelect'; import React from 'react'; import type { PermissionValueType } from '@fastgpt/global/support/permission/type'; @@ -20,6 +20,7 @@ type Props = Omit & { writePer?: PermissionValueType; onChange: (v: PermissionValueType) => Promise | any; isInheritPermission?: boolean; + isDisabled?: boolean; hasParent?: boolean; }; @@ -31,6 +32,7 @@ const DefaultPermissionList = ({ onChange, isInheritPermission = false, hasParent, + isDisabled = false, ...styles }: Props) => { const { ConfirmModal, openConfirm } = useConfirm({}); @@ -63,6 +65,8 @@ const DefaultPermissionList = ({ return onRequestChange(per); } }} + isDisabled={isDisabled} + fontSize={styles?.fontSize} /> diff --git a/projects/app/src/pages/dataset/component/MemberManager.tsx b/projects/app/src/pages/dataset/component/MemberManager.tsx index cb392933b..3d61275a7 100644 --- a/projects/app/src/pages/dataset/component/MemberManager.tsx +++ b/projects/app/src/pages/dataset/component/MemberManager.tsx @@ -1,4 +1,4 @@ -import { Box, Button, Flex } from '@chakra-ui/react'; +import { Box, Button, Flex, FormLabel } from '@chakra-ui/react'; import React from 'react'; import CollaboratorContextProvider, { MemberManagerInputPropsType @@ -9,29 +9,38 @@ import { useTranslation } from 'next-i18next'; function MemberManager({ managePer }: { managePer: MemberManagerInputPropsType }) { const { t } = useTranslation(); return ( - + {({ MemberListCard, onOpenManageModal, onOpenAddMember }) => { return ( <> - - - + + {t('common:permission.Collaborator')} + + + + + + + + diff --git a/projects/app/src/pages/dataset/detail/components/CollectionCard/Header.tsx b/projects/app/src/pages/dataset/detail/components/CollectionCard/Header.tsx index 039c4c879..f2e063d88 100644 --- a/projects/app/src/pages/dataset/detail/components/CollectionCard/Header.tsx +++ b/projects/app/src/pages/dataset/detail/components/CollectionCard/Header.tsx @@ -39,6 +39,7 @@ const FileSourceSelector = dynamic(() => import('../Import/components/FileSource const Header = ({}: {}) => { const { t } = useTranslation(); const theme = useTheme(); + const { setLoading, feConfigs } = useSystemStore(); const datasetDetail = useContextSelector(DatasetPageContext, (v) => v.datasetDetail); @@ -110,35 +111,43 @@ const Header = ({}: {}) => { successToast: t('common:common.Create Success'), errorToast: t('common:common.Create Failed') }); + const isWebSite = datasetDetail?.type === DatasetTypeEnum.websiteDataset; return ( - + ({ parentId: path.parentId, parentName: i === paths.length - 1 ? `${path.parentName}` : path.parentName }))} FirstPathDom={ - <> - + + + {!isWebSite && } {t(DatasetTypeMap[datasetDetail?.type]?.collectionLabel as any)}({total}) - + {datasetDetail?.websiteConfig?.url && ( - + {t('common:core.dataset.website.Base Url')}: {datasetDetail.websiteConfig.url} )} - + } onClick={(e) => { router.replace({ @@ -202,18 +211,26 @@ const Header = ({}: {}) => { fontSize={['sm', 'md']} > - - {t('common:dataset.collections.Create And Import')} + + + + + {t('common:dataset.collections.Create And Import')} + } @@ -323,18 +340,26 @@ const Header = ({}: {}) => { fontSize={['sm', 'md']} > - - {t('common:dataset.collections.Create And Import')} + + + + + {t('common:dataset.collections.Create And Import')} + } diff --git a/projects/app/src/pages/dataset/detail/components/CollectionCard/HeaderTagPopOver.tsx b/projects/app/src/pages/dataset/detail/components/CollectionCard/HeaderTagPopOver.tsx index efe6acf84..14d2ad4de 100644 --- a/projects/app/src/pages/dataset/detail/components/CollectionCard/HeaderTagPopOver.tsx +++ b/projects/app/src/pages/dataset/detail/components/CollectionCard/HeaderTagPopOver.tsx @@ -121,7 +121,7 @@ const HeaderTagPopOver = () => { setSearchTag(e.target.value)} diff --git a/projects/app/src/pages/dataset/detail/components/CollectionCard/TagManageModal.tsx b/projects/app/src/pages/dataset/detail/components/CollectionCard/TagManageModal.tsx index 05de61fff..fa607c7a8 100644 --- a/projects/app/src/pages/dataset/detail/components/CollectionCard/TagManageModal.tsx +++ b/projects/app/src/pages/dataset/detail/components/CollectionCard/TagManageModal.tsx @@ -246,7 +246,7 @@ const TagManageModal = ({ onClose }: { onClose: () => void }) => { flex={'1'} _hover={{ bg: 'myGray.100' }} alignItems={'center'} - borderRadius={'4px'} + borderRadius={'xs'} > void }) => { bg={'#DBF3FF'} color={'#0884DD'} fontSize={'xs'} - borderRadius={'6px'} + borderRadius={'sm'} > {item.tag} @@ -299,7 +299,7 @@ const TagManageModal = ({ onClose }: { onClose: () => void }) => { _hover={{ bg: '#1118240D' }} mr={2} p={1} - borderRadius={'6px'} + borderRadius={'sm'} onClick={() => { setCurrentAddTag({ ...item, collections }); }} @@ -313,7 +313,7 @@ const TagManageModal = ({ onClose }: { onClose: () => void }) => { _hover={{ bg: '#1118240D' }} mr={2} p={1} - borderRadius={'6px'} + borderRadius={'sm'} cursor={'pointer'} onClick={(e) => { setCurrentEditTag(item); @@ -332,7 +332,7 @@ const TagManageModal = ({ onClose }: { onClose: () => void }) => { display="none" _hover={{ bg: '#1118240D' }} p={1} - borderRadius={'6px'} + borderRadius={'sm'} cursor={'pointer'} > @@ -441,7 +441,7 @@ const AddTagToCollections = ({ bg={'#DBF3FF'} color={'#0884DD'} fontSize={'sm'} - borderRadius={'6px'} + borderRadius={'sm'} > {currentAddTag.tag} @@ -496,7 +496,7 @@ const AddTagToCollections = ({ : {}) }} alignItems={'center'} - borderRadius={'4px'} + borderRadius={'xs'} key={collection.id} cursor={'pointer'} onClick={() => { @@ -525,7 +525,7 @@ const AddTagToCollections = ({ isChecked={selectedCollections.includes(collection.id)} /> - + {collection.name} diff --git a/projects/app/src/pages/dataset/detail/components/CollectionCard/TagsPopOver.tsx b/projects/app/src/pages/dataset/detail/components/CollectionCard/TagsPopOver.tsx index 97662481a..08eaba0f8 100644 --- a/projects/app/src/pages/dataset/detail/components/CollectionCard/TagsPopOver.tsx +++ b/projects/app/src/pages/dataset/detail/components/CollectionCard/TagsPopOver.tsx @@ -161,7 +161,7 @@ const TagsPopOver = ({ fontWeight={'500'} bg={'#F0FBFF'} color={'#0884DD'} - borderRadius={'4px'} + borderRadius={'xs'} > {item.tag} @@ -197,7 +197,7 @@ const TagsPopOver = ({ onBlur={() => setIsFocusInput(false)} pl={2} h={7} - borderRadius={'4px'} + borderRadius={'xs'} value={searchTag} placeholder={t('dataset:tag.searchOrAddTag')} onChange={(e) => setSearchTag(e.target.value)} @@ -217,7 +217,7 @@ const TagsPopOver = ({ // setCheckedTags([...checkedTags, item]); }} > - + {t('dataset:tag.add') + ` "${searchTag}"`} @@ -277,7 +277,7 @@ const TagsPopOver = ({ fontSize={'11px'} bg={'#F0FBFF'} color={'#0884DD'} - borderRadius={'4px'} + borderRadius={'xs'} > {tag.tag} diff --git a/projects/app/src/pages/dataset/detail/components/CollectionCard/index.tsx b/projects/app/src/pages/dataset/detail/components/CollectionCard/index.tsx index e73a1170a..6a93416d0 100644 --- a/projects/app/src/pages/dataset/detail/components/CollectionCard/index.tsx +++ b/projects/app/src/pages/dataset/detail/components/CollectionCard/index.tsx @@ -186,12 +186,12 @@ const CollectionCard = () => { return ( - + {/* header */}
{/* collection table */} - + diff --git a/projects/app/src/pages/dataset/detail/components/DataCard.tsx b/projects/app/src/pages/dataset/detail/components/DataCard.tsx index ecacdca77..93deb5ea2 100644 --- a/projects/app/src/pages/dataset/detail/components/DataCard.tsx +++ b/projects/app/src/pages/dataset/detail/components/DataCard.tsx @@ -7,12 +7,6 @@ import { Grid, Button, useTheme, - Drawer, - DrawerBody, - DrawerFooter, - DrawerHeader, - DrawerOverlay, - DrawerContent, useDisclosure, HStack } from '@chakra-ui/react'; @@ -52,6 +46,8 @@ import MyBox from '@fastgpt/web/components/common/MyBox'; import { useSystem } from '@fastgpt/web/hooks/useSystem'; import TagsPopOver from './CollectionCard/TagsPopOver'; import { useSystemStore } from '@/web/common/system/useSystemStore'; +import MyDivider from '@fastgpt/web/components/common/MyDivider'; +import index from '../../../index'; const DataCard = () => { const BoxRef = useRef(null); @@ -67,7 +63,6 @@ const DataCard = () => { const { feConfigs } = useSystemStore(); const { t } = useTranslation(); - const { datasetT } = useI18n(); const [searchText, setSearchText] = useState(''); const { toast } = useToast(); const { openConfirm, ConfirmModal } = useConfirm({ @@ -132,66 +127,6 @@ const DataCard = () => { const canWrite = useMemo(() => datasetDetail.permission.hasWritePer, [datasetDetail]); - const metadataList = useMemo(() => { - if (!collection) return []; - - const webSelector = - collection?.datasetId?.websiteConfig?.selector || collection?.metadata?.webPageSelector; - - return [ - { - label: t('common:core.dataset.collection.metadata.source'), - value: t(DatasetCollectionTypeMap[collection.type]?.name as any) - }, - { - label: t('common:core.dataset.collection.metadata.source name'), - value: collection.file?.filename || collection?.rawLink || collection?.name - }, - { - label: t('common:core.dataset.collection.metadata.source size'), - value: collection.file ? formatFileSize(collection.file.length) : '-' - }, - { - label: t('common:core.dataset.collection.metadata.Createtime'), - value: formatTime2YMDHM(collection.createTime) - }, - { - label: t('common:core.dataset.collection.metadata.Updatetime'), - value: formatTime2YMDHM(collection.updateTime) - }, - { - label: t('common:core.dataset.collection.metadata.Raw text length'), - value: collection.rawTextLength ?? '-' - }, - { - label: t('common:core.dataset.collection.metadata.Training Type'), - value: t(TrainingTypeMap[collection.trainingType]?.label as any) - }, - { - label: t('common:core.dataset.collection.metadata.Chunk Size'), - value: collection.chunkSize || '-' - }, - ...(webSelector - ? [ - { - label: t('common:core.dataset.collection.metadata.Web page selector'), - value: webSelector - } - ] - : []), - { - ...(collection.tags - ? [ - { - label: datasetT('collection_tags'), - value: collection.tags?.join(', ') || '-' - } - ] - : []) - } - ]; - }, [collection, datasetT, t]); - const { run: onUpdate, loading } = useRequest2(putDatasetDataById, { onSuccess() { getData(pageNum); @@ -205,23 +140,6 @@ const DataCard = () => { {/* Header */} - } - variant={'whitePrimary'} - size={'smSquare'} - borderRadius={'50%'} - aria-label={''} - onClick={() => - router.replace({ - query: { - datasetId: router.query.datasetId, - parentId: router.query.parentId, - currentTab: TabEnum.collectionCard - } - }) - } - /> @@ -234,12 +152,6 @@ const DataCard = () => { textDecoration={'none'} /> )} - - {t('common:core.dataset.collection.id')}:{' '} - - {collection?._id} - - {feConfigs?.isPlus && !!collection?.tags?.length && ( @@ -250,7 +162,6 @@ const DataCard = () => { )} - {isPc && ( - - } - aria-label={''} - onClick={onOpen} - /> - - )} - - - + + + + + + + {t('core.dataset.data.Total Amount', { total })} - + { name="common/searchLight" position={'absolute'} w={'14px'} - color={'myGray.500'} + color={'myGray.600'} /> } + bg={'myGray.25'} + borderColor={'myGray.200'} + color={'myGray.500'} w={['200px', '300px']} placeholder={t('common:core.dataset.data.Search data placeholder')} value={searchText} @@ -300,45 +207,59 @@ const DataCard = () => { {/* data */} - - {datasetDataList.map((item) => ( + + {datasetDataList.map((item, index) => ( { if (!collection) return; setEditDataId(item._id); }} > - - # {item.chunkIndex ?? '-'} - - + - ID:{item._id} - + #{item.chunkIndex ?? '-'} + + ID:{item._id} + + + {/* {item.forbid ? ( {datasetT('Disabled')} @@ -390,54 +311,69 @@ const DataCard = () => { - - - - {item.q.length + (item.a?.length || 0)} - - - {/* - ID:{item._id} - */} - {canWrite && ( - } - variant={'whiteDanger'} - size={'xsSquare'} - aria-label={'delete'} - onClick={(e) => { - e.stopPropagation(); - openConfirm(async () => { - try { - await delOneDatasetDataById(item._id); - getData(pageNum); - } catch (error) { - toast({ - title: getErrText(error), - status: 'error' - }); - } - })(); - }} - /> - )} - + + + {item.q.length + (item.a?.length || 0)} + + {canWrite && ( + } + variant={'whiteDanger'} + size={'xsSquare'} + aria-label={'delete'} + onClick={(e) => { + e.stopPropagation(); + openConfirm(async () => { + try { + await delOneDatasetDataById(item._id); + getData(pageNum); + } catch (error) { + toast({ + title: getErrText(error), + status: 'error' + }); + } + })(); + }} + /> + )} ))} - + {total > pageSize && ( @@ -447,38 +383,6 @@ const DataCard = () => { - {/* metadata drawer */} - - - - - {t('common:core.dataset.collection.metadata.metadata')} - - - - {metadataList.map((item, i) => ( - - - {item.label} - - {item.value} - - ))} - {collection?.sourceId && ( - - )} - - - - - - - - {editDataId !== undefined && collection && ( {feConfigs?.show_pay && ( - + {priceTip} diff --git a/projects/app/src/pages/dataset/detail/components/Info.tsx b/projects/app/src/pages/dataset/detail/components/Info.tsx index ff9a381b2..2cfd3b2df 100644 --- a/projects/app/src/pages/dataset/detail/components/Info.tsx +++ b/projects/app/src/pages/dataset/detail/components/Info.tsx @@ -1,4 +1,4 @@ -import React from 'react'; +import React, { useState } from 'react'; import { useRouter } from 'next/router'; import { Box, Flex, Button, IconButton, Input, Textarea, HStack } from '@chakra-ui/react'; import { DeleteIcon } from '@chakra-ui/icons'; @@ -16,15 +16,15 @@ import { useRequest } from '@fastgpt/web/hooks/useRequest'; import { MongoImageTypeEnum } from '@fastgpt/global/common/file/image/constants'; import AIModelSelector from '@/components/Select/AIModelSelector'; import { postRebuildEmbedding } from '@/web/core/dataset/api'; -import { useI18n } from '@/web/context/I18n'; import type { VectorModelItemType } from '@fastgpt/global/core/ai/model.d'; import { useContextSelector } from 'use-context-selector'; import { DatasetPageContext } from '@/web/core/dataset/context/datasetPageContext'; import MyDivider from '@fastgpt/web/components/common/MyDivider/index'; -import { DatasetTypeEnum } from '@fastgpt/global/core/dataset/constants'; +import { DatasetTypeEnum, DatasetTypeMap } from '@fastgpt/global/core/dataset/constants'; import QuestionTip from '@fastgpt/web/components/common/MyTooltip/QuestionTip'; import FormLabel from '@fastgpt/web/components/common/MyBox/FormLabel'; import DefaultPermissionList from '@/components/support/permission/DefaultPerList'; +import MyIcon from '@fastgpt/web/components/common/Icon'; import { DatasetDefaultPermissionVal, DatasetPermissionList @@ -35,18 +35,23 @@ import { postUpdateDatasetCollaborators, deleteDatasetCollaborators } from '@/web/core/dataset/api/collaborator'; +import DatasetTypeTag from '@/components/core/dataset/DatasetTypeTag'; +import dynamic from 'next/dynamic'; +import { EditResourceInfoFormType } from '@/components/common/Modal/EditResourceModal'; +const EditResourceModal = dynamic(() => import('@/components/common/Modal/EditResourceModal')); const Info = ({ datasetId }: { datasetId: string }) => { + const router = useRouter(); + const [openBaseConfig, setOpenBaseConfig] = useState(true); + const [openPermissionConfig, setOpenPermissionConfig] = useState(true); const { t } = useTranslation(); - const { datasetT, commonT } = useI18n(); const { datasetDetail, loadDatasetDetail, updateDataset, rebuildingCount, trainingCount } = useContextSelector(DatasetPageContext, (v) => v); - + const [editedDataset, setEditedDataset] = useState(); const refetchDatasetTraining = useContextSelector( DatasetPageContext, (v) => v.refetchDatasetTraining ); - const { setValue, register, handleSubmit, watch } = useForm({ defaultValues: datasetDetail }); @@ -57,16 +62,13 @@ const Info = ({ datasetId }: { datasetId: string }) => { const defaultPermission = watch('defaultPermission'); const { datasetModelList, vectorModelList } = useSystemStore(); - - const router = useRouter(); - const { openConfirm: onOpenConfirmDel, ConfirmModal: ConfirmDelModal } = useConfirm({ content: t('common:core.dataset.Delete Confirm'), type: 'delete' }); const { openConfirm: onOpenConfirmRebuild, ConfirmModal: ConfirmRebuildModal } = useConfirm({ title: t('common:common.confirm.Common Tip'), - content: datasetT('confirm_to_rebuild_embedding_tip'), + content: t('dataset:confirm_to_rebuild_embedding_tip'), type: 'delete' }); @@ -87,13 +89,10 @@ const Info = ({ datasetId }: { datasetId: string }) => { errorToast: t('common:common.Delete Failed') }); - const { mutate: onclickSave, isLoading: isSaving } = useRequest({ + const { mutate: onSave, isLoading: isSaving } = useRequest({ mutationFn: (data: DatasetItemType) => { return updateDataset({ id: datasetId, - name: data.name, - avatar: data.avatar, - intro: data.intro, agentModel: data.agentModel, externalReadUrl: data.externalReadUrl, defaultPermission: data.defaultPermission @@ -133,156 +132,191 @@ const Info = ({ datasetId }: { datasetId: string }) => { refetchDatasetTraining(); loadDatasetDetail(datasetId); }, - successToast: datasetT('rebuild_embedding_start_tip'), + successToast: t('dataset:rebuild_embedding_start_tip'), errorToast: t('common:common.Update Failed') }); - const btnLoading = isSelecting || isDeleting || isSaving || isRebuilding; + const totalLoading = isSelecting || isDeleting || isSaving || isRebuilding; return ( - - - - {t('common:core.dataset.Dataset ID')} - - {datasetDetail._id} - - - - {t('common:core.ai.model.Vector Model')} - - - - 0 || trainingCount > 0 - ? datasetT('the_knowledge_base_has_indexes_that_are_being_trained_or_being_rebuilt') - : undefined + + + + + + + {datasetDetail.name} + + + + setEditedDataset({ + id: datasetDetail._id, + name: datasetDetail.name, + avatar: datasetDetail.avatar, + intro: datasetDetail.intro + }) } - list={vectorModelList.map((item) => ({ - label: item.name, - value: item.model - }))} - onchange={(e) => { - const vectorModel = vectorModelList.find((item) => item.model === e); - if (!vectorModel) return; - onOpenConfirmRebuild(() => { - setValue('vectorModel', vectorModel); - onRebuilding(vectorModel); - })(); - }} /> - - - - - {t('common:core.Max Token')} - - {vectorModel.maxToken} - - - - {t('common: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); - }} - /> - - - - - - {datasetDetail.type === DatasetTypeEnum.externalFile && ( - <> - - - {datasetT('external_read_url')} - - - + + {DatasetTypeMap[datasetDetail.type] && ( + + - - - )} - - - - {t('common:core.dataset.Avatar')} - - - - - + )} + + {datasetDetail.intro || t('common:core.dataset.Intro Placeholder')} - - - - {t('common:core.dataset.Name')} - - - - - {t('common:common.Intro')} -