@gientech/modual 1.3.2 → 1.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.editorconfig +38 -0
- package/.prettierignore +16 -0
- package/.prettierrc +17 -0
- package/README.md +129 -129
- package/USAGE.md +191 -0
- package/bash.exe.stackdump +40 -0
- package/components.json +21 -0
- package/dist/README.md +129 -0
- package/{assets → dist/assets}/database.svg +11 -11
- package/{assets → dist/assets}/database_add.svg +53 -53
- package/{assets → dist/assets}/database_connect.svg +66 -66
- package/{assets → dist/assets}/database_upload.svg +29 -29
- package/{assets → dist/assets}/defaultWeLogo.svg +14 -14
- package/{assets/index-ldqIbm0x.js → dist/assets/index-XvC_4jDB.js} +106 -101
- package/{assets/index-D-dGaGjW.js → dist/assets/index-mPgEc8KC.js} +288 -102
- package/{assets/MySQL.svg → dist/assets/mysql.svg} +14 -14
- package/dist/assets/style.css +1 -0
- package/dist/assets/style3.css +1 -0
- package/{chat.js → dist/chat.js} +78 -78
- package/dist/database.js +20 -0
- package/{databaseId.js → dist/databaseId.js} +1 -1
- package/{databaseTable.js → dist/databaseTable.js} +1 -1
- package/{modelManage.js → dist/modelManage.js} +1 -1
- package/dist/package.json +56 -0
- package/{sensitive.js → dist/sensitive.js} +1 -1
- package/{streamFilesReader.js → dist/streamFilesReader.js} +11 -11
- package/{worker → dist/worker}/pdf.worker.min.js +21 -21
- package/doc_assets/2.png +0 -0
- package/doc_assets/demo.md +27 -0
- package/doc_assets/demos/dist-app/assets/index.Dh-ZAS9Z.css +2 -0
- package/doc_assets/demos/dist-app/assets/index.Dv8KVW18.js +23699 -0
- package/doc_assets/demos/dist-app/assets/index.Dv8KVW18.js.map +1 -0
- package/doc_assets/demos/dist-app/index.html +14 -0
- package/doc_assets/demos/dist-app/vite.svg +1 -0
- package/doc_assets/images/1.png +0 -0
- package/doc_assets/images/3.png +0 -0
- package/doc_assets/images/component-screenshot.png +1 -0
- package/doc_assets/install.md +5 -0
- package/eslint.config.js +92 -0
- package/index.html +13 -0
- package/package.json +83 -39
- package/postcss.config.cjs +19 -0
- package/public/vite.svg +1 -0
- package/public/worker/pdf.worker.min.js +22 -0
- package/scripts/README.md +133 -0
- package/scripts/build-demo.js +88 -0
- package/scripts/demo-selector.js +216 -0
- package/scripts/dev-demo.js +76 -0
- package/scripts/preview-demo.js +130 -0
- package/scripts/run-demo.bat +34 -0
- package/src/assets/img/downArrow.png +0 -0
- package/src/assets/img/excel.png +0 -0
- package/src/assets/img/img.png +0 -0
- package/src/assets/img/pdf.png +0 -0
- package/src/assets/img/ppt.png +0 -0
- package/src/assets/img/txt.png +0 -0
- package/src/assets/img/word.png +0 -0
- package/src/assets/login/homeBg.png +0 -0
- package/src/assets/login/left.jpg +0 -0
- package/src/assets/login/logoImg.png +0 -0
- package/src/examples/LoginPage/index.tsx +18 -0
- package/src/examples/aaa/index.tsx +3758 -0
- package/src/examples/chat/components/DrawerGraphPreview.tsx +78 -0
- package/src/examples/chat/index.tsx +190 -0
- package/src/examples/gientechStreamFilesReader/index.tsx +1016 -0
- package/src/examples/ragDatabaseDataPage/index.tsx +36 -0
- package/src/examples/ragDatabaseIdPage/index.tsx +44 -0
- package/src/examples/ragDatabasePage/index.tsx +36 -0
- package/src/examples/ragModelManagePage/index.tsx +37 -0
- package/src/examples/ragSearchPage/index.tsx +0 -0
- package/src/examples/ragSensitiveWordsPage/index.tsx +32 -0
- package/src/examples/streamFiles/index.tsx +384 -0
- package/src/lib_enter.ts +38 -0
- package/src/main.tsx +5 -0
- package/src/main.tsx.backup +5 -0
- package/src/modules/chat/Conversations/Item.tsx +167 -0
- package/src/modules/chat/Conversations/List.tsx +143 -0
- package/src/modules/chat/Conversations/groupByTime.ts +39 -0
- package/src/modules/chat/Conversations/index.tsx +212 -0
- package/src/modules/chat/constants.tsx +33 -0
- package/src/modules/chat/data.txt +82 -0
- package/src/modules/chat/index.tsx +1908 -0
- package/src/modules/chat/types.ts +17 -0
- package/src/modules/database/CreateModal.tsx +398 -0
- package/src/modules/database/assets/Doris.png +0 -0
- package/src/modules/database/assets/PostgreSQL.png +0 -0
- package/src/modules/database/assets/SQLServer.png +0 -0
- package/src/modules/database/assets/database.svg +11 -0
- package/src/modules/database/assets/database_add.svg +53 -0
- package/src/modules/database/assets/database_connect.svg +66 -0
- package/src/modules/database/assets/database_upload.svg +29 -0
- package/src/modules/database/assets/empty.png +0 -0
- package/src/modules/database/assets/mysql.svg +14 -0
- package/src/modules/database/index.tsx +466 -0
- package/src/modules/database/server.ts +196 -0
- package/src/modules/databaseId/CustomCom.tsx +156 -0
- package/src/modules/databaseId/EditConfig.tsx +268 -0
- package/src/modules/databaseId/UploadDrawer.tsx +520 -0
- package/src/modules/databaseId/assets/aiOptimize.svg +10 -0
- package/src/modules/databaseId/assets/empty.png +0 -0
- package/src/modules/databaseId/assets/template.svg +6 -0
- package/src/modules/databaseId/assets/upload.svg +9 -0
- package/src/modules/databaseId/assets/useTemp.svg +6 -0
- package/src/modules/databaseId/index.tsx +734 -0
- package/src/modules/databaseId/server.ts +286 -0
- package/src/modules/databaseId/style.css +5 -0
- package/src/modules/databaseTable/EditRowDrawer.tsx +119 -0
- package/src/modules/databaseTable/index.tsx +357 -0
- package/src/modules/databaseTable/server.ts +180 -0
- package/src/modules/headlessChat/constants.tsx +32 -0
- package/src/modules/headlessChat/index.tsx +1065 -0
- package/src/modules/headlessChat/types.ts +23 -0
- package/src/modules/login/components/Login/LoginBox/index.tsx +102 -0
- package/src/modules/login/components/Login/RegisterBox/index.tsx +180 -0
- package/src/modules/login/components/Login/index.tsx +100 -0
- package/src/modules/login/index.tsx +106 -0
- package/src/modules/login/style.css +3 -0
- package/src/modules/login/useServices.ts +53 -0
- package/src/modules/login/utils.ts +42 -0
- package/src/modules/modelManage/ConfigDrawer.tsx +249 -0
- package/src/modules/modelManage/assets/empty.png +0 -0
- package/src/modules/modelManage/const.ts +50 -0
- package/src/modules/modelManage/index.tsx +439 -0
- package/src/modules/modelManage/server.ts +185 -0
- package/src/modules/nodegraph/index.tsx +1 -0
- package/src/modules/search/assets/Icon-history.svg +8 -0
- package/src/modules/search/assets/answerAwartar.png +0 -0
- package/src/modules/search/assets/doc.png +0 -0
- package/src/modules/search/assets/genera.gif +0 -0
- package/src/modules/search/assets/icon-robot.svg +9 -0
- package/src/modules/search/assets/icon-search-bar.svg +14 -0
- package/src/modules/search/assets/icon-sub-title.svg +3 -0
- package/src/modules/search/assets/icon-title.svg +9 -0
- package/src/modules/search/assets/icon-zoomOut.svg +9 -0
- package/src/modules/search/assets/iconAi.svg +9 -0
- package/src/modules/search/assets/pdf.png +0 -0
- package/src/modules/search/assets/ppt.png +0 -0
- package/src/modules/search/assets/search.svg +3 -0
- package/src/modules/search/assets/selected.svg +4 -0
- package/src/modules/search/assets/txt.png +0 -0
- package/src/modules/search/assets/xls.png +0 -0
- package/src/modules/search/components/AssisSelect.tsx +137 -0
- package/src/modules/search/components/Editor/ChatViewEditor.tsx +261 -0
- package/src/modules/search/components/Editor/aichat.css +1 -0
- package/src/modules/search/components/Editor/constant.ts +13 -0
- package/src/modules/search/components/Editor/index.tsx +113 -0
- package/src/modules/search/components/Editor/plugins/autofomatRules.ts +332 -0
- package/src/modules/search/components/Editor/plugins/convertImgPlugins.tsx +20 -0
- package/src/modules/search/components/Editor/plugins/createIndexes.tsx +38 -0
- package/src/modules/search/components/Editor/plugins/displayer.ts +298 -0
- package/src/modules/search/components/Editor/plugins/imageClick.tsx +32 -0
- package/src/modules/search/components/Editor/plugins/myplugin.tsx +98 -0
- package/src/modules/search/components/Editor/ui/avatar.tsx +19 -0
- package/src/modules/search/components/Editor/ui/blockquote-element.tsx +21 -0
- package/src/modules/search/components/Editor/ui/button.tsx +58 -0
- package/src/modules/search/components/Editor/ui/calendar.tsx +68 -0
- package/src/modules/search/components/Editor/ui/caption.tsx +46 -0
- package/src/modules/search/components/Editor/ui/checkbox.tsx +27 -0
- package/src/modules/search/components/Editor/ui/code-block-combobox.tsx +188 -0
- package/src/modules/search/components/Editor/ui/code-block-element.css +434 -0
- package/src/modules/search/components/Editor/ui/code-block-element.tsx +39 -0
- package/src/modules/search/components/Editor/ui/code-leaf.tsx +24 -0
- package/src/modules/search/components/Editor/ui/code-line-element.tsx +10 -0
- package/src/modules/search/components/Editor/ui/code-syntax-leaf.tsx +21 -0
- package/src/modules/search/components/Editor/ui/column-element.tsx +30 -0
- package/src/modules/search/components/Editor/ui/column-group-element.tsx +94 -0
- package/src/modules/search/components/Editor/ui/command.tsx +75 -0
- package/src/modules/search/components/Editor/ui/comment-avatar.tsx +22 -0
- package/src/modules/search/components/Editor/ui/comment-create-form.tsx +37 -0
- package/src/modules/search/components/Editor/ui/comment-item.tsx +74 -0
- package/src/modules/search/components/Editor/ui/comment-leaf.tsx +49 -0
- package/src/modules/search/components/Editor/ui/comment-more-dropdown.tsx +42 -0
- package/src/modules/search/components/Editor/ui/comment-reply-items.tsx +22 -0
- package/src/modules/search/components/Editor/ui/comment-resolve-button.tsx +32 -0
- package/src/modules/search/components/Editor/ui/comment-value.tsx +34 -0
- package/src/modules/search/components/Editor/ui/comments-popover.tsx +63 -0
- package/src/modules/search/components/Editor/ui/date-element.tsx +83 -0
- package/src/modules/search/components/Editor/ui/dialog.tsx +63 -0
- package/src/modules/search/components/Editor/ui/draggable.tsx +177 -0
- package/src/modules/search/components/Editor/ui/dropdown-menu.tsx +180 -0
- package/src/modules/search/components/Editor/ui/emoji-input-element.tsx +85 -0
- package/src/modules/search/components/Editor/ui/excalidraw-element.tsx +28 -0
- package/src/modules/search/components/Editor/ui/fixed-toolbar-buttons.tsx +76 -0
- package/src/modules/search/components/Editor/ui/fixed-toolbar.tsx +8 -0
- package/src/modules/search/components/Editor/ui/floating-toolbar-buttons.tsx +51 -0
- package/src/modules/search/components/Editor/ui/floating-toolbar.tsx +77 -0
- package/src/modules/search/components/Editor/ui/heading-element.tsx +48 -0
- package/src/modules/search/components/Editor/ui/highlight-leaf.tsx +17 -0
- package/src/modules/search/components/Editor/ui/hr-element.tsx +30 -0
- package/src/modules/search/components/Editor/ui/icons.tsx +267 -0
- package/src/modules/search/components/Editor/ui/image-element.tsx +74 -0
- package/src/modules/search/components/Editor/ui/inline-combobox.tsx +368 -0
- package/src/modules/search/components/Editor/ui/input.tsx +25 -0
- package/src/modules/search/components/Editor/ui/insert-dropdown-menu.tsx +218 -0
- package/src/modules/search/components/Editor/ui/kbd-leaf.tsx +20 -0
- package/src/modules/search/components/Editor/ui/link-element.tsx +29 -0
- package/src/modules/search/components/Editor/ui/link-floating-toolbar.tsx +161 -0
- package/src/modules/search/components/Editor/ui/list-element.tsx +30 -0
- package/src/modules/search/components/Editor/ui/mark-toolbar-button.tsx +24 -0
- package/src/modules/search/components/Editor/ui/media-embed-element.tsx +133 -0
- package/src/modules/search/components/Editor/ui/media-popover.tsx +97 -0
- package/src/modules/search/components/Editor/ui/mention-element.tsx +43 -0
- package/src/modules/search/components/Editor/ui/mention-input-element.tsx +141 -0
- package/src/modules/search/components/Editor/ui/mode-dropdown-menu.tsx +93 -0
- package/src/modules/search/components/Editor/ui/more-dropdown-menu.tsx +67 -0
- package/src/modules/search/components/Editor/ui/paragraph-element.tsx +4 -0
- package/src/modules/search/components/Editor/ui/placeholder.tsx +52 -0
- package/src/modules/search/components/Editor/ui/popover.tsx +32 -0
- package/src/modules/search/components/Editor/ui/resizable.tsx +66 -0
- package/src/modules/search/components/Editor/ui/separator.tsx +25 -0
- package/src/modules/search/components/Editor/ui/style.less +12 -0
- package/src/modules/search/components/Editor/ui/table-cell-element.tsx +143 -0
- package/src/modules/search/components/Editor/ui/table-element.tsx +243 -0
- package/src/modules/search/components/Editor/ui/table-row-element.tsx +22 -0
- package/src/modules/search/components/Editor/ui/tableValue.tsx +135 -0
- package/src/modules/search/components/Editor/ui/todo-list-element.tsx +43 -0
- package/src/modules/search/components/Editor/ui/toggle-element.tsx +31 -0
- package/src/modules/search/components/Editor/ui/toolbar.tsx +157 -0
- package/src/modules/search/components/Editor/ui/tooltip.tsx +65 -0
- package/src/modules/search/components/Editor/ui/turn-into-dropdown-menu.tsx +160 -0
- package/src/modules/search/components/Editor/ui/with-draggables.tsx +175 -0
- package/src/modules/search/components/FileList.tsx +287 -0
- package/src/modules/search/components/ImageGroupView/index.tsx +85 -0
- package/src/modules/search/components/ResultContent.tsx +232 -0
- package/src/modules/search/components/SearchInput.tsx +232 -0
- package/src/modules/search/components/SearchLanding.tsx +74 -0
- package/src/modules/search/components/SearchView.tsx +563 -0
- package/src/modules/search/components/SimpleEditor.tsx +158 -0
- package/src/modules/search/components/SimpleFileList.tsx +215 -0
- package/src/modules/search/index.tsx +10 -0
- package/src/modules/search/reademe.md +1 -0
- package/src/modules/search/servers/apis.tsx +19 -0
- package/src/modules/search/servers/index.ts +184 -0
- package/src/modules/search/style.less +503 -0
- package/src/modules/search/type.ts +22 -0
- package/src/modules/search/utils.ts +34 -0
- package/src/modules/sensitive/index.tsx +313 -0
- package/src/modules/sensitive/server.ts +122 -0
- package/src/modules/streamFilesReader/GientechStreamReader.tsx +1555 -0
- package/src/modules/streamFilesReader/components/Header/Toolbar.tsx +0 -0
- package/src/modules/streamFilesReader/components/Header/index.tsx +297 -0
- package/src/modules/streamFilesReader/index.tsx +3 -0
- package/src/style.css +6 -0
- package/src/type.d.ts +0 -0
- package/src/utils/commonFn.tsx +111 -0
- package/src/utils/gientechCommon/components/AppError.tsx +32 -0
- package/src/utils/gientechCommon/components/AppLoading.tsx +75 -0
- package/src/utils/gientechCommon/components/DeleteModal.tsx +75 -0
- package/src/utils/gientechCommon/components/DisplayError.tsx +33 -0
- package/src/utils/gientechCommon/components/DisplayLoading.tsx +38 -0
- package/src/utils/gientechCommon/components/FeedBackModal.tsx +310 -0
- package/src/utils/gientechCommon/components/FileCardCommon.tsx +82 -0
- package/src/utils/gientechCommon/components/FileManager/index.tsx +390 -0
- package/src/utils/gientechCommon/components/FileManager/style.css +5 -0
- package/src/utils/gientechCommon/components/Messages/GientechNewChatWelcome.tsx +296 -0
- package/src/utils/gientechCommon/components/Messages/ReferenceCard.tsx +339 -0
- package/src/utils/gientechCommon/components/Messages/RetriveItem.tsx +245 -0
- package/src/utils/gientechCommon/components/Messages/WebRetriveItem.tsx +209 -0
- package/src/utils/gientechCommon/components/Messages/defaultBot.png +0 -0
- package/src/utils/gientechCommon/components/Messages/defaultStyleSet.tsx +148 -0
- package/src/utils/gientechCommon/components/Messages/defaultWeLogo.svg +14 -0
- package/src/utils/gientechCommon/components/RenameModal.tsx +86 -0
- package/src/utils/gientechCommon/components/style.less +11 -0
- package/src/utils/gientechCommon/configs/commonConfig.ts +2 -0
- package/src/utils/gientechCommon/configs/senderConfig.ts +0 -0
- package/src/utils/gientechCommon/configs/stylesConfig.ts +142 -0
- package/src/utils/gientechCommon/hooks/AichatUseController.tsx +345 -0
- package/src/utils/gientechCommon/slate/converters/deserializers.ts +763 -0
- package/src/utils/gientechCommon/slate/converters/mockData.ts +232 -0
- package/src/utils/gientechCommon/slate/converters/slateConverters.ts +258 -0
- package/src/utils/gientechCommon/slate/richElements/index.tsx +499 -0
- package/src/utils/gientechCommon/utils/request.ts +37 -0
- package/src/utils/gientechCommon/utils/serverFn.ts +172 -0
- package/src/utils/index.tsx +126 -0
- package/src/utils/testconfigs/demologin/index.tsx +32 -0
- package/src/utils/testconfigs/index.ts +53 -0
- package/src/vite-env.d.ts +11 -0
- package/stats.html +4949 -0
- package/tailwind.config.js +170 -0
- package/tsconfig.app.json +30 -0
- package/tsconfig.app.tsbuildinfo +11 -0
- package/tsconfig.json +13 -0
- package/tsconfig.node.json +22 -0
- package/tsconfig.node.tsbuildinfo +1 -0
- package/vite.config.ts +177 -0
- package/workflows/release.yml +60 -0
- package/assets/style.css +0 -1
- package/assets/style3.css +0 -1
- package/database.js +0 -20
- /package/{assets → dist/assets}/Doris.png +0 -0
- /package/{assets → dist/assets}/PostgreSQL.png +0 -0
- /package/{assets → dist/assets}/SQLServer.png +0 -0
- /package/{assets → dist/assets}/_commonjsHelpers-gnU0ypJ3.js +0 -0
- /package/{assets → dist/assets}/circle-alert-g2Y6zAjt.js +0 -0
- /package/{assets → dist/assets}/empty.png +0 -0
- /package/{assets → dist/assets}/index-CEK88UzR.js +0 -0
- /package/{assets → dist/assets}/index-CpW6Dhpp.js +0 -0
- /package/{assets → dist/assets}/plus-omCUN0e3.js +0 -0
- /package/{assets → dist/assets}/style2.css +0 -0
- /package/{assets → dist/assets}/styled-components.browser.esm-DPkS13KC.js +0 -0
- /package/{assets → dist/assets}/x-vPcWt3fC.js +0 -0
- /package/{chat.d.ts → dist/chat.d.ts} +0 -0
- /package/{database.d.ts → dist/database.d.ts} +0 -0
- /package/{databaseId.d.ts → dist/databaseId.d.ts} +0 -0
- /package/{databaseTable.d.ts → dist/databaseTable.d.ts} +0 -0
- /package/{modelManage.d.ts → dist/modelManage.d.ts} +0 -0
- /package/{sensitive.d.ts → dist/sensitive.d.ts} +0 -0
- /package/{streamFilesReader.d.ts → dist/streamFilesReader.d.ts} +0 -0
- /package/{vite.svg → dist/vite.svg} +0 -0
|
@@ -0,0 +1,339 @@
|
|
|
1
|
+
import React, { useEffect, useMemo } from 'react';
|
|
2
|
+
import { FileSpreadsheet, FileText, FileCode, File, Eye, FolderUp } from 'lucide-react';
|
|
3
|
+
import { getFileTypeIcon } from '../FileManager';
|
|
4
|
+
import { AiChatStyles } from '../../configs/stylesConfig';
|
|
5
|
+
import { dealMinioUrl, TempBaseUrl } from '../../../../utils';
|
|
6
|
+
import { message } from 'antd';
|
|
7
|
+
|
|
8
|
+
interface ReferenceCardProps {
|
|
9
|
+
file_type?: string;
|
|
10
|
+
file_name?: string;
|
|
11
|
+
url?: string;
|
|
12
|
+
parse_url?: string;
|
|
13
|
+
retrieve_tags?: any[];
|
|
14
|
+
clip_from?: string;
|
|
15
|
+
eventsEmit?: (eventName: string, payload?: any) => void;
|
|
16
|
+
styles: any;
|
|
17
|
+
onlyDownloadTypes?: string[];
|
|
18
|
+
type?: 'file' | 'image' | 'collection';
|
|
19
|
+
collectionItems?: Array<Partial<ReferenceCardProps>>;
|
|
20
|
+
[key: string]: any;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
const ReferenceCard: React.FC<ReferenceCardProps> = (props) => {
|
|
24
|
+
const {
|
|
25
|
+
file_type,
|
|
26
|
+
file_name,
|
|
27
|
+
url,
|
|
28
|
+
parse_url,
|
|
29
|
+
retrieve_tags,
|
|
30
|
+
file_id,
|
|
31
|
+
parsed_file_type,
|
|
32
|
+
onlyDownloadTypes,
|
|
33
|
+
references,
|
|
34
|
+
eventsEmit,
|
|
35
|
+
styles,
|
|
36
|
+
isUploadFile,
|
|
37
|
+
type,
|
|
38
|
+
collectionItems,
|
|
39
|
+
pdfPages = 0,
|
|
40
|
+
fileManagerData
|
|
41
|
+
} = props;
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
// 新增:集合类型渲染
|
|
45
|
+
if (type === 'collection' && Array.isArray(collectionItems)) {
|
|
46
|
+
// 计算宫格item尺寸:父容器与普通item一致(w-24 h-24),gap为1px
|
|
47
|
+
const gridGap = 1; // px
|
|
48
|
+
const parentSize = 94; // 24*4=96px
|
|
49
|
+
const itemSize = `calc(90% - ${gridGap / 2}px)`;
|
|
50
|
+
// 最多展示4个,超出4个第4格显示省略号
|
|
51
|
+
const previewItems = collectionItems.slice(0, 4);
|
|
52
|
+
const showEllipsis = collectionItems.length > 4;
|
|
53
|
+
// hover 盖层内容
|
|
54
|
+
const overlayText = `打开合集`;
|
|
55
|
+
const handleClick = () => {
|
|
56
|
+
if(fileManagerData && file_type === 'pdf' && !props.pdfPages){
|
|
57
|
+
const cur = (fileManagerData?.uploadedFiles||[]).find((item: any) => (item?.name||item?.file?.name) === file_name);
|
|
58
|
+
if(!cur?.pdfPages){
|
|
59
|
+
message.warning('该PDF文件未解析完成,请稍后再试');
|
|
60
|
+
return
|
|
61
|
+
}
|
|
62
|
+
eventsEmit?.('reference_file:click', {...props, pdfPages: cur?.pdfPages || 0});
|
|
63
|
+
}else {
|
|
64
|
+
eventsEmit?.('reference_file:click', props);
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
return (
|
|
68
|
+
<div
|
|
69
|
+
className="user-file relative group flex flex-col items-center justify-center cursor-pointer backdrop-blur-sm rounded-lg border p-2 text-sm transition-all bg-white shadow"
|
|
70
|
+
style={{ width: parentSize, height: parentSize, minWidth: parentSize, minHeight: parentSize, borderColor: styles?.theme?.colors?.border }}
|
|
71
|
+
onClick={handleClick}
|
|
72
|
+
>
|
|
73
|
+
<div className="grid grid-cols-2 items-center justify-center grid-rows-2 gap-1 w-full h-full"
|
|
74
|
+
style={{ width: '100%', height: '100%', gap: gridGap }}
|
|
75
|
+
>
|
|
76
|
+
{previewItems.map((item, idx) => {
|
|
77
|
+
if (showEllipsis && idx === 3) {
|
|
78
|
+
return (
|
|
79
|
+
<div key="ellipsis" className="flex items-center justify-center bg-gray-100 rounded" style={{ width: itemSize, height: itemSize }}>
|
|
80
|
+
<span className="text-xl text-gray-300 font-bold scale-75">...</span>
|
|
81
|
+
</div>
|
|
82
|
+
);
|
|
83
|
+
}
|
|
84
|
+
const isImage =
|
|
85
|
+
item.file_type === 'image' ||
|
|
86
|
+
item.file_type === 'jpg' ||
|
|
87
|
+
item.file_type === 'jpeg' ||
|
|
88
|
+
item.file_type === 'png' ||
|
|
89
|
+
item.file_type === 'gif' ||
|
|
90
|
+
item.file_type === 'bmp' ||
|
|
91
|
+
item.file_type === 'webp';
|
|
92
|
+
if (isImage) {
|
|
93
|
+
return (
|
|
94
|
+
<div
|
|
95
|
+
key={item.file_name || idx}
|
|
96
|
+
className="relative flex items-center justify-center bg-white rounded-lg border overflow-hidden"
|
|
97
|
+
style={{ width: itemSize, height: itemSize, borderColor: styles?.theme?.colors?.border }}
|
|
98
|
+
>
|
|
99
|
+
<div className="flex items-center justify-center w-full h-full scale-75">
|
|
100
|
+
<img
|
|
101
|
+
src={String(item.url || item.file_path || '')}
|
|
102
|
+
alt={item.file_name || ''}
|
|
103
|
+
className="object-contain max-w-full max-h-full"
|
|
104
|
+
/>
|
|
105
|
+
</div>
|
|
106
|
+
</div>
|
|
107
|
+
);
|
|
108
|
+
}
|
|
109
|
+
const icon = getFileTypeIcon(String(item.file_type || ''), styles);
|
|
110
|
+
return (
|
|
111
|
+
<div
|
|
112
|
+
key={item.file_name || idx}
|
|
113
|
+
className="user-file flex flex-col items-center justify-center rounded-lg border bg-gray-50 p-1 text-sm"
|
|
114
|
+
title={item.file_name}
|
|
115
|
+
style={{ width: itemSize, height: itemSize, borderColor: styles?.theme?.colors?.border }}
|
|
116
|
+
>
|
|
117
|
+
<div className="flex items-center justify-center w-full h-full scale-75">
|
|
118
|
+
{icon}
|
|
119
|
+
</div>
|
|
120
|
+
</div>
|
|
121
|
+
);
|
|
122
|
+
})}
|
|
123
|
+
</div>
|
|
124
|
+
{/* 整体hover盖层 */}
|
|
125
|
+
<div className="absolute inset-0 bg-transparent group-hover:bg-black/40 transition-all duration-300 flex items-center justify-center rounded-lg pointer-events-none">
|
|
126
|
+
<div className="flex flex-col items-center text-xs justify-center text-white opacity-0 group-hover:opacity-100 transition-opacity">
|
|
127
|
+
<FolderUp size={20} className="mb-1 text-white" />
|
|
128
|
+
<span className="text-white text-center" style={{ fontSize: 12 }}>{overlayText}</span>
|
|
129
|
+
</div>
|
|
130
|
+
</div>
|
|
131
|
+
</div>
|
|
132
|
+
);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
// const icon = fileTypeIcons[file_type?.toLowerCase()] || fileTypeIcons.default;
|
|
136
|
+
|
|
137
|
+
// 文档引用点击
|
|
138
|
+
const handleReferenceClick = () => {
|
|
139
|
+
console.log(parse_url,'parse_url',url,'url')
|
|
140
|
+
if(fileManagerData && file_type === 'pdf' && !pdfPages){
|
|
141
|
+
const cur = (fileManagerData?.uploadedFiles||[]).find((item: any) => (item?.name||item?.file?.name) === (file_name||'').replace(/\s+/g, ''));
|
|
142
|
+
if(!cur?.pdfPages){
|
|
143
|
+
message.warning('该PDF文件未解析完成,请稍后再试');
|
|
144
|
+
return
|
|
145
|
+
}
|
|
146
|
+
eventsEmit?.('reference_file:click', {
|
|
147
|
+
file: file_name,
|
|
148
|
+
file_type,
|
|
149
|
+
url,
|
|
150
|
+
parse_url,
|
|
151
|
+
retrieve_tags,
|
|
152
|
+
file_id,
|
|
153
|
+
parsed_file_type,
|
|
154
|
+
references,
|
|
155
|
+
type: fileType,
|
|
156
|
+
isUploadFile: isUploadFile,
|
|
157
|
+
pdfPages:cur.pdfPages || 0,
|
|
158
|
+
});
|
|
159
|
+
}else {
|
|
160
|
+
eventsEmit?.('reference_file:click', {
|
|
161
|
+
file: file_name,
|
|
162
|
+
file_type,
|
|
163
|
+
url,
|
|
164
|
+
parse_url,
|
|
165
|
+
retrieve_tags,
|
|
166
|
+
file_id,
|
|
167
|
+
parsed_file_type,
|
|
168
|
+
references,
|
|
169
|
+
type: fileType,
|
|
170
|
+
isUploadFile: isUploadFile,
|
|
171
|
+
pdfPages
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
};
|
|
176
|
+
const fileType = useMemo(() => {
|
|
177
|
+
return (file_name || '').split('.').pop() || '';
|
|
178
|
+
}, [file_name]);
|
|
179
|
+
//console.log('fileType123123123123123123',fileType)
|
|
180
|
+
const icon = getFileTypeIcon(fileType, styles);
|
|
181
|
+
// 召回标签点击
|
|
182
|
+
// const handleRetriveTagClick = (tag: any) => {
|
|
183
|
+
// eventsEmit?.('retrive_tag:click', { file: file_name, tag });
|
|
184
|
+
// };
|
|
185
|
+
|
|
186
|
+
const downloadFile = async () => {
|
|
187
|
+
if (url) {
|
|
188
|
+
const _url: any = dealMinioUrl(url.indexOf('http') > -1 ? url : `${TempBaseUrl}/${url}`);
|
|
189
|
+
const fileExt = fileType.toLowerCase();
|
|
190
|
+
if (fileExt === 'json') {
|
|
191
|
+
try {
|
|
192
|
+
const response = await fetch(_url);
|
|
193
|
+
if (!response.ok) throw new Error('下载失败');
|
|
194
|
+
const blob = await response.blob();
|
|
195
|
+
const link = document.createElement('a');
|
|
196
|
+
link.href = URL.createObjectURL(blob);
|
|
197
|
+
link.download = file_name || '';
|
|
198
|
+
document.body.appendChild(link);
|
|
199
|
+
link.click();
|
|
200
|
+
document.body.removeChild(link);
|
|
201
|
+
setTimeout(() => URL.revokeObjectURL(link.href), 1000);
|
|
202
|
+
} catch (e) {
|
|
203
|
+
alert('文件下载失败');
|
|
204
|
+
}
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
207
|
+
const link = document.createElement('a');
|
|
208
|
+
link.href = _url;
|
|
209
|
+
link.download = file_name || '';
|
|
210
|
+
document.body.appendChild(link);
|
|
211
|
+
link.click();
|
|
212
|
+
document.body.removeChild(link);
|
|
213
|
+
}
|
|
214
|
+
};
|
|
215
|
+
|
|
216
|
+
// 只支持下载的文件类型
|
|
217
|
+
//const onlyDownloadTypes = onlyDownloadTypes || ['xlsx', 'csv', 'xls', 'ppt', 'pptx', 'pub', 'json', 'doc', 'docx'];
|
|
218
|
+
if (onlyDownloadTypes && onlyDownloadTypes.includes(fileType.toLowerCase())) {
|
|
219
|
+
return (
|
|
220
|
+
<div
|
|
221
|
+
key={file_name}
|
|
222
|
+
className="user-file relative group w-24 h-24 flex flex-col items-center justify-center cursor-pointer backdrop-blur-sm rounded-lg border p-2 text-sm transition-all"
|
|
223
|
+
title={file_name}
|
|
224
|
+
onClick={downloadFile}
|
|
225
|
+
style={{ borderColor: styles?.theme?.colors?.border }}
|
|
226
|
+
>
|
|
227
|
+
{icon}
|
|
228
|
+
<span
|
|
229
|
+
className="file-name font-medium truncate text-center px-2 pt-1"
|
|
230
|
+
style={{ fontSize: 10, maxWidth: '5.5rem' }}
|
|
231
|
+
>
|
|
232
|
+
{file_name}
|
|
233
|
+
</span>
|
|
234
|
+
<div className="absolute text-center inset-0 cursor-pointer bg-transparent group-hover:bg-black/40 transition-all duration-300 flex items-center justify-center rounded-lg">
|
|
235
|
+
<div className="flex flex-col items-center text-xs justify-center text-white opacity-0 group-hover:opacity-100 transition-opacity">
|
|
236
|
+
<FolderUp className="text-white opacity-0 group-hover:opacity-100 transition-opacity mx-auto" />
|
|
237
|
+
<div className="text-white text-center" style={{ fontSize: 10 }}>
|
|
238
|
+
下载文件
|
|
239
|
+
</div>
|
|
240
|
+
</div>
|
|
241
|
+
</div>
|
|
242
|
+
</div>
|
|
243
|
+
);
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
if (
|
|
247
|
+
fileType === 'image' ||
|
|
248
|
+
fileType === 'jpg' ||
|
|
249
|
+
fileType === 'jpeg' ||
|
|
250
|
+
fileType === 'png' ||
|
|
251
|
+
fileType === 'gif' ||
|
|
252
|
+
fileType === 'bmp' ||
|
|
253
|
+
fileType === 'webp'
|
|
254
|
+
) {
|
|
255
|
+
return (
|
|
256
|
+
<div
|
|
257
|
+
key={file_name}
|
|
258
|
+
className="relative group w-24 h-24 cursor-pointer flex items-center justify-center"
|
|
259
|
+
onClick={() => handleReferenceClick()}
|
|
260
|
+
>
|
|
261
|
+
{url ? (
|
|
262
|
+
<img
|
|
263
|
+
src={String(dealMinioUrl(url && url.indexOf('http') > -1 ? url : `${TempBaseUrl}/${url}`) || '')}
|
|
264
|
+
alt={file_name || ''}
|
|
265
|
+
className="w-full h-full object-cover rounded-md border"
|
|
266
|
+
style={{ borderColor: styles?.theme?.colors?.border }}
|
|
267
|
+
/>
|
|
268
|
+
) : (
|
|
269
|
+
<div className="w-full h-full flex items-center justify-center">
|
|
270
|
+
<span className="animate-spin rounded-full border-2 border-gray-300 border-t-blue-500 w-8 h-8 inline-block"></span>
|
|
271
|
+
</div>
|
|
272
|
+
)}
|
|
273
|
+
<div className="absolute inset-0 bg-transparent group-hover:bg-black/40 transition-all duration-300 flex items-center justify-center rounded-md">
|
|
274
|
+
<div className="flex flex-col items-center text-xs justify-center text-white opacity-0 group-hover:opacity-100 transition-opacity">
|
|
275
|
+
<Eye className="text-white opacity-0 group-hover:opacity-100 transition-opacity mx-auto" />
|
|
276
|
+
<div className="text-white text-center">查看图片</div>
|
|
277
|
+
</div>
|
|
278
|
+
</div>
|
|
279
|
+
</div>
|
|
280
|
+
);
|
|
281
|
+
} else {
|
|
282
|
+
return (
|
|
283
|
+
<div
|
|
284
|
+
key={file_name}
|
|
285
|
+
className="user-file relative group w-24 h-24 flex flex-col items-center justify-center cursor-pointer backdrop-blur-sm rounded-lg border p-2 text-sm transition-all"
|
|
286
|
+
title={file_name}
|
|
287
|
+
onClick={handleReferenceClick}
|
|
288
|
+
style={{ borderColor: styles?.theme?.colors?.border }}
|
|
289
|
+
>
|
|
290
|
+
{icon}
|
|
291
|
+
<span
|
|
292
|
+
className="file-name font-medium truncate text-center px-2 pt-1"
|
|
293
|
+
style={{ fontSize: 10, maxWidth: '5.5rem' }}
|
|
294
|
+
>
|
|
295
|
+
{file_name}
|
|
296
|
+
</span>
|
|
297
|
+
<div className="absolute text-center inset-0 cursor-pointer bg-transparent group-hover:bg-black/40 transition-all duration-300 flex items-center justify-center rounded-lg">
|
|
298
|
+
<div className="flex flex-col items-center text-xs justify-center text-white opacity-0 group-hover:opacity-100 transition-opacity">
|
|
299
|
+
<FolderUp className="text-white opacity-0 group-hover:opacity-100 transition-opacity mx-auto" />
|
|
300
|
+
<div className="text-white text-center" style={{ fontSize: 10 }}>
|
|
301
|
+
打开文件
|
|
302
|
+
</div>
|
|
303
|
+
</div>
|
|
304
|
+
</div>
|
|
305
|
+
</div>
|
|
306
|
+
);
|
|
307
|
+
}
|
|
308
|
+
//return (
|
|
309
|
+
// <div
|
|
310
|
+
// className="flex items-center bg-white rounded-lg shadow-sm border border-gray-100 px-3 py-2 mb-2 min-w-[220px] max-w-[340px] hover:shadow-md hover:border-blue-200 transition cursor-pointer group"
|
|
311
|
+
// style={{ gap: 12 }}
|
|
312
|
+
// onClick={handleReferenceClick}
|
|
313
|
+
// >
|
|
314
|
+
// <div className="flex-shrink-0">{icon}</div>
|
|
315
|
+
// <div className="flex-1 min-w-0">
|
|
316
|
+
// <div
|
|
317
|
+
// className="font-medium text-[13px] text-gray-900 truncate group-hover:text-blue-600"
|
|
318
|
+
// title={file_name}
|
|
319
|
+
// >
|
|
320
|
+
// {file_name}
|
|
321
|
+
// </div>
|
|
322
|
+
// </div>
|
|
323
|
+
// {/* {parse_url && (
|
|
324
|
+
// <a
|
|
325
|
+
// href={parse_url}
|
|
326
|
+
// target="_blank"
|
|
327
|
+
// rel="noopener noreferrer"
|
|
328
|
+
// className="ml-3 px-2 py-0.5 text-xs rounded border border-blue-100 bg-blue-50 text-blue-600 hover:bg-blue-100 hover:border-blue-300 transition"
|
|
329
|
+
// onClick={e => { e.stopPropagation(); handleReferenceClick(); }}
|
|
330
|
+
// >
|
|
331
|
+
// 下载
|
|
332
|
+
// </a>
|
|
333
|
+
// )} */}
|
|
334
|
+
// </div>
|
|
335
|
+
|
|
336
|
+
//);
|
|
337
|
+
};
|
|
338
|
+
|
|
339
|
+
export default ReferenceCard;
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
import React, { useState } from 'react';
|
|
2
|
+
import { ArrowDownToLine, ArrowUpToLine, Download, Eye, MessageSquare } from 'lucide-react';
|
|
3
|
+
import { getFileTypeIcon } from '../FileManager';
|
|
4
|
+
import { Tooltip } from 'antd';
|
|
5
|
+
|
|
6
|
+
// 定义召回文件类型
|
|
7
|
+
interface Tag {
|
|
8
|
+
id: string;
|
|
9
|
+
index: string;
|
|
10
|
+
image_urls: string[];
|
|
11
|
+
fromtype: string;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
interface RetriveFile {
|
|
15
|
+
file_id: string;
|
|
16
|
+
file_name: string;
|
|
17
|
+
file_type: string;
|
|
18
|
+
score: number;
|
|
19
|
+
tags: Tag[];
|
|
20
|
+
parsedFilePath?: string;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
interface RetriveItemProps {
|
|
24
|
+
is_download?: string;
|
|
25
|
+
from?: string;
|
|
26
|
+
files: RetriveFile[];
|
|
27
|
+
onQa?: (file: RetriveFile) => void;
|
|
28
|
+
onPreview?: (file: RetriveFile) => void;
|
|
29
|
+
onDownload?: (file: RetriveFile) => void;
|
|
30
|
+
styles?: any;
|
|
31
|
+
onTagClick?: (tag: Tag, file: RetriveFile) => void;
|
|
32
|
+
eventsEmit?: (eventName: string, payload?: any) => void;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// const mockFiles: RetriveFile[] = [
|
|
36
|
+
// {
|
|
37
|
+
// file_id: '1',
|
|
38
|
+
// file_name: '测试文档1.pdf',
|
|
39
|
+
// file_type: 'pdf',
|
|
40
|
+
// score: 0.98,
|
|
41
|
+
// tags: [
|
|
42
|
+
// { id: 't1', name: '标签A' },
|
|
43
|
+
// { id: 't2', name: '标签B' },
|
|
44
|
+
// ],
|
|
45
|
+
// },
|
|
46
|
+
// {
|
|
47
|
+
// file_id: '2',
|
|
48
|
+
// file_name: '说明文档.docx',
|
|
49
|
+
// file_type: 'docx',
|
|
50
|
+
// score: 0.87,
|
|
51
|
+
// tags: [
|
|
52
|
+
// { id: 't3', name: '标签C' },
|
|
53
|
+
// ],
|
|
54
|
+
// },
|
|
55
|
+
// {
|
|
56
|
+
// file_id: '3',
|
|
57
|
+
// file_name: '图片示例.png',
|
|
58
|
+
// file_type: 'png',
|
|
59
|
+
// score: 0.92,
|
|
60
|
+
// tags: [
|
|
61
|
+
// { id: 't4', name: '图片标签' },
|
|
62
|
+
// ],
|
|
63
|
+
// },
|
|
64
|
+
// ];
|
|
65
|
+
|
|
66
|
+
const getThemeColor = (styles: any, key: string, fallback: string) =>
|
|
67
|
+
styles?.theme?.colors?.[key] || fallback;
|
|
68
|
+
|
|
69
|
+
const RetriveItem: React.FC<RetriveItemProps> = ({
|
|
70
|
+
files,
|
|
71
|
+
onQa,
|
|
72
|
+
onPreview,
|
|
73
|
+
onDownload,
|
|
74
|
+
styles,
|
|
75
|
+
onTagClick,
|
|
76
|
+
eventsEmit,
|
|
77
|
+
from,
|
|
78
|
+
is_download,
|
|
79
|
+
}) => {
|
|
80
|
+
// 主题色
|
|
81
|
+
const borderColor = getThemeColor(styles, 'border', '#F2F3F5');
|
|
82
|
+
const bgHover = getThemeColor(styles, 'background', '#F5F6FA');
|
|
83
|
+
const textColor = getThemeColor(styles, 'text', '#1F2329');
|
|
84
|
+
const disabledText = getThemeColor(styles, 'disabledText', '#8F959E');
|
|
85
|
+
|
|
86
|
+
const btnHover = getThemeColor(styles, 'btnHover', '#E5E6EB');
|
|
87
|
+
const [open, setOpen] = useState(false);
|
|
88
|
+
return (
|
|
89
|
+
<div className="w-full">
|
|
90
|
+
<ul className="divide-y divide-gray-50 flex flex-col gap-2">
|
|
91
|
+
{(open ? files : files.slice(0, 2)).map((file: RetriveFile, idx: number) => {
|
|
92
|
+
return (
|
|
93
|
+
<li
|
|
94
|
+
key={file.parsedFilePath || file.file_id + '-' + idx}
|
|
95
|
+
className="flex items-center px-3 py-2 group transition"
|
|
96
|
+
style={{
|
|
97
|
+
minHeight: 32,
|
|
98
|
+
border: 'none',
|
|
99
|
+
borderRadius: 6,
|
|
100
|
+
cursor: 'default',
|
|
101
|
+
background: undefined,
|
|
102
|
+
}}
|
|
103
|
+
onMouseEnter={e => (e.currentTarget.style.background = bgHover)}
|
|
104
|
+
onMouseLeave={e => (e.currentTarget.style.background = '')}
|
|
105
|
+
>
|
|
106
|
+
{/* 文件icon+文件名 */}
|
|
107
|
+
<div className="flex items-center min-w-0 flex-1">
|
|
108
|
+
{getFileTypeIcon(file.file_type, styles)}
|
|
109
|
+
<Tooltip title={file.file_name}>
|
|
110
|
+
<span
|
|
111
|
+
className="font-medium text-sm ml-2 truncate max-w-[300px]"
|
|
112
|
+
title={file.file_name}
|
|
113
|
+
style={{ color: textColor }}
|
|
114
|
+
>
|
|
115
|
+
{file.file_name}
|
|
116
|
+
</span>
|
|
117
|
+
</Tooltip>
|
|
118
|
+
</div>
|
|
119
|
+
{/* 分数+标签 */}
|
|
120
|
+
<div className="flex items-center gap-x-1 min-w-[120px] ml-4">
|
|
121
|
+
{(() => {
|
|
122
|
+
// tags去重并排序
|
|
123
|
+
const seen = new Set();
|
|
124
|
+
const uniqueSortedTags = (file.tags || [])
|
|
125
|
+
.filter(tag => {
|
|
126
|
+
if (seen.has(tag.id)) return false;
|
|
127
|
+
// console.log(tag,'tag')
|
|
128
|
+
seen.add(tag.id);
|
|
129
|
+
return true;
|
|
130
|
+
})
|
|
131
|
+
.sort((a, b) => Number(a.index) - Number(b.index));
|
|
132
|
+
return uniqueSortedTags.map(tag => (
|
|
133
|
+
<span
|
|
134
|
+
className="cursor-pointer"
|
|
135
|
+
key={tag.id}
|
|
136
|
+
style={{
|
|
137
|
+
display: 'inline-block',
|
|
138
|
+
background: '#e6f7ff',
|
|
139
|
+
color: '#1890ff',
|
|
140
|
+
border: '1px solid rgba(114,187,255,0.3)',
|
|
141
|
+
borderRadius: 6,
|
|
142
|
+
padding: '1px 6px',
|
|
143
|
+
margin: '0 2px',
|
|
144
|
+
fontWeight: 600,
|
|
145
|
+
fontSize: 12,
|
|
146
|
+
lineHeight: '17px',
|
|
147
|
+
verticalAlign: 'middle',
|
|
148
|
+
}}
|
|
149
|
+
onClick={e => {
|
|
150
|
+
e.stopPropagation();
|
|
151
|
+
onTagClick?.({ ...tag, fromtype: '0' }, file);
|
|
152
|
+
}}
|
|
153
|
+
onMouseEnter={e => (e.currentTarget.style.background = '#bae7ff')}
|
|
154
|
+
onMouseLeave={e => (e.currentTarget.style.background = '#e6f7ff')}
|
|
155
|
+
>
|
|
156
|
+
{tag.index}
|
|
157
|
+
</span>
|
|
158
|
+
));
|
|
159
|
+
})()}
|
|
160
|
+
<span
|
|
161
|
+
className="text-xs px-5 border-r border-solid border-gray-300 ml-2"
|
|
162
|
+
style={{ color: disabledText }}
|
|
163
|
+
>
|
|
164
|
+
分数: {Number(file.score).toFixed(2)}
|
|
165
|
+
</span>
|
|
166
|
+
</div>
|
|
167
|
+
{/* 操作按钮组 */}
|
|
168
|
+
<div className="flex pl-5 items-center gap-1 ml-auto">
|
|
169
|
+
{from !== 'headless' && (
|
|
170
|
+
<Tooltip title="单文档问答" placement="top">
|
|
171
|
+
<button
|
|
172
|
+
onClick={() => {
|
|
173
|
+
onQa?.(file);
|
|
174
|
+
eventsEmit?.('referenceFile_question', { data: file, is_download });
|
|
175
|
+
}}
|
|
176
|
+
className="flex cursor-pointer items-center justify-center w-8 h-8 rounded transition group"
|
|
177
|
+
style={{ outline: 'none', border: 'none', background: 'none' }}
|
|
178
|
+
onMouseEnter={e => (e.currentTarget.style.background = btnHover)}
|
|
179
|
+
onMouseLeave={e => (e.currentTarget.style.background = 'none')}
|
|
180
|
+
>
|
|
181
|
+
<MessageSquare className="w-4 h-4" style={{ color: disabledText }} />
|
|
182
|
+
</button>
|
|
183
|
+
</Tooltip>
|
|
184
|
+
)}
|
|
185
|
+
|
|
186
|
+
<Tooltip title="预览" placement="top">
|
|
187
|
+
<button
|
|
188
|
+
onClick={() => {
|
|
189
|
+
onPreview?.(file);
|
|
190
|
+
eventsEmit?.('referenceFile_view', { data: file });
|
|
191
|
+
}}
|
|
192
|
+
className="flex cursor-pointer items-center justify-center w-8 h-8 rounded transition group"
|
|
193
|
+
style={{ outline: 'none', border: 'none', background: 'none' }}
|
|
194
|
+
onMouseEnter={e => (e.currentTarget.style.background = btnHover)}
|
|
195
|
+
onMouseLeave={e => (e.currentTarget.style.background = 'none')}
|
|
196
|
+
>
|
|
197
|
+
<Eye className="w-4 h-4" style={{ color: disabledText }} />
|
|
198
|
+
</button>
|
|
199
|
+
</Tooltip>
|
|
200
|
+
{from !== 'headless' && (
|
|
201
|
+
<Tooltip title={is_download ? '下载' : '无权限下载'} placement="top">
|
|
202
|
+
<button
|
|
203
|
+
onClick={() => {
|
|
204
|
+
onDownload?.(file);
|
|
205
|
+
eventsEmit?.('referenceFile_download', { data: file });
|
|
206
|
+
}}
|
|
207
|
+
disabled={!is_download}
|
|
208
|
+
className="flex items-center justify-center w-8 h-8 rounded transition group"
|
|
209
|
+
style={{
|
|
210
|
+
outline: 'none',
|
|
211
|
+
border: 'none',
|
|
212
|
+
background: 'none',
|
|
213
|
+
cursor: is_download ? 'pointer' : 'not-allowed',
|
|
214
|
+
}}
|
|
215
|
+
onMouseEnter={e => (e.currentTarget.style.background = btnHover)}
|
|
216
|
+
onMouseLeave={e => (e.currentTarget.style.background = 'none')}
|
|
217
|
+
>
|
|
218
|
+
<Download className="w-4 h-4" style={{ color: disabledText }} />
|
|
219
|
+
</button>
|
|
220
|
+
</Tooltip>
|
|
221
|
+
)}
|
|
222
|
+
</div>
|
|
223
|
+
</li>
|
|
224
|
+
);
|
|
225
|
+
})}
|
|
226
|
+
</ul>
|
|
227
|
+
{files?.length > 2 && (
|
|
228
|
+
<div
|
|
229
|
+
className="w-full flex justify-center mt-[8px]"
|
|
230
|
+
onClick={() => {
|
|
231
|
+
setOpen(!open);
|
|
232
|
+
}}
|
|
233
|
+
>
|
|
234
|
+
{open ? (
|
|
235
|
+
<ArrowUpToLine className="cursor-pointer w-[16px] text-[#555]" />
|
|
236
|
+
) : (
|
|
237
|
+
<ArrowDownToLine className="cursor-pointer w-[16px] text-[#555]" />
|
|
238
|
+
)}
|
|
239
|
+
</div>
|
|
240
|
+
)}
|
|
241
|
+
</div>
|
|
242
|
+
);
|
|
243
|
+
};
|
|
244
|
+
|
|
245
|
+
export default RetriveItem;
|