diff --git a/src/views/Community/components/DynamicNewsCard.js b/src/views/Community/components/DynamicNewsCard.js index d047d40a..5ebdf478 100644 --- a/src/views/Community/components/DynamicNewsCard.js +++ b/src/views/Community/components/DynamicNewsCard.js @@ -28,6 +28,8 @@ import { } from '@chakra-ui/react'; import { TimeIcon } from '@chakra-ui/icons'; import EventScrollList from './DynamicNewsCard/EventScrollList'; +import ModeToggleButtons from './DynamicNewsCard/ModeToggleButtons'; +import PaginationControl from './DynamicNewsCard/PaginationControl'; import DynamicNewsDetailPanel from './DynamicNewsDetail'; import UnifiedSearchBox from './UnifiedSearchBox'; import { @@ -326,45 +328,79 @@ const DynamicNewsCard = forwardRef(({ {/* 主体内容 */} - {/* 横向滚动事件列表 - 始终渲染(除非为空) */} - {currentPageEvents && currentPageEvents.length > 0 ? ( - - ) : !loading ? ( - /* Empty 状态 - 只在非加载且无数据时显示 */ -
- - 暂无事件数据 - -
- ) : ( - /* 首次加载状态 */ -
- - - 正在加载最新事件... - -
- )} + {/* 顶部控制栏:模式切换按钮 + 分页控制器(始终显示) */} + + {/* 左侧:模式切换按钮 */} + + + {/* 右侧:分页控制器(仅在纵向模式显示) */} + {mode === 'vertical' && totalPages > 1 && ( + + )} + + + {/* 横向滚动事件列表 - 根据数据情况渲染 */} + {(() => { + // 检查对应模式是否有缓存数据(使用 mode 而非 currentMode,避免延迟) + const hasCachedData = mode === 'vertical' + ? Object.keys(allCachedEventsByPage || {}).length > 0 + : (allCachedEvents?.length || 0) > 0; + + // 【优化渲染顺序】优先判断 loading,避免闪现空状态 + // 1. 首次加载(无缓存 + 加载中)→ 显示 loading + // 2. 有数据或有缓存 → 显示列表 + // 3. 无数据且未加载 → 显示空状态 + + if (loading) { + /* 首次加载状态 - 无缓存数据时显示 loading */ + return ( +
+ + + 正在加载最新事件... + +
+ ); + } else if (currentPageEvents.length > 0 || hasCachedData) { + /* 有数据 - 显示列表(可能在后台加载下一页) */ + return ( + + ); + } else { + /* 空状态 - 确实无数据时才显示 */ + return ( +
+ + 暂无事件数据 + +
+ ); + } + })()}
{/* 四排模式详情弹窗 - 未打开时不渲染 */} diff --git a/src/views/Community/components/DynamicNewsCard/EventScrollList.js b/src/views/Community/components/DynamicNewsCard/EventScrollList.js index 890a3b62..b305a397 100644 --- a/src/views/Community/components/DynamicNewsCard/EventScrollList.js +++ b/src/views/Community/components/DynamicNewsCard/EventScrollList.js @@ -81,21 +81,6 @@ const EventScrollList = ({ return ( - {/* 顶部控制栏:模式切换按钮 + 分页控制器 */} - - {/* 左侧:模式切换按钮 */} - - - {/* 右侧:分页控制器(仅在纵向模式显示) */} - {mode === 'vertical' && totalPages > 1 && ( - - )} - - {/* 横向滚动区域 */}