From cda2585f1a653f8184f042079ac63b5357fc4812 Mon Sep 17 00:00:00 2001 From: dushixiang Date: Sun, 9 Aug 2026 23:26:55 +0800 Subject: [PATCH] refactor(admin): inline bootstrap.tsx into main.tsx MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit bootstrap.tsx 只有 3 个小函数,不值得单独文件。 合并到 main.tsx:运行时配置加载 + fallback + createRoot 全在一个文件里。 --- web/src/bootstrap.tsx | 39 --------------------------------------- web/src/main.tsx | 41 +++++++++++++++++++++++++++++++++++------ 2 files changed, 35 insertions(+), 45 deletions(-) delete mode 100644 web/src/bootstrap.tsx diff --git a/web/src/bootstrap.tsx b/web/src/bootstrap.tsx deleted file mode 100644 index 15af063..0000000 --- a/web/src/bootstrap.tsx +++ /dev/null @@ -1,39 +0,0 @@ -import {StrictMode, type ReactNode} from 'react'; -import {createRoot} from 'react-dom/client'; -import {QueryClient, QueryClientProvider} from '@tanstack/react-query'; -import dayjs from 'dayjs'; -import 'dayjs/locale/zh-cn'; -import './index.css'; - -dayjs.locale('zh-cn'); - -export const renderApplication = (application: ReactNode) => { - const queryClient = new QueryClient({ - defaultOptions: {queries: {refetchOnWindowFocus: false, retry: 1}}, - }); - createRoot(document.getElementById('root')!).render( - - {application} - , - ); -}; - -export const loadRuntimeConfig = async () => { - if (window.PikaRuntime) return; - const response = await fetch('/api/config'); - if (!response.ok) throw new Error('无法加载 Pika 运行时配置'); - const payload = await response.json(); - window.PikaRuntime = payload; - window.SystemConfig = payload.legacySystemConfig; -}; - -export const ensureRuntimeFallback = () => { - if (window.SystemConfig) return; - window.SystemConfig = { - SystemNameZh: '皮卡监控', - SystemNameEn: 'Pika Monitor', - ICPCode: '', - DefaultView: 'grid', - Version: '', - }; -}; diff --git a/web/src/main.tsx b/web/src/main.tsx index 9b42b49..791bf06 100644 --- a/web/src/main.tsx +++ b/web/src/main.tsx @@ -1,9 +1,38 @@ +import {StrictMode} from 'react'; +import {createRoot} from 'react-dom/client'; +import {QueryClient, QueryClientProvider} from '@tanstack/react-query'; +import dayjs from 'dayjs'; +import 'dayjs/locale/zh-cn'; import AdminApp from './App'; -import {ensureRuntimeFallback, loadRuntimeConfig, renderApplication} from './bootstrap'; +import './index.css'; -loadRuntimeConfig() - .catch((error) => { - console.error(error); - ensureRuntimeFallback(); +dayjs.locale('zh-cn'); + +// 异步加载运行时配置,不阻塞渲染 +fetch('/api/config') + .then((res) => res.ok ? res.json() : Promise.reject()) + .then((payload) => { + window.PikaRuntime = payload; + window.SystemConfig = payload.legacySystemConfig; }) - .finally(() => renderApplication()); + .catch(() => { + window.SystemConfig = { + SystemNameZh: '皮卡监控', + SystemNameEn: 'Pika Monitor', + ICPCode: '', + DefaultView: 'grid', + Version: '', + }; + }) + .finally(() => { + const queryClient = new QueryClient({ + defaultOptions: {queries: {refetchOnWindowFocus: false, retry: 1}}, + }); + createRoot(document.getElementById('root')!).render( + + + + + , + ); + });