diff --git a/src/renderer/src/hooks/useAssistant.ts b/src/renderer/src/hooks/useAssistant.ts index 23b538b56a..ee375ec28d 100644 --- a/src/renderer/src/hooks/useAssistant.ts +++ b/src/renderer/src/hooks/useAssistant.ts @@ -83,7 +83,7 @@ export function useAssistant(id: string) { ), updateAssistant: (assistant: Assistant) => dispatch(updateAssistant(assistant)), updateAssistantSettings: (settings: Partial) => { - dispatch(updateAssistantSettings({ assistantId: assistant.id, settings })) + assistant?.id && dispatch(updateAssistantSettings({ assistantId: assistant.id, settings })) } } } diff --git a/src/renderer/src/hooks/useMCPServers.ts b/src/renderer/src/hooks/useMCPServers.ts index ca9c8e0212..d1e58fabc4 100644 --- a/src/renderer/src/hooks/useMCPServers.ts +++ b/src/renderer/src/hooks/useMCPServers.ts @@ -13,7 +13,7 @@ window.electron.ipcRenderer.on(IpcChannel.Mcp_ServersChanged, (_event, servers) window.electron.ipcRenderer.on(IpcChannel.Mcp_AddServer, (_event, server: MCPServer) => { store.dispatch(addMCPServer(server)) NavigationService.navigate?.('/settings/mcp') - NavigationService.navigate?.('/settings/mcp/settings', { state: { server } }) + NavigationService.navigate?.(`/settings/mcp/settings/${encodeURIComponent(server.id)}`) }) const selectMcpServers = (state) => state.mcp.servers diff --git a/src/renderer/src/pages/settings/MCPSettings/McpServersList.tsx b/src/renderer/src/pages/settings/MCPSettings/McpServersList.tsx index a6de15b806..9621706b71 100644 --- a/src/renderer/src/pages/settings/MCPSettings/McpServersList.tsx +++ b/src/renderer/src/pages/settings/MCPSettings/McpServersList.tsx @@ -7,7 +7,7 @@ import { MCPServer } from '@renderer/types' import { formatMcpError } from '@renderer/utils/error' import { Badge, Button, Dropdown, Empty, Switch, Tag } from 'antd' import { MonitorCheck, Plus, RefreshCw, Settings2, SquareArrowOutUpRight } from 'lucide-react' -import { FC, useCallback, useEffect, useState } from 'react' +import { FC, useCallback, useEffect, useRef, useState } from 'react' import { useTranslation } from 'react-i18next' import { useNavigate } from 'react-router' import styled from 'styled-components' @@ -29,6 +29,28 @@ const McpServersList: FC = () => { const [loadingServerIds, setLoadingServerIds] = useState>(new Set()) const [serverVersions, setServerVersions] = useState>({}) + const scrollRef = useRef(null) + + // 简单的滚动位置记忆 + useEffect(() => { + // 恢复滚动位置 + const savedScroll = sessionStorage.getItem('mcp-list-scroll') + if (savedScroll && scrollRef.current) { + scrollRef.current.scrollTop = Number(savedScroll) + } + + // 保存滚动位置 + const handleScroll = () => { + if (scrollRef.current) { + sessionStorage.setItem('mcp-list-scroll', String(scrollRef.current.scrollTop)) + } + } + + const container = scrollRef.current + container?.addEventListener('scroll', handleScroll) + return () => container?.removeEventListener('scroll', handleScroll) + }, []) + const fetchServerVersion = useCallback(async (server: MCPServer) => { if (!server.isActive) return @@ -61,7 +83,7 @@ const McpServersList: FC = () => { isActive: false } addMCPServer(newServer) - navigate(`/settings/mcp/settings`, { state: { server: newServer } }) + navigate(`/settings/mcp/settings/${encodeURIComponent(newServer.id)}`) window.message.success({ content: t('settings.mcp.addSuccess'), key: 'mcp-list' }) }, [addMCPServer, navigate, t]) @@ -75,7 +97,7 @@ const McpServersList: FC = () => { setIsAddModalVisible(false) window.message.success({ content: t('settings.mcp.addSuccess'), key: 'mcp-quick-add' }) // Optionally navigate to the new server's settings page - // navigate(`/settings/mcp/settings`, { state: { server } }) + // navigate(`/settings/mcp/settings/${encodeURIComponent(server.id)}`) }, [addMCPServer, t] ) @@ -112,7 +134,7 @@ const McpServersList: FC = () => { } return ( - + {t('settings.mcp.newServer')} @@ -160,7 +182,9 @@ const McpServersList: FC = () => { {(server: MCPServer) => ( - navigate(`/settings/mcp/settings`, { state: { server } })}> + navigate(`/settings/mcp/settings/${encodeURIComponent(server.id)}`)}> {server.logoUrl && } @@ -190,7 +214,7 @@ const McpServersList: FC = () => {