feat: 添加 Permission Store 实现权限数据管理
This commit is contained in:
@@ -0,0 +1,91 @@
|
||||
import { defineStore } from 'pinia'
|
||||
|
||||
export interface MenuItem {
|
||||
id: number
|
||||
name: string
|
||||
path: string
|
||||
icon?: string
|
||||
parentId?: number
|
||||
sort: number
|
||||
children?: MenuItem[]
|
||||
}
|
||||
|
||||
interface PermissionState {
|
||||
roles: string[]
|
||||
permissions: string[]
|
||||
menus: MenuItem[]
|
||||
loaded: boolean
|
||||
}
|
||||
|
||||
export const usePermissionStore = defineStore('permission', {
|
||||
state: (): PermissionState => ({
|
||||
roles: [],
|
||||
permissions: [],
|
||||
menus: [],
|
||||
loaded: false
|
||||
}),
|
||||
|
||||
getters: {
|
||||
hasRole: (state) => (role: string | string[]) => {
|
||||
if (Array.isArray(role)) {
|
||||
return role.some(r => state.roles.includes(r))
|
||||
}
|
||||
return state.roles.includes(role)
|
||||
},
|
||||
|
||||
hasPermission: (state) => (permission: string | string[]) => {
|
||||
if (Array.isArray(permission)) {
|
||||
return permission.some(p => state.permissions.includes(p))
|
||||
}
|
||||
return state.permissions.includes(permission)
|
||||
}
|
||||
},
|
||||
|
||||
actions: {
|
||||
setPermissionData(data: {
|
||||
roles: string[]
|
||||
permissions: string[]
|
||||
menus: MenuItem[]
|
||||
}) {
|
||||
this.roles = data.roles
|
||||
this.permissions = data.permissions
|
||||
this.menus = data.menus
|
||||
this.loaded = true
|
||||
|
||||
this.saveToStorage()
|
||||
},
|
||||
|
||||
clearPermissionData() {
|
||||
this.roles = []
|
||||
this.permissions = []
|
||||
this.menus = []
|
||||
this.loaded = false
|
||||
|
||||
localStorage.removeItem('permission')
|
||||
},
|
||||
|
||||
saveToStorage() {
|
||||
const data = {
|
||||
roles: this.roles,
|
||||
permissions: this.permissions,
|
||||
menus: this.menus
|
||||
}
|
||||
localStorage.setItem('permission', JSON.stringify(data))
|
||||
},
|
||||
|
||||
initFromStorage() {
|
||||
const stored = localStorage.getItem('permission')
|
||||
if (stored) {
|
||||
try {
|
||||
const data = JSON.parse(stored)
|
||||
this.roles = data.roles || []
|
||||
this.permissions = data.permissions || []
|
||||
this.menus = data.menus || []
|
||||
this.loaded = true
|
||||
} catch (error) {
|
||||
console.error('从 localStorage 恢复权限数据失败:', error)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
Reference in New Issue
Block a user