From d8fbceaadf1c9bf62e898868704237046e4c1acf Mon Sep 17 00:00:00 2001 From: huangjianwu Date: Mon, 23 Mar 2026 15:23:55 +0800 Subject: [PATCH] =?UTF-8?q?refactor(chat):=20=E5=85=A8=E5=B1=8F/=E5=8D=8A?= =?UTF-8?q?=E5=B1=8F=E5=88=87=E6=8D=A2=E7=A7=BB=E5=85=A5=20ChatPanel=20?= =?UTF-8?q?=E5=86=85=E9=83=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Header 恢复单个"AI 问答"按钮,点击默认打开半屏模式 - ChatPanel 头部新增全屏/半屏切换按钮(Maximize2/Minimize2 图标) - 半屏:markdown 与问答并排各占一半 - 全屏:问答占满内容区,隐藏 markdown Co-Authored-By: Claude Opus 4.6 --- .../pages/HomePage/components/ChatPanel.tsx | 33 +++++++++--- .../HomePage/components/MarkdownHeader.tsx | 52 ++++++------------- .../HomePage/components/MarkdownViewer.tsx | 5 +- 3 files changed, 45 insertions(+), 45 deletions(-) diff --git a/BillNote_frontend/src/pages/HomePage/components/ChatPanel.tsx b/BillNote_frontend/src/pages/HomePage/components/ChatPanel.tsx index 92eae13..83dd8c7 100644 --- a/BillNote_frontend/src/pages/HomePage/components/ChatPanel.tsx +++ b/BillNote_frontend/src/pages/HomePage/components/ChatPanel.tsx @@ -3,14 +3,18 @@ import { Bubble, Sender } from '@ant-design/x' import type { BubbleProps } from '@ant-design/x' import { Button } from '@/components/ui/button' import { Badge } from '@/components/ui/badge' -import { Loader2, Trash2, ChevronDown, ChevronUp, BookOpen, UserRound, Bot } from 'lucide-react' +import { Loader2, Trash2, ChevronDown, ChevronUp, BookOpen, UserRound, Bot, Maximize2, Minimize2 } from 'lucide-react' import { toast } from 'react-hot-toast' import { useChatStore } from '@/store/chatStore' import { useTaskStore } from '@/store/taskStore' import { askQuestion, getChatStatus, indexTask, type ChatSource, type IndexStatus } from '@/services/chat' +type ChatMode = 'half' | 'full' + interface ChatPanelProps { taskId: string + mode: ChatMode + onModeChange: (mode: ChatMode) => void } function SourceBadges({ sources }: { sources: ChatSource[] }) { @@ -43,7 +47,7 @@ function SourceBadges({ sources }: { sources: ChatSource[] }) { ) } -export default function ChatPanel({ taskId }: ChatPanelProps) { +export default function ChatPanel({ taskId, mode, onModeChange }: ChatPanelProps) { const [input, setInput] = useState('') const [loading, setLoading] = useState(false) const [indexStatus, setIndexStatus] = useState(null) @@ -218,16 +222,31 @@ export default function ChatPanel({ taskId }: ChatPanelProps) { {/* 头部 */}
AI 问答 - {messages.length > 0 && ( +
- )} + {messages.length > 0 && ( + + )} +
{/* 消息列表 */} diff --git a/BillNote_frontend/src/pages/HomePage/components/MarkdownHeader.tsx b/BillNote_frontend/src/pages/HomePage/components/MarkdownHeader.tsx index 4cccbba..89934b5 100644 --- a/BillNote_frontend/src/pages/HomePage/components/MarkdownHeader.tsx +++ b/BillNote_frontend/src/pages/HomePage/components/MarkdownHeader.tsx @@ -1,7 +1,7 @@ 'use client' import { useEffect, useState } from 'react' -import { Copy, Download, BrainCircuit, MessageSquare, PanelRight, Maximize2 } from 'lucide-react' +import { Copy, Download, BrainCircuit, MessageSquare } from 'lucide-react' import { Button } from '@/components/ui/button' import { Select, SelectContent, SelectItem, SelectTrigger } from '@/components/ui/select' import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip' @@ -188,40 +188,22 @@ export function MarkdownHeader({ {setShowChat && ( -
- - - - - - 侧边问答(半屏) - - - - - - - - 全屏问答 - - -
+ + + + + + 基于笔记内容的 AI 问答 + + )} diff --git a/BillNote_frontend/src/pages/HomePage/components/MarkdownViewer.tsx b/BillNote_frontend/src/pages/HomePage/components/MarkdownViewer.tsx index 68e5887..6212f48 100644 --- a/BillNote_frontend/src/pages/HomePage/components/MarkdownViewer.tsx +++ b/BillNote_frontend/src/pages/HomePage/components/MarkdownViewer.tsx @@ -221,10 +221,9 @@ const MarkdownViewer: FC = ({ status }) => {
{selectedContent && selectedContent !== 'loading' && selectedContent !== 'empty' ? ( <> - {/* 全屏问答模式:隐藏 markdown,ChatPanel 占满 */} {showChat === 'full' && currentTask ? (
- +
) : ( <> @@ -486,7 +485,7 @@ const MarkdownViewer: FC = ({ status }) => { {/* 侧边问答模式:markdown + ChatPanel 各占一半 */} {showChat === 'half' && currentTask && (
- +
)}