refactor(InvestmentPlanningCenter): 重构为 GlassCard 毛玻璃风格
- 移除 Chakra Card 组件,改用 GlassCard - 标题添加金色渐变效果 - 视图切换按钮改为金色主题 - 使用 lucide-react 的 Target 图标替换 FiTarget - 整体适配 FUI 黑金设计风格 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -15,9 +15,6 @@
|
|||||||
import React, { useState, useEffect, useCallback, useMemo, Suspense, lazy } from 'react';
|
import React, { useState, useEffect, useCallback, useMemo, Suspense, lazy } from 'react';
|
||||||
import {
|
import {
|
||||||
Box,
|
Box,
|
||||||
Card,
|
|
||||||
CardHeader,
|
|
||||||
CardBody,
|
|
||||||
Heading,
|
Heading,
|
||||||
HStack,
|
HStack,
|
||||||
Flex,
|
Flex,
|
||||||
@@ -33,14 +30,16 @@ import {
|
|||||||
Center,
|
Center,
|
||||||
Button,
|
Button,
|
||||||
ButtonGroup,
|
ButtonGroup,
|
||||||
|
Text,
|
||||||
} from '@chakra-ui/react';
|
} from '@chakra-ui/react';
|
||||||
import {
|
import {
|
||||||
FiCalendar,
|
FiCalendar,
|
||||||
FiTarget,
|
|
||||||
FiFileText,
|
FiFileText,
|
||||||
FiList,
|
FiList,
|
||||||
FiPlus,
|
FiPlus,
|
||||||
} from 'react-icons/fi';
|
} from 'react-icons/fi';
|
||||||
|
import { Target } from 'lucide-react';
|
||||||
|
import GlassCard from '@components/GlassCard';
|
||||||
|
|
||||||
import { PlanningDataProvider } from './PlanningContext';
|
import { PlanningDataProvider } from './PlanningContext';
|
||||||
import type { InvestmentEvent, PlanningContextValue } from '@/types';
|
import type { InvestmentEvent, PlanningContextValue } from '@/types';
|
||||||
@@ -160,37 +159,64 @@ const InvestmentPlanningCenter: React.FC = () => {
|
|||||||
[allEvents]
|
[allEvents]
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// 金色主题色
|
||||||
|
const goldAccent = 'rgba(212, 175, 55, 0.9)';
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<PlanningDataProvider value={contextValue}>
|
<PlanningDataProvider value={contextValue}>
|
||||||
<Card bg={bgColor} shadow="md">
|
<GlassCard variant="transparent" cornerDecor padding="lg">
|
||||||
<CardHeader pb={{ base: 2, md: 4 }} px={{ base: 3, md: 5 }}>
|
{/* 标题区域 */}
|
||||||
<Flex justify="space-between" align="center" wrap="wrap" gap={2}>
|
<Flex justify="space-between" align="center" wrap="wrap" gap={2} mb={{ base: 3, md: 4 }}>
|
||||||
<HStack spacing={{ base: 1, md: 2 }}>
|
<HStack spacing={{ base: 2, md: 3 }}>
|
||||||
<Icon as={FiTarget} color="purple.500" boxSize={{ base: 4, md: 5 }} />
|
<Box
|
||||||
<Heading size={{ base: 'sm', md: 'md' }}>投资规划中心</Heading>
|
as={Target}
|
||||||
|
boxSize={{ base: 5, md: 6 }}
|
||||||
|
color={goldAccent}
|
||||||
|
/>
|
||||||
|
<Heading
|
||||||
|
size={{ base: 'sm', md: 'md' }}
|
||||||
|
bgGradient="linear(to-r, #D4AF37, #F5E6A3)"
|
||||||
|
bgClip="text"
|
||||||
|
>
|
||||||
|
投资规划中心
|
||||||
|
</Heading>
|
||||||
</HStack>
|
</HStack>
|
||||||
{/* 视图切换按钮组 - H5隐藏 */}
|
{/* 视图切换按钮组 - H5隐藏 */}
|
||||||
<ButtonGroup size="sm" isAttached variant="outline" display={{ base: 'none', md: 'flex' }}>
|
<ButtonGroup size="sm" isAttached display={{ base: 'none', md: 'flex' }}>
|
||||||
<Button
|
<Button
|
||||||
leftIcon={<Icon as={FiList} boxSize={4} />}
|
leftIcon={<Icon as={FiList} boxSize={4} />}
|
||||||
colorScheme={viewMode === 'list' ? 'purple' : 'gray'}
|
bg={viewMode === 'list' ? 'rgba(212, 175, 55, 0.2)' : 'transparent'}
|
||||||
variant={viewMode === 'list' ? 'solid' : 'outline'}
|
color={viewMode === 'list' ? goldAccent : 'rgba(255, 255, 255, 0.6)'}
|
||||||
|
border="1px solid"
|
||||||
|
borderColor={viewMode === 'list' ? 'rgba(212, 175, 55, 0.4)' : 'rgba(212, 175, 55, 0.2)'}
|
||||||
|
_hover={{ bg: 'rgba(212, 175, 55, 0.15)', color: goldAccent }}
|
||||||
onClick={() => setViewMode('list')}
|
onClick={() => setViewMode('list')}
|
||||||
>
|
>
|
||||||
列表视图
|
列表视图
|
||||||
</Button>
|
</Button>
|
||||||
<Button
|
<Button
|
||||||
leftIcon={<Icon as={FiCalendar} boxSize={4} />}
|
leftIcon={<Icon as={FiCalendar} boxSize={4} />}
|
||||||
colorScheme={viewMode === 'calendar' ? 'purple' : 'gray'}
|
bg={viewMode === 'calendar' ? 'rgba(212, 175, 55, 0.2)' : 'transparent'}
|
||||||
variant={viewMode === 'calendar' ? 'solid' : 'outline'}
|
color={viewMode === 'calendar' ? goldAccent : 'rgba(255, 255, 255, 0.6)'}
|
||||||
|
border="1px solid"
|
||||||
|
borderColor={viewMode === 'calendar' ? 'rgba(212, 175, 55, 0.4)' : 'rgba(212, 175, 55, 0.2)'}
|
||||||
|
_hover={{ bg: 'rgba(212, 175, 55, 0.15)', color: goldAccent }}
|
||||||
onClick={() => setViewMode('calendar')}
|
onClick={() => setViewMode('calendar')}
|
||||||
>
|
>
|
||||||
日历视图
|
日历视图
|
||||||
</Button>
|
</Button>
|
||||||
</ButtonGroup>
|
</ButtonGroup>
|
||||||
</Flex>
|
</Flex>
|
||||||
</CardHeader>
|
|
||||||
<CardBody pt={0} px={{ base: 3, md: 5 }}>
|
{/* 渐变分割线 */}
|
||||||
|
<Box
|
||||||
|
h="1px"
|
||||||
|
bgGradient="linear(to-r, transparent, rgba(212, 175, 55, 0.4), transparent)"
|
||||||
|
mb={{ base: 3, md: 4 }}
|
||||||
|
/>
|
||||||
|
|
||||||
|
{/* 内容区域 */}
|
||||||
|
<Box>
|
||||||
{viewMode === 'calendar' ? (
|
{viewMode === 'calendar' ? (
|
||||||
/* 日历视图 */
|
/* 日历视图 */
|
||||||
<Suspense fallback={<PanelLoadingFallback />}>
|
<Suspense fallback={<PanelLoadingFallback />}>
|
||||||
@@ -201,27 +227,52 @@ const InvestmentPlanningCenter: React.FC = () => {
|
|||||||
<Tabs
|
<Tabs
|
||||||
index={listTab}
|
index={listTab}
|
||||||
onChange={setListTab}
|
onChange={setListTab}
|
||||||
variant="enclosed"
|
variant="unstyled"
|
||||||
colorScheme="purple"
|
|
||||||
size={{ base: 'sm', md: 'md' }}
|
size={{ base: 'sm', md: 'md' }}
|
||||||
>
|
>
|
||||||
<Flex justify="space-between" align="center" mb={{ base: 2, md: 4 }} flexWrap="nowrap" gap={1}>
|
<Flex justify="space-between" align="center" mb={{ base: 2, md: 4 }} flexWrap="nowrap" gap={1}>
|
||||||
<TabList mb={0} borderBottom="none" flex="1" minW={0}>
|
<TabList mb={0} flex="1" minW={0}>
|
||||||
<Tab fontSize={{ base: '11px', md: 'sm' }} px={{ base: 1, md: 4 }} whiteSpace="nowrap">
|
<Tab
|
||||||
<Icon as={FiTarget} mr={1} boxSize={{ base: 3, md: 4 }} />
|
fontSize={{ base: '11px', md: 'sm' }}
|
||||||
|
px={{ base: 2, md: 4 }}
|
||||||
|
py={2}
|
||||||
|
whiteSpace="nowrap"
|
||||||
|
color="rgba(255, 255, 255, 0.6)"
|
||||||
|
_selected={{
|
||||||
|
color: goldAccent,
|
||||||
|
borderBottom: '2px solid',
|
||||||
|
borderColor: goldAccent,
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<Box as={Target} boxSize={{ base: 3, md: 4 }} mr={1} />
|
||||||
我的计划 ({planCount})
|
我的计划 ({planCount})
|
||||||
</Tab>
|
</Tab>
|
||||||
<Tab fontSize={{ base: '11px', md: 'sm' }} px={{ base: 1, md: 4 }} whiteSpace="nowrap">
|
<Tab
|
||||||
|
fontSize={{ base: '11px', md: 'sm' }}
|
||||||
|
px={{ base: 2, md: 4 }}
|
||||||
|
py={2}
|
||||||
|
whiteSpace="nowrap"
|
||||||
|
color="rgba(255, 255, 255, 0.6)"
|
||||||
|
_selected={{
|
||||||
|
color: goldAccent,
|
||||||
|
borderBottom: '2px solid',
|
||||||
|
borderColor: goldAccent,
|
||||||
|
}}
|
||||||
|
>
|
||||||
<Icon as={FiFileText} mr={1} boxSize={{ base: 3, md: 4 }} />
|
<Icon as={FiFileText} mr={1} boxSize={{ base: 3, md: 4 }} />
|
||||||
我的复盘 ({reviewCount})
|
我的复盘 ({reviewCount})
|
||||||
</Tab>
|
</Tab>
|
||||||
</TabList>
|
</TabList>
|
||||||
<Button
|
<Button
|
||||||
size="xs"
|
size="xs"
|
||||||
colorScheme="purple"
|
bg="rgba(212, 175, 55, 0.2)"
|
||||||
|
color={goldAccent}
|
||||||
|
border="1px solid"
|
||||||
|
borderColor="rgba(212, 175, 55, 0.3)"
|
||||||
leftIcon={<Icon as={FiPlus} boxSize={3} />}
|
leftIcon={<Icon as={FiPlus} boxSize={3} />}
|
||||||
fontSize={{ base: '11px', md: 'sm' }}
|
fontSize={{ base: '11px', md: 'sm' }}
|
||||||
flexShrink={0}
|
flexShrink={0}
|
||||||
|
_hover={{ bg: 'rgba(212, 175, 55, 0.3)' }}
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
if (listTab === 0) {
|
if (listTab === 0) {
|
||||||
setOpenPlanModalTrigger(prev => prev + 1);
|
setOpenPlanModalTrigger(prev => prev + 1);
|
||||||
@@ -240,7 +291,7 @@ const InvestmentPlanningCenter: React.FC = () => {
|
|||||||
<Suspense fallback={<PanelLoadingFallback />}>
|
<Suspense fallback={<PanelLoadingFallback />}>
|
||||||
<EventPanel
|
<EventPanel
|
||||||
type="plan"
|
type="plan"
|
||||||
colorScheme="purple"
|
colorScheme="orange"
|
||||||
label="计划"
|
label="计划"
|
||||||
openModalTrigger={openPlanModalTrigger}
|
openModalTrigger={openPlanModalTrigger}
|
||||||
/>
|
/>
|
||||||
@@ -252,7 +303,7 @@ const InvestmentPlanningCenter: React.FC = () => {
|
|||||||
<Suspense fallback={<PanelLoadingFallback />}>
|
<Suspense fallback={<PanelLoadingFallback />}>
|
||||||
<EventPanel
|
<EventPanel
|
||||||
type="review"
|
type="review"
|
||||||
colorScheme="green"
|
colorScheme="orange"
|
||||||
label="复盘"
|
label="复盘"
|
||||||
openModalTrigger={openReviewModalTrigger}
|
openModalTrigger={openReviewModalTrigger}
|
||||||
/>
|
/>
|
||||||
@@ -261,8 +312,8 @@ const InvestmentPlanningCenter: React.FC = () => {
|
|||||||
</TabPanels>
|
</TabPanels>
|
||||||
</Tabs>
|
</Tabs>
|
||||||
)}
|
)}
|
||||||
</CardBody>
|
</Box>
|
||||||
</Card>
|
</GlassCard>
|
||||||
</PlanningDataProvider>
|
</PlanningDataProvider>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user