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:
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;
|
||||
Reference in New Issue
Block a user