diff --git a/packages/web/components/common/Icon/constants.ts b/packages/web/components/common/Icon/constants.ts
index 90dc9e790..f89af800c 100644
--- a/packages/web/components/common/Icon/constants.ts
+++ b/packages/web/components/common/Icon/constants.ts
@@ -128,9 +128,12 @@ export const iconPaths = {
'core/chat/speaking': () => import('./icons/core/chat/speaking.svg'),
'core/chat/stopSpeech': () => import('./icons/core/chat/stopSpeech.svg'),
'core/dataset/commonDataset': () => import('./icons/core/dataset/commonDataset.svg'),
+ 'core/dataset/commonDatasetColor': () => import('./icons/core/dataset/commonDatasetColor.svg'),
'core/dataset/datasetFill': () => import('./icons/core/dataset/datasetFill.svg'),
'core/dataset/datasetLight': () => import('./icons/core/dataset/datasetLight.svg'),
'core/dataset/externalDataset': () => import('./icons/core/dataset/externalDataset.svg'),
+ 'core/dataset/externalDatasetColor': () =>
+ import('./icons/core/dataset/externalDatasetColor.svg'),
'core/dataset/fileCollection': () => import('./icons/core/dataset/fileCollection.svg'),
'core/dataset/fullTextRecall': () => import('./icons/core/dataset/fullTextRecall.svg'),
'core/dataset/manualCollection': () => import('./icons/core/dataset/manualCollection.svg'),
@@ -141,6 +144,7 @@ export const iconPaths = {
'core/dataset/tableCollection': () => import('./icons/core/dataset/tableCollection.svg'),
'core/dataset/tag': () => import('./icons/core/dataset/tag.svg'),
'core/dataset/websiteDataset': () => import('./icons/core/dataset/websiteDataset.svg'),
+ 'core/dataset/websiteDatasetColor': () => import('./icons/core/dataset/websiteDatasetColor.svg'),
'core/modules/basicNode': () => import('./icons/core/modules/basicNode.svg'),
'core/modules/fixview': () => import('./icons/core/modules/fixview.svg'),
'core/modules/flowLight': () => import('./icons/core/modules/flowLight.svg'),
diff --git a/packages/web/components/common/Icon/icons/core/dataset/commonDatasetColor.svg b/packages/web/components/common/Icon/icons/core/dataset/commonDatasetColor.svg
new file mode 100644
index 000000000..ffcca3a46
--- /dev/null
+++ b/packages/web/components/common/Icon/icons/core/dataset/commonDatasetColor.svg
@@ -0,0 +1,11 @@
+
diff --git a/packages/web/components/common/Icon/icons/core/dataset/externalDatasetColor.svg b/packages/web/components/common/Icon/icons/core/dataset/externalDatasetColor.svg
new file mode 100644
index 000000000..b1276dc27
--- /dev/null
+++ b/packages/web/components/common/Icon/icons/core/dataset/externalDatasetColor.svg
@@ -0,0 +1,10 @@
+
diff --git a/packages/web/components/common/Icon/icons/core/dataset/websiteDatasetColor.svg b/packages/web/components/common/Icon/icons/core/dataset/websiteDatasetColor.svg
new file mode 100644
index 000000000..c3943a6aa
--- /dev/null
+++ b/packages/web/components/common/Icon/icons/core/dataset/websiteDatasetColor.svg
@@ -0,0 +1,10 @@
+
diff --git a/packages/web/i18n/en/common.json b/packages/web/i18n/en/common.json
index 9c8672259..4aa5c41cb 100644
--- a/packages/web/i18n/en/common.json
+++ b/packages/web/i18n/en/common.json
@@ -500,10 +500,12 @@
"logs": {
"api": "API call",
"feishu": "Lark",
+ "official_account": "Official account",
"online": "Online use",
"share": "External link call",
"team": "Team chat",
- "test": "Test"
+ "test": "Test",
+ "wecom": "Enterprise WeChat"
},
"markdown": {
"Edit Question": "Edit question",
@@ -560,7 +562,7 @@
"Avatar": "Dataset avatar",
"Choose Dataset": "Associate dataset",
"Collection": "Dataset",
- "Create dataset": "Create a dataset",
+ "Create dataset": "Create a {{name}}",
"Dataset": "Dataset",
"Dataset ID": "Dataset ID",
"Dataset Type": "Dataset type",
@@ -615,8 +617,7 @@
"success": "Start syncing"
}
},
- "training": {
- }
+ "training": {}
},
"data": {
"Auxiliary Data": "Auxiliary data",
@@ -1029,6 +1030,7 @@
},
"input is empty": "Data content cannot be empty"
},
+ "dataset_name": "Knowledge base name",
"deleteFolderTips": "Confirm to delete this folder and all the datasets it contains? Once deleted, data cannot be recovered. Please confirm!",
"test": {
"noResult": "No results found"
@@ -1316,9 +1318,7 @@
"Sub plan": "Subscription plan",
"Sub plan tip": "Free use of {{title}} or upgrade to a higher plan",
"Team plan and usage": "Plan and usage",
- "web_site_sync": "Website sync",
"Training weight": "Training priority: {{weight}}",
- "rerank": "Rerank",
"Update extra ai points": "Extra AI points",
"Update extra dataset size": "Extra storage",
"Upgrade plan": "Upgrade plan",
@@ -1338,6 +1338,7 @@
"Year sale": "Two months free"
},
"point": "integral",
+ "rerank": "Rerank",
"standardSubLevel": {
"enterprise": "Enterprise edition",
"experience": "Experience edition",
@@ -1351,7 +1352,8 @@
"extraDatasetSize": "Knowledge base expansion",
"extraPoints": "AI points package",
"standard": "Plan subscription"
- }
+ },
+ "web_site_sync": "Website sync"
},
"usage": {
"Ai model": "AI model",
diff --git a/packages/web/i18n/en/publish.json b/packages/web/i18n/en/publish.json
index 11b25fe34..63cb657b1 100644
--- a/packages/web/i18n/en/publish.json
+++ b/packages/web/i18n/en/publish.json
@@ -15,10 +15,15 @@
"key_alias": "key alias, for display only ",
"key_tips": "You can use the API Key to access certain interfaces (you can't access the app, you need to use the API key within the app to access the app)",
"link_name": "Name of the share link",
+ "new_feishu_bot": "Added Feishu robot",
"official_account": {
+ "api": "WeChat public account API",
+ "create_modal_title": "Create a WeChat public account to access",
+ "desc": "Directly access WeChat official account through API",
+ "edit_modal_title": "Edit WeChat public account access",
+ "name": "WeChat public account access",
"params": "Wechat params"
},
- "new_feishu_bot": "Added Feishu robot",
"publish_name": "name",
"qpm_is_empty": "QPM cannot be empty",
"qpm_tips": "How many times per minute can each IP ask at most",
diff --git a/packages/web/i18n/en/user.json b/packages/web/i18n/en/user.json
index 06c254a9e..554ad3a80 100644
--- a/packages/web/i18n/en/user.json
+++ b/packages/web/i18n/en/user.json
@@ -87,6 +87,9 @@
"no_collaborators": "No collaborators yet"
},
"usage": {
- "feishu": "Lark"
+ "feishu": "Lark",
+ "official_account": "Official account",
+ "share": "share link",
+ "wecom": "Enterprise WeChat"
}
}
diff --git a/packages/web/i18n/zh/common.json b/packages/web/i18n/zh/common.json
index ecb84b257..0155c8e0d 100644
--- a/packages/web/i18n/zh/common.json
+++ b/packages/web/i18n/zh/common.json
@@ -565,7 +565,7 @@
"Avatar": "知识库头像",
"Choose Dataset": "关联知识库",
"Collection": "数据集",
- "Create dataset": "创建一个知识库",
+ "Create dataset": "创建一个{{name}}",
"Dataset": "知识库",
"Dataset ID": "知识库 ID",
"Dataset Type": "知识库类型",
@@ -996,6 +996,7 @@
"Edit Folder": "编辑文件夹",
"Edit Info": "编辑信息",
"Export": "导出",
+ "dataset_name": "知识库名称",
"Export Dataset Limit Error": "导出数据失败",
"Folder Name": "输入文件夹名称",
"Insert Data": "插入",
diff --git a/projects/app/src/pages/dataset/list/component/CreateModal.tsx b/projects/app/src/pages/dataset/list/component/CreateModal.tsx
index 2bac50384..9a38921f4 100644
--- a/projects/app/src/pages/dataset/list/component/CreateModal.tsx
+++ b/projects/app/src/pages/dataset/list/component/CreateModal.tsx
@@ -1,4 +1,4 @@
-import React, { useCallback } from 'react';
+import React, { useCallback, useMemo } from 'react';
import { Box, Flex, Button, ModalFooter, ModalBody, Input } from '@chakra-ui/react';
import { useSelectFile } from '@/web/common/file/hooks/useSelectFile';
import { useForm } from 'react-hook-form';
@@ -14,29 +14,56 @@ import MyModal from '@fastgpt/web/components/common/MyModal';
import { postCreateDataset } from '@/web/core/dataset/api';
import type { CreateDatasetParams } from '@/global/core/dataset/api.d';
import { useTranslation } from 'next-i18next';
-import MyRadio from '@/components/common/MyRadio';
import { DatasetTypeEnum } from '@fastgpt/global/core/dataset/constants';
import { MongoImageTypeEnum } from '@fastgpt/global/common/file/image/constants';
import AIModelSelector from '@/components/Select/AIModelSelector';
-import { useI18n } from '@/web/context/I18n';
+
import QuestionTip from '@fastgpt/web/components/common/MyTooltip/QuestionTip';
import { useSystem } from '@fastgpt/web/hooks/useSystem';
-const CreateModal = ({ onClose, parentId }: { onClose: () => void; parentId?: string }) => {
+export type CreateDatasetType =
+ | DatasetTypeEnum.dataset
+ | DatasetTypeEnum.externalFile
+ | DatasetTypeEnum.websiteDataset;
+
+const CreateModal = ({
+ onClose,
+ parentId,
+ type
+}: {
+ onClose: () => void;
+ parentId?: string;
+ type: CreateDatasetType;
+}) => {
const { t } = useTranslation();
- const { datasetT } = useI18n();
const { toast } = useToast();
const router = useRouter();
- const { feConfigs, vectorModelList, datasetModelList } = useSystemStore();
+ const { vectorModelList, datasetModelList } = useSystemStore();
const { isPc } = useSystem();
+ const databaseNameMap = useMemo(() => {
+ return {
+ [DatasetTypeEnum.dataset]: t('dataset:common_dataset'),
+ [DatasetTypeEnum.externalFile]: t('dataset:external_file'),
+ [DatasetTypeEnum.websiteDataset]: t('dataset:website_dataset')
+ };
+ }, [t]);
+
+ const iconMap = useMemo(() => {
+ return {
+ [DatasetTypeEnum.dataset]: 'core/dataset/commonDatasetColor',
+ [DatasetTypeEnum.externalFile]: 'core/dataset/externalDatasetColor',
+ [DatasetTypeEnum.websiteDataset]: 'core/dataset/websiteDatasetColor'
+ };
+ }, []);
+
const filterNotHiddenVectorModelList = vectorModelList.filter((item) => !item.hidden);
const { register, setValue, handleSubmit, watch } = useForm({
defaultValues: {
parentId,
- type: DatasetTypeEnum.dataset,
- avatar: '/icon/logo.svg',
+ type: type || DatasetTypeEnum.dataset,
+ avatar: iconMap[type] || 'core/dataset/commonDatasetColor',
name: '',
intro: '',
vectorModel: filterNotHiddenVectorModelList[0].model,
@@ -44,7 +71,6 @@ const CreateModal = ({ onClose, parentId }: { onClose: () => void; parentId?: st
}
});
const avatar = watch('avatar');
- const datasetType = watch('type');
const vectorModel = watch('vectorModel');
const agentModel = watch('agentModel');
@@ -88,63 +114,16 @@ const CreateModal = ({ onClose, parentId }: { onClose: () => void; parentId?: st
}
});
- const onSelectDatasetType = useCallback(
- (e: DatasetTypeEnum) => {
- if (
- !feConfigs?.isPlus &&
- (e === DatasetTypeEnum.websiteDataset || e === DatasetTypeEnum.externalFile)
- ) {
- return toast({
- status: 'warning',
- title: t('common:common.system.Commercial version function')
- });
- }
- setValue('type', e);
- },
- [feConfigs?.isPlus, setValue, t, toast]
- );
-
return (
- <>
-
- {t('common:core.dataset.Dataset Type')}
-
-
- >
{t('common:common.Set Name')}
diff --git a/projects/app/src/pages/dataset/list/component/List.tsx b/projects/app/src/pages/dataset/list/component/List.tsx
index 4b1e26684..ce348fbb3 100644
--- a/projects/app/src/pages/dataset/list/component/List.tsx
+++ b/projects/app/src/pages/dataset/list/component/List.tsx
@@ -49,7 +49,8 @@ function List() {
setEditedDataset,
onDelDataset,
onUpdateDataset,
- myDatasets
+ myDatasets,
+ folderDetail
} = useContextSelector(DatasetsContext, (v) => v);
const [editPerDatasetIndex, setEditPerDatasetIndex] = useState();
const [loadingDatasetId, setLoadingDatasetId] = useState();
@@ -142,11 +143,14 @@ function List() {
<>
{formatDatasets.length > 0 && (
{formatDatasets.map((dataset, index) => (
void;
onDelDataset: (id: string) => Promise;
onUpdateDataset: (data: DatasetUpdateBody) => Promise;
+ searchKey: string;
+ setSearchKey: React.Dispatch>;
};
export const DatasetsContext = createContext({
@@ -57,7 +59,11 @@ export const DatasetsContext = createContext({
onUpdateDataset: function (_data: DatasetUpdateBody): Promise {
throw new Error('Function not implemented.');
},
- myDatasets: []
+ myDatasets: [],
+ searchKey: '',
+ setSearchKey: function (value: React.SetStateAction): void {
+ throw new Error('Function not implemented.');
+ }
});
function DatasetContextProvider({ children }: { children: React.ReactNode }) {
@@ -65,7 +71,7 @@ function DatasetContextProvider({ children }: { children: React.ReactNode }) {
const { commonT } = useI18n();
const { t } = useTranslation();
const [moveDatasetId, setMoveDatasetId] = useState();
-
+ const [searchKey, setSearchKey] = useState('');
const { parentId = null } = router.query as { parentId?: string | null };
const {
@@ -75,11 +81,12 @@ function DatasetContextProvider({ children }: { children: React.ReactNode }) {
} = useRequest2(
() =>
getDatasets({
+ searchKey,
parentId
}),
{
manual: false,
- refreshDeps: [parentId]
+ refreshDeps: [parentId, searchKey]
}
);
@@ -145,7 +152,9 @@ function DatasetContextProvider({ children }: { children: React.ReactNode }) {
onDelDataset,
onUpdateDataset,
myDatasets,
- loadMyDatasets
+ loadMyDatasets,
+ searchKey,
+ setSearchKey
};
return (
diff --git a/projects/app/src/pages/dataset/list/index.tsx b/projects/app/src/pages/dataset/list/index.tsx
index cf2efd48e..69b17e481 100644
--- a/projects/app/src/pages/dataset/list/index.tsx
+++ b/projects/app/src/pages/dataset/list/index.tsx
@@ -1,5 +1,14 @@
-import React, { useState } from 'react';
-import { Box, Flex, Image, Button, useDisclosure } from '@chakra-ui/react';
+import React, { useCallback, useMemo, useState } from 'react';
+import {
+ Box,
+ Flex,
+ Image,
+ Button,
+ useDisclosure,
+ InputGroup,
+ InputLeftElement,
+ Input
+} from '@chakra-ui/react';
import { useRouter } from 'next/router';
import PageContainer from '@/components/PageContainer';
import { useTranslation } from 'next-i18next';
@@ -28,6 +37,10 @@ import {
getCollaboratorList
} from '@/web/core/dataset/api/collaborator';
import { useSystem } from '@fastgpt/web/hooks/useSystem';
+import { CreateDatasetType } from './component/CreateModal';
+import { DatasetTypeEnum } from '@fastgpt/global/core/dataset/constants';
+import { useToast } from '@fastgpt/web/hooks/useToast';
+import MyBox from '@fastgpt/web/components/common/MyBox';
const EditFolderModal = dynamic(
() => import('@fastgpt/web/components/common/MyModal/EditFolderModal')
@@ -52,32 +65,62 @@ const Dataset = () => {
setEditedDataset,
setMoveDatasetId,
onDelDataset,
- onUpdateDataset
+ onUpdateDataset,
+ searchKey,
+ setSearchKey
} = useContextSelector(DatasetsContext, (v) => v);
const { userInfo } = useUserStore();
-
+ const { toast } = useToast();
const [editFolderData, setEditFolderData] = useState();
+ const [createDatasetType, setCreateDatasetType] = useState();
- const {
- isOpen: isOpenCreateModal,
- onOpen: onOpenCreateModal,
- onClose: onCloseCreateModal
- } = useDisclosure();
+ const onSelectDatasetType = useCallback(
+ (e: CreateDatasetType) => {
+ if (
+ !feConfigs?.isPlus &&
+ (e === DatasetTypeEnum.websiteDataset || e === DatasetTypeEnum.externalFile)
+ ) {
+ return toast({
+ status: 'warning',
+ title: t('common:common.system.Commercial version function')
+ });
+ }
+ setCreateDatasetType(e);
+ },
+ [t, toast]
+ );
+ const RenderSearchInput = useMemo(
+ () => (
+
+
+
+
+ setSearchKey(e.target.value)}
+ placeholder={t('common:dataset.dataset_name')}
+ maxLength={30}
+ bg={'white'}
+ />
+
+ ),
+ [searchKey, setSearchKey, t]
+ );
return (
-
-
+
-
-
+
{t('common:core.dataset.My Dataset')}
@@ -90,10 +133,14 @@ const Dataset = () => {
});
}}
/>
+
+ {isPc && RenderSearchInput}
+
{userInfo?.team?.permission.hasWritePer && (
@@ -106,22 +153,31 @@ const Dataset = () => {
{
children: [
{
- label: (
-
-
- {t('common:Folder')}
-
- ),
- onClick: () => setEditFolderData({})
+ icon: 'core/dataset/commonDatasetColor',
+ label: t('dataset:common_dataset'),
+ description: t('dataset:common_dataset_desc'),
+ onClick: () => setCreateDatasetType(DatasetTypeEnum.dataset)
},
{
- label: (
-
-
- {t('common:core.dataset.Dataset')}
-
- ),
- onClick: onOpenCreateModal
+ icon: 'core/dataset/websiteDatasetColor',
+ label: t('dataset:website_dataset'),
+ description: t('dataset:website_dataset_desc'),
+ onClick: () => setCreateDatasetType(DatasetTypeEnum.websiteDataset)
+ },
+ {
+ icon: 'core/dataset/externalDatasetColor',
+ label: t('dataset:external_file'),
+ description: t('dataset:external_file_dataset_desc'),
+ onClick: () => setCreateDatasetType(DatasetTypeEnum.externalFile)
+ }
+ ]
+ },
+ {
+ children: [
+ {
+ icon: FolderIcon,
+ label: t('common:Folder'),
+ onClick: () => setEditFolderData({})
}
]
}
@@ -129,6 +185,9 @@ const Dataset = () => {
/>
)}
+
+ {!isPc && {RenderSearchInput}}
+
@@ -231,13 +290,16 @@ const Dataset = () => {
}}
/>
)}
- {isOpenCreateModal && (
-
+ {createDatasetType && (
+ setCreateDatasetType(undefined)}
+ parentId={parentId || undefined}
+ />
)}
-
+
);
};
-
export async function getServerSideProps(content: any) {
return {
props: {