模块展示权限控制

/**
 * 组件增加belongTo属性后会获取归属模块状态码 0正常 1不显示
 *
 */
Vue.mixin({
    beforeCreate(){
        let opt = this.$options,attrs=this.$attrs,module=opt.belongTo || attrs.belongTo;
        opt.computed= opt.computed ||{};

        if(module){
             opt.computed.modules=mapState({modules:state => state.restriction.modules}).modules;
             opt.computed.module=()=>{ return module};
             opt.computed.moduleStateCode=()=>{ return this.modules[this.module] || 0};
             // 这里的originalRender实际上取到的是opt.__proto__.render,给opt.render赋值会遮蔽原型上的render
// 在Vue单文件组件打包过程中被vue-loader编译时,tempalte就被输出为render函数
VueComponent的$option继承了我们定义的组件选项对象,所以这里才能够在beforeCreate阶段取到render
             let originalRender=opt.render;
             opt.render=function () {
                    let  _vm = this;return _vm.moduleStateCode == 1 ?  _vm._e() : originalRender.apply(this,[].slice.call(arguments));
             }
        }
    },
    mounted(){
        let module=this.$options.belongTo || this.$attrs.belongTo;
        if(module){
           this.$watch("moduleStateCode",(val)=>{})
        }
    }
});

组件增加自定义属性:belongTo 在组件选项里或添加在$attr里

posted on 2019-03-12 15:14  natsu07  阅读(196)  评论(0编辑  收藏  举报