iot-ui-vue/src/views/system/Role/Detail/components/util.ts

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
}, [])
}