feat: add directive[v-action]
This commit is contained in:
33
resources/admin/directives/permission/action.ts
Normal file
33
resources/admin/directives/permission/action.ts
Normal file
@@ -0,0 +1,33 @@
|
||||
import { useUserStore } from '/admin/stores/modules/user'
|
||||
import { MenuType } from '/admin/enum/app'
|
||||
function checkAction(el: any, action: any) {
|
||||
if (action.value && typeof action.value === 'string') {
|
||||
const userStore = useUserStore()
|
||||
const permissions = userStore.getPermissions
|
||||
|
||||
action = action.value.replace('@', '.').toLowerCase()
|
||||
const hasAction = permissions?.some(permission => {
|
||||
if (permission.type === MenuType.Button_Type) {
|
||||
const a: string = permission.module + '.' + permission.permission_mark.replace('@', '.')
|
||||
return action === a.toLowerCase()
|
||||
}
|
||||
})
|
||||
|
||||
if (!hasAction) {
|
||||
// el.style.display = 'none'
|
||||
el.parentNode && el.parentNode.removeChild(el)
|
||||
}
|
||||
} else {
|
||||
throw new Error(`need action! Like v-action="module.controller.action" || v-action="module@controller@action" `)
|
||||
}
|
||||
}
|
||||
|
||||
export default {
|
||||
mounted(el: any, binding: any) {
|
||||
checkAction(el, binding)
|
||||
},
|
||||
|
||||
updated(el: any, binding: any) {
|
||||
checkAction(el, binding)
|
||||
},
|
||||
}
|
Reference in New Issue
Block a user