• vue3 自定义指令控制按钮权限


    经过1个周的摸索和查阅资料,终于搞定VUE3中自定义指令,实现按钮级别的权限控制。当然,只是简单的对按钮进行隐藏和删除的dom操作比较容易,一直纠结的是当按钮无权限时,不是直接删除当前dom元素(button按钮),这样用户体验不好,让人感觉没有这个功能。为了提高用户体验,当该按钮无权使用时,使用el-tooltip功能进行提醒。以下是个人的做法,是否有弊端和不足,或者各位高手有更优的方案,欢迎指导和赐教!

    1、总体效果如下:

     

     

    2、permissionlist组件中的按钮设置为:增加、修改和删除三个按钮,为了让button按钮disabled时,可以让tooltip继续有效,在button外层加了个span。为了通过自定义指令中方便控制tooltip,vue3好像必须把自定义指令放在tooltip的外层,所以又在tooltip外层加了个span以放在自定义指令v-has。

    复制代码
    
    
     
    复制代码

    3、自定义指令组件(utils/haspermissions.js)

    复制代码
    export const hasPermission = {
        install(Vue) {
            //自定义指令v-has:
            Vue.directive('has', {
                mounted(el, binding, vnode) {
                    if (!checkPermission(binding.value)) {
                        let tooltipNode = vnode.children.find((childrenCmpt) => childrenCmpt.component?.type.name == 'ElTooltip')
                        tooltipNode.component.props.disabled = false
                        el.querySelector("button").setAttribute("disabled", true)
                    }
                },
            });
            //权限检查方法
            function checkPermission(value) {
                let isExist = false;
                let userlogin = JSON.parse(sessionStorage.getItem("userlogin") || "[]");
                let buttonArr = userlogin.haspermissions
                //判断是否按钮有权限
                if (buttonArr.includes(value)) {
                    isExist = true;
                }
                return isExist;
            }
        }
    };
    export default hasPermission;
    复制代码

    4、将自定义指令加入vue3的全局指令,以方便所有组件中可以使用(在main.js中引入自定义指令组件然后use注册)。

     

  • 相关阅读:
    git基本操作(配图超详细讲解)
    如何在终端里面使用ping来查局域网活动ip
    crypto:rsarsa
    第0章 前言
    Linux磁盘挂载脚本
    数据挖掘与分析——特征选择
    极简的MapReduce实现
    技术引领未来, IDC TechScape中国数据安全发展路线图首发
    ElasticSearch之结构化搜索
    GreenPlum扩容节点
  • 原文地址:https://www.cnblogs.com/ytwqg/p/16746934.html