diff --git a/src/views/Community/components/DynamicNewsCard/VerticalModeLayout.js b/src/views/Community/components/DynamicNewsCard/VerticalModeLayout.js index e32d207a..17901529 100644 --- a/src/views/Community/components/DynamicNewsCard/VerticalModeLayout.js +++ b/src/views/Community/components/DynamicNewsCard/VerticalModeLayout.js @@ -1,7 +1,7 @@ // src/views/Community/components/DynamicNewsCard/VerticalModeLayout.js // 纵向分栏模式布局组件 -import React, { useState } from 'react'; +import React, { useState, useEffect } from 'react'; import { Box, IconButton, Tooltip, VStack, Flex } from '@chakra-ui/react'; import { ViewIcon, ViewOffIcon } from '@chakra-ui/icons'; import HorizontalDynamicNewsEventCard from '../EventCard/HorizontalDynamicNewsEventCard'; @@ -35,9 +35,25 @@ const VerticalModeLayout = ({ // 布局模式状态:'detail' = 聚焦详情(默认),'list' = 聚焦列表 const [layoutMode, setLayoutMode] = useState('list'); + // 详情面板重置 key(切换到 list 模式时改变,强制重新渲染) + const [detailPanelKey, setDetailPanelKey] = useState(0); + + // 监听事件选择 - 自动切换到详情模式 + useEffect(() => { + if (selectedEvent) { + setLayoutMode('detail'); + } + }, [selectedEvent]); + // 切换布局模式 const toggleLayoutMode = () => { - setLayoutMode(prev => prev === 'detail' ? 'list' : 'detail'); + const newMode = layoutMode === 'detail' ? 'list' : 'detail'; + setLayoutMode(newMode); + + // 如果切换到 list 模式,重置详情面板(收起所有 CollapsibleSection) + if (newMode === 'list') { + setDetailPanelKey(prev => prev + 1); // 改变 key,强制重新渲染 + } }; // 根据模式计算 flex 比例 @@ -50,9 +66,33 @@ const VerticalModeLayout = ({ gap={6} position="relative" transition="all 0.3s ease-in-out" + h="100%" + overflow="hidden" > - {/* 左侧:事件列表 - 使用分页模式 */} - + {/* 左侧:事件列表 - 独立滚动 */} + {/* 事件列表 */} - {/* 右侧:事件详情 */} + {/* 右侧:事件详情 - 独立滚动 */} {/* 布局切换按钮 */}