/** 前端入口: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(
,
);