vue 树组件 vxe-tree 如何异步判断右键菜单的权限控制,异步显示隐藏菜单选项

vue 树组件 vxe-tree 如何异步判断右键菜单的权限控制,异步显示隐藏菜单选项,通过 menu-config.options 来配置右键菜单

https://vxeui.com

通过 menu-config.options.loading 来配置是否加载中

控制 menu-config.options.visible 来实现是否显示菜单

html 复制代码
<template>
  <div>
    <vxe-tree v-bind="treeOptions" v-on="treeEvents"></vxe-tree>
  </div>
</template>

<script setup>
import { reactive } from 'vue'
import { VxeUI } from 'vxe-pc-ui'

const treeOptions = reactive({
  transform: true,
  nodeConfig: {
    isHover: true,
    isCurrent: true
  },
  menuConfig: {
    options: [
      [
        { code: '1', name: '新增', loading: false, visible: true },
        { code: '2', name: '删除', prefixIcon: 'vxe-icon-delete-fill', loading: false, visible: true },
        {
          code: '3',
          name: '审批',
          loading: false,
          visible: true,
          children: [
            { code: '4', name: '通过', prefixIcon: 'vxe-icon-check', loading: false, visible: true },
            { code: '5', name: '不通过', prefixIcon: 'vxe-icon-close', loading: false, visible: true }
          ]
        },
        { code: '6', name: '查看', prefixIcon: 'vxe-icon-link', loading: false, visible: true }
      ],
      [
        {
          code: '11',
          name: '更多操作',
          loading: false,
          visible: true,
          children: [
            { code: '13', name: '编辑', prefixIcon: 'vxe-icon-feedback', loading: false, visible: true },
            { code: '14', name: '取消' }
          ]
        },
        { code: '10', name: '驳回', prefixIcon: 'vxe-icon-undo', loading: false, visible: true }
      ]
    ],
    visibleMethod ({ options }) {
      options.forEach(list => {
        list.forEach(item => {
          if (item.code === '1' || item.code === '3') {
            item.loading = true
          }
          if (item.code === '4' || item.code === '11') {
            item.loading = true
          }
        })
      })
      // 模拟后端异步
      setTimeout(() => {
        options.forEach(list => {
          list.forEach(item => {
            if (item.code === '1' || item.code === '3') {
              item.visible = false
              item.loading = false
            }
            if (item.code === '4' || item.code === '11') {
              item.visible = false
              item.loading = false
            }
          })
        })
      }, 300)
      return true
    }
  },
  data: [
    { title: '节点2', id: '2', parentId: null },
    { title: '节点3', id: '3', parentId: null },
    { title: '节点3-1', id: '31', parentId: '3' },
    { title: '节点3-2', id: '32', parentId: '3' },
    { title: '节点3-2-1', id: '321', parentId: '32' },
    { title: '节点3-2-2', id: '322', parentId: '32' },
    { title: '节点3-3', id: '33', parentId: '3' },
    { title: '节点3-3-1', id: '331', parentId: '33' },
    { title: '节点3-3-2', id: '332', parentId: '33' },
    { title: '节点3-3-3', id: '333', parentId: '33' },
    { title: '节点3-4', id: '34', parentId: '3' },
    { title: '节点4', id: '4', parentId: null },
    { title: '节点4-1', id: '41', parentId: '4' },
    { title: '节点4-1-1', id: '411', parentId: '42' },
    { title: '节点4-1-2', id: '412', parentId: '42' },
    { title: '节点4-2', id: '42', parentId: '4' },
    { title: '节点4-3', id: '43', parentId: '4' },
    { title: '节点4-3-1', id: '431', parentId: '43' },
    { title: '节点4-3-2', id: '432', parentId: '43' },
    { title: '节点5', id: '5', parentId: null }
  ]
})

const treeEvents = {
  menuClick ({ node, option }) {
    VxeUI.modal.message({
      content: `点击了${node.title} - code=${option.code}`,
      status: 'success'
    })
  }
}
</script>

https://gitee.com/x-extends/vxe-pc-ui

相关推荐
顽疲1 小时前
Java vue 养老系统源码详解:月账单 care_month_bill 与 Quartz 扣费 Job 实践
java·开发语言·vue.js·vue养老·springboot养老·java养老
毕业设计7032 小时前
(免费领源码)基于node的学生公寓管理系统06412- java、PHP、python、C#、小程序、大数据、单片机、网络工程等)
vue.js·mysql·node.js·maven·mybatis·express·b/s
古夕3 小时前
地址变了,页面是空的:一次 Vue Router 菜单切换复盘
前端·vue.js
沙漏无语7 小时前
pnpm 安装@vue-office包的幽灵依赖问题解决
前端·javascript·vue.js
雪芽蓝域zzs7 小时前
第 9 节:面积测量(测面工具)
vue.js
℘团子এ7 小时前
vue2中自定义指令的使用
前端·javascript·vue.js
℘团子এ9 小时前
vue3中自定义指令的使用
前端·javascript·vue.js
m0_5873830011 小时前
碰碰好评卡功能落地实战 从需求梳理到上线部署全流程实操指南
java·linux·服务器·前端·javascript·vue.js·人工智能
Pu_Nine_911 小时前
Vue‑Flow 从零入门实战|AI‑Agent 拓扑图开发
前端·javascript·vue.js
苏渡苇12 小时前
从零搭建 Vue 3 工程化项目:Vite + TypeScript + Pinia + Element Plus 实战
前端·vue.js·typescript