From eb2db40b62bfe3c1928011c2bd6eecfda96138a0 Mon Sep 17 00:00:00 2001 From: hy Date: Fri, 9 Jan 2026 15:22:27 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E6=90=9C=E7=B4=A2=E9=A1=B5=E9=9D=A2):=20?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0AI=E5=9B=9E=E7=AD=94=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E5=8F=8A=E4=BC=98=E5=8C=96=E6=90=9C=E7=B4=A2=E7=95=8C=E9=9D=A2?= =?UTF-8?q?=E5=B8=83=E5=B1=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增AI回答功能,包含折叠展示和全屏模态框 - 调整搜索框布局和样式 - 使用Empty组件替换自定义空状态 - 移除未使用的Title组件 --- src/renderer/src/pages/SearchPage.tsx | 73 ++++++++++++++++++--------- 1 file changed, 48 insertions(+), 25 deletions(-) diff --git a/src/renderer/src/pages/SearchPage.tsx b/src/renderer/src/pages/SearchPage.tsx index 778095c3..5d294772 100644 --- a/src/renderer/src/pages/SearchPage.tsx +++ b/src/renderer/src/pages/SearchPage.tsx @@ -1,6 +1,6 @@ import React, { useState } from 'react' import { Input, List, Card, Modal, Empty, Typography, Tag, Button, Switch } from 'antd' -import { SendOutlined } from '@ant-design/icons' +import { SendOutlined, ExpandOutlined } from '@ant-design/icons' import { Document, Page, pdfjs } from 'react-pdf' import DocViewer, { DocViewerRenderers } from 'react-doc-viewer' import 'react-pdf/dist/Page/AnnotationLayer.css' @@ -16,7 +16,6 @@ pdfjs.GlobalWorkerOptions.workerSrc = new URL( ).toString() const { TextArea } = Input -const { Title } = Typography const SearchPage: React.FC = () => { const [loading, setLoading] = useState(false) @@ -26,6 +25,8 @@ const SearchPage: React.FC = () => { const [currentDoc, setCurrentDoc] = useState(null) const [searchValue, setSearchValue] = useState('') const [aiAnswerEnabled, setAiAnswerEnabled] = useState(false) + const [aiAnswer, setAiAnswer] = useState('') + const [aiAnswerModalVisible, setAiAnswerModalVisible] = useState(false) const handleSearch = async (value: string) => { if (!value.trim()) return @@ -34,6 +35,10 @@ const SearchPage: React.FC = () => { const response = await window.api.search(value) setResults(response.results) setTokens(response.tokens) + if (aiAnswerEnabled) { + const snippet = response.results?.[0]?.text || '' + setAiAnswer(snippet || 'AI 正在准备回答...') + } } catch (error) { console.error('Search error:', error) } finally { @@ -41,7 +46,7 @@ const SearchPage: React.FC = () => { } } - + const openPreview = (item: SearchResult) => { setCurrentDoc(item) @@ -89,14 +94,14 @@ const SearchPage: React.FC = () => { return (
-
+
{/* Search Box */} -
-