Fix: Metadata tips info (#12209)

### What problem does this PR solve?

Fix: Metadata tips info

### Type of change

- [x] Bug Fix (non-breaking change which fixes an issue)
This commit is contained in:
chanx
2025-12-25 15:55:06 +08:00
committed by GitHub
parent f6217bb990
commit 2817be14d5
10 changed files with 76 additions and 25 deletions

View File

@ -170,7 +170,7 @@ const Modal: ModalType = ({
<DialogPrimitive.Root open={open} onOpenChange={handleChange}>
<DialogPrimitive.Portal>
<DialogPrimitive.Overlay
className="fixed inset-0 z-50 bg-bg-card backdrop-blur-sm flex items-center justify-center p-4"
className="fixed inset-0 z-50 bg-bg-card backdrop-blur-[1px] flex items-center justify-center p-4"
onClick={() => maskClosable && onOpenChange?.(false)}
>
<DialogPrimitive.Content

View File

@ -37,6 +37,15 @@ const handleDocHelpCLick = () => {
window.open('https://ragflow.io/docs/dev/category/guides', 'target');
};
const PathMap = {
[Routes.Datasets]: [Routes.Datasets],
[Routes.Chats]: [Routes.Chats],
[Routes.Searches]: [Routes.Searches],
[Routes.Agents]: [Routes.Agents],
[Routes.Memories]: [Routes.Memories, Routes.Memory, Routes.MemoryMessage],
[Routes.Files]: [Routes.Files],
} as const;
export function Header() {
const { t } = useTranslation();
const { pathname } = useLocation();
@ -106,6 +115,18 @@ export function Header() {
navigate(Routes.Root);
}, [navigate]);
const activePathName = useMemo(() => {
const name = Object.keys(PathMap).find((x: string) => {
const pathList = PathMap[x as keyof typeof PathMap];
return pathList.some((y: string) => pathname.indexOf(y) > -1);
});
if (name) {
return name;
} else {
return pathname;
}
}, [pathname]);
return (
<section className="py-5 px-10 flex justify-between items-center ">
<div className="flex items-center gap-4">
@ -121,7 +142,7 @@ export function Header() {
sizeType="xl"
buttonSize="xl"
options={options}
value={pathname}
value={activePathName}
onChange={handleChange}
activeClassName="text-bg-base bg-metallic-gradient border-b-[#00BEB4] border-b-2"
></Segmented>

View File

@ -184,6 +184,10 @@ Procedural Memory: Learned skills, habits, and automated procedures.`,
'Value already exists. Confirm to merge duplicates and combine all associated files.',
fieldNameExists:
'Field name already exists. Confirm to merge duplicates and combine all associated files.',
valueSingleExists:
'Value already exists. Confirm to merge duplicates .',
fieldSingleNameExists:
'Field name already exists. Confirm to merge duplicates .',
fieldExists: 'Field already exists.',
fieldSetting: 'Field settings',
changesAffectNewParses: 'Changes affect new parses only.',

View File

@ -171,11 +171,16 @@ export default {
descriptionTip:
'提供描述或示例来指导大语言模型为此字段提取值。如果留空,将依赖字段名称。',
restrictTDefinedValuesTip:
'枚举模式:限制大语言模型提取预设值。在下方定义值。',
'枚举模式:限制大语言模型提取的值只能匹配预设值。在下方定义值。',
valueExists: '值已存在。确认合并重复项并组合所有关联文件。',
fieldNameExists: '字段名已存在。确认合并重复项并组合所有关联文件。',
valueSingleExists: '值已存在。确认合并重复项。',
fieldSingleNameExists: '字段名已存在。确认合并重复项。',
fieldExists: '字段名已存在。',
fieldSetting: '字段设置',
changesAffectNewParses: '更改仅影响新解析。',
editMetadataForDataset: '查看和编辑元数据 ',
restrictDefinedValues: '限制为已定义值',
changesAffectNewParses: '更改仅影响新解析。',
editMetadataForDataset: '查看和编辑元数据 ',
restrictDefinedValues: '限制为已定义值',
metadataGenerationSettings: '元数据生成设置',
manageMetadataForDataset: '管理此数据集的元数据',
manageMetadata: '管理元数据',
@ -185,11 +190,8 @@ export default {
action: '操作',
field: '字段',
description: '描述',
fieldName: '字段名',
fieldName: '字段名',
editMetadata: '编辑元数据',
valueExists: '值已存在。确认合并重复项并组合所有关联文件。',
fieldNameExists: '字段名已存在。确认合并重复项并组合所有关联文件。',
fieldExists: '字段名已存在。',
deleteWarn: '此 {{field}} 将从所有关联文件中移除',
deleteManageFieldAllWarn:
'此字段及其所有对应值将从所有关联的文件中删除。',

View File

@ -32,28 +32,42 @@ export const MetadataDeleteMap = (
t: TFunction<'translation', undefined>,
): Record<
MetadataType,
{ title: string; warnFieldText: string; warnValueText: string }
{
title: string;
warnFieldText: string;
warnValueText: string;
warnFieldName: string;
warnValueName: string;
}
> => {
return {
[MetadataType.Manage]: {
title: t('common.delete') + ' ' + t('knowledgeDetails.metadata.metadata'),
warnFieldText: t('knowledgeDetails.metadata.deleteManageFieldAllWarn'),
warnValueText: t('knowledgeDetails.metadata.deleteManageValueAllWarn'),
warnFieldName: t('knowledgeDetails.metadata.fieldNameExists'),
warnValueName: t('knowledgeDetails.metadata.valueExists'),
},
[MetadataType.Setting]: {
title: t('common.delete') + ' ' + t('knowledgeDetails.metadata.metadata'),
warnFieldText: t('knowledgeDetails.metadata.deleteSettingFieldWarn'),
warnValueText: t('knowledgeDetails.metadata.deleteSettingValueWarn'),
warnFieldName: t('knowledgeDetails.metadata.fieldExists'),
warnValueName: t('knowledgeDetails.metadata.valueExists'),
},
[MetadataType.UpdateSingle]: {
title: t('common.delete') + ' ' + t('knowledgeDetails.metadata.metadata'),
warnFieldText: t('knowledgeDetails.metadata.deleteManageFieldSingleWarn'),
warnValueText: t('knowledgeDetails.metadata.deleteManageValueSingleWarn'),
warnFieldName: t('knowledgeDetails.metadata.fieldSingleNameExists'),
warnValueName: t('knowledgeDetails.metadata.valueSingleExists'),
},
[MetadataType.SingleFileSetting]: {
title: t('common.delete') + ' ' + t('knowledgeDetails.metadata.metadata'),
warnFieldText: t('knowledgeDetails.metadata.deleteSettingFieldWarn'),
warnValueText: t('knowledgeDetails.metadata.deleteSettingValueWarn'),
warnFieldName: t('knowledgeDetails.metadata.fieldExists'),
warnValueName: t('knowledgeDetails.metadata.valueSingleExists'),
},
};
};

View File

@ -47,10 +47,10 @@ export const useManageValues = (props: IManageValuesProps) => {
setValueError((prev) => {
return {
...prev,
field:
type === MetadataType.Setting
? t('knowledgeDetails.metadata.fieldExists')
: t('knowledgeDetails.metadata.fieldNameExists'),
field: MetadataDeleteMap(t)[type as MetadataType].warnFieldName,
// type === MetadataType.Setting
// ? t('knowledgeDetails.metadata.fieldExists')
// : t('knowledgeDetails.metadata.fieldNameExists'),
};
});
} else if (field === 'field' && !existsKeys.includes(value)) {
@ -103,7 +103,8 @@ export const useManageValues = (props: IManageValuesProps) => {
setValueError((prev) => {
return {
...prev,
values: t('knowledgeDetails.metadata.valueExists'),
values: MetadataDeleteMap(t)[type as MetadataType].warnValueName,
// t('knowledgeDetails.metadata.valueExists'),
};
});
} else {
@ -120,7 +121,7 @@ export const useManageValues = (props: IManageValuesProps) => {
return newValues;
});
},
[t],
[t, type],
);
// Handle blur event, synchronize to main state

View File

@ -485,7 +485,7 @@ export const LLMSelect = ({
export function LLMModelItem({ line = 1, isEdit, label, name }: IProps) {
const { t } = useTranslate('knowledgeConfiguration');
const form = useFormContext();
const disabled = useHasParsedDocument(isEdit);
// const disabled = useHasParsedDocument(isEdit);
return (
<>
<FormField
@ -515,7 +515,7 @@ export function LLMModelItem({ line = 1, isEdit, label, name }: IProps) {
<LLMSelect
isEdit={!!isEdit}
field={field}
disabled={disabled}
disabled={false}
></LLMSelect>
</FormControl>
</div>

View File

@ -47,7 +47,7 @@ const InfoItem: React.FC<{
<span className="text-text-secondary text-sm">{label}</span>
<Tooltip>
<TooltipTrigger asChild>
<span className="text-text-primary mt-1 truncate max-w-[200px]">
<span className="text-text-primary mt-1 truncate w-full">
{value}
</span>
</TooltipTrigger>

View File

@ -3,6 +3,7 @@
import message from '@/components/ui/message';
import { useSetModalState } from '@/hooks/common-hooks';
import { useHandleSearchChange } from '@/hooks/logic-hooks';
import { useFetchTenantInfo } from '@/hooks/use-user-setting-request';
import memoryService, { updateMemoryById } from '@/services/memory-service';
import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
import { useDebounce } from 'ahooks';
@ -216,15 +217,22 @@ export const useRenameMemory = () => {
const { updateMemory } = useUpdateMemory();
const { createMemory } = useCreateMemory();
const [loading, setLoading] = useState(false);
const { data: tenantInfo } = useFetchTenantInfo();
const handleShowChatRenameModal = useCallback(
(record?: IMemory) => {
if (record) {
setMemory(record);
const embd_id = record.embd_id || tenantInfo?.embd_id;
const llm_id = record.llm_id || tenantInfo?.llm_id;
setMemory({
...record,
embd_id,
llm_id,
});
}
showChatRenameModal();
},
[showChatRenameModal],
[showChatRenameModal, tenantInfo],
);
const handleHideModal = useCallback(() => {

View File

@ -117,12 +117,13 @@ export const useMessageAction = () => {
data: messageContent,
isPending: fetchMessageContentLoading,
mutateAsync: fetchMessageContent,
} = useMutation<IMessageContentProps>({
} = useMutation<IMessageContentProps, Error, IMessageInfo>({
mutationKey: [
MemoryApiAction.FetchMessageContent,
selectedMessage.message_id,
],
mutationFn: async () => {
mutationFn: async (selectedMessage: IMessageInfo) => {
setShowMessageContentDialog(true);
const res = await memoryService.getMessageContent({
memory_id: memoryId,
@ -140,7 +141,7 @@ export const useMessageAction = () => {
const handleClickMessageContentDialog = useCallback(
(message: IMessageInfo) => {
setSelectedMessage(message);
fetchMessageContent();
fetchMessageContent(message);
},
[fetchMessageContent],
);