import React, { useState, useEffect } from 'react';
import { useParams, useNavigate } from 'react-router-dom';
import { useForm, type UseFormReturn } from 'react-hook-form';
import {
Box,
Container,
Typography,
Paper,
Tabs,
Tab,
Fab,
Snackbar,
Alert,
} from '@mui/material';
import {
ArrowBack as ArrowBackIcon,
} from '@mui/icons-material';
import { useKnowledgeDetail, useKnowledgeOperations } from '@/hooks/knowledge-hooks';
import GeneralForm, { type BasicFormData } from './components/GeneralForm';
import ChunkMethodForm, { type ConfigFormData } from './components/ChunkMethodForm';
import KnowledgeBreadcrumbs from './components/KnowledgeBreadcrumbs';
import { useSnackbar } from '@/components/Provider/SnackbarProvider';
interface TabPanelProps {
children?: React.ReactNode;
index: number;
value: number;
}
function TabPanel(props: TabPanelProps) {
const { children, value, index, ...other } = props;
return (
{value === index && (
{children}
)}
);
}
function a11yProps(index: number) {
return {
id: `setting-tab-${index}`,
'aria-controls': `setting-tabpanel-${index}`,
};
}
function KnowledgeBaseSetting() {
const { id } = useParams<{ id: string }>();
const navigate = useNavigate();
const [tabValue, setTabValue] = useState(0);
// 获取知识库详情
const { knowledge, loading: detailLoading, refresh } = useKnowledgeDetail(id || '');
const { showMessage } = useSnackbar();
// 知识库操作hooks
const {
updateKnowledgeBasicInfo,
updateKnowledgeModelConfig,
loading: operationLoading
} = useKnowledgeOperations();
// 基础信息表单
const basicForm = useForm({
defaultValues: {
name: '',
description: '',
permission: 'me',
avatar: undefined,
},
});
// 解析配置表单
const configForm = useForm({
defaultValues: {
parser_id: 'naive',
chunk_token_count: 512,
layout_recognize: false,
task_page_size: 0,
},
});
// 当知识库数据加载完成时,更新表单默认值
useEffect(() => {
if (knowledge) {
basicForm.reset({
name: knowledge.name || '',
description: knowledge.description || '',
permission: knowledge.permission || 'me',
avatar: knowledge.avatar,
});
configForm.reset({
// parser_id: knowledge.parser_id || 'naive',
// chunk_token_count: knowledge.chunk_token_count || 512,
// layout_recognize: knowledge.layout_recognize || false,
// task_page_size: knowledge.task_page_size || 0,
});
}
}, [knowledge, basicForm, configForm]);
const handleTabChange = (event: React.SyntheticEvent, newValue: number) => {
setTabValue(newValue);
};
const handleBasicInfoSubmit = async (data: BasicFormData) => {
if (!knowledge) return;
try {
const kb = {
...data,
// parser_id: knowledge.parser_id,
kb_id: knowledge.id,
} as any;
await updateKnowledgeBasicInfo(kb);
showMessage.success('基础信息更新成功');
// 刷新知识库详情
refresh();
} catch (error) {
// showMessage.error('基础信息更新失败');
}
};
const handleConfigSubmit = async (data: ConfigFormData) => {
if (!id) return;
try {
await updateKnowledgeModelConfig({
id,
parser_id: data.parser_id,
// 可以根据需要添加更多配置字段
});
showMessage.success('解析配置更新成功');
// 刷新知识库详情
refresh();
} catch (error) {
// showMessage.error('解析配置更新失败');
}
};
const handleBackToDetail = () => {
navigate(`/knowledge/${id}`);
};
if (detailLoading) {
return (
加载中...
);
}
return (
{/* 面包屑导航 */}
知识库设置
{knowledge?.name}
{/* 返回按钮 */}
);
}
export default KnowledgeBaseSetting;