状态管理
Pinia 在 admin/src/store/index.ts 创建并统一导出各模块。main.ts 使用 createPinia() 后 app.use(pinia)。
模块一览
| Store | 文件 | 职责 |
|---|---|---|
useUserStore | modules/user.store.ts | Token、管理员信息、权限码、菜单、动态路由标记 |
useAppStore | modules/app.store.ts | 站点配置、移动端标识、侧栏折叠、路由显示刷新 |
useSettingStore | modules/settings.store.ts | 布局与主题偏好(侧栏宽度、多标签、亮暗色等),持久化到缓存 |
useMultipleTabsStore | modules/multipleTabs.store.ts | 多标签列表与 keep-alive 缓存名;默认导出,业务里常 import useTabsStore from '…' |
useRealtimeStore | modules/realtime.store.ts | 实时通道连接状态;登录后 connect(),清登录态时断开 |
useUserStore
主要状态:token、userInfo、permissions、menus、routes、isRoutesInited。
主要方法:login、logout、getUserInfo、fetchMenus、refreshToken、setRoutes、hasPermission / hasAnyPermission / hasAllPermissions、resetState。
登录只写入 token 与用户信息;动态路由由权限守卫在首次导航时挂载。
useAppStore
getConfig():拉取全局配置,写入configgetImageUrl(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 的缓存机制。