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>
相关推荐
狸克先生2 分钟前
如何用AI写小说(二):Gradio 超简单的网页前端交互
前端·人工智能·chatgpt·交互
sinat_384241094 分钟前
在有网络连接的机器上打包 electron 及其依赖项,在没有网络连接的机器上安装这些离线包
javascript·arcgis·electron
baiduopenmap16 分钟前
百度世界2024精选公开课:基于地图智能体的导航出行AI应用创新实践
前端·人工智能·百度地图
loooseFish24 分钟前
小程序webview我爱死你了 小程序webview和H5通讯
前端
小牛itbull28 分钟前
ReactPress vs VuePress vs WordPress
开发语言·javascript·reactpress
请叫我欧皇i37 分钟前
html本地离线引入vant和vue2(详细步骤)
开发语言·前端·javascript
533_39 分钟前
[vue] 深拷贝 lodash cloneDeep
前端·javascript·vue.js
guokanglun1 小时前
空间数据存储格式GeoJSON
前端
GIS瞧葩菜1 小时前
局部修改3dtiles子模型的位置。
开发语言·javascript·ecmascript
zhang-zan1 小时前
nodejs操作selenium-webdriver
前端·javascript·selenium