2019-03-11菜单权限和按钮权限

权限菜单思路(根据路由来匹配,在角色保存的时候按照后台要的格式传过去)
https://www.jianshu.com/p/65f1b7f31c6d

vue 权限按钮
https://www.cnblogs.com/xifengxiaoma/p/9649895.html

<el-tree
v-loading=“loading”
element-loading-text=“拼命加载中,请耐心等待…”
element-loading-spinner=“el-icon-loading”
:props=“defaultProps”
:data=“menuData”
show-checkbox
node-key=“id”
accordion
@check=“handleCheckChange”
ref=“tree”
:default-checked-keys=‘resourceCheckedKey’
>

handleCheckChange(data,checked) {
//checked.checkedKeys 选中的节点id数组
//checked.halfCheckedKeys 半选中节点id数组
let ids=[];
ids=checked.halfCheckedKeys.concat(checked.checkedKeys);//选中节点和半选中节点所有的id
this.KaTeX parse error: Expected 'EOF', got '}' at position 37: …s) }̲, 全…http.get(api.MUNElIST).then((res) => {
if(res.data.status200){
let result=res.data.data.sort((a,b)=>a.sort - b.sort);
if(result.length>0){
result.forEach((value)=>{
if(!value.parentId){
if(value.buttons){
this.getButton(result)
}
//一级菜单
this.menuList.push(value);
//二级菜单
this.menuListData(result,value);
}
});
return this.menuList
}else {
this. m e s s a g e ( t y p e : ′ e r r o r ′ , m e s s a g e : r e s . d a t a . m s g ) ; t h i s . message({ type: &#x27;error&#x27;, message:res.data.msg }); this. message(type:error,message:res.data.msg);this.router.push({name:‘login’})
}
}
});
},
//递归菜单
menuListData(data,value){
value.children=[];
data.forEach((item)=>{
//二级菜单
if(value.menuId
item.parentId){
value.children.push(item);
this.menuListData(data,item)
}
});
if(value.children.length0) delete value.children;
},
getButton(data){
//存储按钮对应的数据
*sessionStorage.removeItem(‘buttons’);
sessionStorage.setItem(“buttons”,JSON.stringify(data));
},
2.公共方法里面写
//全局js
exports.install = function (Vue, options) {
//获取按钮权限
Vue.prototype.BtnsData = function (url,bts){
let butData=JSON.parse(sessionStorage.getItem(“buttons”));
if(butData.length>0){
butData.forEach((value)=>{
if(value.url
url){
value.buttons.forEach((item)=>{
if(item.menuName){
bts.push(item.menuName)
}
})
}
});
}
};
};
3.,每个页面中调用并且在页面中判断(自定义一个btns数组并且判断)
//this. r o u t e . p a t h 当 前 u r l / / t h i s . b t n s 当 前 的 按 钮 t h i s . B t n s D a t a ( t h i s . route.path当前url //this.btns 当前的按钮 this.BtnsData(this. route.pathurl//this.btnsthis.BtnsData(this.route.path,this.btns);//获取按钮权限
<i class=“fa fa-plus” @click=“add” v-if=“btns.indexOf(‘添加’)!=-1”>添加

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Vue3 中,你可以通过自定义指令或组件的方式来封装权限菜单权限按钮。 1. 自定义指令 你可以通过自定义指令来实现权限按钮的封装。例如,你可以创建一个名为 `v-permission` 的指令,然后在需要控制权限按钮上使用该指令。在指令中,你可以通过判断用户是否拥有相应的权限来控制按钮的显示或隐藏。 示例代码: ```vue <template> <button v-permission="'edit'">编辑</button> </template> <script> export default { directives: { permission: { mounted(el, binding) { const permission = binding.value; const hasPermission = checkPermission(permission); if (!hasPermission) { el.style.display = 'none'; } } } } } </script> ``` 2. 组件 你也可以通过组件的方式来封装权限菜单权限按钮。例如,你可以创建一个名为 `PermissionMenu` 的组件,然后在该组件中根据用户是否拥有相应的权限来动态生成菜单。 示例代码: ```vue <template> <ul> <li v-for="item in menu" :key="item.path"> <router-link v-if="hasPermission(item.permission)" :to="item.path">{{ item.title }}</router-link> </li> </ul> </template> <script> export default { data() { return { menu: [ { path: '/', title: '首页', permission: 'home' }, { path: '/user', title: '用户管理', permission: 'user' }, { path: '/role', title: '角色管理', permission: 'role' } ] } }, methods: { hasPermission(permission) { return checkPermission(permission); } } } </script> ``` 无论是自定义指令还是组件,都需要在代码中实现权限的判断逻辑,以保证权限的正确控制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值