状态管理
XYGo Admin 2025-02-20 82 次阅读
Pinia 3 状态管理与持久化策略
状态管理
概述
项目使用 Pinia 3 + pinia-plugin-persistedstate 进行状态管理,Store 文件位于 web/src/store/modules/。
核心 Store
| Store | 文件 | 说明 |
|---|---|---|
| useUserStore | modules/user.ts |
后台管理员状态(Token、用户信息、语言、锁屏) |
| useMemberStore | modules/member.ts |
前台会员状态(独立 Token、会员信息) |
| useSiteStore | modules/site.ts |
站点信息(站名、Logo、主题色、ICP) |
| useMenuStore | modules/menu.ts |
后台菜单状态 |
| useSettingStore | modules/setting.ts |
系统设置(主题、布局、颜色) |
| useWorktabStore | modules/worktab.ts |
工作标签页状态 |
| useTableStore | modules/table.ts |
表格配置状态 |
| useMemberMenuStore | modules/memberMenu.ts |
前台会员菜单 |
使用示例
typescript
import { useUserStore } from '@/store/modules/user'
const userStore = useUserStore()
// 读取状态
console.log(userStore.token)
console.log(userStore.userInfo)
// 修改状态
userStore.setToken('new-token')
userStore.setUserInfo({ username: 'admin' })
// 清除状态(登出)
userStore.logout()
持久化策略
使用 StorageKeyManager 生成版本化存储键:
格式:sys-v{version}-{storeId}
示例:sys-v3.0-user
支持跨版本数据迁移,版本升级时自动清理旧数据。
typescript
// store/index.ts
import { createPinia } from 'pinia'
import piniaPluginPersistedstate from 'pinia-plugin-persistedstate'
const pinia = createPinia()
pinia.use(piniaPluginPersistedstate)
前后台 Token 隔离
- 后台管理员 Token 存储在
useUserStore,通过Authorization: Bearer传递 - 前台会员 Token 存储在
useMemberStore,通过Xy-User-TokenHeader 传递 - 两套 Token 完全独立,互不影响