feat(knowledge): add parse type enum and refactor configuration components
refactor(configuration): replace buildMode with parseType in all config components
This commit is contained in:
@@ -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',
|
||||
}
|
||||
@@ -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',
|
||||
|
||||
@@ -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: '头像',
|
||||
|
||||
@@ -85,7 +85,7 @@ function AgentListPage() {
|
||||
<TextField
|
||||
value={searchValue}
|
||||
onChange={(e) => handleSearch(e.target.value)}
|
||||
placeholder="搜索名称或描述"
|
||||
placeholder={t('agent.searchAgent')}
|
||||
size="small"
|
||||
InputProps={{
|
||||
startAdornment: (
|
||||
@@ -95,7 +95,9 @@ function AgentListPage() {
|
||||
)
|
||||
}}
|
||||
/>
|
||||
<Button variant="outlined" startIcon={<RefreshIcon />} onClick={refresh}>刷新</Button>
|
||||
<Button variant="outlined" startIcon={<RefreshIcon />} onClick={refresh}>
|
||||
{t('common.refresh')}
|
||||
</Button>
|
||||
</Box>
|
||||
</Paper>
|
||||
|
||||
|
||||
@@ -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<ParseType>(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 (
|
||||
<Box sx={{ display: 'flex', flexDirection: 'column', gap: 3 }}>
|
||||
{/* 构建模式选择与联动 */}
|
||||
<Card sx={{ p: 3 }}>
|
||||
<Card sx={{ px: 3, marginX: 3 }}>
|
||||
<CardContent>
|
||||
<RadioFormField
|
||||
name="build_mode"
|
||||
label={t('knowledge.config.buildMode')}
|
||||
defaultValue={buildMode}
|
||||
name="parseType"
|
||||
label={t('knowledgeConfiguration.parseType')}
|
||||
defaultValue={parseType}
|
||||
options={[
|
||||
{ value: 'buildIn', label: 'Built-in' },
|
||||
{ value: 'pipeline', label: 'Pipeline' },
|
||||
{ value: ParseType.BuildIn, label: 'Built-in' },
|
||||
{ value: ParseType.Pipeline, label: 'Pipeline' },
|
||||
]}
|
||||
onChangeValue={(v) => setBuildMode(String(v) as 'buildIn' | 'pipeline')}
|
||||
onChangeValue={(v) => setParseType(v as ParseType)}
|
||||
/>
|
||||
|
||||
{/* 基于模式:内置显示切片方法,Pipeline 显示选择器 */}
|
||||
{buildMode === 'buildIn' ? (
|
||||
{parseType === ParseType.BuildIn ? (
|
||||
<ChunkMethodItem />
|
||||
) : (
|
||||
<PipelineSelectorItem />
|
||||
@@ -157,8 +159,8 @@ function ChunkMethodForm({
|
||||
</CardContent>
|
||||
</Card>
|
||||
|
||||
{/* 动态配置内容:始终渲染,内部按 buildMode 控制基础配置显示 */}
|
||||
<ConfigurationComponent buildMode={buildMode} />
|
||||
{/* 动态配置内容:始终渲染,内部按 parseType 控制基础配置显示 */}
|
||||
<ConfigurationComponent parseType={parseType} />
|
||||
|
||||
{/* 表单操作按钮 - 仅在有onSubmit回调时显示 */}
|
||||
{onSubmit && (
|
||||
|
||||
132
src/pages/knowledge/components/CreateKnowledgeDialog.tsx
Normal file
132
src/pages/knowledge/components/CreateKnowledgeDialog.tsx
Normal file
@@ -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<any>({
|
||||
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>(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 (
|
||||
<Dialog open={open} onClose={onClose} maxWidth="md" fullWidth>
|
||||
<DialogTitle>{t('knowledgeList.createKnowledgeBase')}</DialogTitle>
|
||||
<FormProvider {...form}>
|
||||
<DialogContent>
|
||||
{/* 基础信息表单(名称、描述、权限、头像、嵌入模型、Pagerank 等) */}
|
||||
<GeneralForm />
|
||||
|
||||
<Divider sx={{ my: 2 }} />
|
||||
|
||||
{/* 解析方式选择与联动(来自 ChunkMethodForm) */}
|
||||
<Box sx={{ px: 1 }}>
|
||||
<RadioFormField
|
||||
name="parseType"
|
||||
label={t('knowledgeConfiguration.parseType')}
|
||||
defaultValue={parseType}
|
||||
options={[
|
||||
{ value: ParseType.BuildIn, label: 'Built-in' },
|
||||
{ value: ParseType.Pipeline, label: 'Pipeline' },
|
||||
]}
|
||||
onChangeValue={(v) => setParseType(v as ParseType)}
|
||||
/>
|
||||
|
||||
{/* 基于模式:内置显示切片方法,Pipeline 显示选择器 */}
|
||||
<Box sx={{ mt: 2 }}>
|
||||
{parseType === ParseType.BuildIn ? (
|
||||
<ChunkMethodItem />
|
||||
) : (
|
||||
<PipelineSelectorItem />
|
||||
)}
|
||||
</Box>
|
||||
</Box>
|
||||
</DialogContent>
|
||||
</FormProvider>
|
||||
<DialogActions>
|
||||
<Button onClick={handleCancel} disabled={loading}>{t('common.cancel')}</Button>
|
||||
<Button onClick={form.handleSubmit(handleSubmit)} variant="contained" disabled={loading}>
|
||||
{loading ? t('knowledgeConfiguration.creating') : t('knowledgeConfiguration.createAndNext')}
|
||||
</Button>
|
||||
</DialogActions>
|
||||
</Dialog>
|
||||
);
|
||||
}
|
||||
|
||||
export default CreateKnowledgeDialog;
|
||||
@@ -32,11 +32,11 @@ const FloatingActionButtons: React.FC<FloatingActionButtonsProps> = ({
|
||||
name: t('knowledge.configSettings'),
|
||||
onClick: onConfigClick,
|
||||
},
|
||||
{
|
||||
icon: <OverviewIcon />,
|
||||
name: t('knowledgeDetails.overview'),
|
||||
onClick: onOverviewClick,
|
||||
},
|
||||
// {
|
||||
// icon: <OverviewIcon />,
|
||||
// name: t('knowledgeDetails.overview'),
|
||||
// onClick: onOverviewClick,
|
||||
// },
|
||||
];
|
||||
|
||||
return (
|
||||
|
||||
@@ -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
|
||||
<ConfigurationFormContainer>
|
||||
<MainContainer>
|
||||
{/* 第一部分:basicConfig 基础配置 */}
|
||||
{buildMode === 'buildIn' && (
|
||||
{parseType === ParseType.BuildIn && (
|
||||
<Accordion defaultExpanded>
|
||||
<AccordionSummary expandIcon={<ExpandMoreIcon />}>
|
||||
<Typography variant="h6">{t('knowledge.config.basicConfig')}</Typography>
|
||||
</AccordionSummary>
|
||||
<AccordionDetails>
|
||||
{/* 切片方法 */}
|
||||
<Box sx={{ mb: 3 }}>
|
||||
<ChunkMethodItem />
|
||||
</Box>
|
||||
<Divider />
|
||||
|
||||
<Box sx={{ display: 'flex', flexDirection: 'column', gap: 3, mt: 3 }}>
|
||||
{/* 自动关键词提取 */}
|
||||
<AutoKeywordsItem />
|
||||
|
||||
@@ -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 (
|
||||
<ConfigurationFormContainer>
|
||||
<Box sx={{ display: 'flex', flexDirection: 'column', gap: 3 }}>
|
||||
{/* 第一部分:基础配置 */}
|
||||
{buildMode === 'buildIn' && (
|
||||
{parseType === ParseType.BuildIn && (
|
||||
<Accordion defaultExpanded>
|
||||
<AccordionSummary expandIcon={<ExpandMoreIcon />}>
|
||||
<Typography variant="h6">{t('knowledge.config.basicConfig')}</Typography>
|
||||
</AccordionSummary>
|
||||
<AccordionDetails>
|
||||
<Box sx={{ display: 'flex', flexDirection: 'column', gap: 3 }}>
|
||||
{/* 分块方法 */}
|
||||
<ChunkMethodItem />
|
||||
{/* 分块token数 */}
|
||||
<ChunkTokenNumberItem />
|
||||
{/* 分隔符 */}
|
||||
|
||||
@@ -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 (
|
||||
<ConfigurationFormContainer>
|
||||
<Box sx={{ display: 'flex', flexDirection: 'column', gap: 3 }}>
|
||||
{/* 第一部分:基础配置 */}
|
||||
{buildMode === 'buildIn' && (
|
||||
<Accordion defaultExpanded>
|
||||
<AccordionSummary expandIcon={<ExpandMoreIcon />}>
|
||||
<Typography variant="h6">{t('knowledge.config.basicConfig')}</Typography>
|
||||
</AccordionSummary>
|
||||
<AccordionDetails>
|
||||
<Box sx={{ display: 'flex', flexDirection: 'column', gap: 3 }}>
|
||||
{/* 分块方法 */}
|
||||
<ChunkMethodItem />
|
||||
</Box>
|
||||
</AccordionDetails>
|
||||
</Accordion>
|
||||
)}
|
||||
{/* 基础配置:已在 ChunkMethodForm 中处理,且仅在 buildIn 时显示 */}
|
||||
|
||||
{/* 第二部分:RAPTOR策略 */}
|
||||
<Accordion>
|
||||
|
||||
@@ -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
|
||||
<ConfigurationFormContainer>
|
||||
<MainContainer>
|
||||
{/* 第一部分:basicConfig 基础配置 */}
|
||||
{buildMode === 'buildIn' && (
|
||||
{parseType === ParseType.BuildIn && (
|
||||
<Accordion defaultExpanded>
|
||||
<AccordionSummary expandIcon={<ExpandMoreIcon />}>
|
||||
<Typography variant="h6">{t('knowledge.config.basicConfig')}</Typography>
|
||||
</AccordionSummary>
|
||||
<AccordionDetails>
|
||||
{/* 切片方法 */}
|
||||
<Box sx={{ mb: 3 }}>
|
||||
<ChunkMethodItem />
|
||||
</Box>
|
||||
<Divider />
|
||||
|
||||
<Box sx={{ display: 'flex', flexDirection: 'column', gap: 3, mt: 3 }}>
|
||||
|
||||
@@ -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 (
|
||||
<ConfigurationFormContainer>
|
||||
<Box sx={{ display: 'flex', flexDirection: 'column', gap: 3 }}>
|
||||
{/* 第一部分:基础配置 */}
|
||||
{buildMode === 'buildIn' && (
|
||||
<Accordion defaultExpanded>
|
||||
<AccordionSummary expandIcon={<ExpandMoreIcon />}>
|
||||
<Typography variant="h6">{t('knowledge.config.basicConfig')}</Typography>
|
||||
</AccordionSummary>
|
||||
<AccordionDetails>
|
||||
<Box sx={{ display: 'flex', flexDirection: 'column', gap: 3 }}>
|
||||
{/* 分块方法 */}
|
||||
<ChunkMethodItem />
|
||||
</Box>
|
||||
</AccordionDetails>
|
||||
</Accordion>
|
||||
)}
|
||||
{/* 基础配置:已在 ChunkMethodForm 中处理,且仅在 buildIn 时显示 */}
|
||||
|
||||
{/* 第二部分:RAPTOR策略 */}
|
||||
<Accordion>
|
||||
|
||||
@@ -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
|
||||
<ConfigurationFormContainer>
|
||||
<MainContainer>
|
||||
{/* 第一部分:basicConfig 基础配置 */}
|
||||
{buildMode === 'buildIn' && (
|
||||
{parseType === ParseType.BuildIn && (
|
||||
<Accordion defaultExpanded>
|
||||
<AccordionSummary expandIcon={<ExpandMoreIcon />}>
|
||||
<Typography variant="h6">{t('knowledge.config.basicConfig')}</Typography>
|
||||
</AccordionSummary>
|
||||
<AccordionDetails>
|
||||
{/* 切片方法 */}
|
||||
<Box sx={{ mb: 3 }}>
|
||||
<ChunkMethodItem />
|
||||
</Box>
|
||||
<Divider />
|
||||
|
||||
<Box sx={{ display: 'flex', flexDirection: 'column', gap: 3, mt: 3 }}>
|
||||
|
||||
@@ -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
|
||||
<ConfigurationFormContainer>
|
||||
<MainContainer>
|
||||
{/* 第一部分:basicConfig 基础配置 */}
|
||||
{buildMode === 'buildIn' && (
|
||||
{parseType === ParseType.BuildIn && (
|
||||
<Accordion defaultExpanded>
|
||||
<AccordionSummary expandIcon={<ExpandMoreIcon />}>
|
||||
<Typography variant="h6">{t('knowledge.config.basicConfig')}</Typography>
|
||||
|
||||
@@ -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
|
||||
<ConfigurationFormContainer>
|
||||
<MainContainer>
|
||||
{/* 第一部分:basicConfig 基础配置 */}
|
||||
{buildMode === 'buildIn' && (
|
||||
{parseType === ParseType.BuildIn && (
|
||||
<Accordion defaultExpanded>
|
||||
<AccordionSummary expandIcon={<ExpandMoreIcon />}>
|
||||
<Typography variant="h6">{t('knowledge.config.basicConfig')}</Typography>
|
||||
</AccordionSummary>
|
||||
<AccordionDetails>
|
||||
{/* 切片方法 */}
|
||||
<Box sx={{ mb: 3 }}>
|
||||
<ChunkMethodItem />
|
||||
</Box>
|
||||
<Divider />
|
||||
|
||||
<Box sx={{ display: 'flex', flexDirection: 'column', gap: 3, mt: 3 }}>
|
||||
|
||||
@@ -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
|
||||
<ConfigurationFormContainer>
|
||||
<MainContainer>
|
||||
{/* 第一部分:basicConfig 基础配置 */}
|
||||
{buildMode === 'buildIn' && (
|
||||
{parseType === ParseType.BuildIn && (
|
||||
<Accordion defaultExpanded>
|
||||
<AccordionSummary expandIcon={<ExpandMoreIcon />}>
|
||||
<Typography variant="h6">{t('knowledge.config.basicConfig')}</Typography>
|
||||
</AccordionSummary>
|
||||
<AccordionDetails>
|
||||
{/* 切片方法 */}
|
||||
<Box sx={{ mb: 3 }}>
|
||||
<ChunkMethodItem />
|
||||
</Box>
|
||||
<Divider />
|
||||
|
||||
<Box sx={{ display: 'flex', flexDirection: 'column', gap: 3, mt: 3 }}>
|
||||
|
||||
@@ -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 (
|
||||
<ConfigurationFormContainer>
|
||||
<Box sx={{ display: 'flex', flexDirection: 'column', gap: 3 }}>
|
||||
{/* 第一部分:基础配置 */}
|
||||
{buildMode === 'buildIn' && (
|
||||
<Accordion defaultExpanded>
|
||||
<AccordionSummary expandIcon={<ExpandMoreIcon />}>
|
||||
<Typography variant="h6">{t('knowledge.config.basicConfig')}</Typography>
|
||||
</AccordionSummary>
|
||||
<AccordionDetails>
|
||||
<Box sx={{ display: 'flex', flexDirection: 'column', gap: 3 }}>
|
||||
{/* 分块方法 */}
|
||||
<ChunkMethodItem />
|
||||
</Box>
|
||||
</AccordionDetails>
|
||||
</Accordion>
|
||||
)}
|
||||
{/* 基础配置:已在 ChunkMethodForm 中处理,且仅在 buildIn 时显示 */}
|
||||
|
||||
{/* 第二部分:RAPTOR策略 */}
|
||||
<Accordion>
|
||||
|
||||
@@ -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 (
|
||||
<ConfigurationFormContainer>
|
||||
<Box sx={{ display: 'flex', flexDirection: 'column', gap: 3 }}>
|
||||
{/* 第一部分:基础配置 */}
|
||||
{buildMode === 'buildIn' && (
|
||||
{parseType === ParseType.BuildIn && (
|
||||
<Accordion defaultExpanded>
|
||||
<AccordionSummary expandIcon={<ExpandMoreIcon />}>
|
||||
<Typography variant="h6">{t('knowledge.config.basicConfig')}</Typography>
|
||||
</AccordionSummary>
|
||||
<AccordionDetails>
|
||||
{/* 切片方法 */}
|
||||
<Box sx={{ mb: 3 }}>
|
||||
<ChunkMethodItem />
|
||||
</Box>
|
||||
<Divider />
|
||||
<Divider />
|
||||
|
||||
<Box sx={{ display: 'flex', flexDirection: 'column', gap: 3, mt: 3 }}>
|
||||
{/* 版面识别 */}
|
||||
|
||||
@@ -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 (
|
||||
<ConfigurationFormContainer>
|
||||
<Box sx={{ display: 'flex', flexDirection: 'column', gap: 3 }}>
|
||||
{/* 第一部分:基础配置 */}
|
||||
{buildMode === 'buildIn' && (
|
||||
<Accordion defaultExpanded>
|
||||
<AccordionSummary expandIcon={<ExpandMoreIcon />}>
|
||||
<Typography variant="h6">{t('knowledge.config.basicConfig')}</Typography>
|
||||
</AccordionSummary>
|
||||
<AccordionDetails>
|
||||
<Box sx={{ display: 'flex', flexDirection: 'column', gap: 3 }}>
|
||||
{/* 分块方法 */}
|
||||
<ChunkMethodItem />
|
||||
</Box>
|
||||
</AccordionDetails>
|
||||
</Accordion>
|
||||
)}
|
||||
{/* 基础配置:已在 ChunkMethodForm 中处理,且仅在 buildIn 时显示 */}
|
||||
|
||||
{/* 第二部分:RAPTOR策略 */}
|
||||
<Accordion>
|
||||
|
||||
@@ -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 (
|
||||
<ConfigurationFormContainer>
|
||||
<Box sx={{ display: 'flex', flexDirection: 'column', gap: 3 }}>
|
||||
{/* 第一部分:基础配置 */}
|
||||
{buildMode === 'buildIn' && (
|
||||
<Accordion defaultExpanded>
|
||||
<AccordionSummary expandIcon={<ExpandMoreIcon />}>
|
||||
<Typography variant="h6">{t('knowledge.config.basicConfig')}</Typography>
|
||||
</AccordionSummary>
|
||||
<AccordionDetails>
|
||||
<Box sx={{ display: 'flex', flexDirection: 'column', gap: 3 }}>
|
||||
{/* 分块方法 */}
|
||||
<ChunkMethodItem />
|
||||
</Box>
|
||||
</AccordionDetails>
|
||||
</Accordion>
|
||||
)}
|
||||
{/* 基础配置:已在 ChunkMethodForm 中处理,且仅在 buildIn 时显示 */}
|
||||
|
||||
{/* 第二部分:RAPTOR策略 */}
|
||||
<Accordion>
|
||||
|
||||
@@ -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 (
|
||||
<ConfigurationFormContainer>
|
||||
<Box sx={{ display: 'flex', flexDirection: 'column', gap: 3 }}>
|
||||
{/* 第一部分:基础配置 */}
|
||||
{buildMode === 'buildIn' && (
|
||||
<Accordion defaultExpanded>
|
||||
<AccordionSummary expandIcon={<ExpandMoreIcon />}>
|
||||
<Typography variant="h6">{t('knowledge.config.basicConfig')}</Typography>
|
||||
</AccordionSummary>
|
||||
<AccordionDetails>
|
||||
<Box sx={{ display: 'flex', flexDirection: 'column', gap: 3 }}>
|
||||
{/* 分块方法 */}
|
||||
<ChunkMethodItem />
|
||||
</Box>
|
||||
</AccordionDetails>
|
||||
</Accordion>
|
||||
)}
|
||||
{/* 基础配置:已在 ChunkMethodForm 中处理,且仅在 buildIn 时显示 */}
|
||||
|
||||
{/* 第二部分:RAPTOR策略 */}
|
||||
<Accordion>
|
||||
|
||||
@@ -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 (
|
||||
<ConfigurationFormContainer>
|
||||
<Box sx={{ display: 'flex', flexDirection: 'column', gap: 3 }}>
|
||||
{/* 第一部分:基础配置 */}
|
||||
{buildMode === 'buildIn' && (
|
||||
<Accordion defaultExpanded>
|
||||
<AccordionSummary expandIcon={<ExpandMoreIcon />}>
|
||||
<Typography variant="h6">{t('knowledge.config.basicConfig')}</Typography>
|
||||
</AccordionSummary>
|
||||
<AccordionDetails>
|
||||
{/* 切片方法 */}
|
||||
<Box sx={{ mb: 3 }}>
|
||||
<ChunkMethodItem />
|
||||
</Box>
|
||||
<Divider />
|
||||
</AccordionDetails>
|
||||
</Accordion>
|
||||
)}
|
||||
{/* 基础配置:已在 ChunkMethodForm 中处理,且仅在 buildIn 时显示 */}
|
||||
|
||||
{/* 第二部分:RAPTOR策略 */}
|
||||
<Accordion>
|
||||
|
||||
@@ -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}
|
||||
/>
|
||||
|
||||
{/* 创建知识库对话框 */}
|
||||
<CreateKnowledgeDialog
|
||||
open={createDialogOpen}
|
||||
onClose={() => setCreateDialogOpen(false)}
|
||||
onSuccess={() => {
|
||||
setCreateDialogOpen(false);
|
||||
refresh();
|
||||
}}
|
||||
/>
|
||||
|
||||
{/* 分页组件 */}
|
||||
{totalPages > 1 && (
|
||||
<Box sx={{ display: 'flex', justifyContent: 'center', mt: 4 }}>
|
||||
|
||||
@@ -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 (
|
||||
<Box sx={{ p: 3 }}>
|
||||
{/* 面包屑导航 */}
|
||||
<KnowledgeBreadcrumbs
|
||||
kbItems={[
|
||||
{
|
||||
label: t('knowledgeSettings.knowledgeBase'),
|
||||
path: '/knowledge'
|
||||
},
|
||||
{
|
||||
label: knowledge?.name || t('knowledgeSettings.knowledgeBaseDetail'),
|
||||
path: `/knowledge/${kbId}`
|
||||
},
|
||||
{
|
||||
label: t('knowledgeSettings.fileLogs')
|
||||
}
|
||||
]}
|
||||
/>
|
||||
{/* 顶部统计卡片占位 */}
|
||||
<Grid container spacing={2} sx={{ mb: 2 }}>
|
||||
<Grid size={{ xs: 12, md: 4 }}>
|
||||
@@ -124,8 +149,8 @@ function KnowledgeLogsPage() {
|
||||
{/* Tabs & Filter/Search */}
|
||||
<Box display="flex" alignItems="center" gap={2} sx={{ mb: 2 }}>
|
||||
<Tabs value={activeTab} onChange={(_, v) => setActiveTab(v)}>
|
||||
<Tab value="file" label={t('knowledgeDetails.file')} />
|
||||
<Tab value="dataset" label={t('knowledgeDetails.dataset')} />
|
||||
<Tab value="fileLogs" label={t('knowledgeDetails.file')} />
|
||||
<Tab value="datasetLogs" label={t('knowledgeDetails.dataset')} />
|
||||
</Tabs>
|
||||
{/* <IconButton aria-label="filter"><FilterListIcon /></IconButton> */}
|
||||
<Box display="flex" alignItems="center" gap={1} sx={{ ml: 'auto' }}>
|
||||
@@ -155,6 +180,20 @@ function KnowledgeLogsPage() {
|
||||
localeText={getDataGridLocale().components.MuiDataGrid.defaultProps.localeText}
|
||||
/>
|
||||
</Paper>
|
||||
|
||||
{/* 返回按钮 */}
|
||||
<Fab
|
||||
color="primary"
|
||||
aria-label={t('knowledgeSettings.backToKnowledgeDetail')}
|
||||
onClick={handleNavigateBack}
|
||||
sx={{
|
||||
position: 'fixed',
|
||||
bottom: 128,
|
||||
right: 64,
|
||||
}}
|
||||
>
|
||||
<ArrowBackIcon />
|
||||
</Fab>
|
||||
</Box>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -106,7 +106,7 @@ 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);
|
||||
|
||||
@@ -194,27 +194,27 @@ function KnowledgeBaseSetting() {
|
||||
|
||||
<FormProvider {...form}>
|
||||
<Form onSubmit={handleSubmit}>
|
||||
<Box sx={{ borderBottom: 1, borderColor: 'divider' }}>
|
||||
<Tabs value={tabValue} onChange={handleTabChange} aria-label={t('knowledgeSettings.settingsTabs')}>
|
||||
<Tab label={t('knowledgeSettings.basicInfo')} value="generalForm" />
|
||||
<Tab label={t('knowledgeSettings.parseConfig')} value="chunkMethodForm" />
|
||||
</Tabs>
|
||||
</Box>
|
||||
<Box sx={{ borderBottom: 1, borderColor: 'divider' }}>
|
||||
<Tabs value={tabValue} onChange={handleTabChange} aria-label={t('knowledgeSettings.settingsTabs')}>
|
||||
<Tab label={t('knowledgeSettings.basicInfo')} value="generalForm" />
|
||||
<Tab label={t('knowledgeSettings.parseConfig')} value="chunkMethodForm" />
|
||||
</Tabs>
|
||||
</Box>
|
||||
|
||||
<Box sx={{ mt: 3 }}>
|
||||
{tabValue === 'generalForm' && (
|
||||
<GeneralForm />
|
||||
)}
|
||||
{tabValue === 'chunkMethodForm' && (
|
||||
<ChunkMethodForm />
|
||||
)}
|
||||
</Box>
|
||||
<Box sx={{ mt: 3 }}>
|
||||
{tabValue === 'generalForm' && (
|
||||
<GeneralForm />
|
||||
)}
|
||||
{tabValue === 'chunkMethodForm' && (
|
||||
<ChunkMethodForm />
|
||||
)}
|
||||
</Box>
|
||||
|
||||
<Box sx={{ mt: 3, display: 'flex', justifyContent: 'flex-end' }}>
|
||||
<Button type="submit" variant="contained">
|
||||
{t('common.save')}
|
||||
</Button>
|
||||
</Box>
|
||||
<Box sx={{ mt: 3, display: 'flex', justifyContent: 'flex-end' }}>
|
||||
<Button type="submit" variant="contained">
|
||||
{t('common.save')}
|
||||
</Button>
|
||||
</Box>
|
||||
</Form>
|
||||
</FormProvider>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user