41 lines
1.1 KiB
TypeScript
41 lines
1.1 KiB
TypeScript
import type {Ref} from "vue";
|
|
import {watch} from "vue";
|
|
|
|
const handlePermissionsMap = (data: any, map: Map<string, any>, parentId: string[] = []) => {
|
|
data.forEach((item: any) => {
|
|
if (item.children) {
|
|
handlePermissionsMap(item.children,map, parentId.concat(item.id) )
|
|
} else {
|
|
map.set(item.id, {
|
|
parentIds: parentId,
|
|
name: item.name
|
|
})
|
|
}
|
|
})
|
|
}
|
|
|
|
export const useIndirectMenusMap = (tableData: Ref<any[]>) => {
|
|
const PermissionsMap = ref<Map<string, any>>(new Map())
|
|
|
|
watch(() => tableData.value, () => {
|
|
PermissionsMap.value.clear()
|
|
if (tableData.value?.length) {
|
|
handlePermissionsMap(tableData.value, PermissionsMap.value)
|
|
}
|
|
}, { immediate: true})
|
|
|
|
return {
|
|
PermissionsMap
|
|
}
|
|
}
|
|
|
|
export const permissionsGranted = (data: any[]) => {
|
|
return data.reduce((prev,current) => {
|
|
let ids = current.granted ? [...prev, current.id] : prev
|
|
if (current.children) {
|
|
const _ids = permissionsGranted(current.children)
|
|
ids = ids.concat(_ids)
|
|
}
|
|
return ids
|
|
}, [])
|
|
} |