update ui

This commit is contained in:
2025-11-13 18:08:02 +08:00
parent 716b4ba3bd
commit 2edeeec497
3 changed files with 422 additions and 67 deletions

View File

@@ -390,6 +390,13 @@ const [currentMode, setCurrentMode] = useState('vertical');
mb={4} mb={4}
position="relative" position="relative"
zIndex={1} zIndex={1}
animation="fadeInUp 0.8s ease-out 0.2s both"
sx={{
'@keyframes fadeInUp': {
'0%': { opacity: 0, transform: 'translateY(30px)' },
'100%': { opacity: 1, transform: 'translateY(0)' }
}
}}
> >
{/* 标题和搜索部分 - 可滚动区域 */} {/* 标题和搜索部分 - 可滚动区域 */}
<CardHeader <CardHeader

View File

@@ -608,20 +608,52 @@ const ConceptFlowAnimation = () => {
*/ */
const FeatureIcon = ({ icon, title, description }) => { const FeatureIcon = ({ icon, title, description }) => {
return ( return (
<HStack spacing={3} align="start"> <HStack
spacing={3}
align="start"
transition="all 0.3s ease"
cursor="pointer"
_hover={{
transform: 'translateX(8px)'
}}
>
<Box <Box
p={2} p={2}
borderRadius="lg" borderRadius="lg"
bg="whiteAlpha.200" bg="whiteAlpha.200"
color="gold" color="gold"
position="relative"
overflow="hidden"
transition="all 0.3s ease"
_hover={{
bg: "whiteAlpha.300",
boxShadow: "0 0 20px rgba(255, 215, 0, 0.4)"
}}
_before={{
content: '""',
position: 'absolute',
top: '-50%',
left: '-50%',
width: '200%',
height: '200%',
background: 'linear-gradient(45deg, transparent, rgba(255, 215, 0, 0.3), transparent)',
transform: 'rotate(45deg)',
animation: 'iconShine 3s ease-in-out infinite'
}}
sx={{
'@keyframes iconShine': {
'0%': { transform: 'translateX(-100%) translateY(-100%) rotate(45deg)' },
'100%': { transform: 'translateX(100%) translateY(100%) rotate(45deg)' }
}
}}
> >
<Icon as={icon} boxSize={5} /> <Icon as={icon} boxSize={5} position="relative" zIndex={1} />
</Box> </Box>
<VStack align="start" spacing={0}> <VStack align="start" spacing={0}>
<Text fontSize="sm" fontWeight="bold" color="white"> <Text fontSize="sm" fontWeight="bold" color="white" letterSpacing="wide">
{title} {title}
</Text> </Text>
<Text fontSize="xs" color="whiteAlpha.700"> <Text fontSize="xs" color="whiteAlpha.800">
{description} {description}
</Text> </Text>
</VStack> </VStack>
@@ -633,106 +665,301 @@ const FeatureIcon = ({ icon, title, description }) => {
* 顶部说明面板主组件 * 顶部说明面板主组件
*/ */
const HeroPanel = () => { const HeroPanel = () => {
const gradientBg = 'linear-gradient(135deg, #1a1a1a 0%, #2d2d2d 50%, #1a1a1a 100%)'; const gradientBg = 'linear-gradient(135deg, #0a0a0a 0%, #1a1a2e 25%, #16213e 50%, #1a1a2e 75%, #0a0a0a 100%)';
const cardBorder = '1px solid'; const cardBorder = '1px solid';
const borderColor = useColorModeValue('rgba(255, 215, 0, 0.3)', 'rgba(255, 215, 0, 0.2)'); const borderColor = useColorModeValue('rgba(255, 215, 0, 0.4)', 'rgba(255, 215, 0, 0.3)');
return ( return (
<Card <Card
bg={gradientBg} bg={gradientBg}
borderColor={borderColor} borderColor={borderColor}
borderWidth={cardBorder} borderWidth={cardBorder}
boxShadow="0 12px 48px rgba(0, 0, 0, 0.5), 0 0 0 1px rgba(255, 215, 0, 0.1) inset" boxShadow="0 20px 60px rgba(0, 0, 0, 0.7), 0 0 0 1px rgba(255, 215, 0, 0.15) inset, 0 0 80px rgba(255, 215, 0, 0.05)"
mb={6} mb={6}
overflow="hidden" overflow="hidden"
position="relative" position="relative"
transition="all 0.3s ease" transition="all 0.5s cubic-bezier(0.4, 0, 0.2, 1)"
_hover={{ _hover={{
boxShadow: "0 16px 64px rgba(0, 0, 0, 0.6), 0 0 0 1px rgba(255, 215, 0, 0.2) inset", boxShadow: "0 24px 80px rgba(0, 0, 0, 0.8), 0 0 0 2px rgba(255, 215, 0, 0.3) inset, 0 0 120px rgba(255, 215, 0, 0.1)",
transform: "translateY(-2px)" transform: "translateY(-4px) scale(1.005)",
borderColor: "rgba(255, 215, 0, 0.5)"
}} }}
> >
{/* 装饰性背景图案 - 多层叠加 */} {/* 动态网格背景 */}
<Box <Box
position="absolute" position="absolute"
top="-30%" top={0}
right="-15%" left={0}
right={0}
bottom={0}
opacity={0.03}
pointerEvents="none"
bgImage="linear-gradient(rgba(255, 215, 0, 0.3) 1px, transparent 1px), linear-gradient(90deg, rgba(255, 215, 0, 0.3) 1px, transparent 1px)"
bgSize="50px 50px"
animation="gridMove 20s linear infinite"
sx={{
'@keyframes gridMove': {
'0%': { backgroundPosition: '0 0' },
'100%': { backgroundPosition: '50px 50px' }
}
}}
/>
{/* 扫描线效果 */}
<Box
position="absolute"
top={0}
left={0}
right={0}
height="2px"
bgGradient="linear(to-r, transparent, rgba(255, 215, 0, 0.8), transparent)"
pointerEvents="none"
animation="scanLine 3s ease-in-out infinite"
sx={{
'@keyframes scanLine': {
'0%': { transform: 'translateY(0)', opacity: 0 },
'50%': { opacity: 1 },
'100%': { transform: 'translateY(400px)', opacity: 0 }
}
}}
/>
{/* 装饰性光晕 - 多层动态叠加 */}
<Box
position="absolute"
top="-40%"
right="-20%"
width="700px"
height="700px"
borderRadius="full"
bg="radial-gradient(circle, rgba(255, 215, 0, 0.2) 0%, rgba(255, 165, 0, 0.12) 30%, transparent 70%)"
pointerEvents="none"
filter="blur(50px)"
animation="floatGlow1 8s ease-in-out infinite"
sx={{
'@keyframes floatGlow1': {
'0%, 100%': { transform: 'translate(0, 0) scale(1)' },
'50%': { transform: 'translate(-30px, 20px) scale(1.1)' }
}
}}
/>
<Box
position="absolute"
bottom="-30%"
left="-15%"
width="500px"
height="500px"
borderRadius="full"
bg="radial-gradient(circle, rgba(236, 0, 0, 0.15) 0%, rgba(255, 77, 79, 0.08) 40%, transparent 70%)"
pointerEvents="none"
filter="blur(60px)"
animation="floatGlow2 10s ease-in-out infinite"
sx={{
'@keyframes floatGlow2': {
'0%, 100%': { transform: 'translate(0, 0) scale(1)' },
'50%': { transform: 'translate(40px, -30px) scale(1.15)' }
}
}}
/>
<Box
position="absolute"
top="40%"
left="30%"
width="600px" width="600px"
height="600px" height="600px"
borderRadius="full" borderRadius="full"
bg="radial-gradient(circle, rgba(255, 215, 0, 0.15) 0%, rgba(255, 165, 0, 0.08) 40%, transparent 70%)" bg="radial-gradient(circle, rgba(0, 218, 60, 0.08) 0%, transparent 60%)"
pointerEvents="none" pointerEvents="none"
filter="blur(40px)" filter="blur(70px)"
animation="floatGlow3 12s ease-in-out infinite"
sx={{
'@keyframes floatGlow3': {
'0%, 100%': { transform: 'translate(0, 0) scale(1)' },
'50%': { transform: 'translate(-50px, 40px) scale(1.2)' }
}
}}
/> />
{/* 四角光点装饰 */}
<Box <Box
position="absolute" position="absolute"
bottom="-20%" top="20px"
left="-10%" left="20px"
width="400px" width="4px"
height="400px" height="4px"
borderRadius="full" borderRadius="full"
bg="radial-gradient(circle, rgba(236, 0, 0, 0.08) 0%, transparent 60%)" bg="#FFD700"
pointerEvents="none" boxShadow="0 0 20px #FFD700"
filter="blur(50px)" animation="cornerPulse 2s ease-in-out infinite"
sx={{
'@keyframes cornerPulse': {
'0%, 100%': { opacity: 0.3, transform: 'scale(1)' },
'50%': { opacity: 1, transform: 'scale(1.5)' }
}
}}
/> />
<Box <Box
position="absolute" position="absolute"
top="50%" top="20px"
left="50%" right="20px"
transform="translate(-50%, -50%)" width="4px"
width="80%" height="4px"
height="80%" borderRadius="full"
bg="radial-gradient(circle, rgba(255, 215, 0, 0.02) 0%, transparent 60%)" bg="#FFD700"
pointerEvents="none" boxShadow="0 0 20px #FFD700"
filter="blur(60px)" animation="cornerPulse 2s ease-in-out infinite 0.5s"
sx={{
'@keyframes cornerPulse': {
'0%, 100%': { opacity: 0.3, transform: 'scale(1)' },
'50%': { opacity: 1, transform: 'scale(1.5)' }
}
}}
/>
<Box
position="absolute"
bottom="20px"
left="20px"
width="4px"
height="4px"
borderRadius="full"
bg="#FFD700"
boxShadow="0 0 20px #FFD700"
animation="cornerPulse 2s ease-in-out infinite 1s"
sx={{
'@keyframes cornerPulse': {
'0%, 100%': { opacity: 0.3, transform: 'scale(1)' },
'50%': { opacity: 1, transform: 'scale(1.5)' }
}
}}
/>
<Box
position="absolute"
bottom="20px"
right="20px"
width="4px"
height="4px"
borderRadius="full"
bg="#FFD700"
boxShadow="0 0 20px #FFD700"
animation="cornerPulse 2s ease-in-out infinite 1.5s"
sx={{
'@keyframes cornerPulse': {
'0%, 100%': { opacity: 0.3, transform: 'scale(1)' },
'50%': { opacity: 1, transform: 'scale(1.5)' }
}
}}
/> />
<CardBody p={6}> <CardBody p={6}>
<SimpleGrid columns={{ base: 1, lg: 3 }} spacing={6}> <SimpleGrid columns={{ base: 1, lg: 3 }} spacing={6}>
{/* 左侧:产品介绍 */} {/* 左侧:产品介绍 */}
<Box> <Box
animation="fadeInLeft 0.8s ease-out"
sx={{
'@keyframes fadeInLeft': {
'0%': { opacity: 0, transform: 'translateX(-30px)' },
'100%': { opacity: 1, transform: 'translateX(0)' }
}
}}
>
<VStack align="start" spacing={4}> <VStack align="start" spacing={4}>
<Heading size="lg" color="white" fontWeight="extrabold"> <Heading size="lg" color="white" fontWeight="extrabold">
<Text <Text
bgGradient="linear(to-r, #FFD700, #FFA500)" bgGradient="linear(to-r, #FFD700, #FFA500, #FFD700)"
bgClip="text" bgClip="text"
backgroundSize="200% 100%"
animation="shimmer 3s linear infinite"
sx={{
'@keyframes shimmer': {
'0%': { backgroundPosition: '-200% 0' },
'100%': { backgroundPosition: '200% 0' }
}
}}
> >
价值前沿 价值前沿
</Text> </Text>
</Heading> </Heading>
<Text fontSize="sm" color="whiteAlpha.800" lineHeight="1.8"> <Text fontSize="sm" color="whiteAlpha.900" lineHeight="1.8" fontWeight="medium">
实时捕捉市场动态智能分析投资机会 实时捕捉市场动态智能分析投资机会
<br /> <br />
整合多维数据源为您提供专业的投资决策支持 整合多维数据源为您提供专业的投资决策支持
</Text> </Text>
<VStack spacing={3} align="stretch" w="100%"> <VStack spacing={3} align="stretch" w="100%" mt={2}>
<FeatureIcon <Box
icon={Activity} animation="fadeInUp 0.8s ease-out 0.2s both"
title="实时监控" sx={{
description="7×24小时追踪市场动态" '@keyframes fadeInUp': {
/> '0%': { opacity: 0, transform: 'translateY(20px)' },
<FeatureIcon '100%': { opacity: 1, transform: 'translateY(0)' }
icon={TrendingUp} }
title="智能分析" }}
description="AI驱动的概念板块分析" >
/> <FeatureIcon
<FeatureIcon icon={Activity}
icon={Globe} title="实时监控"
title="全面覆盖" description="7×24小时追踪市场动态"
description="A股全市场深度数据" />
/> </Box>
<FeatureIcon <Box
icon={Zap} animation="fadeInUp 0.8s ease-out 0.4s both"
title="极速响应" sx={{
description="毫秒级数据更新推送" '@keyframes fadeInUp': {
/> '0%': { opacity: 0, transform: 'translateY(20px)' },
'100%': { opacity: 1, transform: 'translateY(0)' }
}
}}
>
<FeatureIcon
icon={TrendingUp}
title="智能分析"
description="AI驱动的概念板块分析"
/>
</Box>
<Box
animation="fadeInUp 0.8s ease-out 0.6s both"
sx={{
'@keyframes fadeInUp': {
'0%': { opacity: 0, transform: 'translateY(20px)' },
'100%': { opacity: 1, transform: 'translateY(0)' }
}
}}
>
<FeatureIcon
icon={Globe}
title="全面覆盖"
description="A股全市场深度数据"
/>
</Box>
<Box
animation="fadeInUp 0.8s ease-out 0.8s both"
sx={{
'@keyframes fadeInUp': {
'0%': { opacity: 0, transform: 'translateY(20px)' },
'100%': { opacity: 1, transform: 'translateY(0)' }
}
}}
>
<FeatureIcon
icon={Zap}
title="极速响应"
description="毫秒级数据更新推送"
/>
</Box>
</VStack> </VStack>
</VStack> </VStack>
</Box> </Box>
{/* 中间沪深指数K线图 */} {/* 中间沪深指数K线图 */}
<Box> <Box
animation="fadeInScale 0.8s ease-out 0.3s both"
sx={{
'@keyframes fadeInScale': {
'0%': { opacity: 0, transform: 'scale(0.95)' },
'100%': { opacity: 1, transform: 'scale(1)' }
}
}}
>
<VStack spacing={4} h="100%"> <VStack spacing={4} h="100%">
<Box <Box
w="100%" w="100%"
@@ -743,12 +970,27 @@ const HeroPanel = () => {
borderColor="whiteAlpha.200" borderColor="whiteAlpha.200"
backdropFilter="blur(10px)" backdropFilter="blur(10px)"
boxShadow="0 4px 16px rgba(0, 0, 0, 0.2), inset 0 1px 0 rgba(255, 255, 255, 0.05)" boxShadow="0 4px 16px rgba(0, 0, 0, 0.2), inset 0 1px 0 rgba(255, 255, 255, 0.05)"
transition="all 0.3s ease" transition="all 0.4s cubic-bezier(0.4, 0, 0.2, 1)"
position="relative"
overflow="hidden"
_hover={{ _hover={{
bg: "whiteAlpha.150", bg: "whiteAlpha.150",
borderColor: "whiteAlpha.300", borderColor: "rgba(236, 0, 0, 0.4)",
boxShadow: "0 6px 24px rgba(0, 0, 0, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.1)", boxShadow: "0 8px 32px rgba(236, 0, 0, 0.3), 0 0 0 1px rgba(236, 0, 0, 0.2) inset, inset 0 1px 0 rgba(255, 255, 255, 0.1)",
transform: "translateY(-1px)" transform: "translateY(-4px) scale(1.02)"
}}
_before={{
content: '""',
position: 'absolute',
top: 0,
left: '-100%',
width: '100%',
height: '100%',
background: 'linear-gradient(90deg, transparent, rgba(236, 0, 0, 0.1), transparent)',
transition: 'left 0.5s ease'
}}
_hover_before={{
left: '100%'
}} }}
> >
<MiniIndexChart indexCode="000001" indexName="上证指数" /> <MiniIndexChart indexCode="000001" indexName="上证指数" />
@@ -762,12 +1004,27 @@ const HeroPanel = () => {
borderColor="whiteAlpha.200" borderColor="whiteAlpha.200"
backdropFilter="blur(10px)" backdropFilter="blur(10px)"
boxShadow="0 4px 16px rgba(0, 0, 0, 0.2), inset 0 1px 0 rgba(255, 255, 255, 0.05)" boxShadow="0 4px 16px rgba(0, 0, 0, 0.2), inset 0 1px 0 rgba(255, 255, 255, 0.05)"
transition="all 0.3s ease" transition="all 0.4s cubic-bezier(0.4, 0, 0.2, 1)"
position="relative"
overflow="hidden"
_hover={{ _hover={{
bg: "whiteAlpha.150", bg: "whiteAlpha.150",
borderColor: "whiteAlpha.300", borderColor: "rgba(0, 218, 60, 0.4)",
boxShadow: "0 6px 24px rgba(0, 0, 0, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.1)", boxShadow: "0 8px 32px rgba(0, 218, 60, 0.3), 0 0 0 1px rgba(0, 218, 60, 0.2) inset, inset 0 1px 0 rgba(255, 255, 255, 0.1)",
transform: "translateY(-1px)" transform: "translateY(-4px) scale(1.02)"
}}
_before={{
content: '""',
position: 'absolute',
top: 0,
left: '-100%',
width: '100%',
height: '100%',
background: 'linear-gradient(90deg, transparent, rgba(0, 218, 60, 0.1), transparent)',
transition: 'left 0.5s ease'
}}
_hover_before={{
left: '100%'
}} }}
> >
<MiniIndexChart indexCode="399001" indexName="深证成指" /> <MiniIndexChart indexCode="399001" indexName="深证成指" />
@@ -776,7 +1033,15 @@ const HeroPanel = () => {
</Box> </Box>
{/* 右侧:热门概念词云图 */} {/* 右侧:热门概念词云图 */}
<Box> <Box
animation="fadeInRight 0.8s ease-out 0.5s both"
sx={{
'@keyframes fadeInRight': {
'0%': { opacity: 0, transform: 'translateX(30px)' },
'100%': { opacity: 1, transform: 'translateX(0)' }
}
}}
>
<VStack align="start" spacing={3} h="100%"> <VStack align="start" spacing={3} h="100%">
<HStack <HStack
spacing={2} spacing={2}
@@ -785,6 +1050,30 @@ const HeroPanel = () => {
bg="whiteAlpha.50" bg="whiteAlpha.50"
w="full" w="full"
justify="space-between" justify="space-between"
position="relative"
overflow="hidden"
transition="all 0.3s ease"
_hover={{
bg: "whiteAlpha.100",
boxShadow: "0 0 20px rgba(255, 165, 0, 0.3)"
}}
_before={{
content: '""',
position: 'absolute',
top: 0,
left: 0,
right: 0,
bottom: 0,
background: 'linear-gradient(90deg, transparent, rgba(255, 165, 0, 0.1), transparent)',
animation: 'headerShimmer 3s ease-in-out infinite',
pointerEvents: 'none'
}}
sx={{
'@keyframes headerShimmer': {
'0%': { transform: 'translateX(-100%)' },
'100%': { transform: 'translateX(100%)' }
}
}}
> >
<HStack spacing={2}> <HStack spacing={2}>
<Text <Text
@@ -792,6 +1081,14 @@ const HeroPanel = () => {
fontWeight="extrabold" fontWeight="extrabold"
bgGradient="linear(to-r, #FFD700, #FFA500, #FF4500)" bgGradient="linear(to-r, #FFD700, #FFA500, #FF4500)"
bgClip="text" bgClip="text"
backgroundSize="200% 100%"
animation="gradientFlow 3s ease infinite"
sx={{
'@keyframes gradientFlow': {
'0%, 100%': { backgroundPosition: '0% 50%' },
'50%': { backgroundPosition: '100% 50%' }
}
}}
> >
🔥 热门概念 🔥 热门概念
</Text> </Text>
@@ -802,8 +1099,31 @@ const HeroPanel = () => {
h="6px" h="6px"
borderRadius="full" borderRadius="full"
bg="orange.400" bg="orange.400"
animation="pulse 2s infinite" animation="liveIndicator 1.5s ease-in-out infinite"
boxShadow="0 0 6px rgba(251, 146, 60, 0.8)" boxShadow="0 0 10px rgba(251, 146, 60, 0.8)"
position="relative"
_after={{
content: '""',
position: 'absolute',
top: '-3px',
left: '-3px',
right: '-3px',
bottom: '-3px',
borderRadius: 'full',
border: '2px solid',
borderColor: 'orange.400',
animation: 'ripple 1.5s ease-out infinite'
}}
sx={{
'@keyframes liveIndicator': {
'0%, 100%': { opacity: 1, transform: 'scale(1)' },
'50%': { opacity: 0.6, transform: 'scale(1.2)' }
},
'@keyframes ripple': {
'0%': { transform: 'scale(1)', opacity: 0.8 },
'100%': { transform: 'scale(2.5)', opacity: 0 }
}
}}
/> />
<Text fontSize="xs" color="orange.400" fontWeight="medium"> <Text fontSize="xs" color="orange.400" fontWeight="medium">
实时更新 实时更新
@@ -815,10 +1135,31 @@ const HeroPanel = () => {
flex="1" flex="1"
position="relative" position="relative"
overflow="hidden" overflow="hidden"
borderRadius="lg"
bg="whiteAlpha.50"
p={2}
transition="all 0.3s ease"
_hover={{
bg: "whiteAlpha.100",
boxShadow: "0 0 30px rgba(255, 215, 0, 0.2)"
}}
> >
<ConceptFlowAnimation /> <ConceptFlowAnimation />
</Box> </Box>
<HStack spacing={2} fontSize="xs" color="whiteAlpha.600" w="100%" justify="center"> <HStack
spacing={2}
fontSize="xs"
color="whiteAlpha.600"
w="100%"
justify="center"
animation="fadeIn 1s ease-out 1s both"
sx={{
'@keyframes fadeIn': {
'0%': { opacity: 0 },
'100%': { opacity: 1 }
}
}}
>
<Text>🌊 概念流动展示</Text> <Text>🌊 概念流动展示</Text>
<Text></Text> <Text></Text>
<Text>🎨 颜色表示涨跌幅</Text> <Text>🎨 颜色表示涨跌幅</Text>

View File

@@ -44,6 +44,13 @@ const HotEventsSection = ({ events, onEventClick }) => {
borderColor={useColorModeValue('gray.200', 'gray.700')} borderColor={useColorModeValue('gray.200', 'gray.700')}
position="relative" position="relative"
zIndex={1} zIndex={1}
animation="fadeInUp 0.8s ease-out 0.4s both"
sx={{
'@keyframes fadeInUp': {
'0%': { opacity: 0, transform: 'translateY(30px)' },
'100%': { opacity: 1, transform: 'translateY(0)' }
}
}}
> >
<CardHeader pb={3} display="flex" justifyContent="space-between" alignItems="flex-start"> <CardHeader pb={3} display="flex" justifyContent="space-between" alignItems="flex-start">
<Box> <Box>