Files
Web_Template_Vue3_Dev/AI-Coding/10-Theme-System.md

1.6 KiB
Raw Permalink Blame History

10. Theme 系统VabTheme + settings

目标:让 AI 在抽取/复用 Layout 时,不会漏掉主题抽屉、事件总线与 settings 的主题变量闭包。

入口与组成

  • 主题入口组件:library/components/VabTheme/index.vue
  • 主题抽屉:library/components/VabTheme/components/VabThemeDrawer.vue
  • 主题设置入口:library/components/VabTheme/components/VabThemeSetting.vue
  • 主题状态与持久化:src/store/modules/settings.ts

关键机制

  • 事件总线:通过 library/plugins/vab.ts 注入 $pub/$sub/$unsub
    • 打开抽屉:$pub('theme')
    • 随机换肤:$pub('random-theme')
  • 主题应用:useSettingsStore().updateTheme()
    • 动态 require(@vab/styles/variables/vab-*-variables.module.scss)
    • vab- 前缀变量映射到 --el- CSS 变量
    • 设置 body classvab-theme-*)与背景类

最小依赖闭包(抽取时必须带上)

  • library/components/VabTheme/
  • src/store/modules/settings.ts(至少 theme/showTheme/saveTheme/resetTheme/updateTheme
  • library/plugins/vab.ts(提供 $pub/$sub$baseLoading
  • library/styles/variables/(所有 vab-*-variables.module.scss
  • Element Plus + i18n组件内有 translate() 与 el-* 组件)

验收点smoke

  • 触发 $pub('theme') 抽屉能打开/关闭
  • 保存/重置主题后,刷新页面主题能持久化且变量生效

常见坑

  • updateTheme() 使用 webpack 风格的动态 require:迁移到非 webpack 构建(如部分 Vite 场景)需要等效实现
  • 主题抽屉/设置依赖事件总线注入:未安装 vab 插件时会“看起来渲染了但不工作”