主题配置
XinAdmin 前端提供了灵活的主题配置系统,支持多种预设主题和自定义主题设置。主题系统基于 Ant Design 的主题定制能力,并结合 Zustand 状态管理实现了动态主题切换功能。
预设主题
系统提供了多种预设主题,满足不同场景的视觉需求:
- 默认主题 (light): 传统的亮色主题,适用于日常办公环境
- 暗黑主题 (dark): 深色主题,减少视觉疲劳,适合夜间使用
- 粉色主题 (pink): 温馨的粉色系主题,适合女性用户或柔和场景
- 绿色主题 (green): 清新的绿色主题,适合知识协作类应用
每个预设主题都包含完整的色彩搭配方案,涵盖品牌色、文字色、背景色等各个方面的配色。
主题配置项
主题配置项定义了系统的外观和行为,主要包括以下几个方面:
基础色彩配置
colorPrimary: 品牌主色调,用于按钮、链接等重要元素
colorError: 错误状态颜色
colorSuccess: 成功状态颜色
colorWarning: 警告状态颜色
colorText: 基础文字颜色
colorBg: 基础背景颜色
colorBorder: 边框颜色
布局尺寸配置
borderRadius: 基础组件的圆角大小
controlHeight: 按钮和输入框等基础控件的高度
headerHeight: 头部高度
headerPadding: 头部两侧内边距
siderWeight: 侧边栏宽度
bodyPadding: 内容区域内边距
行为配置
motion: 是否开启动画效果
fixedFooter: 是否固定页脚
layoutBorder: 是否开启布局边框
algorithm: 主题算法(默认算法、暗黑算法等)
主题算法
XinAdmin 支持多种主题算法,可以改变整体视觉效果:
- defaultAlgorithm: 默认算法,提供标准的明亮主题
- darkAlgorithm: 暗黑算法,提供深色主题
- defaultCompactAlgorithm: 默认+紧凑算法,提供明亮紧凑主题
- darkCompactAlgorithm: 暗黑+紧凑算法,提供深色紧凑主题
主题算法通过 Ant Design 的 theme 配置应用到整个应用,确保所有组件保持一致的视觉风格。
主题切换实现
主题切换通过 Zustand 状态管理实现,具体流程如下:
// 主题配置状态管理
const setThemeConfig = useGlobalStore(state => state.setThemeConfig);
const themeConfig = useGlobalStore(state => state.themeConfig);
// 使用防抖函数优化性能
const changeSetting = debounce((key: string, value: any) => {
transitionTheme(() => {
setThemeConfig({...themeConfig, [key]: value});
});
}, 300, {leading: true, trailing: false});
系统还提供了两种主题切换动画效果:
- 平滑过渡: 使用
transitionTheme 实现全局主题平滑过渡
- 圆形扩散: 使用
transitionThemeWithCircle 实现从点击位置向外扩散的动画效果
自定义主题
用户可以通过设置抽屉来自定义主题,也可以直接修改主题配置文件。自定义主题时,建议继承预设主题配置并仅修改需要变更的部分:
// 自定义主题示例
const customTheme: ThemeProps = {
...defaultColorTheme, // 继承默认主题
colorPrimary: "#FF6B6B", // 自定义品牌色
borderRadius: 12, // 自定义圆角
algorithm: "darkAlgorithm" // 使用暗黑算法
};
响应式主题
主题系统还支持响应式特性,能够根据屏幕尺寸自动调整布局和样式。系统提供了四种布局模式:
- side: 侧边栏布局,适用于中大型应用
- top: 顶部导航布局,适用于简单导航结构
- mix: 混合布局,结合侧边栏和顶部导航
- columns: 分栏布局,适用于复杂的多级导航
通过合理配置这些主题选项,开发者可以根据具体业务需求打造独特的用户体验。