From d4e671428dfa530b5b4be69a4fe1bdd4dc5556d4 Mon Sep 17 00:00:00 2001 From: zdl <3489966805@qq.com> Date: Thu, 25 Dec 2025 12:24:38 +0800 Subject: [PATCH] =?UTF-8?q?refactor(icons):=20=E8=BF=81=E7=A7=BB=20views/C?= =?UTF-8?q?oncept=20=E7=9B=AE=E5=BD=95=E5=9B=BE=E6=A0=87=E5=88=B0=20lucide?= =?UTF-8?q?-react?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - @chakra-ui/icons → lucide-react - react-icons → lucide-react - 处理 Box/BoxIcon 命名冲突 - 涉及 6 个组件文件 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- src/views/Concept/ConceptTimelineModal.js | 56 +++--- src/views/Concept/components/BreadcrumbNav.js | 11 +- .../Concept/components/ConceptStatsPanel.js | 50 +++--- .../Concept/components/ForceGraphView.js | 38 ++-- src/views/Concept/components/HierarchyView.js | 170 +++++++++--------- src/views/Concept/index.js | 96 ++++++---- 6 files changed, 228 insertions(+), 193 deletions(-) diff --git a/src/views/Concept/ConceptTimelineModal.js b/src/views/Concept/ConceptTimelineModal.js index 4b5df638..c84caf5d 100644 --- a/src/views/Concept/ConceptTimelineModal.js +++ b/src/views/Concept/ConceptTimelineModal.js @@ -33,21 +33,21 @@ import { useBreakpointValue, } from '@chakra-ui/react'; import { - ChevronDownIcon, - ChevronRightIcon, - ExternalLinkIcon, - ViewIcon, - CalendarIcon, -} from '@chakra-ui/icons'; + ChevronDown, + ChevronRight, + ExternalLink, + Eye, + Calendar, +} from 'lucide-react'; import { - FaChartLine, - FaArrowUp, - FaArrowDown, - FaHistory, - FaNewspaper, - FaFileAlt, - FaClock, -} from 'react-icons/fa'; + LineChart, + ArrowUp, + ArrowDown, + History, + Newspaper as NewspaperIcon, + FileText, + Clock, +} from 'lucide-react'; import { keyframes } from '@emotion/react'; dayjs.locale('zh-cn'); @@ -179,13 +179,13 @@ const ConceptTimelineModal = ({ if (value > 0) { return { color: 'red', - icon: FaArrowUp, + icon: ArrowUp, text: `+${value.toFixed(2)}%` }; } else if (value < 0) { return { color: 'green', - icon: FaArrowDown, + icon: ArrowDown, text: `${value.toFixed(2)}%` }; } else { @@ -691,7 +691,7 @@ const ConceptTimelineModal = ({ > @@ -815,7 +815,7 @@ const ConceptTimelineModal = ({ borderColor="red.400" flexShrink={0} > - + 上涨 - + 下跌 @@ -991,7 +991,7 @@ const ConceptTimelineModal = ({ borderColor="blue.500" > - + {selectedDateData.events.filter(e => e.type === 'news').length} @@ -1007,7 +1007,7 @@ const ConceptTimelineModal = ({ borderColor="green.500" > - + {selectedDateData.events.filter(e => e.type === 'report').length} @@ -1109,7 +1109,7 @@ const ConceptTimelineModal = ({ {event.time && ( - + {formatDateTime(event.time)} @@ -1120,7 +1120,7 @@ const ConceptTimelineModal = ({ size="sm" colorScheme={event.type === 'news' ? 'blue' : 'green'} variant="solid" - leftIcon={} + leftIcon={} boxShadow="sm" _hover={{ transform: 'scale(1.05)', @@ -1175,7 +1175,7 @@ const ConceptTimelineModal = ({ borderColor="whiteAlpha.200" > } + leftIcon={} onClick={() => { const url = formatUrl(selectedReport.content_url); if (url) { @@ -1379,7 +1379,7 @@ const ConceptTimelineModal = ({ size="sm" bg="whiteAlpha.100" color="white" - leftIcon={} + leftIcon={} onClick={() => window.open(selectedNews.url, '_blank')} _hover={{ bg: 'whiteAlpha.200' }} > diff --git a/src/views/Concept/components/BreadcrumbNav.js b/src/views/Concept/components/BreadcrumbNav.js index 541f8611..aa0aae00 100644 --- a/src/views/Concept/components/BreadcrumbNav.js +++ b/src/views/Concept/components/BreadcrumbNav.js @@ -16,8 +16,7 @@ import { Flex, Tooltip, } from '@chakra-ui/react'; -import { ChevronRightIcon } from '@chakra-ui/icons'; -import { FaFilter, FaTimes, FaHome } from 'react-icons/fa'; +import { ChevronRight, Filter, X, Home } from 'lucide-react'; const BreadcrumbNav = ({ filter, @@ -139,7 +138,7 @@ const BreadcrumbNav = ({ py={1} borderRadius="full" > - + 层级筛选 @@ -161,7 +160,7 @@ const BreadcrumbNav = ({ alignItems="center" gap={1} > - + 全部 @@ -169,7 +168,7 @@ const BreadcrumbNav = ({ {/* 面包屑路径 */} {breadcrumbs.map((crumb, index) => ( - + } + icon={} {...(isDarkMode ? {} : { colorScheme: 'red' })} color={isDarkMode ? styles.clearBtn.color : undefined} variant="ghost" diff --git a/src/views/Concept/components/ConceptStatsPanel.js b/src/views/Concept/components/ConceptStatsPanel.js index 30c40cb5..cb6eede1 100644 --- a/src/views/Concept/components/ConceptStatsPanel.js +++ b/src/views/Concept/components/ConceptStatsPanel.js @@ -37,14 +37,16 @@ import { useToast, } from '@chakra-ui/react'; import { - FaArrowUp, - FaArrowDown, - FaChartLine, - FaNewspaper, - FaRocket, - FaCrown, -} from 'react-icons/fa'; -import { BsLightningFill, BsGraphUp, BsGraphDown } from 'react-icons/bs'; + ArrowUp, + ArrowDown, + LineChart, + Newspaper, + Rocket, + Crown, + Zap, + TrendingUp, + TrendingDown, +} from 'lucide-react'; const ConceptStatsPanel = ({ apiBaseUrl, onConceptClick }) => { // 获取正确的API基础URL @@ -274,7 +276,7 @@ const ConceptStatsPanel = ({ apiBaseUrl, onConceptClick }) => { const tabsData = [ { label: '涨幅榜', - icon: FaArrowUp, + icon: ArrowUp, color: 'red', data: statsData.hot_concepts, renderItem: (item, index) => ( @@ -314,7 +316,7 @@ const ConceptStatsPanel = ({ apiBaseUrl, onConceptClick }) => { {index === 0 && ( { - + {item.stock_count}股 · - + {item.news_count}讯 @@ -349,7 +351,7 @@ const ConceptStatsPanel = ({ apiBaseUrl, onConceptClick }) => { px={2} py={1} > - + {formatChange(item.change_pct)} @@ -357,7 +359,7 @@ const ConceptStatsPanel = ({ apiBaseUrl, onConceptClick }) => { }, { label: '跌幅榜', - icon: FaArrowDown, + icon: ArrowDown, color: 'green', data: statsData.cold_concepts, renderItem: (item, index) => ( @@ -400,12 +402,12 @@ const ConceptStatsPanel = ({ apiBaseUrl, onConceptClick }) => { - + {item.stock_count}股 · - + {item.news_count}讯 @@ -420,7 +422,7 @@ const ConceptStatsPanel = ({ apiBaseUrl, onConceptClick }) => { px={2} py={1} > - + {formatChange(item.change_pct)} @@ -428,7 +430,7 @@ const ConceptStatsPanel = ({ apiBaseUrl, onConceptClick }) => { }, { label: '波动榜', - icon: BsLightningFill, + icon: Zap, color: 'purple', data: statsData.volatile_concepts, renderItem: (item, index) => ( @@ -468,7 +470,7 @@ const ConceptStatsPanel = ({ apiBaseUrl, onConceptClick }) => { {index === 0 && ( { px={2} py={1} > - + {item.volatility?.toFixed(1)}% @@ -503,7 +505,7 @@ const ConceptStatsPanel = ({ apiBaseUrl, onConceptClick }) => { }, { label: '连涨榜', - icon: FaRocket, + icon: Rocket, color: 'cyan', data: statsData.momentum_concepts, renderItem: (item, index) => ( @@ -543,7 +545,7 @@ const ConceptStatsPanel = ({ apiBaseUrl, onConceptClick }) => { {index === 0 && ( { px={2} py={1} > - + {item.consecutive_days}天 @@ -620,7 +622,7 @@ const ConceptStatsPanel = ({ apiBaseUrl, onConceptClick }) => { - + diff --git a/src/views/Concept/components/ForceGraphView.js b/src/views/Concept/components/ForceGraphView.js index fdf12547..1d8245e0 100644 --- a/src/views/Concept/components/ForceGraphView.js +++ b/src/views/Concept/components/ForceGraphView.js @@ -31,18 +31,18 @@ import { } from '@chakra-ui/react'; import { keyframes } from '@emotion/react'; import { - FaLayerGroup, - FaSync, - FaExpand, - FaCompress, - FaHome, - FaArrowUp, - FaArrowDown, - FaCircle, - FaTh, - FaChevronRight, - FaArrowLeft, -} from 'react-icons/fa'; + Layers, + RefreshCw, + Maximize2, + Minimize2, + Home, + ArrowUp, + ArrowDown, + Circle, + Grid3x3, + ChevronRight, + ArrowLeft, +} from 'lucide-react'; import { logger } from '../../../utils/logger'; // 极光动画 - 黑金色主题 @@ -1052,7 +1052,7 @@ const ForceGraphView = ({ borderColor="whiteAlpha.100" > - + 加载失败:{error}