Merge branch 'feature_bugfix/251217_stock' of https://git.valuefrontier.cn/vf/vf_react into feature_bugfix/251217_stock

This commit is contained in:
2025-12-25 13:16:01 +08:00
403 changed files with 1701 additions and 147570 deletions

View File

@@ -23,7 +23,7 @@ import {
Tooltip,
Icon,
} from '@chakra-ui/react';
import { TimeIcon, BellIcon } from '@chakra-ui/icons';
import { Clock, Bell } from 'lucide-react';
import { useNotification } from '@contexts/NotificationContext';
import EventScrollList from './EventScrollList';
import ModeToggleButtons from './ModeToggleButtons';
@@ -565,7 +565,7 @@ const [currentMode, setCurrentMode] = useState('vertical');
<HStack spacing={4}>
<Heading size={isMobile ? "sm" : "md"} color={PROFESSIONAL_COLORS.text.primary}>
<HStack spacing={2}>
<TimeIcon color={PROFESSIONAL_COLORS.gold[500]} />
<Clock size={20} color={PROFESSIONAL_COLORS.gold[500]} />
<Text bgGradient={PROFESSIONAL_COLORS.gradients.gold} bgClip="text">实时要闻·动态追踪</Text>
</HStack>
</Heading>
@@ -584,9 +584,8 @@ const [currentMode, setCurrentMode] = useState('vertical');
_hover={{ opacity: 0.8 }}
transition="opacity 0.2s"
>
<Icon
as={BellIcon}
boxSize={3.5}
<Bell
size={14}
color={PROFESSIONAL_COLORS.gold[500]}
/>
<Text

View File

@@ -12,10 +12,7 @@ import {
useColorModeValue,
useToast,
} from '@chakra-ui/react';
import {
ChevronLeftIcon,
ChevronRightIcon,
} from '@chakra-ui/icons';
import { ChevronLeft, ChevronRight } from 'lucide-react';
/**
* 分页控制器组件(使用 React.memo 优化,避免不必要的重新渲染)
@@ -116,7 +113,7 @@ const PaginationControl = React.memo(({ currentPage, totalPages, onPageChange })
<HStack spacing={1.5} justify="center" flexWrap="wrap">
{/* 上一页按钮 */}
<IconButton
icon={<ChevronLeftIcon />}
icon={<ChevronLeft size={14} />}
size="xs"
onClick={() => onPageChange(currentPage - 1)}
isDisabled={currentPage === 1}
@@ -164,7 +161,7 @@ const PaginationControl = React.memo(({ currentPage, totalPages, onPageChange })
{/* 下一页按钮 */}
<IconButton
icon={<ChevronRightIcon />}
icon={<ChevronRight size={14} />}
size="xs"
onClick={() => onPageChange(currentPage + 1)}
isDisabled={currentPage === totalPages}

View File

@@ -23,8 +23,7 @@ import {
Tooltip,
Button,
} from "@chakra-ui/react";
import { ChevronDownIcon, ChevronUpIcon, RepeatIcon } from "@chakra-ui/icons";
import { FiTrendingUp, FiZap } from "react-icons/fi";
import { ChevronDown, ChevronUp, RefreshCw, TrendingUp, Zap } from "lucide-react";
import { FireOutlined } from "@ant-design/icons";
import dayjs from "dayjs";
import { Select } from "antd";
@@ -363,7 +362,7 @@ const MainlineCard = React.memo(
)}
</VStack>
<Icon
as={isExpanded ? ChevronUpIcon : ChevronDownIcon}
as={isExpanded ? ChevronUp : ChevronDown}
boxSize={4}
color={COLORS.secondaryTextColor}
ml={2}
@@ -744,7 +743,7 @@ const MainlineTimelineViewComponent = forwardRef(
<VStack spacing={4}>
<Text color="red.500">加载失败: {error}</Text>
<IconButton
icon={<RepeatIcon />}
icon={<RefreshCw size={16} />}
colorScheme="blue"
onClick={fetchMainlineData}
aria-label="重试"
@@ -761,7 +760,7 @@ const MainlineTimelineViewComponent = forwardRef(
<Box display={display} p={8} bg={COLORS.containerBg} minH="400px">
<Center h="400px">
<VStack spacing={4}>
<Icon as={FiZap} boxSize={12} color="gray.400" />
<Icon as={Zap} boxSize={12} color="gray.400" />
<Text color={COLORS.secondaryTextColor}>暂无主线数据</Text>
<Text fontSize="sm" color={COLORS.secondaryTextColor}>
尝试调整筛选条件
@@ -801,7 +800,7 @@ const MainlineTimelineViewComponent = forwardRef(
>
<HStack spacing={4}>
<HStack spacing={2}>
<Icon as={FiTrendingUp} color="blue.400" />
<Icon as={TrendingUp} color="blue.400" />
<Text fontWeight="bold" color={COLORS.textColor} fontSize="sm">
{mainline_count} 条主线
</Text>
@@ -900,7 +899,7 @@ const MainlineTimelineViewComponent = forwardRef(
/>
<Tooltip label="全部展开">
<IconButton
icon={<ChevronDownIcon />}
icon={<ChevronDown size={16} />}
size="sm"
variant="ghost"
color={COLORS.secondaryTextColor}
@@ -911,7 +910,7 @@ const MainlineTimelineViewComponent = forwardRef(
</Tooltip>
<Tooltip label="全部折叠">
<IconButton
icon={<ChevronUpIcon />}
icon={<ChevronUp size={16} />}
size="sm"
variant="ghost"
color={COLORS.secondaryTextColor}
@@ -922,7 +921,7 @@ const MainlineTimelineViewComponent = forwardRef(
</Tooltip>
<Tooltip label="刷新">
<IconButton
icon={<RepeatIcon />}
icon={<RefreshCw size={16} />}
size="sm"
variant="ghost"
color={COLORS.secondaryTextColor}

View File

@@ -11,7 +11,7 @@ import {
useBreakpointValue,
useDisclosure
} from '@chakra-ui/react';
import { InfoIcon } from '@chakra-ui/icons';
import { Info } from 'lucide-react';
import HorizontalDynamicNewsEventCard from '../../EventCard/HorizontalDynamicNewsEventCard';
import EventDetailScrollPanel from '../EventDetailScrollPanel';
import EventDetailModal from '../../EventDetailModal';
@@ -134,7 +134,7 @@ const VerticalModeLayout = React.memo(({
/* 空状态 */
<Center h="100%" minH="400px">
<VStack spacing={4}>
<InfoIcon w={12} h={12} color="gray.400" />
<Info size={48} color="gray.400" />
<Text fontSize="lg" color="gray.500" textAlign="center">
当前筛选条件下暂无数据
</Text>

View File

@@ -1,7 +1,7 @@
// src/views/Community/components/EventCard/atoms/EventFollowButton.js
import React from 'react';
import { IconButton, Box } from '@chakra-ui/react';
import { AiFillStar, AiOutlineStar } from 'react-icons/ai';
import { Star } from 'lucide-react';
/**
* 事件关注按钮组件
@@ -39,17 +39,11 @@ const EventFollowButton = ({
boxShadow: 'md'
}}
icon={
isFollowing ? (
<AiFillStar
size={iconSize}
color="gold"
/>
) : (
<AiOutlineStar
size={iconSize}
color="gold"
/>
)
<Star
size={iconSize}
color="gold"
fill={isFollowing ? "currentColor" : "none"}
/>
}
onClick={handleClick}
aria-label={isFollowing ? '取消关注' : '关注'}

View File

@@ -1,7 +1,7 @@
// src/views/Community/components/EventCard/atoms/EventImportanceBadge.js
import React from 'react';
import { Badge, Tooltip, VStack, HStack, Text, Divider, Circle } from '@chakra-ui/react';
import { InfoIcon } from '@chakra-ui/icons';
import { Info } from 'lucide-react';
import { getImportanceConfig, getAllImportanceLevels } from '@constants/importanceLevels';
/**
@@ -86,7 +86,7 @@ const EventImportanceBadge = ({
gap={1}
flexShrink={0}
>
{showIcon && <InfoIcon boxSize={2.5} />}
{showIcon && <Info size={10} />}
{importance || 'C'}
</Badge>
</Tooltip>

View File

@@ -1,7 +1,7 @@
// src/views/Community/components/EventCard/EventStats.js
import React from 'react';
import { HStack, Text, Tooltip } from '@chakra-ui/react';
import { ViewIcon, ChatIcon, StarIcon } from '@chakra-ui/icons';
import { Eye, MessageCircle, Star } from 'lucide-react';
/**
* 事件统计信息组件(浏览量、帖子数、关注数)
@@ -31,7 +31,7 @@ const EventStats = ({
{/* 浏览量 */}
<Tooltip label="浏览量" placement="top">
<HStack spacing={1}>
<ViewIcon boxSize={iconSize} />
<Eye size={iconSize === '12px' ? 12 : 16} />
<Text fontSize={fontSize}>{viewCount}</Text>
</HStack>
</Tooltip>
@@ -39,7 +39,7 @@ const EventStats = ({
{/* 帖子数 */}
<Tooltip label="帖子数" placement="top">
<HStack spacing={1}>
<ChatIcon boxSize={iconSize} />
<MessageCircle size={iconSize === '12px' ? 12 : 16} />
<Text fontSize={fontSize}>{postCount}</Text>
</HStack>
</Tooltip>
@@ -47,7 +47,7 @@ const EventStats = ({
{/* 关注数 */}
<Tooltip label="关注数" placement="top">
<HStack spacing={1}>
<StarIcon boxSize={iconSize} />
<Star size={iconSize === '12px' ? 12 : 16} />
<Text fontSize={fontSize}>{followerCount}</Text>
</HStack>
</Tooltip>