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,7 +166,9 @@ const StockListItem = ({
</Flex> </Flex>
</Flex> </Flex>
{/* 第二行:公司名称(彩色高亮) */} {/* 第二行:公司名称 + 分时图 + K线图 */}
<Flex align="center" gap={3}>
{/* 左侧:公司名称 */}
<Text <Text
fontSize="sm" fontSize="sm"
fontWeight="medium" fontWeight="medium"
@@ -176,23 +177,16 @@ const StockListItem = ({
px={2} px={2}
py={0.5} py={0.5}
borderRadius="sm" borderRadius="sm"
width="fit-content" whiteSpace="nowrap"
flexShrink={0}
> >
{stock.stock_name} {stock.stock_name}
</Text> </Text>
</VStack>
{/* 分隔线 */} {/* 右侧:分时图 + K线图 */}
<Box borderTop="1px solid" borderColor={dividerColor} /> <Flex gap={2} flex={1} onClick={(e) => e.stopPropagation()}>
{/* 分时图 */}
{/* 分时图 & K线图 - 左右布局 */} <Box flex={1} minW={0}>
<Box>
<SimpleGrid columns={2} spacing={3}>
{/* 左侧:分时图 */}
<Box onClick={(e) => e.stopPropagation()}>
<Text fontSize="xs" color={descColor} mb={1} textAlign="center">
分时图
</Text>
<MiniTimelineChart <MiniTimelineChart
stockCode={stock.stock_code} stockCode={stock.stock_code}
eventTime={eventTime} eventTime={eventTime}
@@ -200,19 +194,17 @@ const StockListItem = ({
/> />
</Box> </Box>
{/* 右侧:K线图 */} {/* K线图 */}
<Box onClick={(e) => e.stopPropagation()}> <Box flex={1} minW={0}>
<Text fontSize="xs" color={descColor} mb={1} textAlign="center">
日K线
</Text>
<MiniKLineChart <MiniKLineChart
stockCode={stock.stock_code} stockCode={stock.stock_code}
eventTime={eventTime} eventTime={eventTime}
onClick={() => setIsModalOpen(true)} onClick={() => setIsModalOpen(true)}
/> />
</Box> </Box>
</SimpleGrid> </Flex>
</Box> </Flex>
</VStack>
{/* 分隔线 */} {/* 分隔线 */}
<Box borderTop="1px solid" borderColor={dividerColor} /> <Box borderTop="1px solid" borderColor={dividerColor} />
@@ -269,7 +261,8 @@ const StockListItem = ({
</VStack> </VStack>
</Box> </Box>
{/* 股票详情弹窗 */} {/* 股票详情弹窗 - 未打开时不渲染 */}
{isModalOpen && (
<StockChartModal <StockChartModal
isOpen={isModalOpen} isOpen={isModalOpen}
onClose={() => setIsModalOpen(false)} onClose={() => setIsModalOpen(false)}
@@ -277,6 +270,7 @@ const StockListItem = ({
eventTime={eventTime} eventTime={eventTime}
size="6xl" size="6xl"
/> />
)}
</> </>
); );
}; };