diff --git a/src/renderer/src/hooks/useKnowledge.ts b/src/renderer/src/hooks/useKnowledge.ts index 3c030cec7b..9dd5d4e536 100644 --- a/src/renderer/src/hooks/useKnowledge.ts +++ b/src/renderer/src/hooks/useKnowledge.ts @@ -15,6 +15,7 @@ import { renameBase, updateBase, updateBases, + updateItem as updateItemAction, updateItemProcessingStatus, updateNotes } from '@renderer/store/knowledge' @@ -117,7 +118,8 @@ export const useKnowledge = (baseId: string) => { await db.knowledge_notes.put(updatedNote) dispatch(updateNotes({ baseId, item: updatedNote })) } - setTimeout(() => KnowledgeQueue.checkAllBases(), 0) + const noteItem = base?.items.find((item) => item.id === noteId) + noteItem && refreshItem(noteItem) } // 获取笔记内容 @@ -125,6 +127,10 @@ export const useKnowledge = (baseId: string) => { return await db.knowledge_notes.get(noteId) } + const updateItem = (item: KnowledgeItem) => { + dispatch(updateItemAction({ baseId, item })) + } + // 移除项目 const removeItem = async (item: KnowledgeItem) => { dispatch(removeItemAction({ baseId, item })) @@ -138,6 +144,27 @@ export const useKnowledge = (baseId: string) => { } } + // 刷新项目 + const refreshItem = async (item: KnowledgeItem) => { + const status = getProcessingStatus(item.id) + + if (status === 'pending' || status === 'processing') { + return + } + + if (base && item.uniqueId) { + await window.api.knowledgeBase.remove({ uniqueId: item.uniqueId, base: getKnowledgeBaseParams(base) }) + updateItem({ + ...item, + processingStatus: 'pending', + processingProgress: 0, + processingError: '', + uniqueId: undefined + }) + setTimeout(() => KnowledgeQueue.checkAllBases(), 0) + } + } + // 更新处理状态 const updateItemStatus = (itemId: string, status: ProcessingStatus, progress?: number, error?: string) => { dispatch( @@ -238,7 +265,9 @@ export const useKnowledge = (baseId: string) => { addNote, updateNoteContent, getNoteContent, + updateItem, updateItemStatus, + refreshItem, getProcessingStatus, getProcessingItemsByType, clearCompleted, diff --git a/src/renderer/src/pages/knowledge/KnowledgeContent.tsx b/src/renderer/src/pages/knowledge/KnowledgeContent.tsx index 4d7cf99ff9..805d8352e8 100644 --- a/src/renderer/src/pages/knowledge/KnowledgeContent.tsx +++ b/src/renderer/src/pages/knowledge/KnowledgeContent.tsx @@ -6,6 +6,7 @@ import { GlobalOutlined, LinkOutlined, PlusOutlined, + RedoOutlined, SearchOutlined } from '@ant-design/icons' import PromptPopup from '@renderer/components/Popups/PromptPopup' @@ -32,30 +33,6 @@ interface KnowledgeContentProps { const fileTypes = ['.pdf', '.docx', '.pptx', '.xlsx', '.txt', '.md'] -const FlexColumn = styled.div` - display: flex; - flex-direction: column; - gap: 8px; -` - -const FlexAlignCenter = styled.div` - display: flex; - align-items: center; - gap: 16px; -` - -const ClickableSpan = styled.span` - cursor: pointer; -` - -const FileIcon = styled(FileTextOutlined)` - font-size: 16px; -` - -const BottomSpacer = styled.div` - min-height: 20px; -` - const KnowledgeContent: FC = ({ selectedBase }) => { const { t } = useTranslation() const { @@ -67,6 +44,7 @@ const KnowledgeContent: FC = ({ selectedBase }) => { directoryItems, addFiles, updateNoteContent, + refreshItem, addUrl, addSitemap, removeItem, @@ -245,7 +223,10 @@ const KnowledgeContent: FC = ({ selectedBase }) => { window.api.file.openPath(file.path)}>{file.origin_name} - + {item.uniqueId &&