feat: 添加投资日历mock数据

投资日历提取计划列表卡片组件
This commit is contained in:
zdl
2025-12-05 13:35:12 +08:00
parent 9190c011a1
commit b81efc9d27
3 changed files with 183 additions and 64 deletions

View File

@@ -6,31 +6,20 @@
import React, { useState } from 'react';
import {
Box,
Button,
Badge,
Flex,
Modal,
ModalOverlay,
ModalContent,
ModalHeader,
ModalFooter,
ModalBody,
ModalCloseButton,
useDisclosure,
VStack,
HStack,
Text,
Spinner,
Center,
Icon,
Tag,
TagLabel,
TagLeftIcon,
} from '@chakra-ui/react';
import {
FiStar,
FiTrendingUp,
} from 'react-icons/fi';
import { FiCalendar } from 'react-icons/fi';
import FullCalendar from '@fullcalendar/react';
import dayGridPlugin from '@fullcalendar/daygrid';
import interactionPlugin from '@fullcalendar/interaction';
@@ -40,6 +29,7 @@ import dayjs, { Dayjs } from 'dayjs';
import 'dayjs/locale/zh-cn';
import { usePlanningData } from './PlanningContext';
import { EventDetailCard } from './EventDetailCard';
import type { InvestmentEvent } from '@/types';
dayjs.locale('zh-cn');
@@ -161,68 +151,27 @@ export const CalendarPanel: React.FC = () => {
<ModalBody>
{selectedDateEvents.length === 0 ? (
<Center py={8}>
<Text color={secondaryText}></Text>
<VStack spacing={3}>
<Icon as={FiCalendar} boxSize={10} color="gray.300" />
<Text color={secondaryText}></Text>
<Text fontSize="sm" color={secondaryText}>
</Text>
</VStack>
</Center>
) : (
<VStack align="stretch" spacing={4}>
{selectedDateEvents.map((event, idx) => (
<Box
<EventDetailCard
key={idx}
p={4}
borderRadius="md"
border="1px"
event={event}
borderColor={borderColor}
>
<Flex justify="space-between" align="start" mb={2}>
<VStack align="start" spacing={1} flex={1}>
<HStack>
<Text fontWeight="bold" fontSize="lg">
{event.title}
</Text>
{event.source === 'future' ? (
<Badge colorScheme="blue" variant="subtle"></Badge>
) : event.type === 'plan' ? (
<Badge colorScheme="purple" variant="subtle"></Badge>
) : (
<Badge colorScheme="green" variant="subtle"></Badge>
)}
</HStack>
{event.importance && (
<HStack spacing={2}>
<Icon as={FiStar} color="yellow.500" />
<Text fontSize="sm" color={secondaryText}>
: {event.importance}/5
</Text>
</HStack>
)}
</VStack>
</Flex>
{event.description && (
<Text fontSize="sm" color={secondaryText} mb={2}>
{event.description}
</Text>
)}
{event.stocks && event.stocks.length > 0 && (
<HStack spacing={2} flexWrap="wrap">
<Text fontSize="sm" color={secondaryText}>:</Text>
{event.stocks.map((stock, i) => (
<Tag key={i} size="sm" colorScheme="blue">
<TagLeftIcon as={FiTrendingUp} />
<TagLabel>{stock}</TagLabel>
</Tag>
))}
</HStack>
)}
</Box>
secondaryText={secondaryText}
/>
))}
</VStack>
)}
</ModalBody>
<ModalFooter>
<Button onClick={onClose}></Button>
</ModalFooter>
</ModalContent>
</Modal>
)}