From d367c7e226ae6112a80d59b0f2dc3ba8923ba2aa Mon Sep 17 00:00:00 2001
From: chanx <1243304602@qq.com>
Date: Mon, 25 Aug 2025 17:29:15 +0800
Subject: [PATCH] Fix: Optimize dataset page layout and internationalization
and default values for multi selection #3221 (#9695)
### What problem does this PR solve?
Fix: Optimize dataset page layout and internationalization and Fix
setting default values for multi selection drop-down boxes #3221
-Adjust the style and layout of each component on the dataset page
-Add and update multilingual translation content
### Type of change
- [x] Bug Fix (non-breaking change which fixes an issue)
---
.../layout-recognize-form-field.tsx | 2 +-
.../originui/select-with-search.tsx | 5 ++-
.../raptor-form-fields.tsx | 37 +++++++++++++------
web/src/components/ui/multi-select.tsx | 17 +++++++--
web/src/locales/en.ts | 11 ++++++
web/src/locales/zh.ts | 11 ++++++
web/src/pages/dataset/index.tsx | 4 +-
.../setting/chunk-method-learn-more.tsx | 3 +-
.../setting/configuration/common-item.tsx | 4 +-
web/src/pages/dataset/setting/index.tsx | 4 +-
web/src/pages/dataset/sidebar/index.tsx | 8 +++-
web/src/pages/dataset/testing/index.tsx | 7 ++--
.../pages/dataset/testing/testing-result.tsx | 3 +-
web/src/pages/datasets/dataset-card.tsx | 2 +-
web/src/pages/home/datasets.tsx | 20 ++++++----
15 files changed, 99 insertions(+), 39 deletions(-)
diff --git a/web/src/components/layout-recognize-form-field.tsx b/web/src/components/layout-recognize-form-field.tsx
index 50eccbffb..e8e0ed09d 100644
--- a/web/src/components/layout-recognize-form-field.tsx
+++ b/web/src/components/layout-recognize-form-field.tsx
@@ -68,7 +68,7 @@ export function LayoutRecognizeFormField() {
{t('layoutRecognize')}
diff --git a/web/src/components/originui/select-with-search.tsx b/web/src/components/originui/select-with-search.tsx
index da0898be5..495dd8634 100644
--- a/web/src/components/originui/select-with-search.tsx
+++ b/web/src/components/originui/select-with-search.tsx
@@ -28,6 +28,7 @@ import {
PopoverTrigger,
} from '@/components/ui/popover';
import { cn } from '@/lib/utils';
+import { t } from 'i18next';
import { RAGFlowSelectOptionType } from '../ui/select';
import { Separator } from '../ui/separator';
@@ -114,7 +115,9 @@ export const SelectWithSearch = forwardRef<
{selectLabel}
) : (
-
Select value
+
+ {t('common.selectPlaceholder')}
+
)}
{value && allowClear && (
diff --git a/web/src/components/parse-configuration/raptor-form-fields.tsx b/web/src/components/parse-configuration/raptor-form-fields.tsx
index 3552c8976..143ecbcc5 100644
--- a/web/src/components/parse-configuration/raptor-form-fields.tsx
+++ b/web/src/components/parse-configuration/raptor-form-fields.tsx
@@ -3,7 +3,7 @@ import { DocumentParserType } from '@/constants/knowledge';
import { useTranslate } from '@/hooks/common-hooks';
import random from 'lodash/random';
import { Plus } from 'lucide-react';
-import { useCallback, useEffect } from 'react';
+import { useCallback } from 'react';
import { useFormContext, useWatch } from 'react-hook-form';
import { SliderInputFormField } from '../slider-input-form-field';
import { Button } from '../ui/button';
@@ -57,15 +57,19 @@ const RaptorFormFields = () => {
const form = useFormContext();
const { t } = useTranslate('knowledgeConfiguration');
const useRaptor = useWatch({ name: UseRaptorField });
- useEffect(() => {
- if (useRaptor) {
- form.setValue(MaxTokenField, 256);
- form.setValue(ThresholdField, 0.1);
- form.setValue(MaxCluster, 64);
- form.setValue(RandomSeedField, 0);
- form.setValue(Prompt, t('promptText'));
- }
- }, [form, useRaptor, t]);
+
+ const changeRaptor = useCallback(
+ (isUseRaptor: boolean) => {
+ if (isUseRaptor) {
+ form.setValue(MaxTokenField, 256);
+ form.setValue(ThresholdField, 0.1);
+ form.setValue(MaxCluster, 64);
+ form.setValue(RandomSeedField, 0);
+ form.setValue(Prompt, t('promptText'));
+ }
+ },
+ [form],
+ );
const handleGenerate = useCallback(() => {
form.setValue(RandomSeedField, random(10000));
@@ -97,7 +101,10 @@ const RaptorFormFields = () => {
{
+ changeRaptor(e);
+ field.onChange(e);
+ }}
>
@@ -127,7 +134,13 @@ const RaptorFormFields = () => {
-
+
diff --git a/web/src/components/ui/multi-select.tsx b/web/src/components/ui/multi-select.tsx
index 1393c4b60..8899c70d4 100644
--- a/web/src/components/ui/multi-select.tsx
+++ b/web/src/components/ui/multi-select.tsx
@@ -209,10 +209,16 @@ export const MultiSelect = React.forwardRef<
const [isAnimating, setIsAnimating] = React.useState(false);
React.useEffect(() => {
- if (selectedValues === undefined) {
+ if (!selectedValues && props.value) {
+ setSelectedValues(props.value as string[]);
+ }
+ }, [props.value, selectedValues]);
+
+ React.useEffect(() => {
+ if (!selectedValues && !props.value && defaultValue) {
setSelectedValues(defaultValue);
}
- }, [defaultValue, selectedValues]);
+ }, [defaultValue, props.value, selectedValues]);
const flatOptions = React.useMemo(() => {
return options.flatMap((option) =>
@@ -293,15 +299,18 @@ export const MultiSelect = React.forwardRef<
variant="secondary"
className={cn(
isAnimating ? 'animate-bounce' : '',
+ 'px-1',
multiSelectVariants({ variant }),
)}
style={{ animationDuration: `${animation}s` }}
>
-
+
{IconComponent && (
)}
-
{option?.label}
+
+ {option?.label}
+
{
diff --git a/web/src/locales/en.ts b/web/src/locales/en.ts
index 1bd095ea6..e1c7234b7 100644
--- a/web/src/locales/en.ts
+++ b/web/src/locales/en.ts
@@ -1,6 +1,7 @@
export default {
translation: {
common: {
+ selectPlaceholder: 'select value',
delete: 'Delete',
deleteModalTitle: 'Are you sure to delete this item?',
ok: 'Yes',
@@ -94,6 +95,16 @@ export default {
noMoreData: `That's all. Nothing more.`,
},
knowledgeDetails: {
+ created: 'Created',
+ learnMore: 'Learn More',
+ general: 'General',
+ chunkMethodTab: 'Chunk Method',
+ testResults: 'Test Results',
+ testSetting: 'Test Setting',
+ retrievalTesting: 'Retrieval Testing',
+ retrievalTestingDescription:
+ 'Conduct a retrieval test to check if RAGFlow can recover the intended content for the LLM.',
+ Parse: 'Parse',
dataset: 'Dataset',
testing: 'Retrieval testing',
files: 'files',
diff --git a/web/src/locales/zh.ts b/web/src/locales/zh.ts
index 70667800f..1f63d23a6 100644
--- a/web/src/locales/zh.ts
+++ b/web/src/locales/zh.ts
@@ -1,6 +1,7 @@
export default {
translation: {
common: {
+ selectPlaceholder: '请选择',
delete: '删除',
deleteModalTitle: '确定删除吗?',
ok: '是',
@@ -86,6 +87,16 @@ export default {
noMoreData: '没有更多数据了',
},
knowledgeDetails: {
+ created: '创建于',
+ learnMore: '了解更多',
+ general: '通用',
+ chunkMethodTab: '切片方法',
+ testResults: '测试结果',
+ testSetting: '测试设置',
+ retrievalTesting: '知识检索测试',
+ retrievalTestingDescription:
+ '进行检索测试,检查 RAGFlow 是否能够为大语言模型(LLM)恢复预期的内容。',
+ Parse: '解析',
dataset: '数据集',
testing: '检索测试',
configuration: '配置',
diff --git a/web/src/pages/dataset/index.tsx b/web/src/pages/dataset/index.tsx
index 7a60295e5..0f33d6a79 100644
--- a/web/src/pages/dataset/index.tsx
+++ b/web/src/pages/dataset/index.tsx
@@ -30,7 +30,9 @@ export default function DatasetWrapper() {
- {data.name}
+
+ {data.name}
+
diff --git a/web/src/pages/dataset/setting/chunk-method-learn-more.tsx b/web/src/pages/dataset/setting/chunk-method-learn-more.tsx
index 6c6fa976d..850f90db5 100644
--- a/web/src/pages/dataset/setting/chunk-method-learn-more.tsx
+++ b/web/src/pages/dataset/setting/chunk-method-learn-more.tsx
@@ -1,5 +1,6 @@
import { Button } from '@/components/ui/button';
import { cn } from '@/lib/utils';
+import { t } from 'i18next';
import { X } from 'lucide-react';
import { useState } from 'react';
import CategoryPanel from './category-panel';
@@ -26,7 +27,7 @@ export default ({
setVisible(!visible);
}}
>
- Learn More
+ {t('knowledgeDetails.learnMore')}
{t('chunkMethod')}
@@ -69,7 +69,7 @@ export function EmbeddingModelItem() {
{t('embeddingModel')}
diff --git a/web/src/pages/dataset/setting/index.tsx b/web/src/pages/dataset/setting/index.tsx
index 54e6f1911..9115339b9 100644
--- a/web/src/pages/dataset/setting/index.tsx
+++ b/web/src/pages/dataset/setting/index.tsx
@@ -107,7 +107,7 @@ export default function DatasetSettings() {
>
- General
+ {t('knowledgeDetails.general')}
@@ -117,7 +117,7 @@ export default function DatasetSettings() {
>
- Chunk Method
+ {t('knowledgeDetails.chunkMethodTab')}
diff --git a/web/src/pages/dataset/sidebar/index.tsx b/web/src/pages/dataset/sidebar/index.tsx
index 6c49d7a31..45b2dd2fd 100644
--- a/web/src/pages/dataset/sidebar/index.tsx
+++ b/web/src/pages/dataset/sidebar/index.tsx
@@ -67,10 +67,14 @@ export function SideBar({ refreshCount }: PropType) {
{data.name}
- {data.doc_num} files
+
+ {data.doc_num} {t('knowledgeDetails.files')}
+
{formatBytes(data.size)}
-
Created {formatPureDate(data.create_time)}
+
+ {t('knowledgeDetails.created')} {formatPureDate(data.create_time)}
+
diff --git a/web/src/pages/dataset/testing/index.tsx b/web/src/pages/dataset/testing/index.tsx
index 6c64d97ac..358b89b14 100644
--- a/web/src/pages/dataset/testing/index.tsx
+++ b/web/src/pages/dataset/testing/index.tsx
@@ -1,4 +1,5 @@
import { useTestRetrieval } from '@/hooks/use-knowledge-request';
+import { t } from 'i18next';
import { useState } from 'react';
import { TopTitle } from '../dataset-title';
import TestingForm from './testing-form';
@@ -23,8 +24,8 @@ export default function RetrievalTesting() {
@@ -33,7 +34,7 @@ export default function RetrievalTesting() {
- Test setting
+ {t('knowledgeDetails.testSetting')}
{/*