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>
相关推荐
alphardex3 分钟前
一个普通魔法师的 2025 年度总结
前端·年终总结
德莱厄斯14 分钟前
AI 纪元 3 年,2025 论前端程序员自救
前端·ai编程·vibecoding
WX-bisheyuange25 分钟前
基于Spring Boot的社团管理系统的设计与实现
前端·javascript·vue.js·毕业设计
橙某人34 分钟前
LogicFlow 插件魔改实录:手把手教你重写动态分组(DynamicGroup)🛠️
前端·javascript·vue.js
阿蔹44 分钟前
UI测试自动化-Web-Python-Selenium-2-元素操作、浏览器操作
前端·python·selenium·ui·自动化
Irene19911 小时前
Vue 3 中编写单文件组件(SFC)的编译时语法糖:<script setup>
vue.js
2501_944446001 小时前
Flutter&OpenHarmony状态管理方案详解
开发语言·javascript·flutter
T_Donna1 小时前
【问题解决】react native: cli.init is not a function
javascript·react native·react.js
谎言西西里1 小时前
React hooks 之 一篇文章掌握 useState 和 useEffect 的核心机制
前端·react.js
qx091 小时前
html中使用vue3+elementplus
javascript·vue.js·html