-
-
-
+
+
diff --git a/src/frontend/platform/src/pages/KnowledgePage/components/FileUploadStep2.tsx b/src/frontend/platform/src/pages/KnowledgePage/components/FileUploadStep2.tsx
index 558ae90fe..e00522cae 100644
--- a/src/frontend/platform/src/pages/KnowledgePage/components/FileUploadStep2.tsx
+++ b/src/frontend/platform/src/pages/KnowledgePage/components/FileUploadStep2.tsx
@@ -28,6 +28,7 @@ interface IProps {
onNext: (step: number, config?: any) => void
onPrev: () => void
isAdjustMode?: boolean
+ kId?: string | number
}
const enum DisplayModeType {
OnlyTables = 'table',
@@ -86,26 +87,50 @@ const FileUploadStep2 = forwardRef(({ step, resultFiles, isSubmitting, onNext, o
useEffect(() => {
applyRuleRef.current = applyRule;
}, [applyRule]);
- // 起始行不能大于结束行校验
+ // 起始行与切分参数校验
const vildateCell = () => {
+ // 表头行区间校验
if (applyEachCell
? rules.fileList.some(file => file.excelRule.append_header && Number(file.excelRule.header_start_row) > Number(file.excelRule.header_end_row))
: cellGeneralConfig.append_header && Number(cellGeneralConfig.header_start_row) > Number(cellGeneralConfig.header_end_row)) {
- return toast({
+ toast({
variant: 'warning',
description: '最小行不能大于最大行'
})
+ return true
}
+
+ // 切分长度与重叠长度校验
+ const chunkSizeNum = Number((rules as any)?.chunkSize ?? (rules as any)?.chunk_size ?? 0)
+ const chunkOverlapNum = Number((rules as any)?.chunkOverlap ?? (rules as any)?.chunk_overlap ?? 0)
+ if (!Number.isNaN(chunkSizeNum) && !Number.isNaN(chunkOverlapNum) && chunkOverlapNum > chunkSizeNum) {
+ toast({
+ variant: 'warning',
+ description: '重叠区长度不能大于预期切分长度'
+ })
+ return true
+ }
+
return false
}
const { toast } = useToast()
const internalHandleNext = () => {
console.log(step, displayStep,'previewCount11');
+ // 全局校验:无论在哪个分支,都先校验参数
+ if (vildateCell()) return;
+ // 规则校验:过滤后若为空或存在空regex,阻止继续
+ const hasEmptyCustomRule = (strategies || []).some(s => String(s?.regex ?? '') === '');
+ if (hasEmptyCustomRule) {
+ toast({ variant: 'warning', description: '自定义规则不能为空' });
+ return;
+ }
+ if (!rules.separator || rules.separator.length === 0) {
+ toast({ variant: 'warning', description: '请至少添加一个分割规则' });
+ return;
+ }
const nextStep = step + 1;
if (step === 2 || displayStep === 2) {
- if (vildateCell()) return;
-
const config = {
applyEachCell,
cellGeneralConfig,
@@ -153,6 +178,15 @@ useEffect(() => {
}, [applyEachCell, cellGeneralConfig, rules]);
const handlePreview = () => {
if (vildateCell()) return
+ const hasEmptyCustomRule = (strategies || []).some(s => String(s?.regex ?? '') === '');
+ if (hasEmptyCustomRule) {
+ toast({ variant: 'warning', description: '自定义规则不能为空' });
+ return;
+ }
+ if (!rules.separator || rules.separator.length === 0) {
+ toast({ variant: 'warning', description: '请至少添加一个分割规则' });
+ return;
+ }
setShowPreview(true)
setPreviewLoading(true);
setPreviewCount(c => c + 1) // 刷新分段
@@ -197,7 +231,7 @@ useEffect(() => {
rules={rules}
setRules={setRules}
strategies={strategies}
- setStrategies={setStrategies}
+ setStrategies={(next) => setStrategies(next)}
showPreview={showPreview}
/>
@@ -231,7 +265,7 @@ useEffect(() => {
{/* 原文预览 & 分段预览:预览时占50% */}
{
- (showPreview || step === 3) ? (
+ (showPreview || (step === 3&&!isAdjustMode)) ? (
{