feat: 优化股票卡片布局和弹窗性能

布局优化:
- 将分时图和K线图移至第二行公司名称后面
- 第二行布局:公司名称(左)+ 分时图 + K线图(右)
- 删除图表标题文字,使布局更紧凑
- 移除未使用的 SimpleGrid 导入

性能优化:
- 股票详情弹窗改为条件渲染
- 弹窗关闭时完全从 DOM 移除
- 减少不必要的组件渲染和内存占用
- 与四排模式弹窗保持一致的实现方式

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
zdl
2025-11-05 11:09:53 +08:00
parent ea0428321b
commit fe9b3034a1

View File

@@ -6,7 +6,6 @@ import {
Box, Box,
Flex, Flex,
VStack, VStack,
SimpleGrid,
Text, Text,
Button, Button,
IconButton, IconButton,
@@ -167,56 +166,49 @@ const StockListItem = ({
</Flex> </Flex>
</Flex> </Flex>
{/* 第二行:公司名称(彩色高亮) */} {/* 第二行:公司名称 + 分时图 + K线图 */}
<Text <Flex align="center" gap={3}>
fontSize="sm" {/* 左侧:公司名称 */}
fontWeight="medium" <Text
color={codeColor} fontSize="sm"
bg={useColorModeValue('blue.50', 'blue.900')} fontWeight="medium"
px={2} color={codeColor}
py={0.5} bg={useColorModeValue('blue.50', 'blue.900')}
borderRadius="sm" px={2}
width="fit-content" py={0.5}
> borderRadius="sm"
{stock.stock_name} whiteSpace="nowrap"
</Text> flexShrink={0}
>
{stock.stock_name}
</Text>
{/* 右侧:分时图 + K线图 */}
<Flex gap={2} flex={1} onClick={(e) => e.stopPropagation()}>
{/* 分时图 */}
<Box flex={1} minW={0}>
<MiniTimelineChart
stockCode={stock.stock_code}
eventTime={eventTime}
onClick={() => setIsModalOpen(true)}
/>
</Box>
{/* K线图 */}
<Box flex={1} minW={0}>
<MiniKLineChart
stockCode={stock.stock_code}
eventTime={eventTime}
onClick={() => setIsModalOpen(true)}
/>
</Box>
</Flex>
</Flex>
</VStack> </VStack>
{/* 分隔线 */} {/* 分隔线 */}
<Box borderTop="1px solid" borderColor={dividerColor} /> <Box borderTop="1px solid" borderColor={dividerColor} />
{/* 分时图 & K线图 - 左右布局 */}
<Box>
<SimpleGrid columns={2} spacing={3}>
{/* 左侧:分时图 */}
<Box onClick={(e) => e.stopPropagation()}>
<Text fontSize="xs" color={descColor} mb={1} textAlign="center">
分时图
</Text>
<MiniTimelineChart
stockCode={stock.stock_code}
eventTime={eventTime}
onClick={() => setIsModalOpen(true)}
/>
</Box>
{/* 右侧K线图 */}
<Box onClick={(e) => e.stopPropagation()}>
<Text fontSize="xs" color={descColor} mb={1} textAlign="center">
日K线
</Text>
<MiniKLineChart
stockCode={stock.stock_code}
eventTime={eventTime}
onClick={() => setIsModalOpen(true)}
/>
</Box>
</SimpleGrid>
</Box>
{/* 分隔线 */}
<Box borderTop="1px solid" borderColor={dividerColor} />
{/* 关联描述 */} {/* 关联描述 */}
{relationText && relationText !== '--' && ( {relationText && relationText !== '--' && (
<Box> <Box>
@@ -269,14 +261,16 @@ const StockListItem = ({
</VStack> </VStack>
</Box> </Box>
{/* 股票详情弹窗 */} {/* 股票详情弹窗 - 未打开时不渲染 */}
<StockChartModal {isModalOpen && (
isOpen={isModalOpen} <StockChartModal
onClose={() => setIsModalOpen(false)} isOpen={isModalOpen}
stock={stock} onClose={() => setIsModalOpen(false)}
eventTime={eventTime} stock={stock}
size="6xl" eventTime={eventTime}
/> size="6xl"
/>
)}
</> </>
); );
}; };