# 15. 代码段地图（Snippet Map）

> 目的：给后续 AI coding 的“最常用代码段”提供**稳定来源与检索方式**，直接指向文件/关键词。

## 初始化与自动加载

- `setupVab(app)`：`library/index.ts`
  - 背景 SCSS 自动加载：`require.context('./styles/background', false, /\\.scss$/)`
  - 插件自动加载：`require.context('./plugins', true, /\\.ts$/)` + `app.use(Plugins(key).default)`

## Theme（主题）

- 打开抽屉事件：`$pub('theme')`（`library/components/VabTheme/*`）
- 随机换肤事件：`$pub('random-theme')`
- 主题变量注入：`useSettingsStore().updateTheme()`（`src/store/modules/settings.ts`）
- scss module 来源：`@vab/styles/variables/vab-*-variables.module.scss`

## Plugins（全局注入/事件总线/指令）

- 事件总线注入：`$pub/$sub/$unsub`（`library/plugins/vab.ts`）
- 权限指令：`v-permissions`（`library/plugins/directive.ts`）
- 权限判断：`hasPermission()`（`src/utils/permission.ts`）

## Icons（SVG）

- SVG 自动加载：`require.context('.', true, /\\.svg$/)`（`src/icon/index.ts`）

## Router/Routes

- 后端路由转换：`convertRouter()`（`src/utils/routes.ts`）
- 路由模式切换：`authentication === 'all'`（`src/store/modules/routes.ts`）
- 过滤可访问路由：`filterRoutes([...constantRoutes, ...routes], control)`（`src/store/modules/routes.ts`）
- 重置路由：`resetRouter(accessRoutes)`（`src/store/modules/routes.ts` / `src/router`）

## Router Permissions

- 路由守卫入口：`setupPermissions(router)`（`src/router/permissions.ts`）
- 白名单/登录拦截开关：`routesWhiteList` / `loginInterception` / `authentication`（`src/router/permissions.ts` / `src/config`）
- 更新标题：`document.title = getPageTitle(to.meta.title)`（`src/router/permissions.ts`）

## Config

- 配置聚合入口：`module.exports = { ...cli, ...setting, ...theme, ...network }`（`src/config/index.js`）
- 路由/登录关键开关：`authentication/loginInterception/routesWhiteList/supportVisit`（`src/config/setting.config.js`）
- 菜单关键开关：`defaultOpeneds/uniqueOpened/openFirstMenu`（`src/config/setting.config.js`）
- 网络请求关键开关：`baseURL/successCode/statusName/messageName/requestTimeout`（`src/config/net.config.js`）

## Router View

- 刷新当前视图缓存：`$sub('reload-router-view', ...)`（`library/components/VabRouterView/index.vue`）

## Menu

- 点击当前菜单刷新：`$pub('reload-router-view')`（`library/components/VabMenu/components/VabMenuItem.vue`）

## Refresh

- 刷新按钮触发：`$pub('reload-router-view')`（`library/components/VabRefresh/index.vue`）

## Search

- 打开搜索快捷键：`ctrlKey/metaKey + 'k'`（`library/components/VabSearch/index.vue`）
- 历史记录 key：`vab_search_history`（`library/components/VabSearch/index.vue`）

## Lock

- 锁屏开关：`handleLock()` / `handleUnLock()`（`library/components/VabLock/index.vue`）
- 直接操作侧边栏：`document.querySelector('.vab-side-bar')`（`library/components/VabLock/index.vue`）

## Notice

- 拉取通知：`getList()`（`library/components/VabNotice/index.vue` / `src/api/notice.ts`）

## Language

- 语言切换：`useI18n().locale` / `changeLanguage(`（`library/components/VabLanguage/index.vue` / `src/store/modules/settings.ts`）
- 切换后更新标题：`getPageTitle(`（`library/components/VabLanguage/index.vue` / `src/utils/pageTitle.ts`）

## FullScreen

- 全屏切换：`useFullscreen().toggle`（`library/components/VabFullScreen/index.vue`）

## Footer

- 页脚标题来源：`settings.title`（`library/components/VabFooter/index.vue` / `src/store/modules/settings.ts`）

## Nav/Breadcrumb

- 顶部导航聚合：`<vab-nav />`（`library/components/VabNav/index.vue`）
- 面包屑生成：`handleMatched(`（`library/components/VabBreadcrumb/index.vue` / `src/utils/routes.ts`）

## Column Bar

- Column 二级菜单：`partialRoutes` + `defaultOpeneds`（`library/components/VabColumnBar/index.vue` / `src/store/modules/routes.ts` / `src/config`）

## Avatar/Logo

- 用户下拉退出：`case 'logout'` + `toLoginRoute(route.fullPath)`（`library/components/VabAvatar/index.vue` / `src/utils/routes.ts`）
- Logo/Title 来源：`logo/title`（`library/components/VabLogo/index.vue` / `src/store/modules/settings.ts`）

## Link/Fold/Card

- 外链/内链切换：`isExternal(props.to)`（`library/components/VabLink/index.vue` / `src/utils/validate.ts`）
- 折叠按钮：`toggleCollapse`（`library/components/VabFold/index.vue` / `src/store/modules/settings.ts`）
- Skeleton 卡片：`el-skeleton`（`library/components/VabCard/index.vue`）

## User/Auth

- 登出重置闭包：`resetAll()`（`src/store/modules/user.ts`，联动 acl/routes/tabs/resetRouter/removeToken）

## API/Request

- axios 实例与拦截器：`axios.create` / `instance.interceptors`（`src/utils/request.ts`）
- 401/402/403 分支：`case 401` / `case 402` / `case 403`（`src/utils/request.ts`）
- token 注入：`Authorization: Bearer`（`src/utils/request.ts`）
