generated from Leo_Ding/web-template
68 lines
2.1 KiB
JavaScript
68 lines
2.1 KiB
JavaScript
/**
|
|
* @name Action
|
|
* @description 权限
|
|
* @example v-action:action || v-action="'action'" || v-action="['action1', 'action2']"
|
|
* @type {{mounted: actionDirective.mounted}}
|
|
*/
|
|
|
|
import router from '@/router'
|
|
|
|
const action = {
|
|
mounted: (el, binding) => {
|
|
// const route = router.currentRoute.value
|
|
// const actions = route?.meta?.actions ?? []
|
|
// const actionName = binding.arg || binding.value
|
|
//
|
|
// if (route?.meta?.actions.includes('*')) return
|
|
//
|
|
// if (!actionName) return
|
|
// if (Array.isArray(actionName)) {
|
|
// // 多个权限
|
|
// if (!actions.some((value) => actionName.includes(value))) {
|
|
// ;(el.parentNode && el.parentNode.removeChild(el)) || (el.style.display = 'none')
|
|
// }
|
|
// } else {
|
|
// // 一个权限,完全匹配
|
|
// if (!actions.includes(actionName)) {
|
|
// ;(el.parentNode && el.parentNode.removeChild(el)) || (el.style.display = 'none')
|
|
// }
|
|
// }
|
|
const { value: elActions } = binding
|
|
const route = router.currentRoute.value
|
|
const currentActions = route?.meta?.actions ?? []
|
|
const actions = typeof value === 'string' ? elActions.split() : elActions
|
|
|
|
if (currentActions.includes('*')) return
|
|
|
|
if (!currentActions.some((action) => actions.includes(action))) {
|
|
el.remove() || (el.style.display = 'none')
|
|
}
|
|
},
|
|
}
|
|
/**
|
|
* 校验权限
|
|
* @param {string | array} actions
|
|
*/
|
|
const checkAction = (actions = '') => {
|
|
const route = router.currentRoute.value
|
|
const currentActions = route?.meta?.actions ?? []
|
|
actions = typeof actions === 'string' ? actions.split() : actions
|
|
|
|
if (currentActions.includes('*')) {
|
|
return true
|
|
}
|
|
|
|
if (!currentActions.some((action) => actions.includes(action))) {
|
|
return false
|
|
}
|
|
|
|
return true
|
|
}
|
|
|
|
export const setupActionDirective = (app) => {
|
|
app.directive('action', action)
|
|
app.config.globalProperties.$checkAction = checkAction
|
|
return app
|
|
}
|
|
export default setupActionDirective
|