1.6 KiB
1.6 KiB
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 变量 - 设置
bodyclass(vab-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插件时会“看起来渲染了但不工作”