permission.ts 908 B

12345678910111213141516171819202122232425262728293031323334
  1. import { defineStore } from 'pinia'
  2. import type { MenuGroupItem } from '@/types/user'
  3. import { session } from '@/utils/session'
  4. /** 预留:后端 user.display 驱动菜单;当前侧栏使用 `router/localMenu` 静态配置。 */
  5. export const usePermissionStore = defineStore('permission', {
  6. state: () => ({
  7. menus: [] as MenuGroupItem[],
  8. }),
  9. actions: {
  10. initFromUserDisplay(display: MenuGroupItem[] | undefined | null): void {
  11. this.menus = display ?? []
  12. if (this.menus.length) {
  13. session.Set('menus', JSON.stringify(this.menus), true)
  14. }
  15. },
  16. hydrateFromSession(): void {
  17. const raw = session.Get('menus', true)
  18. if (raw) {
  19. try {
  20. this.menus = JSON.parse(raw) as MenuGroupItem[]
  21. } catch {
  22. this.menus = []
  23. }
  24. }
  25. },
  26. clear(): void {
  27. this.menus = []
  28. session.Del('menus')
  29. },
  30. },
  31. })