import { useState, useEffect, ReactNode } from 'react'; import { useLaunch } from '@tarojs/taro'; import { IntlProvider } from 'react-intl'; import { ConfigProvider, Button } from 'antd'; import { Provider } from 'react-redux'; import store, { useAppDispatch, useAppSelector } from './states/store'; import { initializeProductState } from './states/productSlice'; import { loadI18nMessages } from './states/i18nSlice'; import './app.css'; import { lightTheme, darkTheme } from './themes'; import ProductSelector from './components/ProductSelector'; import QuotaAlertModal from './pages/security/QuotaAlertModal'; import AcquisitionTracer from './pages/exam/components/acquisitionTracer'; import { logger } from './log/logger'; console.log = logger.log; console.warn = logger.warn; console.error = logger.error; console.log(`process.env.USE_MSW: ${process.env.USE_MSW}`); console.log(`process.env.NODE_ENV: ${process.env.NODE_ENV}`); if (process.env.NODE_ENV === 'development' && process.env.USE_MSW === 'true') { import('../mocks/server') .then(({ server }) => { server.start({ onUnhandledRequest: 'error', // 未处理的请求触发网络错误 }); console.log(`启动了MSW`); }) .catch((err) => { console.warn('Mock server module not found:', err); }); } function AppContent({ children }: { children: ReactNode }) { const dispatch = useAppDispatch(); const { messages, loading, error, currentLocale } = useAppSelector( (state) => state.i18n ); const [currentTheme, setCurrentTheme] = useState(lightTheme); // 默认使用 light 主题 const [isI18nReady, setIsI18nReady] = useState(false); useLaunch(() => { console.log('App launched.'); }); const changeTheme = (themeConfig: typeof lightTheme) => { setCurrentTheme(themeConfig); }; // 检测浏览器语言 const browserLocale = (window.navigator.language || 'en') .toLowerCase() .split('-')[0]; useEffect(() => { store.dispatch(initializeProductState()); // 应用启动时加载多语言资源 const localeToLoad = ['zh', 'en'].includes(browserLocale) ? browserLocale : 'en'; dispatch(loadI18nMessages(localeToLoad)) .unwrap() .then(() => { setIsI18nReady(true); }) .catch((error) => { console.error('加载多语言资源失败:', error); // 阻止加载后面的页面 setIsI18nReady(false); }); }, [dispatch, browserLocale]); // 显示加载状态 if (loading || !isI18nReady) { return (