# Module Spec:vab-theme(主题系统入口与交互) module: id: vab-theme name: VabTheme(主题配置入口/抽屉/设置面板) type: ui entrypoints: - library/components/VabTheme/index.vue - library/components/VabTheme/components/VabThemeDrawer.vue - library/components/VabTheme/components/VabThemeSetting.vue - library/components/VabTheme/components/ public_api: concept: - "VabTheme:一个刷子图标入口,用于触发打开主题抽屉(Drawer)" - "VabThemeDrawer:主题抽屉,监听事件总线打开/随机主题,并调用 settings store 的 saveTheme/resetTheme/updateTheme" - "VabThemeSetting:右侧固定设置入口(主题配置/随机换肤/购买源码/清理缓存),通过事件总线触发行为" usage_examples: - "点击 VabTheme 触发 $pub('theme') 打开抽屉" - "点击 VabThemeSetting 的随机换肤触发 $pub('random-theme')" dependency_closure: runtime: - "Pinia settings store:src/store/modules/settings(theme.showTheme、saveTheme/resetTheme/updateTheme 等)" - "事件总线/全局注入:library/plugins/vab.ts($pub/$sub/$unsub/$baseLoading 等)" - "i18n translate:src/i18n/index.ts(组件内调用 translate)" - "Element Plus:Drawer/Radio/Select/Button 等" styles: - "主题变量:library/styles/variables/vab-*-variables.module.scss(updateTheme() 动态注入 CSS 变量)" acceptance: - "页面渲染包含主题入口(刷子图标)" - "触发 $pub('theme') 时抽屉能打开;关闭时不报错" - "保存/重置主题后调用 updateTheme() 生效(CSS 变量与 body class 变化)" pitfalls: - "Theme 依赖 $pub/$sub 注入;若未安装 vab 插件,事件不会触发" - "settings.updateTheme() 依赖 webpack 的 require 动态引入 scss module;迁移到非 webpack 环境需等效实现" - "移动端(<992)某些操作会触发 reload;抽取时需确认期望行为"