Skip to content

状态管理 ​

Pinia 在 admin/src/store/index.ts 创建并统一导出各模块。main.ts 使用 createPinia() 后 app.use(pinia)。

模块一览 ​

Store文件职责
useUserStoremodules/user.store.tsToken、管理员信息、权限码、菜单、动态路由标记
useAppStoremodules/app.store.ts站点配置、移动端标识、侧栏折叠、路由显示刷新
useSettingStoremodules/settings.store.ts布局与主题偏好(侧栏宽度、多标签、亮暗色等),持久化到缓存
useMultipleTabsStoremodules/multipleTabs.store.ts多标签列表与 keep-alive 缓存名;默认导出,业务里常 import useTabsStore from '…'
useRealtimeStoremodules/realtime.store.ts实时通道连接状态;登录后 connect(),清登录态时断开

useUserStore ​

主要状态:token、userInfo、permissions、menus、routes、isRoutesInited。

主要方法:login、logout、getUserInfo、fetchMenus、refreshToken、setRoutes、hasPermission / hasAnyPermission / hasAllPermissions、resetState。

登录只写入 token 与用户信息;动态路由由权限守卫在首次导航时挂载。

useAppStore ​

  • getConfig():拉取全局配置,写入 config
  • getImageUrl(url):开发环境返回相对路径走 proxy;生产按 OSS / 站点域名 / VITE_APP_API_URL / 当前源拼接

useSettingStore ​

字段来自 defaultSetting 与本地缓存(SETTING_KEY):如 layoutMode、themeMode、theme 及 success/warning 等色、侧栏主题、是否开启多标签等。

  • setSetting({ key, value }):改单项并写缓存
  • applyThemeMode() / setTheme(isDark) / resetTheme():驱动 utils/theme.ts 与 html 上的 dark 类

使用注意 ​

Store 是全局单例,不要在里面塞仅某一页临时的表单草稿(放组件 ref/reactive)。跨页且会刷新仍需保留的偏好,走 useSettingStore 的缓存机制。

基于 MIT 许可发布