项目场景:
普通按钮或者组件按钮,都可。
问题描述
判断用户是否拥有新增、编辑、删除、查询等功能的按钮权限。
具体操作:
- 先获取权限集合,存储到vxe中------一般都是在接口里面获取
- 创建js页面,封装函数
- 创建子组件页面,封装button组件
- 再到所需的父组件页面引用子组件页面
实现:
- 举个例子:在首页中拿个函数,把权限存储到vxe中
initData(){
let arr = [
"dept:shareDept:add",
"dept:shareDept:edit"
]
store.commit("setPerms",arr)
}
2. 在src目录下创建个目录[permission],再创个index.js文件
/*
* index.js
*/
import store from '@/store'
export function hasPermission(perms){
let hasPermission = false; //决定按钮的禁用启用
let permissions = store.state.index.perms; //某某js页面的变量,此变量包含所有权限集合
for (let i = 0, len = permissions.length; i < len; i++) {
if(permissions[i]===perms){ //permissions是否含有所传来的perms
hasPermission = true; //启用
break;
}
}
return hasPermission
}
//vxe页面
export default{
state: {
perms:[]
},
getters: {
},
mutations: {
setPerms(state,perms){
state.perms = perms
console.log(state.perms);
}
},
actions: {
},
modules: {
}
}
3.在components创建KtButton页面,用来封装按钮组件
<!-- KtButton页面 -->
<template>
<el-button
:size="size"
:type="type"
:plain="plain"
:round="round"
:icon="icon"
:loading="loading"
:disabled="!hasPerms(perms)"
@click="handleClick"
>
{{label}}
</el-button>
</template>
<script>
import {hasPermission} from "@/permission/index.js"
export default{
name:"KtButton",
props:{
label:{ //按钮显示文本
type:String,
default:""
},
size:{ //按钮尺寸
type:String,
default:"mini"
},
type:{ //按钮类型
type:String,
default:null
},
plain:{ //按钮镂空
type:Boolean,
default:false
},
round:{ //按钮圆角
type:Boolean,
default:false
},
icon:{ //按钮图标
type:String,
default:""
},
loading:{ //按钮加载状态
type:Boolean,
default:false
},
perms:{ //按钮权限标识,外部使用者传入
type:String,
default:null
},
disabled:{ //按钮是否禁用
type:Boolean,
default:false
}
},
data(){
return{}
},
methods:{
//按钮事件
handleClick(){
this.$emit("click",{})
},
//是否禁用的函数
hasPerms(perms){
console.log(perms);
return hasPermission(perms) & !this.$props.disabled
}
}
}
</script>
4. 在所需页面使用按钮
<template>
<div>
<!-- 按钮 -->
<kt-button label="新增" perms="dept:shareDept:add" type="success" plain />
<kt-button label="搜索" perms="dept:shareDept:search" type="primary" />
<kt-button label="编辑" perms="dept:shareDept:edit" type="primary" plain />
</div>
</template>
<script>
import KtButton from "@/components/KtButton"//引用按钮组件
export default{
components:{
KtButton
},
}
</script>
效果:
只存粗了新增和编辑权限,没有查询权限,为禁用.....
总结:
封装按钮组件,把所有属性都写了,避免有些页面需要这个属性有些页面不需要;索性全部都加上,需要某些属性的在引用的按钮组件填写就好了。
这篇文章应该是能看得懂怎么写哈,步骤也写出来了,再不懂就锤系....
文章来源地址https://www.toymoban.com/news/detail-495698.html文章来源:https://www.toymoban.com/news/detail-495698.html
到了这里,关于【vue】按钮权限的实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!