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:
parent
f87ba144c8
commit
af1a9868db
1
.gitignore
vendored
1
.gitignore
vendored
@ -46,3 +46,4 @@ stats.html
|
||||
local
|
||||
.aider*
|
||||
.cursorrules
|
||||
.cursor/rules
|
||||
|
||||
@ -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",
|
||||
|
||||
@ -316,7 +316,9 @@
|
||||
"title": "ナレッジベース",
|
||||
"url_added": "URLが追加されました",
|
||||
"url_placeholder": "URLを入力, 複数のURLはEnterで区切る",
|
||||
"urls": "URL"
|
||||
"urls": "URL",
|
||||
"edit_remark": "備考を編集",
|
||||
"edit_remark_placeholder": "備考内容を入力してください"
|
||||
},
|
||||
"languages": {
|
||||
"arabic": "アラビア語",
|
||||
|
||||
@ -316,7 +316,9 @@
|
||||
"title": "База знаний",
|
||||
"url_added": "URL добавлен",
|
||||
"url_placeholder": "Введите URL, несколько URL через Enter",
|
||||
"urls": "URL-адреса"
|
||||
"urls": "URL-адреса",
|
||||
"edit_remark": "Изменить примечание",
|
||||
"edit_remark_placeholder": "Пожалуйста, введите содержание примечания"
|
||||
},
|
||||
"languages": {
|
||||
"arabic": "Арабский",
|
||||
|
||||
@ -316,7 +316,9 @@
|
||||
"title": "知识库",
|
||||
"url_added": "网址已添加",
|
||||
"url_placeholder": "请输入网址, 多个网址用回车分隔",
|
||||
"urls": "网址"
|
||||
"urls": "网址",
|
||||
"edit_remark": "修改备注",
|
||||
"edit_remark_placeholder": "请输入备注内容"
|
||||
},
|
||||
"languages": {
|
||||
"arabic": "阿拉伯文",
|
||||
|
||||
@ -316,7 +316,9 @@
|
||||
"title": "知識庫",
|
||||
"url_added": "網址已添加",
|
||||
"url_placeholder": "請輸入網址, 多個網址用回車分隔",
|
||||
"urls": "網址"
|
||||
"urls": "網址",
|
||||
"edit_remark": "修改備註",
|
||||
"edit_remark_placeholder": "請輸入備註內容"
|
||||
},
|
||||
"languages": {
|
||||
"arabic": "阿拉伯文",
|
||||
|
||||
@ -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)} />}
|
||||
|
||||
@ -228,6 +228,7 @@ export type KnowledgeItem = {
|
||||
uniqueIds?: string[]
|
||||
type: KnowledgeItemType
|
||||
content: string | FileType
|
||||
remark?: string
|
||||
created_at: number
|
||||
updated_at: number
|
||||
processingStatus?: ProcessingStatus
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user