/** 前端入口:antd v6 + react-router(Vite 构建);亮/暗主题状态在顶层持有 */ import React, { useEffect, useState } from "react"; import { createRoot } from "react-dom/client"; import { ConfigProvider, App as AntdApp } from "antd"; import zhCN from "antd/locale/zh_CN"; import { createBrowserRouter, RouterProvider } from "react-router-dom"; import { applyDarkMode, buildAntdTheme, loadDarkMode } from "./theme.ts"; import { ThemeContext } from "./theme-context.ts"; import "./styles.css"; import { App } from "./App.tsx"; import { LoginPage } from "./pages/Login.tsx"; import { OAuthSimPage } from "./pages/OAuthSim.tsx"; import { DashboardPage } from "./pages/Dashboard.tsx"; import { AccountsPage } from "./pages/Accounts.tsx"; import { DomainsPage } from "./pages/Domains.tsx"; import { MailboxesPage } from "./pages/Mailboxes.tsx"; import { InboxPage } from "./pages/Inbox.tsx"; import { setUnauthorizedHandler } from "./api.ts"; /** # 成员变量: 路由表(邮件页路由 /inboxs,v2.1.0) **/ const router = createBrowserRouter([ { path: "/login", element: }, { path: "/oauth/sim/authorize", element: }, { path: "/", element: , children: [ { index: true, element: }, { path: "accounts", element: }, { path: "domains", element: }, { path: "mailboxes", element: }, { path: "inboxs", element: }, ], }, ]); /** # 函数 * 顶层壳:持有主题状态,注入 Context 与 ConfigProvider */ function Shell() { const [dark, setDark] = useState(loadDarkMode); useEffect(() => { applyDarkMode(dark); }, [dark]); return ( setDark((v) => !v) }}> ); } /** 未登录统一跳登录页 */ setUnauthorizedHandler(() => { if (!location.pathname.startsWith("/login")) { location.href = "/login"; } }); createRoot(document.getElementById("root")!).render( , );