Skip to content

系统主题

主题分为两部分:

  • 组件库主题 — Naive UI 通过 n-config-provider 应用一套语义颜色 + 暗黑模式
  • UnoCSS 主题 — 把同一套色阶注入 UnoCSS 配置,模板里 class="text-primary bg-primary-100" 可直接使用

源头一份配置,下游同步生效——前端任何位置都不需要硬编码颜色。

工作原理

src/theme/settings.ts (主题配置原型)


useThemeStore (Pinia)              ── 用户选的主题色 / 模式

       ├─→ 生成 Naive UI overrides ── 注入 NConfigProvider
       └─→ 生成 CSS 变量 + UnoCSS  ── 写到 :root 和 unocss.config.ts 的 theme.colors

详细实现见 src/theme/src/store/modules/theme/

主题色

5 种语义颜色,每种 11 级色阶(50–950):

语义默认色用途
primary蓝绿主操作 / 高亮
info中性提示
success绿成功状态
warning警告
error错误 / 危险操作

每种色都自动派生 text-{name} / bg-{name} / border-{name} 的 UnoCSS 工具类。

暗黑模式

  • 切换:右上角的"主题模式"按钮(手动 light / dark / 跟随系统)
  • 实现:在 <html> 上加 / 删 class="dark"
  • UnoCSS 用 dark: 前缀写 dark-only 样式:<div class="bg-white dark:bg-gray-800">

布局模式

模式适用
Vertical标准后台(默认)
Horizontal顶部 nav,没有侧栏
Vertical-Mix多级侧栏(带二级面板)
Horizontal-Mix顶部 nav + 侧栏

切换:用户在右上角设置抽屉里选;useThemeStore.layout.mode 持久化到 localStorage。

i18n 与主题

  • 主题色:与 i18n 无关
  • 模式 / 布局:与 i18n 无关
  • 主题里出现的文本(如设置抽屉里的"主题色")走 i18n key

默认值在哪改

src/theme/settings.ts项目级默认(首次访问、清掉本地存储后生效)。用户的实际选择持久化在 localStorage.themeColor / themeScheme / layout 等 key。

相关

基于 MIT 协议发布