From 4d7f9c4dae3668508e8cff9c2c460fc2771e8880 Mon Sep 17 00:00:00 2001 From: zhaoying Date: Wed, 29 Apr 2026 11:28:13 +0800 Subject: [PATCH] feat(web): show ids --- web/src/components/Tag/index.tsx | 5 ++-- .../[knowledgeBaseId]/DocumentDetails.tsx | 23 +++++++++++++-- .../[knowledgeBaseId]/Private.tsx | 25 ++++++++++++++--- .../KnowledgeBase/components/InfoPanel.tsx | 3 +- .../components/KnowledgeGraph.tsx | 2 ++ .../components/RecallTestResult.tsx | 28 +++++++++++++------ web/src/views/KnowledgeBase/index.tsx | 4 ++- 7 files changed, 72 insertions(+), 18 deletions(-) diff --git a/web/src/components/Tag/index.tsx b/web/src/components/Tag/index.tsx index e7307843..3601b984 100644 --- a/web/src/components/Tag/index.tsx +++ b/web/src/components/Tag/index.tsx @@ -24,6 +24,7 @@ export interface TagProps { /** Additional CSS classes */ className?: string; variant?: 'outline' | 'borderless' + onClick?: () => void; } /** Color theme mappings with text, border, and background colors */ @@ -38,9 +39,9 @@ const colors = { } /** Custom tag component with color themes */ -const Tag: FC = ({ color = 'processing', children, className, variant = 'outline' }) => { +const Tag: FC = ({ color = 'processing', children, className, variant = 'outline', onClick }) => { return ( - + {children} ) diff --git a/web/src/views/KnowledgeBase/[knowledgeBaseId]/DocumentDetails.tsx b/web/src/views/KnowledgeBase/[knowledgeBaseId]/DocumentDetails.tsx index f3716cd3..3a720598 100644 --- a/web/src/views/KnowledgeBase/[knowledgeBaseId]/DocumentDetails.tsx +++ b/web/src/views/KnowledgeBase/[knowledgeBaseId]/DocumentDetails.tsx @@ -10,7 +10,7 @@ import { useEffect, useState, useRef, type FC } from 'react'; import { useNavigate, useParams, useLocation, useSearchParams } from 'react-router-dom'; import { useTranslation } from 'react-i18next'; import { useBreadcrumbManager, type BreadcrumbPath } from '@/hooks/useBreadcrumbManager'; -import { Button, Spin, message, Switch } from 'antd'; +import { Button, Spin, message, Switch, App } from 'antd'; import { getDocumentDetail, getDocumentChunkList, downloadFile, updateDocument, updateDocumentChunk, createDocumentChunk, getFileUrl } from '@/api/knowledgeBase'; import type { KnowledgeBaseDocumentData, RecallTestData } from '@/views/KnowledgeBase/types'; import { formatDateTime } from '@/utils/format'; @@ -21,9 +21,11 @@ import DocumentPreview from '@/components/DocumentPreview'; import InsertModal, { type InsertModalRef } from '../components/InsertModal'; import exitIcon from '@/assets/images/knowledgeBase/exit.png'; const imagePath = 'https://devapi.mem.redbearai.com' +import copy from 'copy-to-clipboard' const DocumentDetails: FC = () => { const { t } = useTranslation(); const navigate = useNavigate(); + const { message: messageApi } = App.useApp() const { knowledgeBaseId } = useParams<{ knowledgeBaseId: string }>(); const location = useLocation(); const { updateBreadcrumbs } = useBreadcrumbManager({ @@ -100,9 +102,25 @@ const DocumentDetails: FC = () => { }, [keywords]); + const handleCopy = (value?: string) => { + if (!value) return + copy(value) + messageApi.success(t('common.copySuccess')) + } + const formatDocumentInfo = (doc: KnowledgeBaseDocumentData): InfoItem[] => { return [ + { + key: 'file_id', + label: 'ID', + value: handleCopy(doc.file_id)}> + {doc.file_id} + + , + }, { key: 'file_name', label: t('knowledgeBase.fileName') || '文件名', @@ -387,7 +405,7 @@ const DocumentDetails: FC = () => {
{/* Left: Document info */}
-
+
{ editable={true} onItemClick={handleChunkClick} parserMode={parserMode} + handleCopy={handleCopy} />
diff --git a/web/src/views/KnowledgeBase/[knowledgeBaseId]/Private.tsx b/web/src/views/KnowledgeBase/[knowledgeBaseId]/Private.tsx index 0198f363..b9dd3a41 100644 --- a/web/src/views/KnowledgeBase/[knowledgeBaseId]/Private.tsx +++ b/web/src/views/KnowledgeBase/[knowledgeBaseId]/Private.tsx @@ -39,6 +39,8 @@ import { formatDateTime } from '@/utils/format'; import KnowledgeGraphCard from '../components/KnowledgeGraphCard'; import { useBreadcrumbManager, type BreadcrumbItem } from '@/hooks/useBreadcrumbManager'; import './Private.css' +import Tag from '@/components/Tag' +import copy from 'copy-to-clipboard' // Tree node data type const Private: FC = () => { @@ -570,7 +572,7 @@ const Private: FC = () => { return ( {value === 1 ? t('knowledgeBase.completed') : value === 0 ? t('knowledgeBase.pending') : t('knowledgeBase.processing')} @@ -613,6 +615,7 @@ const Private: FC = () => { title: t('knowledgeBase.processingMode'), dataIndex: 'parser_id', key: 'parser_id', + width: 100, }, { title: t('knowledgeBase.dataSize'), @@ -629,6 +632,11 @@ const Private: FC = () => { ) } }, + { + title: 'ID', + dataIndex: 'id', + key: 'id', + }, { title: t('common.operation'), @@ -762,11 +770,16 @@ const Private: FC = () => { setIsSyncing(false); }; + const handleCopy = (value: string) => { + copy(value) + messageApi.success(t('common.copySuccess')) + } + return ( <>
{folder && ( -
+
{
- edit + edit {t('knowledgeBase.edit')} {t('knowledgeBase.name')}
-
+
+ handleCopy(knowledgeBase.id)}> + ID: {knowledgeBase.id} + + {t('knowledgeBase.created')} {t('knowledgeBase.time')}: {formatDateTime(knowledgeBase.created_at) || '-'} {t('knowledgeBase.updated')} {t('knowledgeBase.time')}: {formatDateTime(knowledgeBase.updated_at) || '-'} diff --git a/web/src/views/KnowledgeBase/components/InfoPanel.tsx b/web/src/views/KnowledgeBase/components/InfoPanel.tsx index a5d4ace2..a3688284 100644 --- a/web/src/views/KnowledgeBase/components/InfoPanel.tsx +++ b/web/src/views/KnowledgeBase/components/InfoPanel.tsx @@ -7,11 +7,12 @@ * @LastEditTime: 2025-11-19 19:59:36 */ import { Divider } from 'antd'; +import type { ReactElement } from 'react'; export interface InfoItem { key: string; label: string; - value: string | number | undefined; + value: string | number | undefined | ReactElement; icon?: string; } diff --git a/web/src/views/KnowledgeBase/components/KnowledgeGraph.tsx b/web/src/views/KnowledgeBase/components/KnowledgeGraph.tsx index 7096bbd4..6d2124a2 100644 --- a/web/src/views/KnowledgeBase/components/KnowledgeGraph.tsx +++ b/web/src/views/KnowledgeBase/components/KnowledgeGraph.tsx @@ -266,6 +266,8 @@ const KnowledgeGraph: FC = ({ data, loading = false }) => { } }, [nodes]) + console.log('selectedNode', selectedNode) + return ( void; // Click item callback parserMode?: number; // Parser mode, 1 means QA format + handleCopy?: (text?: string) => void; } const RecallTestResult = ({ @@ -38,8 +39,10 @@ const RecallTestResult = ({ editable = false, onItemClick, parserMode = 0, + handleCopy, }: RecallTestResultProps) => { const { t } = useTranslation(); + console.log('chunk data', data) // Parse QA format content const parseQAContent = (content: string) => { @@ -204,13 +207,21 @@ const RecallTestResult = ({ })()}
- {item.metadata?.file_created_at && ( -
- - {formatDateTime(item.metadata.file_created_at)} - -
- )} + + {item.metadata?.file_created_at && ( +
+ + {formatDateTime(item.metadata.file_created_at)} + +
+ )} + handleCopy?.(item.metadata?.doc_id)}> + ID: {item.metadata?.doc_id} + + +
); })} @@ -245,6 +256,7 @@ const RecallTestResult = ({ ); } + // Otherwise use normal rendering return (
diff --git a/web/src/views/KnowledgeBase/index.tsx b/web/src/views/KnowledgeBase/index.tsx index 8c16d7a7..3110ff63 100644 --- a/web/src/views/KnowledgeBase/index.tsx +++ b/web/src/views/KnowledgeBase/index.tsx @@ -574,6 +574,8 @@ const KnowledgeBaseManagement: FC = () => { title={item.name} headerType="borderless" headerClassName="rb:py-3!" + className="rb:cursor-pointer" + onClick={() => handleToDetail(item)} extra={
e.stopPropagation()}> {
} > -
handleToDetail(item)}> +
{/*
{t('knowledgeBase.description')}
*/}