From ef7f91ba77bb2cab9a066376676299d42b0a7ee6 Mon Sep 17 00:00:00 2001 From: zdl <3489966805@qq.com> Date: Mon, 24 Nov 2025 15:11:52 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20RightSidebar=20(~420=20=E8=A1=8C)=20-?= =?UTF-8?q?=20=E6=A8=A1=E5=9E=8B/=E5=B7=A5=E5=85=B7/=E7=BB=9F=E8=AE=A1=20T?= =?UTF-8?q?ab=20=E9=9D=A2=E6=9D=BF=EF=BC=88=E5=8D=95=E6=96=87=E4=BB=B6?= =?UTF-8?q?=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/RightSidebar/index.js | 498 ++++++++++++++++++ 1 file changed, 498 insertions(+) create mode 100644 src/views/AgentChat/components/RightSidebar/index.js diff --git a/src/views/AgentChat/components/RightSidebar/index.js b/src/views/AgentChat/components/RightSidebar/index.js new file mode 100644 index 00000000..4ef5b563 --- /dev/null +++ b/src/views/AgentChat/components/RightSidebar/index.js @@ -0,0 +1,498 @@ +// src/views/AgentChat/components/RightSidebar/index.js +// 右侧栏组件 - 配置中心 + +import React from 'react'; +import { motion, AnimatePresence } from 'framer-motion'; +import { + Box, + Button, + Badge, + Checkbox, + CheckboxGroup, + Tooltip, + IconButton, + Accordion, + AccordionItem, + AccordionButton, + AccordionPanel, + AccordionIcon, + Tabs, + TabList, + TabPanels, + Tab, + TabPanel, + Card, + CardBody, + HStack, + VStack, + Flex, + Text, +} from '@chakra-ui/react'; +import { + Settings, + ChevronRight, + Cpu, + Code, + BarChart3, + Check, + MessageSquare, + Activity, +} from 'lucide-react'; +import { animations } from '../../constants/animations'; +import { AVAILABLE_MODELS } from '../../constants/models'; +import { MCP_TOOLS, TOOL_CATEGORIES } from '../../constants/tools'; + +/** + * RightSidebar - 右侧栏组件(配置中心) + * + * @param {Object} props + * @param {boolean} props.isOpen - 侧边栏是否展开 + * @param {Function} props.onClose - 关闭侧边栏回调 + * @param {string} props.selectedModel - 当前选中的模型 ID + * @param {Function} props.onModelChange - 模型切换回调 + * @param {Array} props.selectedTools - 已选工具 ID 列表 + * @param {Function} props.onToolsChange - 工具选择变化回调 + * @param {number} props.sessionsCount - 会话总数 + * @param {number} props.messagesCount - 消息总数 + * @returns {JSX.Element|null} + */ +const RightSidebar = ({ + isOpen, + onClose, + selectedModel, + onModelChange, + selectedTools, + onToolsChange, + sessionsCount, + messagesCount, +}) => { + return ( + + {isOpen && ( + + + {/* 标题栏 */} + + + + + + 配置中心 + + + + + } + onClick={onClose} + bg="rgba(255, 255, 255, 0.05)" + color="gray.300" + backdropFilter="blur(10px)" + border="1px solid" + borderColor="rgba(255, 255, 255, 0.1)" + _hover={{ + bg: 'rgba(255, 255, 255, 0.1)', + borderColor: 'purple.400', + color: 'white', + }} + /> + + + + + + {/* Tab 面板 */} + + + + + + + 模型 + + + + + + 工具 + {selectedTools.length > 0 && ( + + {selectedTools.length} + + )} + + + + + + 统计 + + + + + + {/* 模型选择 */} + + + {AVAILABLE_MODELS.map((model, idx) => ( + + onModelChange(model.id)} + bg={ + selectedModel === model.id + ? 'rgba(139, 92, 246, 0.15)' + : 'rgba(255, 255, 255, 0.05)' + } + backdropFilter="blur(12px)" + borderWidth={2} + borderColor={ + selectedModel === model.id ? 'purple.400' : 'rgba(255, 255, 255, 0.1)' + } + _hover={{ + borderColor: + selectedModel === model.id ? 'purple.400' : 'rgba(255, 255, 255, 0.2)', + boxShadow: + selectedModel === model.id + ? '0 8px 20px rgba(139, 92, 246, 0.4)' + : '0 4px 12px rgba(0, 0, 0, 0.3)', + }} + transition="all 0.3s" + > + + + + {model.icon} + + + + {model.name} + + + {model.description} + + + {selectedModel === model.id && ( + + + + )} + + + + + ))} + + + + {/* 工具选择 */} + + + {Object.entries(TOOL_CATEGORIES).map(([category, tools], catIdx) => ( + + + + + + {category} + + + {tools.filter((t) => selectedTools.includes(t.id)).length}/{tools.length} + + + + + + + + {tools.map((tool) => ( + + + + + {tool.icon} + + + + {tool.name} + + + {tool.description} + + + + + + ))} + + + + + + ))} + + + + + + + + + + + + + {/* 统计信息 */} + + + + + + + + + 对话数 + + + {sessionsCount} + + + + + + + + + + + + + + + 消息数 + + + {messagesCount} + + + + + + + + + + + + + + + 已选工具 + + + {selectedTools.length} + + + + + + + + + + + + + + + )} + + ); +}; + +export default RightSidebar;