diff --git a/src/components/Auth/AuthFormContent.js b/src/components/Auth/AuthFormContent.js index faec7b11..644b6b97 100644 --- a/src/components/Auth/AuthFormContent.js +++ b/src/components/Auth/AuthFormContent.js @@ -279,7 +279,11 @@ export default function AuthFormContent() { // ⚡ Mock 模式:先在前端侧写入 localStorage,确保时序正确 if (process.env.REACT_APP_ENABLE_MOCK === 'true' && data.user) { setCurrentUser(data.user); - console.log('[Auth] 前端侧设置当前用户(Mock模式):', data.user); + logger.debug('AuthFormContent', '前端侧设置当前用户(Mock模式)', { + userId: data.user?.id, + phone: data.user?.phone, + mockMode: true + }); } // 更新session diff --git a/src/components/Auth/VerificationCodeInput.js b/src/components/Auth/VerificationCodeInput.js index 9ee6b923..288b3312 100644 --- a/src/components/Auth/VerificationCodeInput.js +++ b/src/components/Auth/VerificationCodeInput.js @@ -1,5 +1,6 @@ import React from "react"; import { FormControl, FormErrorMessage, HStack, Input, Button, Spinner } from "@chakra-ui/react"; +import { logger } from "../../utils/logger"; /** * 通用验证码输入组件 @@ -26,7 +27,12 @@ export default function VerificationCodeInput({ } } catch (error) { // 错误已经在父组件处理,这里只需要防止未捕获的 Promise rejection - console.error('Send code error (caught in VerificationCodeInput):', error); + logger.error('VerificationCodeInput', 'handleSendCode', error, { + hasOnSendCode: !!onSendCode, + countdown, + isLoading, + isSending + }); } }; diff --git a/src/components/Citation/CitedContent.js b/src/components/Citation/CitedContent.js index 1691e9f1..d19eca78 100644 --- a/src/components/Citation/CitedContent.js +++ b/src/components/Citation/CitedContent.js @@ -4,6 +4,7 @@ import { Typography, Space, Tag } from 'antd'; import { RobotOutlined, FileSearchOutlined } from '@ant-design/icons'; import CitationMark from './CitationMark'; import { processCitationData } from '../../utils/citationUtils'; +import { logger } from '../../utils/logger'; const { Text } = Typography; @@ -37,7 +38,10 @@ const CitedContent = ({ // 如果数据无效,不渲染 if (!processed) { - console.warn('CitedContent: Invalid data, not rendering'); + logger.warn('CitedContent', '无效数据,不渲染', { + hasData: !!data, + title + }); return null; } diff --git a/src/contexts/AuthModalContext.js b/src/contexts/AuthModalContext.js index 0b7c9d51..1269619f 100644 --- a/src/contexts/AuthModalContext.js +++ b/src/contexts/AuthModalContext.js @@ -2,6 +2,7 @@ import { createContext, useContext, useState, useCallback } from 'react'; import { useNavigate } from 'react-router-dom'; import { useAuth } from './AuthContext'; +import { logger } from '../utils/logger'; const AuthModalContext = createContext(); @@ -69,7 +70,10 @@ export const AuthModalProvider = ({ children }) => { try { onSuccessCallback(user); } catch (error) { - console.error('Success callback error:', error); + logger.error('AuthModalContext', 'handleLoginSuccess', error, { + userId: user?.id, + hasCallback: !!onSuccessCallback + }); } } diff --git a/src/hooks/useSubscription.js b/src/hooks/useSubscription.js index 5b203a01..57e7e7da 100644 --- a/src/hooks/useSubscription.js +++ b/src/hooks/useSubscription.js @@ -1,6 +1,7 @@ // src/hooks/useSubscription.js import { useState, useEffect } from 'react'; import { useAuth } from '../contexts/AuthContext'; +import { logger } from '../utils/logger'; // 订阅级别映射 const SUBSCRIPTION_LEVELS = { @@ -46,7 +47,10 @@ export const useSubscription = () => { // 首先检查用户对象中是否已经包含订阅信息 if (user.subscription_type) { - console.log('📋 从用户对象获取订阅信息:', user.subscription_type); + logger.debug('useSubscription', '从用户对象获取订阅信息', { + subscriptionType: user.subscription_type, + daysLeft: user.subscription_days_left + }); setSubscriptionInfo({ type: user.subscription_type, status: 'active', @@ -73,7 +77,10 @@ export const useSubscription = () => { } } else { // 如果API调用失败,回退到用户对象中的信息 - console.log('📋 API失败,使用用户对象中的订阅信息'); + logger.warn('useSubscription', 'API调用失败,使用用户对象订阅信息', { + status: response.status, + fallbackType: user.subscription_type || 'free' + }); setSubscriptionInfo({ type: user.subscription_type || 'free', status: 'active', @@ -82,7 +89,9 @@ export const useSubscription = () => { }); } } catch (error) { - console.error('获取订阅信息失败:', error); + logger.error('useSubscription', 'fetchSubscriptionInfo', error, { + userId: user?.id + }); // 发生错误时,回退到用户对象中的信息 setSubscriptionInfo({ type: user.subscription_type || 'free', @@ -109,7 +118,10 @@ export const useSubscription = () => { const hasFeatureAccess = (featureName) => { // 临时调试:如果用户对象中有max权限,直接解锁所有功能 if (user?.subscription_type === 'max') { - console.log(`🔓 Max用户直接解锁功能: ${featureName}`); + logger.debug('useSubscription', 'Max用户解锁功能', { + featureName, + userId: user?.id + }); return true; } diff --git a/src/views/Applications/Kanban.js b/src/views/Applications/Kanban.js index 7d346754..f50b2d71 100755 --- a/src/views/Applications/Kanban.js +++ b/src/views/Applications/Kanban.js @@ -45,6 +45,7 @@ import { } from 'components/Scrollbar/Scrollbar'; import { useRef, useState } from 'react'; import { Scrollbars } from 'react-custom-scrollbars-2'; +import { logger } from '../../utils/logger'; function Kanban() { // Chakra color mode @@ -149,6 +150,15 @@ function Kanban() { return newCardLocal; } + // 卡片创建日志处理函数 + function handleCardNew(cardData) { + logger.debug('Kanban', '创建新卡片', { + cardId: cardData?.id, + title: cardData?.title, + boardCounter: initialBoard.counter + }); + } + return ( { - console.log('🏠 HomePage AuthContext 状态:', { - user, + logger.debug('HomePage', 'AuthContext状态', { + userId: user?.id, + username: user?.username, + nickname: user?.nickname, isAuthenticated, - hasUser: !!user, - userInfo: user ? { - id: user.id, - username: user.username, - nickname: user.nickname - } : null + hasUser: !!user }); }, [user, isAuthenticated]); diff --git a/src/views/LimitAnalyse/components/HighPositionStocks.js b/src/views/LimitAnalyse/components/HighPositionStocks.js index afa99226..f0656a99 100644 --- a/src/views/LimitAnalyse/components/HighPositionStocks.js +++ b/src/views/LimitAnalyse/components/HighPositionStocks.js @@ -27,6 +27,7 @@ import { Icon, } from '@chakra-ui/react'; import { StarIcon, TriangleUpIcon } from '@chakra-ui/icons'; +import { logger } from '../../../utils/logger'; const HighPositionStocks = ({ dateStr }) => { const [highPositionData, setHighPositionData] = useState(null); @@ -45,17 +46,26 @@ const HighPositionStocks = ({ dateStr }) => { const API_URL = process.env.NODE_ENV === 'production' ? '/report-api' : 'http://111.198.58.126:5001'; const response = await fetch(`${API_URL}/api/limit-analyse/high-position-stocks?date=${dateStr}`); const data = await response.json(); - - console.log('High position stocks API response:', data); // 添加调试信息 - + + logger.debug('HighPositionStocks', 'API响应', { + date: dateStr, + success: data.success, + dataLength: data.data?.length + }); + if (data.success) { setHighPositionData(data.data); } else { - console.error('API returned success: false', data); + logger.warn('HighPositionStocks', 'API返回失败', { + date: dateStr, + error: data.error + }); setHighPositionData(null); } } catch (error) { - console.error('Failed to fetch high position stocks:', error); + logger.error('HighPositionStocks', 'fetchHighPositionStocks', error, { + date: dateStr + }); setHighPositionData(null); } finally { setLoading(false); diff --git a/src/views/Pages/WechatCallback.js b/src/views/Pages/WechatCallback.js index b795e81f..552e8165 100644 --- a/src/views/Pages/WechatCallback.js +++ b/src/views/Pages/WechatCallback.js @@ -14,6 +14,7 @@ import { import { FaCheckCircle, FaTimesCircle } from "react-icons/fa"; import { authService } from "../../services/authService"; import { useAuth } from "../../contexts/AuthContext"; +import { logger } from "../../utils/logger"; /** * 微信H5授权回调页面 @@ -69,7 +70,11 @@ export default function WechatCallback() { navigate("/home", { replace: true }); }, 1500); } catch (error) { - console.error("微信授权回调处理失败:", error); + logger.error('WechatCallback', 'handleCallback', error, { + code: searchParams.get("code"), + state: searchParams.get("state"), + errorMessage: error.message + }); setStatus("error"); setMessage(error.message || "授权失败,请重试");