diff --git a/src/views/Community/components/DynamicNewsCard.js b/src/views/Community/components/DynamicNewsCard.js index acf020c6..58a739e7 100644 --- a/src/views/Community/components/DynamicNewsCard.js +++ b/src/views/Community/components/DynamicNewsCard.js @@ -398,49 +398,73 @@ const [currentMode, setCurrentMode] = useState('vertical'); } }} > - {/* 标题和搜索部分 - 一行布局 */} + {/* 标题和搜索部分 - 一体化单行布局 */} - {/* 第一行:标题 + 通知开关 + 更新时间 */} - - - - + {/* 一体化标题栏:左侧标题+badges | 中间筛选组件 | 右侧通知+时间 */} + + {/* 左侧:标题 + Badges */} + + + - 实时要闻·动态追踪 + 实时要闻 - - 实时 - 盘中 - 快讯 + + 实时 + 盘中 + 快讯 - + - - {/* 通知开关 */} + {/* 中间:筛选组件(占据剩余空间) */} + + + + + {/* 右侧:通知开关 + 更新时间 */} + + {/* 通知开关 - 紧凑版 */} - {browserPermission === 'granted' ? '通知已开启' : '开启通知'} + {browserPermission === 'granted' ? '已开启' : '开启通知'} - - 最后更新: {lastUpdateTime?.toLocaleTimeString() || '未知'} + {/* 更新时间 */} + + 更新: {lastUpdateTime?.toLocaleTimeString() || '--'} - - {/* 第二行:搜索和筛选组件 */} - {/* 主体内容 */} diff --git a/src/views/Community/components/DynamicNewsCard/VerticalModeLayout.js b/src/views/Community/components/DynamicNewsCard/VerticalModeLayout.js index 7af1f138..14d14459 100644 --- a/src/views/Community/components/DynamicNewsCard/VerticalModeLayout.js +++ b/src/views/Community/components/DynamicNewsCard/VerticalModeLayout.js @@ -1,17 +1,15 @@ // src/views/Community/components/DynamicNewsCard/VerticalModeLayout.js // 纵向分栏模式布局组件 -import React, { useState, useEffect } from 'react'; -import { Box, IconButton, Tooltip, VStack, Flex, Center, Text } from '@chakra-ui/react'; -import { ViewIcon, ViewOffIcon, InfoIcon } from '@chakra-ui/icons'; +import React, { useState } from 'react'; +import { Box, VStack, Flex, Center, Text } from '@chakra-ui/react'; +import { InfoIcon } from '@chakra-ui/icons'; import HorizontalDynamicNewsEventCard from '../EventCard/HorizontalDynamicNewsEventCard'; import EventDetailScrollPanel from './EventDetailScrollPanel'; /** * 纵向分栏模式布局 - * 支持两种展示模式: - * - detail(默认):左侧事件列表 1fr | 右侧详情 2fr - * - list:左侧事件列表 7fr | 右侧详情 300px + * 固定布局:左侧事件列表 3fr | 右侧详情 7fr * * @param {string} display - CSS display 属性(用于显示/隐藏组件) * @param {Array} events - 当前页的事件列表(分页数据) @@ -32,33 +30,12 @@ const VerticalModeLayout = ({ getTimelineBoxStyle, borderColor, }) => { - // 布局模式状态:'detail' = 聚焦详情(默认),'list' = 聚焦列表 - const [layoutMode, setLayoutMode] = useState('detail'); + // 详情面板重置 key(预留,用于未来功能) + const [detailPanelKey] = useState(0); - // 详情面板重置 key(切换到 list 模式时改变,强制重新渲染) - const [detailPanelKey, setDetailPanelKey] = useState(0); - - // 监听事件选择 - 自动切换到详情模式 - useEffect(() => { - if (selectedEvent) { - setLayoutMode('detail'); - } - }, [selectedEvent]); - - // 切换布局模式 - const toggleLayoutMode = () => { - const newMode = layoutMode === 'detail' ? 'list' : 'detail'; - setLayoutMode(newMode); - - // 如果切换到 list 模式,重置详情面板(收起所有 CollapsibleSection) - if (newMode === 'list') { - setDetailPanelKey(prev => prev + 1); // 改变 key,强制重新渲染 - } - }; - - // 根据模式计算 flex 比例 - const leftFlex = layoutMode === 'detail' ? '4' : '6'; - const rightFlex = layoutMode === 'detail' ? '6' : '4'; + // 固定布局比例:左侧更窄(3),右侧更宽(7) + const leftFlex = '3'; + const rightFlex = '7'; return ( ))} @@ -140,25 +117,6 @@ const VerticalModeLayout = ({ overflow="hidden" h="100%" > - {/* 布局切换按钮 */} - - : } - onClick={toggleLayoutMode} - aria-label="切换布局模式" - colorScheme="blue" - variant="solid" - /> - - {/* 详情面板 */} {/* 单行紧凑布局:名称+涨跌幅 | 分时图 | K线图 | 关联描述 */} - - {/* 左侧:股票代码 + 名称 + 涨跌幅(垂直排列) */} - - + {/* 左侧:股票信息区 */} + + {/* 股票代码 + 名称 + 涨跌幅 */} + - - - {stock.stock_code} - - - {stock.stock_name} - - - - - - {formatChange(change)} + + + {stock.stock_code} + + + {stock.stock_name} + + + + + + {formatChange(change)} + + {onWatchlistToggle && ( + } + onClick={handleWatchlistClick} + aria-label={isInWatchlist ? '已关注' : '加自选'} + borderRadius="full" + /> + )} + + + + {/* 分时图 - 更紧凑 */} + { + e.stopPropagation(); + setIsModalOpen(true); + }} + cursor="pointer" + flexShrink={0} + align="stretch" + spacing={0} + h="fit-content" + _hover={{ + borderColor: useColorModeValue('blue.300', 'blue.500'), + boxShadow: 'md', + transform: 'translateY(-1px)' + }} + transition="all 0.2s" + > + + 📈 分时 - {onWatchlistToggle && ( - } - onClick={handleWatchlistClick} - aria-label={isInWatchlist ? '已关注' : '加自选'} - borderRadius="full" + + - )} - - + + - {/* 分时图 - 紧凑高度 */} - { - e.stopPropagation(); - setIsModalOpen(true); - }} - cursor="pointer" - flexShrink={1} - align="stretch" - spacing={0} - h="fit-content" - _hover={{ - borderColor: useColorModeValue('blue.300', 'blue.500'), - boxShadow: 'md', - transform: 'translateY(-1px)' - }} - transition="all 0.2s" - > - { + e.stopPropagation(); + setIsModalOpen(true); + }} + cursor="pointer" + flexShrink={0} + align="stretch" + spacing={0} + h="fit-content" + _hover={{ + borderColor: useColorModeValue('purple.300', 'purple.500'), + boxShadow: 'md', + transform: 'translateY(-1px)' + }} + transition="all 0.2s" > - 📈 分时 - - - - - - - {/* K线图 - 紧凑高度 */} - { - e.stopPropagation(); - setIsModalOpen(true); - }} - cursor="pointer" - flexShrink={1} - align="stretch" - spacing={0} - h="fit-content" - _hover={{ - borderColor: useColorModeValue('purple.300', 'purple.500'), - boxShadow: 'md', - transform: 'translateY(-1px)' - }} - transition="all 0.2s" - > - - 📊 日线 - - - - - + + 📊 日线 + + + + + + {/* 关联描述 - 升级和降级处理 */} {stock.relation_desc && ( @@ -347,11 +346,11 @@ const StockListItem = ({ position="relative" > {/* 去掉"关联描述"标题 */} - + {relationText}