From b610ee0a8fbf2e5dc8d21911371d4e22e4e71fa9 Mon Sep 17 00:00:00 2001 From: "guangfei.zhao" Date: Fri, 7 Nov 2025 13:30:59 +0800 Subject: [PATCH] feat(knowledge): add parse type enum and refactor configuration components refactor(configuration): replace buildMode with parseType in all config components --- src/constants/knowledge.ts | 5 + src/locales/en.ts | 6 +- src/locales/zh.ts | 4 + src/pages/agent/list.tsx | 6 +- .../knowledge/components/ChunkMethodForm.tsx | 28 ++-- .../components/CreateKnowledgeDialog.tsx | 132 ++++++++++++++++++ .../components/FloatingActionButtons.tsx | 10 +- src/pages/knowledge/configuration/audio.tsx | 12 +- src/pages/knowledge/configuration/book.tsx | 8 +- src/pages/knowledge/configuration/email.tsx | 19 +-- .../configuration/knowledge-graph.tsx | 10 +- src/pages/knowledge/configuration/laws.tsx | 19 +-- src/pages/knowledge/configuration/manual.tsx | 10 +- src/pages/knowledge/configuration/naive.tsx | 5 +- src/pages/knowledge/configuration/one.tsx | 10 +- src/pages/knowledge/configuration/paper.tsx | 10 +- src/pages/knowledge/configuration/picture.tsx | 19 +-- .../knowledge/configuration/presentation.tsx | 12 +- src/pages/knowledge/configuration/qa.tsx | 19 +-- src/pages/knowledge/configuration/resume.tsx | 19 +-- src/pages/knowledge/configuration/table.tsx | 19 +-- src/pages/knowledge/configuration/tag.tsx | 22 +-- src/pages/knowledge/list.tsx | 20 ++- src/pages/knowledge/overview.tsx | 57 ++++++-- src/pages/knowledge/setting.tsx | 50 +++---- 25 files changed, 307 insertions(+), 224 deletions(-) create mode 100644 src/pages/knowledge/components/CreateKnowledgeDialog.tsx diff --git a/src/constants/knowledge.ts b/src/constants/knowledge.ts index eb607a5..7300b64 100644 --- a/src/constants/knowledge.ts +++ b/src/constants/knowledge.ts @@ -106,3 +106,8 @@ export const KNOWLEDGE_SEARCH_PARAMS_KEYS = Object.freeze({ export type KnowledgeSearchParams = (typeof KNOWLEDGE_SEARCH_PARAMS_KEYS)[keyof typeof KNOWLEDGE_SEARCH_PARAMS_KEYS] export const DATABASE_BASE_KEY = 'dataset'; + +export enum ParseType { + BuildIn = '1', + Pipeline = '2', +} \ No newline at end of file diff --git a/src/locales/en.ts b/src/locales/en.ts index 3b1cb62..6baee33 100644 --- a/src/locales/en.ts +++ b/src/locales/en.ts @@ -92,6 +92,8 @@ export default { knowledgeBase: 'Knowledge Base', knowledgeBaseDetail: 'Knowledge Base Detail', settings: 'Settings', + overview: 'Overview', + fileLogs: 'File Logs', knowledgeBaseSettings: 'Knowledge Base Settings', settingsTabs: 'Settings Tabs', backToKnowledgeDetail: 'Back to Knowledge Base Detail', @@ -652,7 +654,7 @@ export default { dataFlowPlaceholder: 'Please select a pipeline.', buildItFromScratch: 'Build it from scratch', dataFlow: 'Pipeline', - parseType: 'Parse Type', + parseType: 'Ingestion pipeline', manualSetup: 'Manual Setup', builtIn: 'Built-in', titleDescription: @@ -1227,6 +1229,8 @@ This auto-tagging feature enhances retrieval by adding another layer of domain-s editAgent: 'Edit Agent', deleteAgent: 'Delete Agent', + searchAgent: 'Search Agent', + forms: { title: 'Title', avatar: 'Avatar', diff --git a/src/locales/zh.ts b/src/locales/zh.ts index 3122a40..868b556 100644 --- a/src/locales/zh.ts +++ b/src/locales/zh.ts @@ -393,6 +393,8 @@ export default { knowledgeBase: '知识库', knowledgeBaseDetail: '知识库详情', settings: '设置', + overview: '概览', + fileLogs: '文件日志', knowledgeBaseSettings: '知识库设置', settingsTabs: '设置选项卡', backToKnowledgeDetail: '返回知识库详情', @@ -1194,6 +1196,8 @@ General:实体和关系提取提示来自 GitHub - microsoft/graphrag:基于 editAgent: '编辑智能体', deleteAgent: '删除智能体', + searchAgent: '搜索智能体', + forms: { title: '标题', avatar: '头像', diff --git a/src/pages/agent/list.tsx b/src/pages/agent/list.tsx index d96defb..2cbcd99 100644 --- a/src/pages/agent/list.tsx +++ b/src/pages/agent/list.tsx @@ -85,7 +85,7 @@ function AgentListPage() { handleSearch(e.target.value)} - placeholder="搜索名称或描述" + placeholder={t('agent.searchAgent')} size="small" InputProps={{ startAdornment: ( @@ -95,7 +95,9 @@ function AgentListPage() { ) }} /> - + diff --git a/src/pages/knowledge/components/ChunkMethodForm.tsx b/src/pages/knowledge/components/ChunkMethodForm.tsx index 5528cf8..d5031f7 100644 --- a/src/pages/knowledge/components/ChunkMethodForm.tsx +++ b/src/pages/knowledge/components/ChunkMethodForm.tsx @@ -8,7 +8,7 @@ import { Card, CardContent, } from '@mui/material'; -import { DOCUMENT_PARSER_TYPES, type DocumentParserType } from '@/constants/knowledge'; +import { DOCUMENT_PARSER_TYPES, ParseType, type DocumentParserType } from '@/constants/knowledge'; import { type IParserConfig } from '@/interfaces/database/knowledge'; import { NaiveConfiguration, @@ -77,6 +77,7 @@ interface ChunkMethodFormProps { cancelButtonText?: string; } + function ChunkMethodForm({ form: propForm, onSubmit, @@ -120,9 +121,10 @@ function ChunkMethodForm({ control, name: 'pipeline_id', }); - const [buildMode, setBuildMode] = useState<'buildIn' | 'pipeline'>(pipeline_id ? 'pipeline' : 'buildIn'); + const [parseType, setParseType] = useState(pipeline_id ? ParseType.Pipeline : ParseType.BuildIn); + useEffect(() => { - setBuildMode(pipeline_id ? 'pipeline' : 'buildIn'); + setParseType(pipeline_id ? ParseType.Pipeline : ParseType.BuildIn); }, [pipeline_id]); // 根据parser_id动态选择配置组件 @@ -135,21 +137,21 @@ function ChunkMethodForm({ return ( {/* 构建模式选择与联动 */} - + setBuildMode(String(v) as 'buildIn' | 'pipeline')} + onChangeValue={(v) => setParseType(v as ParseType)} /> {/* 基于模式:内置显示切片方法,Pipeline 显示选择器 */} - {buildMode === 'buildIn' ? ( + {parseType === ParseType.BuildIn ? ( ) : ( @@ -157,8 +159,8 @@ function ChunkMethodForm({ - {/* 动态配置内容:始终渲染,内部按 buildMode 控制基础配置显示 */} - + {/* 动态配置内容:始终渲染,内部按 parseType 控制基础配置显示 */} + {/* 表单操作按钮 - 仅在有onSubmit回调时显示 */} {onSubmit && ( diff --git a/src/pages/knowledge/components/CreateKnowledgeDialog.tsx b/src/pages/knowledge/components/CreateKnowledgeDialog.tsx new file mode 100644 index 0000000..2a73282 --- /dev/null +++ b/src/pages/knowledge/components/CreateKnowledgeDialog.tsx @@ -0,0 +1,132 @@ +import React, { useEffect, useMemo, useState } from 'react'; +import { + Dialog, + DialogTitle, + DialogContent, + DialogActions, + Button, + Box, + Divider, +} from '@mui/material'; +import { useTranslation } from 'react-i18next'; +import { useForm, FormProvider } from 'react-hook-form'; +import GeneralForm from './GeneralForm'; +import { RadioFormField } from '@/components/FormField'; +import { ChunkMethodItem, PipelineSelectorItem } from '../configuration'; +import { DOCUMENT_PARSER_TYPES, ParseType } from '@/constants/knowledge'; +import { useKnowledgeOperations } from '@/hooks/knowledge-hooks'; +import { useSnackbar } from '@/components/Provider/SnackbarProvider'; + +export interface CreateKnowledgeDialogProps { + open: boolean; + onClose: () => void; + onSuccess?: () => void; +} + +function CreateKnowledgeDialog({ open, onClose, onSuccess }: CreateKnowledgeDialogProps) { + const { t } = useTranslation(); + const { showMessage } = useSnackbar(); + const { createKnowledge, loading, clearError } = useKnowledgeOperations(); + + // 表单实例与默认值 + const form = useForm({ + defaultValues: { + name: '', + description: '', + permission: 'me', + avatar: undefined, + pagerank: 0, + embd_id: '', + // 解析相关 + parser_id: DOCUMENT_PARSER_TYPES.Naive, + pipeline_id: '', + parseType: ParseType.BuildIn, + }, + }); + + const [parseType, setParseType] = useState(ParseType.BuildIn); + + // 同步 parseType 到表单并清理互斥字段 + useEffect(() => { + form.setValue('parseType', parseType); + if (parseType === ParseType.BuildIn) { + // 选择内置解析时清空 pipeline_id + form.setValue('pipeline_id', ''); + } + }, [parseType]); + + const handleSubmit = async (data: any) => { + clearError(); + try { + // 构建创建数据(basicData + 解析选择) + const requestData = { + name: data.name, + description: data.description, + permission: data.permission, + avatar: data.avatar, + pagerank: data.pagerank, + embd_id: data.embd_id, + // 解析相关字段:后端已支持 parser_id / pipeline_id + parser_id: data.parser_id, + pipeline_id: data.pipeline_id, + }; + + await createKnowledge(requestData); + showMessage.success(t('knowledgeConfiguration.createSuccess')); + onSuccess?.(); + onClose(); + } catch (err) { + // 错误提示由 hook 内部处理,这里保底提示 + showMessage.error(t('knowledgeConfiguration.createFailed')); + } + }; + + const handleCancel = () => { + onClose(); + }; + + return ( + + {t('knowledgeList.createKnowledgeBase')} + + + {/* 基础信息表单(名称、描述、权限、头像、嵌入模型、Pagerank 等) */} + + + + + {/* 解析方式选择与联动(来自 ChunkMethodForm) */} + + setParseType(v as ParseType)} + /> + + {/* 基于模式:内置显示切片方法,Pipeline 显示选择器 */} + + {parseType === ParseType.BuildIn ? ( + + ) : ( + + )} + + + + + + + + + + ); +} + +export default CreateKnowledgeDialog; \ No newline at end of file diff --git a/src/pages/knowledge/components/FloatingActionButtons.tsx b/src/pages/knowledge/components/FloatingActionButtons.tsx index fda7b73..e355723 100644 --- a/src/pages/knowledge/components/FloatingActionButtons.tsx +++ b/src/pages/knowledge/components/FloatingActionButtons.tsx @@ -32,11 +32,11 @@ const FloatingActionButtons: React.FC = ({ name: t('knowledge.configSettings'), onClick: onConfigClick, }, - { - icon: , - name: t('knowledgeDetails.overview'), - onClick: onOverviewClick, - }, + // { + // icon: , + // name: t('knowledgeDetails.overview'), + // onClick: onOverviewClick, + // }, ]; return ( diff --git a/src/pages/knowledge/configuration/audio.tsx b/src/pages/knowledge/configuration/audio.tsx index 8a991b4..e4bfbd0 100644 --- a/src/pages/knowledge/configuration/audio.tsx +++ b/src/pages/knowledge/configuration/audio.tsx @@ -12,14 +12,14 @@ import { useFormContext } from 'react-hook-form'; import { useTranslation } from 'react-i18next'; import { ConfigurationFormContainer, MainContainer } from './configuration-form-container'; import { - ChunkMethodItem, AutoKeywordsItem, AutoQuestionsItem, RaptorConfigItems, KnowledgeGraphConfigItems, } from './common-items'; +import { ParseType } from '@/constants/knowledge'; -export function AudioConfiguration({ buildMode = 'buildIn' }: { buildMode?: 'buildIn' | 'pipeline' }) { +export function AudioConfiguration({ parseType = ParseType.BuildIn }: { parseType?: ParseType }) { const { formState: { errors } } = useFormContext(); const { t } = useTranslation(); @@ -27,18 +27,12 @@ export function AudioConfiguration({ buildMode = 'buildIn' }: { buildMode?: 'bui {/* 第一部分:basicConfig 基础配置 */} - {buildMode === 'buildIn' && ( + {parseType === ParseType.BuildIn && ( }> {t('knowledge.config.basicConfig')} - {/* 切片方法 */} - - - - - {/* 自动关键词提取 */} diff --git a/src/pages/knowledge/configuration/book.tsx b/src/pages/knowledge/configuration/book.tsx index 31c10d3..882d50a 100644 --- a/src/pages/knowledge/configuration/book.tsx +++ b/src/pages/knowledge/configuration/book.tsx @@ -4,30 +4,28 @@ import { ExpandMore as ExpandMoreIcon } from '@mui/icons-material'; import { useTranslation } from 'react-i18next'; import { ConfigurationFormContainer } from './configuration-form-container'; import { - ChunkMethodItem, ChunkTokenNumberItem, DelimiterItem, TOCEnhanceItem, RaptorConfigItems, KnowledgeGraphConfigItems } from './common-items'; +import { ParseType } from '@/constants/knowledge'; -export function BookConfiguration({ buildMode = 'buildIn' }: { buildMode?: 'buildIn' | 'pipeline' }) { +export function BookConfiguration({ parseType = ParseType.BuildIn }: { parseType?: ParseType }) { const { t } = useTranslation(); return ( {/* 第一部分:基础配置 */} - {buildMode === 'buildIn' && ( + {parseType === ParseType.BuildIn && ( }> {t('knowledge.config.basicConfig')} - {/* 分块方法 */} - {/* 分块token数 */} {/* 分隔符 */} diff --git a/src/pages/knowledge/configuration/email.tsx b/src/pages/knowledge/configuration/email.tsx index cb0d3a4..7f73570 100644 --- a/src/pages/knowledge/configuration/email.tsx +++ b/src/pages/knowledge/configuration/email.tsx @@ -4,31 +4,18 @@ import { ExpandMore as ExpandMoreIcon } from '@mui/icons-material'; import { useTranslation } from 'react-i18next'; import { ConfigurationFormContainer } from './configuration-form-container'; import { - ChunkMethodItem, RaptorConfigItems, KnowledgeGraphConfigItems } from './common-items'; +import { ParseType } from '@/constants/knowledge'; -export function EmailConfiguration({ buildMode = 'buildIn' }: { buildMode?: 'buildIn' | 'pipeline' }) { +export function EmailConfiguration({ parseType = ParseType.BuildIn }: { parseType?: ParseType }) { const { t } = useTranslation(); return ( - {/* 第一部分:基础配置 */} - {buildMode === 'buildIn' && ( - - }> - {t('knowledge.config.basicConfig')} - - - - {/* 分块方法 */} - - - - - )} + {/* 基础配置:已在 ChunkMethodForm 中处理,且仅在 buildIn 时显示 */} {/* 第二部分:RAPTOR策略 */} diff --git a/src/pages/knowledge/configuration/knowledge-graph.tsx b/src/pages/knowledge/configuration/knowledge-graph.tsx index c61a650..d0bf535 100644 --- a/src/pages/knowledge/configuration/knowledge-graph.tsx +++ b/src/pages/knowledge/configuration/knowledge-graph.tsx @@ -12,7 +12,6 @@ import { useFormContext } from 'react-hook-form'; import { useTranslation } from 'react-i18next'; import { ConfigurationFormContainer, MainContainer } from './configuration-form-container'; import { - ChunkMethodItem, EmbeddingModelItem, AutoKeywordsItem, AutoQuestionsItem, @@ -28,8 +27,9 @@ import { EntityNormalizeItem, CommunityReportItem, } from './common-items'; +import { ParseType } from '@/constants/knowledge'; -export function KnowledgeGraphConfiguration({ buildMode = 'buildIn' }: { buildMode?: 'buildIn' | 'pipeline' }) { +export function KnowledgeGraphConfiguration({ parseType = ParseType.BuildIn }: { parseType?: ParseType }) { const { formState: { errors } } = useFormContext(); const { t } = useTranslation(); @@ -37,16 +37,12 @@ export function KnowledgeGraphConfiguration({ buildMode = 'buildIn' }: { buildMo {/* 第一部分:basicConfig 基础配置 */} - {buildMode === 'buildIn' && ( + {parseType === ParseType.BuildIn && ( }> {t('knowledge.config.basicConfig')} - {/* 切片方法 */} - - - diff --git a/src/pages/knowledge/configuration/laws.tsx b/src/pages/knowledge/configuration/laws.tsx index f59cac8..6a6610c 100644 --- a/src/pages/knowledge/configuration/laws.tsx +++ b/src/pages/knowledge/configuration/laws.tsx @@ -4,31 +4,18 @@ import { ExpandMore as ExpandMoreIcon } from '@mui/icons-material'; import { useTranslation } from 'react-i18next'; import { ConfigurationFormContainer } from './configuration-form-container'; import { - ChunkMethodItem, RaptorConfigItems, KnowledgeGraphConfigItems } from './common-items'; +import { ParseType } from '@/constants/knowledge'; -export function LawsConfiguration({ buildMode = 'buildIn' }: { buildMode?: 'buildIn' | 'pipeline' }) { +export function LawsConfiguration({ parseType = ParseType.BuildIn }: { parseType?: ParseType }) { const { t } = useTranslation(); return ( - {/* 第一部分:基础配置 */} - {buildMode === 'buildIn' && ( - - }> - {t('knowledge.config.basicConfig')} - - - - {/* 分块方法 */} - - - - - )} + {/* 基础配置:已在 ChunkMethodForm 中处理,且仅在 buildIn 时显示 */} {/* 第二部分:RAPTOR策略 */} diff --git a/src/pages/knowledge/configuration/manual.tsx b/src/pages/knowledge/configuration/manual.tsx index 54bde25..aa70b9d 100644 --- a/src/pages/knowledge/configuration/manual.tsx +++ b/src/pages/knowledge/configuration/manual.tsx @@ -12,7 +12,6 @@ import { useFormContext } from 'react-hook-form'; import { useTranslation } from 'react-i18next'; import { ConfigurationFormContainer, MainContainer } from './configuration-form-container'; import { - ChunkMethodItem, ChunkTokenNumberItem, DelimiterItem, LayoutRecognizeItem, @@ -33,8 +32,9 @@ import { RaptorConfigItems, KnowledgeGraphConfigItems, } from './common-items'; +import { ParseType } from '@/constants/knowledge'; -export function ManualConfiguration({ buildMode = 'buildIn' }: { buildMode?: 'buildIn' | 'pipeline' }) { +export function ManualConfiguration({ parseType = ParseType.BuildIn }: { parseType?: ParseType }) { const { formState: { errors } } = useFormContext(); const { t } = useTranslation(); @@ -42,16 +42,12 @@ export function ManualConfiguration({ buildMode = 'buildIn' }: { buildMode?: 'bu {/* 第一部分:basicConfig 基础配置 */} - {buildMode === 'buildIn' && ( + {parseType === ParseType.BuildIn && ( }> {t('knowledge.config.basicConfig')} - {/* 切片方法 */} - - - diff --git a/src/pages/knowledge/configuration/naive.tsx b/src/pages/knowledge/configuration/naive.tsx index bbb0b92..d64bab8 100644 --- a/src/pages/knowledge/configuration/naive.tsx +++ b/src/pages/knowledge/configuration/naive.tsx @@ -12,9 +12,10 @@ import { useFormContext } from 'react-hook-form'; import { useTranslation } from 'react-i18next'; import { ConfigurationFormContainer, MainContainer } from './configuration-form-container'; import { RaptorConfigItems, KnowledgeGraphConfigItems, BasicConfigItems } from './common-items'; +import { ParseType } from '@/constants/knowledge'; // import { RadioFormField } from '@/components/FormField'; -export function NaiveConfiguration({ buildMode = 'buildIn' }: { buildMode?: 'buildIn' | 'pipeline' }) { +export function NaiveConfiguration({ parseType = ParseType.BuildIn }: { parseType?: ParseType }) { const { formState: { errors } } = useFormContext(); const { t } = useTranslation(); @@ -22,7 +23,7 @@ export function NaiveConfiguration({ buildMode = 'buildIn' }: { buildMode?: 'bui {/* 第一部分:basicConfig 基础配置 */} - {buildMode === 'buildIn' && ( + {parseType === ParseType.BuildIn && ( }> {t('knowledge.config.basicConfig')} diff --git a/src/pages/knowledge/configuration/one.tsx b/src/pages/knowledge/configuration/one.tsx index be2f0e3..04f0325 100644 --- a/src/pages/knowledge/configuration/one.tsx +++ b/src/pages/knowledge/configuration/one.tsx @@ -12,7 +12,6 @@ import { useFormContext } from 'react-hook-form'; import { useTranslation } from 'react-i18next'; import { ConfigurationFormContainer, MainContainer } from './configuration-form-container'; import { - ChunkMethodItem, ChunkTokenNumberItem, DelimiterItem, LayoutRecognizeItem, @@ -22,8 +21,9 @@ import { RaptorConfigItems, KnowledgeGraphConfigItems, } from './common-items'; +import { ParseType } from '@/constants/knowledge'; -export function OneConfiguration({ buildMode = 'buildIn' }: { buildMode?: 'buildIn' | 'pipeline' }) { +export function OneConfiguration({ parseType = ParseType.BuildIn }: { parseType?: ParseType }) { const { formState: { errors } } = useFormContext(); const { t } = useTranslation(); @@ -31,16 +31,12 @@ export function OneConfiguration({ buildMode = 'buildIn' }: { buildMode?: 'build {/* 第一部分:basicConfig 基础配置 */} - {buildMode === 'buildIn' && ( + {parseType === ParseType.BuildIn && ( }> {t('knowledge.config.basicConfig')} - {/* 切片方法 */} - - - diff --git a/src/pages/knowledge/configuration/paper.tsx b/src/pages/knowledge/configuration/paper.tsx index 967a1ca..d62a853 100644 --- a/src/pages/knowledge/configuration/paper.tsx +++ b/src/pages/knowledge/configuration/paper.tsx @@ -12,15 +12,15 @@ import { useFormContext } from 'react-hook-form'; import { useTranslation } from 'react-i18next'; import { ConfigurationFormContainer, MainContainer } from './configuration-form-container'; import { - ChunkMethodItem, LayoutRecognizeItem, AutoKeywordsItem, AutoQuestionsItem, RaptorConfigItems, KnowledgeGraphConfigItems, } from './common-items'; +import { ParseType } from '@/constants/knowledge'; -export function PaperConfiguration({ buildMode = 'buildIn' }: { buildMode?: 'buildIn' | 'pipeline' }) { +export function PaperConfiguration({ parseType = ParseType.BuildIn }: { parseType?: ParseType }) { const { formState: { errors } } = useFormContext(); const { t } = useTranslation(); @@ -28,16 +28,12 @@ export function PaperConfiguration({ buildMode = 'buildIn' }: { buildMode?: 'bui {/* 第一部分:basicConfig 基础配置 */} - {buildMode === 'buildIn' && ( + {parseType === ParseType.BuildIn && ( }> {t('knowledge.config.basicConfig')} - {/* 切片方法 */} - - - diff --git a/src/pages/knowledge/configuration/picture.tsx b/src/pages/knowledge/configuration/picture.tsx index f6112ea..cbaa6c3 100644 --- a/src/pages/knowledge/configuration/picture.tsx +++ b/src/pages/knowledge/configuration/picture.tsx @@ -4,31 +4,18 @@ import { ExpandMore as ExpandMoreIcon } from '@mui/icons-material'; import { useTranslation } from 'react-i18next'; import { ConfigurationFormContainer } from './configuration-form-container'; import { - ChunkMethodItem, RaptorConfigItems, KnowledgeGraphConfigItems } from './common-items'; +import { ParseType } from '@/constants/knowledge'; -export function PictureConfiguration({ buildMode = 'buildIn' }: { buildMode?: 'buildIn' | 'pipeline' }) { +export function PictureConfiguration({ parseType = ParseType.BuildIn }: { parseType?: ParseType }) { const { t } = useTranslation(); return ( - {/* 第一部分:基础配置 */} - {buildMode === 'buildIn' && ( - - }> - {t('knowledge.config.basicConfig')} - - - - {/* 分块方法 */} - - - - - )} + {/* 基础配置:已在 ChunkMethodForm 中处理,且仅在 buildIn 时显示 */} {/* 第二部分:RAPTOR策略 */} diff --git a/src/pages/knowledge/configuration/presentation.tsx b/src/pages/knowledge/configuration/presentation.tsx index 4d0eeda..4063862 100644 --- a/src/pages/knowledge/configuration/presentation.tsx +++ b/src/pages/knowledge/configuration/presentation.tsx @@ -4,32 +4,28 @@ import { ExpandMore as ExpandMoreIcon } from '@mui/icons-material'; import { useTranslation } from 'react-i18next'; import { ConfigurationFormContainer } from './configuration-form-container'; import { - ChunkMethodItem, RaptorConfigItems, KnowledgeGraphConfigItems, LayoutRecognizeItem, AutoKeywordsItem, AutoQuestionsItem } from './common-items'; +import { ParseType } from '@/constants/knowledge'; -export function PresentationConfiguration({ buildMode = 'buildIn' }: { buildMode?: 'buildIn' | 'pipeline' }) { +export function PresentationConfiguration({ parseType = ParseType.BuildIn }: { parseType?: ParseType }) { const { t } = useTranslation(); return ( {/* 第一部分:基础配置 */} - {buildMode === 'buildIn' && ( + {parseType === ParseType.BuildIn && ( }> {t('knowledge.config.basicConfig')} - {/* 切片方法 */} - - - - + {/* 版面识别 */} diff --git a/src/pages/knowledge/configuration/qa.tsx b/src/pages/knowledge/configuration/qa.tsx index 98a7c94..e045b82 100644 --- a/src/pages/knowledge/configuration/qa.tsx +++ b/src/pages/knowledge/configuration/qa.tsx @@ -4,31 +4,18 @@ import { ExpandMore as ExpandMoreIcon } from '@mui/icons-material'; import { useTranslation } from 'react-i18next'; import { ConfigurationFormContainer } from './configuration-form-container'; import { - ChunkMethodItem, RaptorConfigItems, KnowledgeGraphConfigItems } from './common-items'; +import { ParseType } from '@/constants/knowledge'; -export function QAConfiguration({ buildMode = 'buildIn' }: { buildMode?: 'buildIn' | 'pipeline' }) { +export function QAConfiguration({ parseType = ParseType.BuildIn }: { parseType?: ParseType }) { const { t } = useTranslation(); return ( - {/* 第一部分:基础配置 */} - {buildMode === 'buildIn' && ( - - }> - {t('knowledge.config.basicConfig')} - - - - {/* 分块方法 */} - - - - - )} + {/* 基础配置:已在 ChunkMethodForm 中处理,且仅在 buildIn 时显示 */} {/* 第二部分:RAPTOR策略 */} diff --git a/src/pages/knowledge/configuration/resume.tsx b/src/pages/knowledge/configuration/resume.tsx index 463ba5c..7f6c222 100644 --- a/src/pages/knowledge/configuration/resume.tsx +++ b/src/pages/knowledge/configuration/resume.tsx @@ -4,31 +4,18 @@ import { ExpandMore as ExpandMoreIcon } from '@mui/icons-material'; import { useTranslation } from 'react-i18next'; import { ConfigurationFormContainer } from './configuration-form-container'; import { - ChunkMethodItem, RaptorConfigItems, KnowledgeGraphConfigItems } from './common-items'; +import { ParseType } from '@/constants/knowledge'; -export function ResumeConfiguration({ buildMode = 'buildIn' }: { buildMode?: 'buildIn' | 'pipeline' }) { +export function ResumeConfiguration({ parseType = ParseType.BuildIn }: { parseType?: ParseType }) { const { t } = useTranslation(); return ( - {/* 第一部分:基础配置 */} - {buildMode === 'buildIn' && ( - - }> - {t('knowledge.config.basicConfig')} - - - - {/* 分块方法 */} - - - - - )} + {/* 基础配置:已在 ChunkMethodForm 中处理,且仅在 buildIn 时显示 */} {/* 第二部分:RAPTOR策略 */} diff --git a/src/pages/knowledge/configuration/table.tsx b/src/pages/knowledge/configuration/table.tsx index cdb03b2..5e64fe9 100644 --- a/src/pages/knowledge/configuration/table.tsx +++ b/src/pages/knowledge/configuration/table.tsx @@ -4,31 +4,18 @@ import { ExpandMore as ExpandMoreIcon } from '@mui/icons-material'; import { useTranslation } from 'react-i18next'; import { ConfigurationFormContainer } from './configuration-form-container'; import { - ChunkMethodItem, RaptorConfigItems, KnowledgeGraphConfigItems } from './common-items'; +import { ParseType } from '@/constants/knowledge'; -export function TableConfiguration({ buildMode = 'buildIn' }: { buildMode?: 'buildIn' | 'pipeline' }) { +export function TableConfiguration({ parseType = ParseType.BuildIn }: { parseType?: ParseType }) { const { t } = useTranslation(); return ( - {/* 第一部分:基础配置 */} - {buildMode === 'buildIn' && ( - - }> - {t('knowledge.config.basicConfig')} - - - - {/* 分块方法 */} - - - - - )} + {/* 基础配置:已在 ChunkMethodForm 中处理,且仅在 buildIn 时显示 */} {/* 第二部分:RAPTOR策略 */} diff --git a/src/pages/knowledge/configuration/tag.tsx b/src/pages/knowledge/configuration/tag.tsx index 06fc8bc..d86252d 100644 --- a/src/pages/knowledge/configuration/tag.tsx +++ b/src/pages/knowledge/configuration/tag.tsx @@ -1,38 +1,24 @@ import React from 'react'; -import { Box, Typography, Accordion, AccordionSummary, AccordionDetails, Divider } from '@mui/material'; +import { Box, Typography, Accordion, AccordionSummary, AccordionDetails } from '@mui/material'; import { ExpandMore as ExpandMoreIcon } from '@mui/icons-material'; import { useTranslation } from 'react-i18next'; import { ConfigurationFormContainer } from './configuration-form-container'; import { RaptorConfigItems, KnowledgeGraphConfigItems, - ChunkMethodItem, LayoutRecognizeItem, AutoKeywordsItem, AutoQuestionsItem } from './common-items'; +import { ParseType } from '@/constants/knowledge'; -export function TagConfiguration({ buildMode = 'buildIn' }: { buildMode?: 'buildIn' | 'pipeline' }) { +export function TagConfiguration({ parseType = ParseType.BuildIn }: { parseType?: ParseType }) { const { t } = useTranslation(); return ( - {/* 第一部分:基础配置 */} - {buildMode === 'buildIn' && ( - - }> - {t('knowledge.config.basicConfig')} - - - {/* 切片方法 */} - - - - - - - )} + {/* 基础配置:已在 ChunkMethodForm 中处理,且仅在 buildIn 时显示 */} {/* 第二部分:RAPTOR策略 */} diff --git a/src/pages/knowledge/list.tsx b/src/pages/knowledge/list.tsx index 9b17cc0..41ca226 100644 --- a/src/pages/knowledge/list.tsx +++ b/src/pages/knowledge/list.tsx @@ -26,6 +26,7 @@ import type { IKnowledge } from '@/interfaces/database/knowledge'; import { useDialog } from '@/hooks/useDialog'; import logger from '@/utils/logger'; import { useTranslation } from 'react-i18next'; +import CreateKnowledgeDialog from './components/CreateKnowledgeDialog'; const KnowledgeBaseList: React.FC = () => { @@ -88,10 +89,13 @@ const KnowledgeBaseList: React.FC = () => { refresh(); }, [refresh]); - // 处理创建知识库 + // 创建知识库对话框 + const [createDialogOpen, setCreateDialogOpen] = useState(false); + + // 处理创建知识库:打开对话框 const handleCreateKnowledge = useCallback(() => { - navigate('/knowledge/create'); - }, [navigate]); + setCreateDialogOpen(true); + }, []); const dialog = useDialog(); @@ -239,6 +243,16 @@ const KnowledgeBaseList: React.FC = () => { onCreateKnowledge={handleCreateKnowledge} /> + {/* 创建知识库对话框 */} + setCreateDialogOpen(false)} + onSuccess={() => { + setCreateDialogOpen(false); + refresh(); + }} + /> + {/* 分页组件 */} {totalPages > 1 && ( diff --git a/src/pages/knowledge/overview.tsx b/src/pages/knowledge/overview.tsx index 375b921..f2fee30 100644 --- a/src/pages/knowledge/overview.tsx +++ b/src/pages/knowledge/overview.tsx @@ -1,15 +1,17 @@ import React from 'react'; -import { Box, Grid, Paper, Typography, IconButton, TextField, Tabs, Tab } from '@mui/material'; +import { Box, Grid, Paper, Typography, IconButton, TextField, Tabs, Tab, Fab } from '@mui/material'; import { DataGrid, type GridColDef } from '@mui/x-data-grid'; -import FilterListIcon from '@mui/icons-material/FilterList'; -import SearchIcon from '@mui/icons-material/Search'; +import { + ArrowBack as ArrowBackIcon, + Search as SearchIcon, +} from '@mui/icons-material'; import { useTranslation } from 'react-i18next'; -import { useParams } from 'react-router-dom'; -import { useKnowledgeOverview } from '@/hooks/knowledge-hooks'; -import type { IDocumentLog, IFileLogItem } from '@/interfaces/database/knowledge'; +import { useNavigate, useParams } from 'react-router-dom'; +import { useKnowledgeOverview, useKnowledgeDetail } from '@/hooks/knowledge-hooks'; import logger from '@/utils/logger'; import i18n, { LanguageAbbreviation } from '@/locales'; import { enUS, zhCN } from '@mui/x-data-grid/locales'; +import KnowledgeBreadcrumbs from './components/KnowledgeBreadcrumbs'; const PROCESSING_TYPES = { @@ -34,7 +36,6 @@ function KnowledgeLogsPage() { return currentLanguage === LanguageAbbreviation.Zh ? zhCN : enUS; }; - // 路由参数与数据Hook const { id: kbId = '' } = useParams(); const { @@ -52,6 +53,9 @@ function KnowledgeLogsPage() { setKeywords, } = useKnowledgeOverview(kbId); + // 获取知识库详情以用于面包屑显示名称 + const { knowledge } = useKnowledgeDetail(kbId); + // 同步分页模型到Hook React.useEffect(() => { setPaginationModel({ page: Math.max(currentPage - 1, 0), pageSize }); @@ -94,8 +98,29 @@ function KnowledgeLogsPage() { (datasetLogs?.total || 0)), [activeTab, fileLogs, datasetLogs]); + const navigate = useNavigate(); + const handleNavigateBack = () => { + navigate(`/knowledge/${kbId}`); + }; + return ( + {/* 面包屑导航 */} + {/* 顶部统计卡片占位 */} @@ -124,8 +149,8 @@ function KnowledgeLogsPage() { {/* Tabs & Filter/Search */} setActiveTab(v)}> - - + + {/* */} @@ -155,6 +180,20 @@ function KnowledgeLogsPage() { localeText={getDataGridLocale().components.MuiDataGrid.defaultProps.localeText} /> + + {/* 返回按钮 */} + + + ); } diff --git a/src/pages/knowledge/setting.tsx b/src/pages/knowledge/setting.tsx index 71050e3..7bb7b36 100644 --- a/src/pages/knowledge/setting.tsx +++ b/src/pages/knowledge/setting.tsx @@ -106,10 +106,10 @@ function KnowledgeBaseSetting() { setTabValue(newValue); }; - const handleSubmit = async ({data}: {data: any}) => { + const handleSubmit = async ({ data }: { data: any }) => { if (!knowledge) return; console.log(t('knowledgeSettings.submitData'), data); - + try { // 分别处理基础信息和配置信息 if (tabValue === 'generalForm') { @@ -142,12 +142,12 @@ function KnowledgeBaseSetting() { await updateKnowledgeModelConfig(configData); showMessage.success(t('knowledgeSettings.parseConfigUpdateSuccess')); } - + // 刷新知识库详情 refresh(); } catch (error) { - showMessage.error(t('knowledgeSettings.updateFailed', { - type: tabValue === 'generalForm' ? t('knowledgeSettings.basicInfo') : t('knowledgeSettings.parseConfig') + showMessage.error(t('knowledgeSettings.updateFailed', { + type: tabValue === 'generalForm' ? t('knowledgeSettings.basicInfo') : t('knowledgeSettings.parseConfig') })); } }; @@ -167,7 +167,7 @@ function KnowledgeBaseSetting() { return ( {/* 面包屑导航 */} -
- - - - - - + + + + + + - - {tabValue === 'generalForm' && ( - - )} - {tabValue === 'chunkMethodForm' && ( - - )} - + + {tabValue === 'generalForm' && ( + + )} + {tabValue === 'chunkMethodForm' && ( + + )} + - - - + + +