From c1bea7a75d0a3f1dccd9af2c7b312595ed91b2f8 Mon Sep 17 00:00:00 2001 From: zdl <3489966805@qq.com> Date: Sat, 18 Oct 2025 09:17:40 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E9=87=8D=E6=9E=84=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E6=95=B0:=203=20=E4=B8=AA=E4=B8=BB=E8=A6=81=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E6=96=87=E4=BB=B6=20=20=20-=20=E6=9B=BF=E6=8D=A2=20console=20?= =?UTF-8?q?=E8=B0=83=E7=94=A8:=20=E7=BA=A6=2018=20=E4=B8=AA=20=20=20-=20?= =?UTF-8?q?=E7=A7=BB=E9=99=A4=E9=9D=9E=E5=85=B3=E9=94=AE=20toast:=206=20?= =?UTF-8?q?=E4=B8=AA=20=20=20-=20=E4=BF=9D=E7=95=99=E5=85=B3=E9=94=AE=20to?= =?UTF-8?q?ast:=202=20=E4=B8=AA=EF=BC=88=E6=90=9C=E7=B4=A2=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E7=9A=84=E7=94=A8=E6=88=B7=E6=93=8D=E4=BD=9C=E5=8F=8D?= =?UTF-8?q?=E9=A6=88=EF=BC=89=20=20=20-=20=E6=B7=BB=E5=8A=A0=20logger=20?= =?UTF-8?q?=E6=97=A5=E5=BF=97:=20=E7=BA=A6=2015=20=E5=A4=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/Community/index.js | 17 +++++--- src/views/LimitAnalyse/index.js | 37 +++++++++------- src/views/StockOverview/index.js | 73 +++++++++++++++----------------- 3 files changed, 67 insertions(+), 60 deletions(-) diff --git a/src/views/Community/index.js b/src/views/Community/index.js index f57e10d3..c4e8ecec 100644 --- a/src/views/Community/index.js +++ b/src/views/Community/index.js @@ -139,8 +139,7 @@ const Community = () => { // 加载事件列表 const loadEvents = useCallback(async (page = 1) => { - console.log('[Community] loadEvents 被调用,页码:', page); - console.log('[Community] 调用栈:', new Error().stack); + logger.debug('Community', 'loadEvents 被调用', { page }); setLoading(true); try { const filters = getFiltersFromUrl(); @@ -176,9 +175,12 @@ const Community = () => { const response = await eventService.getPopularKeywords(20); if (response.success) { setPopularKeywords(response.data); + logger.debug('Community', '热门关键词加载成功', { + count: response.data?.length || 0 + }); } } catch (error) { - console.error('Failed to load popular keywords:', error); + logger.error('Community', 'loadPopularKeywords', error); } }, []); @@ -188,9 +190,12 @@ const Community = () => { const response = await eventService.getHotEvents({ days: 5, limit: 4 }); if (response.success) { setHotEvents(response.data); + logger.debug('Community', '热点事件加载成功', { + count: response.data?.length || 0 + }); } } catch (error) { - console.error('Failed to load hot events:', error); + logger.error('Community', 'loadHotEvents', error); } }, []); @@ -256,7 +261,9 @@ const Community = () => { // 这是为了避免 StockDetailPanel 打开时触发不必要的重新加载 // 如果未来 loadEvents 添加了新的状态依赖,需要在此处同步更新 useEffect(() => { - console.log('[Community] useEffect 触发,searchParams 变化:', searchParams.toString()); + logger.debug('Community', 'useEffect 触发,searchParams 变化', { + params: searchParams.toString() + }); const page = parseInt(searchParams.get('page') || '1', 10); loadEvents(page); loadPopularKeywords(); diff --git a/src/views/LimitAnalyse/index.js b/src/views/LimitAnalyse/index.js index 39062da8..1716490a 100755 --- a/src/views/LimitAnalyse/index.js +++ b/src/views/LimitAnalyse/index.js @@ -48,6 +48,7 @@ import { AdvancedSearch, SearchResultsModal } from './components/SearchComponent // 导入高位股统计组件 import HighPositionStocks from './components/HighPositionStocks'; +import { logger } from '../../utils/logger'; // 主组件 export default function LimitAnalyse() { @@ -109,9 +110,12 @@ export default function LimitAnalyse() { const data = await response.json(); if (data.success) { setAvailableDates(data.events); + logger.debug('LimitAnalyse', '可用日期加载成功', { + count: data.events?.length || 0 + }); } } catch (error) { - console.error('Failed to fetch available dates:', error); + logger.error('LimitAnalyse', 'fetchAvailableDates', error); } }; @@ -126,22 +130,15 @@ export default function LimitAnalyse() { // 获取词云数据 fetchWordCloudData(date); - toast({ - title: '数据加载成功', - description: `${date} 的数据已加载`, - status: 'success', - duration: 2000, - isClosable: true, + logger.debug('LimitAnalyse', '每日分析数据加载成功', { + date, + totalStocks: data.data?.total_stocks || 0 }); + // ❌ 移除数据加载成功 toast(非关键操作) } } catch (error) { - console.error('Failed to fetch daily analysis:', error); - toast({ - title: '网络错误', - description: '无法加载数据,请稍后重试', - status: 'error', - duration: 3000, - }); + logger.error('LimitAnalyse', 'fetchDailyAnalysis', error, { date }); + // ❌ 移除数据加载失败 toast(非关键操作) } finally { setLoading(false); } @@ -153,9 +150,13 @@ export default function LimitAnalyse() { const data = await response.json(); if (data.success) { setWordCloudData(data.data); + logger.debug('LimitAnalyse', '词云数据加载成功', { + date, + count: data.data?.length || 0 + }); } } catch (error) { - console.error('Failed to fetch wordcloud data:', error); + logger.error('LimitAnalyse', 'fetchWordCloudData', error, { date }); } }; @@ -188,6 +189,10 @@ export default function LimitAnalyse() { if (data.success) { setSearchResults(data.data); setIsSearchOpen(true); + logger.info('LimitAnalyse', '搜索完成', { + resultCount: data.data?.total || 0, + searchParams + }); toast({ title: '搜索完成', description: `找到 ${data.data.total} 只相关股票`, @@ -196,7 +201,7 @@ export default function LimitAnalyse() { }); } } catch (error) { - console.error('Search failed:', error); + logger.error('LimitAnalyse', 'handleSearch', error, { searchParams }); toast({ title: '搜索失败', description: '请稍后重试', diff --git a/src/views/StockOverview/index.js b/src/views/StockOverview/index.js index 8984974c..ed9f9de5 100644 --- a/src/views/StockOverview/index.js +++ b/src/views/StockOverview/index.js @@ -61,6 +61,7 @@ import { FaChartLine, FaFire, FaRocket, FaBrain, FaCalendarAlt, FaChevronRight, import { BsGraphUp, BsLightningFill } from 'react-icons/bs'; import { keyframes } from '@emotion/react'; import * as echarts from 'echarts'; +import { logger } from '../../utils/logger'; // Navigation bar now provided by MainLayout // import HomeNavbar from '../../components/Navbars/HomeNavbar'; @@ -132,33 +133,24 @@ const StockOverview = () => { const searchStocks = async (query) => { setIsSearching(true); try { - console.log('开始搜索股票:', query); + logger.debug('StockOverview', '开始搜索股票', { query }); const response = await fetch(`/api/stocks/search?q=${encodeURIComponent(query)}&limit=10`); - console.log('API响应状态:', response.status); const data = await response.json(); - console.log('API返回数据:', data); - + logger.debug('StockOverview', 'API返回数据', { + status: response.status, + resultCount: data.data?.length || 0 + }); + if (data.success) { setSearchResults(data.data || []); setShowResults(true); } else { - toast({ - title: '搜索失败', - description: data.error || '请稍后重试', - status: 'error', - duration: 3000, - isClosable: true, - }); + logger.warn('StockOverview', '搜索失败', data.error || '请稍后重试', { query }); + // ❌ 移除搜索失败 toast(非关键操作) } } catch (error) { - console.error('搜索股票失败:', error); - toast({ - title: '搜索失败', - description: '网络错误,请稍后重试', - status: 'error', - duration: 3000, - isClosable: true, - }); + logger.error('StockOverview', 'searchStocks', error, { query }); + // ❌ 移除搜索失败 toast(非关键操作) } finally { setIsSearching(false); } @@ -171,13 +163,17 @@ const StockOverview = () => { const url = date ? `/api/concepts/daily-top?limit=6&date=${date}` : '/api/concepts/daily-top?limit=6'; const response = await fetch(url); const data = await response.json(); - + if (data.success) { setTopConcepts(data.data); if (!selectedDate) setSelectedDate(data.trade_date); + logger.debug('StockOverview', '热门概念加载成功', { + count: data.data?.length || 0, + date: data.trade_date + }); } } catch (error) { - console.error('获取概念数据失败:', error); + logger.error('StockOverview', 'fetchTopConcepts', error, { date }); } finally { setLoadingConcepts(false); } @@ -190,7 +186,7 @@ const StockOverview = () => { const url = date ? `/api/market/heatmap?limit=500&date=${date}` : '/api/market/heatmap?limit=500'; const response = await fetch(url); const data = await response.json(); - + if (data.success) { setHeatmapData(data.data); // 保存统计数据 @@ -202,11 +198,15 @@ const StockOverview = () => { })); } if (!selectedDate) setSelectedDate(data.trade_date); + logger.debug('StockOverview', '热力图数据加载成功', { + count: data.data?.length || 0, + date: data.trade_date + }); // 延迟渲染热力图,确保DOM已经准备好 setTimeout(() => renderHeatmap(data.data), 100); } } catch (error) { - console.error('获取热力图数据失败:', error); + logger.error('StockOverview', 'fetchHeatmapData', error, { date }); } finally { setLoadingHeatmap(false); } @@ -218,7 +218,7 @@ const StockOverview = () => { const url = date ? `/api/market/statistics?date=${date}` : '/api/market/statistics'; const response = await fetch(url); const data = await response.json(); - + if (data.success) { setMarketStats(prevStats => ({ ...data.summary, @@ -228,15 +228,14 @@ const StockOverview = () => { })); setAvailableDates(data.available_dates || []); if (!selectedDate) setSelectedDate(data.trade_date); + logger.debug('StockOverview', '市场统计数据加载成功', { + date: data.trade_date, + availableDatesCount: data.available_dates?.length || 0 + }); } } catch (error) { - console.error('获取市场统计数据失败:', error); - toast({ - title: '获取统计数据失败', - status: 'error', - duration: 3000, - isClosable: true, - }); + logger.error('StockOverview', 'fetchMarketStats', error, { date }); + // ❌ 移除统计数据加载失败 toast(非关键操作) } }; @@ -409,16 +408,12 @@ const StockOverview = () => { } }); } catch (error) { - console.error('渲染热力图失败:', error); - toast({ - title: '热力图渲染失败', - description: '请刷新页面重试', - status: 'error', - duration: 3000, - isClosable: true, + logger.error('StockOverview', 'renderHeatmap', error, { + dataLength: data?.length || 0 }); + // ❌ 移除热力图渲染失败 toast(非关键操作) } - }, [colorMode, goldColor, navigate, toast]); + }, [colorMode, goldColor, navigate]); // ✅ 移除 toast 依赖 // 获取市值区间 const getMarketCapRange = (cap) => {