/** antd v6 主题配置:亮/暗双主题(暗色用 darkAlgorithm),品牌色一致 */ import type { ThemeConfig } from "antd"; import { theme } from "antd"; /** # 成员变量: 品牌主色 **/ export const BRAND_COLOR = "#2f54eb"; /** # 成员变量: 主题存储键(localStorage) **/ export const THEME_STORAGE_KEY = "wmh_theme"; /** # 成员变量: 亮色主题基础 token(两种主题共用) **/ const baseToken = { colorPrimary: BRAND_COLOR, borderRadius: 8, fontFamily: "-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', sans-serif", }; /** # 函数 * 构建主题配置 * 参数: dark - 是否暗色模式 * 返回值: antd ThemeConfig */ export function buildAntdTheme(dark: boolean): ThemeConfig { return { algorithm: dark ? [theme.darkAlgorithm] : undefined, token: { ...baseToken, }, components: { Layout: { siderBg: dark ? "#141414" : "#ffffff", headerBg: dark ? "#141414" : "#ffffff", headerHeight: 64, }, Card: { headerHeight: 56, }, }, }; } /** # 函数 * 读取本地存储的主题偏好(默认亮色) */ export function loadDarkMode(): boolean { try { return localStorage.getItem(THEME_STORAGE_KEY) === "dark"; } catch { return false; } } /** # 函数 * 持久化主题偏好并同步 (供 styles.css 暗色覆盖) */ export function applyDarkMode(dark: boolean): void { try { localStorage.setItem(THEME_STORAGE_KEY, dark ? "dark" : "light"); } catch { // 隐私模式等场景忽略 } document.documentElement.dataset.theme = dark ? "dark" : "light"; }