# 12. Settings Store（主题/布局等全局配置）

> 目标：把 Theme/Layout 的“根依赖”讲清楚，避免 AI 抽取时只搬组件却漏掉主题变量注入与持久化逻辑。

## 入口

- `src/store/modules/settings.ts`（`useSettingsStore`）

## 管理的核心状态

- `theme`：包含 `layout/themeName/background/menuWidth/showTheme/showThemeSetting/tabsBarStyle...`
- `device`：`desktop | mobile`（布局响应式需要）
- `collapse`：侧边栏折叠状态
- `language`：国际化语言

## 关键动作

- `saveTheme()`：持久化 theme
- `resetTheme()`：恢复默认 theme，并调用 `updateTheme()`
- `updateTheme()`：
  - 通过 `@vab/styles/variables/vab-*-variables.module.scss` 读取变量
  - 将 `vab-` 前缀映射到 `--el-`，动态写入 Element Plus CSS 变量
  - 设置 body class：`vab-theme-*`，并按 background 追加 class
  - 设置 `--el-left-menu-width`

## 最小闭包（Theme/Layout 抽取必须带上）

- `src/store/modules/settings.ts`
- `library/styles/variables/vab-*-variables.module.scss`
- `library/plugins/vab.ts`（Theme 事件总线注入）

## 常见坑

- `updateTheme()` 使用 webpack 风格动态 `require`，迁移到非 webpack 构建器需要等效替代
- `useCssVar` 的导入方式依赖工程约定（自动导入 vs 显式 import）
