根据登陆账户的 userId,从接口获取菜单/按钮数据信息,然后菜单就根据数据渲染,而按钮权限就根据当前选中的菜单,获取到按钮权限数据,用指令的方式实现按钮的展示。现在具体说说指令的写法:
因为要掌控每个按钮的展示与否,所以每个按钮都要有一个唯一标识(至少同一菜单下的按钮的标识要唯一) ,同时还要有当前菜单所有的按钮数据。这就涉及到 动态参数 、 传值。
JS:
Vue.directive('auth', {
bind: function (el, binding) {
if (!binding.value) return false;
let btns = binding.value;
if (!_.isArray(btns)) return false;
let currentBtn = btns.filter(item => item.code === binding.arg);
if (currentBtn.length === 0) {
el.setAttribute('style', 'display:none;')
}
}
})
HTML:
<!-- v-auth:按钮唯一标识="按钮数据" -->
<el-button type="primary" @click="onExportExcel"
v-auth:excel="currentMenu">
导出Excel</el-button>
其他:
如果菜单数据是动态变化的。那么建议采用下面这种,加上 update 。
Vue.directive('auth', function (el, binding) {
if (!binding.value) return false;
let btns = binding.value;
if (!_.isArray(btns)) return false;
let currentBtn = btns.filter(item => item.code === binding.arg);
if (currentBtn.length === 0) {
el.setAttribute('style', 'display:none;')
}
})