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
|
local
|
||||||
.aider*
|
.aider*
|
||||||
.cursorrules
|
.cursorrules
|
||||||
|
.cursor/rules
|
||||||
|
|||||||
@ -316,7 +316,9 @@
|
|||||||
"title": "Knowledge Base",
|
"title": "Knowledge Base",
|
||||||
"url_added": "URL added",
|
"url_added": "URL added",
|
||||||
"url_placeholder": "Enter URL, multiple URLs separated by Enter",
|
"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": {
|
"languages": {
|
||||||
"arabic": "Arabic",
|
"arabic": "Arabic",
|
||||||
|
|||||||
@ -316,7 +316,9 @@
|
|||||||
"title": "ナレッジベース",
|
"title": "ナレッジベース",
|
||||||
"url_added": "URLが追加されました",
|
"url_added": "URLが追加されました",
|
||||||
"url_placeholder": "URLを入力, 複数のURLはEnterで区切る",
|
"url_placeholder": "URLを入力, 複数のURLはEnterで区切る",
|
||||||
"urls": "URL"
|
"urls": "URL",
|
||||||
|
"edit_remark": "備考を編集",
|
||||||
|
"edit_remark_placeholder": "備考内容を入力してください"
|
||||||
},
|
},
|
||||||
"languages": {
|
"languages": {
|
||||||
"arabic": "アラビア語",
|
"arabic": "アラビア語",
|
||||||
|
|||||||
@ -316,7 +316,9 @@
|
|||||||
"title": "База знаний",
|
"title": "База знаний",
|
||||||
"url_added": "URL добавлен",
|
"url_added": "URL добавлен",
|
||||||
"url_placeholder": "Введите URL, несколько URL через Enter",
|
"url_placeholder": "Введите URL, несколько URL через Enter",
|
||||||
"urls": "URL-адреса"
|
"urls": "URL-адреса",
|
||||||
|
"edit_remark": "Изменить примечание",
|
||||||
|
"edit_remark_placeholder": "Пожалуйста, введите содержание примечания"
|
||||||
},
|
},
|
||||||
"languages": {
|
"languages": {
|
||||||
"arabic": "Арабский",
|
"arabic": "Арабский",
|
||||||
|
|||||||
@ -316,7 +316,9 @@
|
|||||||
"title": "知识库",
|
"title": "知识库",
|
||||||
"url_added": "网址已添加",
|
"url_added": "网址已添加",
|
||||||
"url_placeholder": "请输入网址, 多个网址用回车分隔",
|
"url_placeholder": "请输入网址, 多个网址用回车分隔",
|
||||||
"urls": "网址"
|
"urls": "网址",
|
||||||
|
"edit_remark": "修改备注",
|
||||||
|
"edit_remark_placeholder": "请输入备注内容"
|
||||||
},
|
},
|
||||||
"languages": {
|
"languages": {
|
||||||
"arabic": "阿拉伯文",
|
"arabic": "阿拉伯文",
|
||||||
|
|||||||
@ -316,7 +316,9 @@
|
|||||||
"title": "知識庫",
|
"title": "知識庫",
|
||||||
"url_added": "網址已添加",
|
"url_added": "網址已添加",
|
||||||
"url_placeholder": "請輸入網址, 多個網址用回車分隔",
|
"url_placeholder": "請輸入網址, 多個網址用回車分隔",
|
||||||
"urls": "網址"
|
"urls": "網址",
|
||||||
|
"edit_remark": "修改備註",
|
||||||
|
"edit_remark_placeholder": "請輸入備註內容"
|
||||||
},
|
},
|
||||||
"languages": {
|
"languages": {
|
||||||
"arabic": "阿拉伯文",
|
"arabic": "阿拉伯文",
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
import {
|
import {
|
||||||
|
CopyOutlined,
|
||||||
DeleteOutlined,
|
DeleteOutlined,
|
||||||
EditOutlined,
|
EditOutlined,
|
||||||
FileTextOutlined,
|
FileTextOutlined,
|
||||||
@ -17,9 +18,9 @@ import Scrollbar from '@renderer/components/Scrollbar'
|
|||||||
import { useKnowledge } from '@renderer/hooks/useKnowledge'
|
import { useKnowledge } from '@renderer/hooks/useKnowledge'
|
||||||
import FileManager from '@renderer/services/FileManager'
|
import FileManager from '@renderer/services/FileManager'
|
||||||
import { getProviderName } from '@renderer/services/ProviderService'
|
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 { 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 { FC } from 'react'
|
||||||
import { useTranslation } from 'react-i18next'
|
import { useTranslation } from 'react-i18next'
|
||||||
import styled from 'styled-components'
|
import styled from 'styled-components'
|
||||||
@ -55,7 +56,8 @@ const KnowledgeContent: FC<KnowledgeContentProps> = ({ selectedBase }) => {
|
|||||||
getProcessingStatus,
|
getProcessingStatus,
|
||||||
getDirectoryProcessingPercent,
|
getDirectoryProcessingPercent,
|
||||||
addNote,
|
addNote,
|
||||||
addDirectory
|
addDirectory,
|
||||||
|
updateItem
|
||||||
} = useKnowledge(selectedBase.id || '')
|
} = useKnowledge(selectedBase.id || '')
|
||||||
|
|
||||||
const providerName = getProviderName(base?.model.provider || '')
|
const providerName = getProviderName(base?.model.provider || '')
|
||||||
@ -197,6 +199,31 @@ const KnowledgeContent: FC<KnowledgeContentProps> = ({ selectedBase }) => {
|
|||||||
path && addDirectory(path)
|
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 (
|
return (
|
||||||
<MainContent>
|
<MainContent>
|
||||||
{!base?.version && (
|
{!base?.version && (
|
||||||
@ -303,11 +330,33 @@ const KnowledgeContent: FC<KnowledgeContentProps> = ({ selectedBase }) => {
|
|||||||
<ItemContent>
|
<ItemContent>
|
||||||
<ItemInfo>
|
<ItemInfo>
|
||||||
<LinkOutlined />
|
<LinkOutlined />
|
||||||
|
<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">
|
<a href={item.content as string} target="_blank" rel="noopener noreferrer">
|
||||||
<Tooltip title={item.content as string}>
|
<Tooltip title={item.content as string}>
|
||||||
<Ellipsis text={item.content as string} />
|
<Ellipsis text={item.remark || (item.content as string)} />
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
</a>
|
</a>
|
||||||
|
</Dropdown>
|
||||||
</ItemInfo>
|
</ItemInfo>
|
||||||
<FlexAlignCenter>
|
<FlexAlignCenter>
|
||||||
{item.uniqueId && <Button type="text" icon={<RefreshIcon />} onClick={() => refreshItem(item)} />}
|
{item.uniqueId && <Button type="text" icon={<RefreshIcon />} onClick={() => refreshItem(item)} />}
|
||||||
|
|||||||
@ -228,6 +228,7 @@ export type KnowledgeItem = {
|
|||||||
uniqueIds?: string[]
|
uniqueIds?: string[]
|
||||||
type: KnowledgeItemType
|
type: KnowledgeItemType
|
||||||
content: string | FileType
|
content: string | FileType
|
||||||
|
remark?: string
|
||||||
created_at: number
|
created_at: number
|
||||||
updated_at: number
|
updated_at: number
|
||||||
processingStatus?: ProcessingStatus
|
processingStatus?: ProcessingStatus
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user