vue按钮权限

原生elementUI中的el-tree树形控件在点击子树后是不能获取到父节点的,需要改变其源码才行

javascript 复制代码
vue elementUI tree树形控件获取父节点ID的实例
修改源码:
情况1: element-ui没有实现按需引入打包
 node_modules\element-ui\lib\element-ui.common.js    25382行修改源码  去掉 'includeHalfChecked &&'
 // if ((child.checked || includeHalfChecked && child.indeterminate) && (!leafOnly || leafOnly && child.isLeaf)) {
 if ((child.checked || child.indeterminate) && (!leafOnly || leafOnly && child.isLeaf)) {
情况2: element-ui实现了按需引入打包
 node_modules\element-ui\lib\tree.js    1051行修改源码  去掉 'includeHalfChecked &&'
 // if ((child.checked || includeHalfChecked && child.indeterminate) && (!leafOnly || leafOnly && child.isLeaf)) {
 if ((child.checked || child.indeterminate) && (!leafOnly || leafOnly && child.isLeaf)) {

展示相应按钮

  1. 使用vuex管理权限
javascript 复制代码
// store/modules/user.js
const state = {
  permissions: [] // 权限列表,例如 ['VIEW_DASHBOARD', 'EDIT_PROFILE']
};

const mutations = {
  SET_PERMISSIONS(state, permissions) {
    state.permissions = permissions;
  }
};

const actions = {
  fetchPermissions({ commit }) {
    // 这里模拟从服务器获取权限
    const permissions = ['VIEW_DASHBOARD', 'EDIT_PROFILE'];
    commit('SET_PERMISSIONS', permissions);
  }
};

const getters = {
  hasPermission: (state) => (permission) => {
    return state.permissions.includes(permission);
  }
};

export default {
  state,
  mutations,
  actions,
  getters
};
  1. 在组件中根据权限显示按钮
javascript 复制代码
<template>
  <div>
    <button v-if="hasPermission('EDIT_PROFILE')">Edit Profile</button>
    <button v-if="hasPermission('VIEW_DASHBOARD')">View Dashboard</button>
  </div>
</template>

<script>
export default {
  computed: {
    hasPermission() {
      return this.$store.getters.hasPermission;
    }
  }
};
</script>
  1. 通过全局指令展示按钮
    可以创建一个自定义指令来根据权限动态显示或隐藏元素。

a. 创建自定义指令

javascript 复制代码
export default {
  install(Vue) {
    Vue.directive('permission', {
      bind(el, binding, vnode) {
        const permissions = binding.value;
        const userPermissions = vnode.context.$store.getters.permissions; // 从 Vuex 获取权限

        if (!permissions.some(permission => userPermissions.includes(permission))) {
          el.parentNode && el.parentNode.removeChild(el);
        }
      }
    });
  }
};

b. 在main.js中注册

javascript 复制代码
import PermissionDirective from './directives/permission';

Vue.use(PermissionDirective);

c. 在组件中使用

javascript 复制代码
<template>
  <div>
    <button v-permission="['EDIT_PROFILE']">Edit Profile</button>
    <button v-permission="['VIEW_DASHBOARD']">View Dashboard</button>
  </div>
</template>
相关推荐
Jonathan Star8 分钟前
基于 **Three.js** 开发的 3D 炮弹发射特效系统
javascript·数码相机·3d
Cache技术分享17 分钟前
241. Java 集合 - 使用 Collections 工厂类处理集合
前端·后端
Lear17 分钟前
解决Flex布局中overflow:hidden失效
前端
Heo19 分钟前
原型理解从入门到精通
前端·javascript·后端
Heo23 分钟前
通用会话控制方案
前端·javascript·后端
Heo27 分钟前
跨域问题解决方案汇总
前端·javascript·后端
Yuroo zhou30 分钟前
石油钻井、HDD、采矿:不同工况下,如何抉择您的陀螺定向短节?
前端·科技·硬件架构·钻井·采矿
shmily麻瓜小菜鸡33 分钟前
Element Plus 的 <el-table> 怎么点击请求后端接口 tableData 进行排序而不是网络断开之后还可以自己排序
前端·javascript·vue.js
二川bro1 小时前
第38节:WebGL 2.0与Three.js新特性
开发语言·javascript·webgl
xiaoxue..1 小时前
深入理解 JavaScript 异步编程:从单线程到 Promise 的完整指南
前端·javascript·面试·node.js