diff --git a/.gitignore b/.gitignore index b644a13e..1e76004b 100644 --- a/.gitignore +++ b/.gitignore @@ -46,3 +46,4 @@ stats.html local .aider* .cursorrules +.cursor/rules diff --git a/src/renderer/src/i18n/locales/en-us.json b/src/renderer/src/i18n/locales/en-us.json index 9e373b9e..3150b8a7 100644 --- a/src/renderer/src/i18n/locales/en-us.json +++ b/src/renderer/src/i18n/locales/en-us.json @@ -316,7 +316,9 @@ "title": "Knowledge Base", "url_added": "URL added", "url_placeholder": "Enter URL, multiple URLs separated by Enter", - "urls": "URLs" + "urls": "URLs", + "edit_remark": "Edit Remark", + "edit_remark_placeholder": "Please enter remark content" }, "languages": { "arabic": "Arabic", diff --git a/src/renderer/src/i18n/locales/ja-jp.json b/src/renderer/src/i18n/locales/ja-jp.json index 9e7474d2..64be8e6d 100644 --- a/src/renderer/src/i18n/locales/ja-jp.json +++ b/src/renderer/src/i18n/locales/ja-jp.json @@ -316,7 +316,9 @@ "title": "ナレッジベース", "url_added": "URLが追加されました", "url_placeholder": "URLを入力, 複数のURLはEnterで区切る", - "urls": "URL" + "urls": "URL", + "edit_remark": "備考を編集", + "edit_remark_placeholder": "備考内容を入力してください" }, "languages": { "arabic": "アラビア語", diff --git a/src/renderer/src/i18n/locales/ru-ru.json b/src/renderer/src/i18n/locales/ru-ru.json index 73d60478..cf6b64c5 100644 --- a/src/renderer/src/i18n/locales/ru-ru.json +++ b/src/renderer/src/i18n/locales/ru-ru.json @@ -316,7 +316,9 @@ "title": "База знаний", "url_added": "URL добавлен", "url_placeholder": "Введите URL, несколько URL через Enter", - "urls": "URL-адреса" + "urls": "URL-адреса", + "edit_remark": "Изменить примечание", + "edit_remark_placeholder": "Пожалуйста, введите содержание примечания" }, "languages": { "arabic": "Арабский", diff --git a/src/renderer/src/i18n/locales/zh-cn.json b/src/renderer/src/i18n/locales/zh-cn.json index 93f1fe23..fceef46f 100644 --- a/src/renderer/src/i18n/locales/zh-cn.json +++ b/src/renderer/src/i18n/locales/zh-cn.json @@ -316,7 +316,9 @@ "title": "知识库", "url_added": "网址已添加", "url_placeholder": "请输入网址, 多个网址用回车分隔", - "urls": "网址" + "urls": "网址", + "edit_remark": "修改备注", + "edit_remark_placeholder": "请输入备注内容" }, "languages": { "arabic": "阿拉伯文", diff --git a/src/renderer/src/i18n/locales/zh-tw.json b/src/renderer/src/i18n/locales/zh-tw.json index 45f3bef7..8ad6c70f 100644 --- a/src/renderer/src/i18n/locales/zh-tw.json +++ b/src/renderer/src/i18n/locales/zh-tw.json @@ -316,7 +316,9 @@ "title": "知識庫", "url_added": "網址已添加", "url_placeholder": "請輸入網址, 多個網址用回車分隔", - "urls": "網址" + "urls": "網址", + "edit_remark": "修改備註", + "edit_remark_placeholder": "請輸入備註內容" }, "languages": { "arabic": "阿拉伯文", diff --git a/src/renderer/src/pages/knowledge/KnowledgeContent.tsx b/src/renderer/src/pages/knowledge/KnowledgeContent.tsx index 1f1b2d6b..f575d42d 100644 --- a/src/renderer/src/pages/knowledge/KnowledgeContent.tsx +++ b/src/renderer/src/pages/knowledge/KnowledgeContent.tsx @@ -1,4 +1,5 @@ import { + CopyOutlined, DeleteOutlined, EditOutlined, FileTextOutlined, @@ -17,9 +18,9 @@ import Scrollbar from '@renderer/components/Scrollbar' import { useKnowledge } from '@renderer/hooks/useKnowledge' import FileManager from '@renderer/services/FileManager' import { getProviderName } from '@renderer/services/ProviderService' -import { FileType, FileTypes, KnowledgeBase } from '@renderer/types' +import { FileType, FileTypes, KnowledgeBase, KnowledgeItem } from '@renderer/types' import { bookExts, documentExts, textExts, thirdPartyApplicationExts } from '@shared/config/constant' -import { Alert, Button, Card, Divider, message, Tag, Tooltip, Typography, Upload } from 'antd' +import { Alert, Button, Card, Divider, Dropdown, message, Tag, Tooltip, Typography, Upload } from 'antd' import { FC } from 'react' import { useTranslation } from 'react-i18next' import styled from 'styled-components' @@ -55,7 +56,8 @@ const KnowledgeContent: FC = ({ selectedBase }) => { getProcessingStatus, getDirectoryProcessingPercent, addNote, - addDirectory + addDirectory, + updateItem } = useKnowledge(selectedBase.id || '') const providerName = getProviderName(base?.model.provider || '') @@ -197,6 +199,31 @@ const KnowledgeContent: FC = ({ selectedBase }) => { path && addDirectory(path) } + const handleEditRemark = async (item: KnowledgeItem) => { + if (disabled) { + return + } + + const editedRemark: string | undefined = await PromptPopup.show({ + title: t('knowledge.edit_remark'), + message: '', + inputPlaceholder: t('knowledge.edit_remark_placeholder'), + defaultValue: item.remark || '', + inputProps: { + maxLength: 100, + rows: 1 + } + }) + + if (editedRemark !== undefined && editedRemark !== null) { + updateItem({ + ...item, + remark: editedRemark, + updated_at: Date.now() + }) + } + } + return ( {!base?.version && ( @@ -303,11 +330,33 @@ const KnowledgeContent: FC = ({ selectedBase }) => { - - - - - + , + label: t('knowledge.edit_remark'), + onClick: () => handleEditRemark(item) + }, + { + key: 'copy', + icon: , + label: t('common.copy'), + onClick: () => { + navigator.clipboard.writeText(item.content as string) + message.success(t('message.copied')) + } + } + ] + }} + trigger={['contextMenu']}> + + + + + + {item.uniqueId &&