feat: Add remark function to knowledge url (#2210)

* chore: Update .gitignore to exclude .cursor/rules

* feat: Add remark function to knowledge url
This commit is contained in:
Asurada 2025-02-24 12:47:47 +08:00 committed by GitHub
parent f87ba144c8
commit af1a9868db
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
8 changed files with 74 additions and 13 deletions

1
.gitignore vendored
View File

@ -46,3 +46,4 @@ stats.html
local
.aider*
.cursorrules
.cursor/rules

View File

@ -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",

View File

@ -316,7 +316,9 @@
"title": "ナレッジベース",
"url_added": "URLが追加されました",
"url_placeholder": "URLを入力, 複数のURLはEnterで区切る",
"urls": "URL"
"urls": "URL",
"edit_remark": "備考を編集",
"edit_remark_placeholder": "備考内容を入力してください"
},
"languages": {
"arabic": "アラビア語",

View File

@ -316,7 +316,9 @@
"title": "База знаний",
"url_added": "URL добавлен",
"url_placeholder": "Введите URL, несколько URL через Enter",
"urls": "URL-адреса"
"urls": "URL-адреса",
"edit_remark": "Изменить примечание",
"edit_remark_placeholder": "Пожалуйста, введите содержание примечания"
},
"languages": {
"arabic": "Арабский",

View File

@ -316,7 +316,9 @@
"title": "知识库",
"url_added": "网址已添加",
"url_placeholder": "请输入网址, 多个网址用回车分隔",
"urls": "网址"
"urls": "网址",
"edit_remark": "修改备注",
"edit_remark_placeholder": "请输入备注内容"
},
"languages": {
"arabic": "阿拉伯文",

View File

@ -316,7 +316,9 @@
"title": "知識庫",
"url_added": "網址已添加",
"url_placeholder": "請輸入網址, 多個網址用回車分隔",
"urls": "網址"
"urls": "網址",
"edit_remark": "修改備註",
"edit_remark_placeholder": "請輸入備註內容"
},
"languages": {
"arabic": "阿拉伯文",

View File

@ -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<KnowledgeContentProps> = ({ selectedBase }) => {
getProcessingStatus,
getDirectoryProcessingPercent,
addNote,
addDirectory
addDirectory,
updateItem
} = useKnowledge(selectedBase.id || '')
const providerName = getProviderName(base?.model.provider || '')
@ -197,6 +199,31 @@ const KnowledgeContent: FC<KnowledgeContentProps> = ({ 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 (
<MainContent>
{!base?.version && (
@ -303,11 +330,33 @@ const KnowledgeContent: FC<KnowledgeContentProps> = ({ selectedBase }) => {
<ItemContent>
<ItemInfo>
<LinkOutlined />
<a href={item.content as string} target="_blank" rel="noopener noreferrer">
<Tooltip title={item.content as string}>
<Ellipsis text={item.content as string} />
</Tooltip>
</a>
<Dropdown
menu={{
items: [
{
key: 'edit',
icon: <EditOutlined />,
label: t('knowledge.edit_remark'),
onClick: () => handleEditRemark(item)
},
{
key: 'copy',
icon: <CopyOutlined />,
label: t('common.copy'),
onClick: () => {
navigator.clipboard.writeText(item.content as string)
message.success(t('message.copied'))
}
}
]
}}
trigger={['contextMenu']}>
<a href={item.content as string} target="_blank" rel="noopener noreferrer">
<Tooltip title={item.content as string}>
<Ellipsis text={item.remark || (item.content as string)} />
</Tooltip>
</a>
</Dropdown>
</ItemInfo>
<FlexAlignCenter>
{item.uniqueId && <Button type="text" icon={<RefreshIcon />} onClick={() => refreshItem(item)} />}

View File

@ -228,6 +228,7 @@ export type KnowledgeItem = {
uniqueIds?: string[]
type: KnowledgeItemType
content: string | FileType
remark?: string
created_at: number
updated_at: number
processingStatus?: ProcessingStatus