vue vxe-context-menu 如何给任意组件使用右键菜单,全局右键菜单

vue vxe-context-menu 如何给任意组件使用右键菜单,全局右键菜单,支持任意组件中直接调用右键菜单

打开右键菜单:VxeUI.contextMenu.open({ options })

事件触发右键菜单:VxeUI.contextMenu.openByEvent(event, { options })

关闭右键菜单:VxeUI.contextMenu.close()

https://vxeui.com

任意组件调用右键菜单

通过方法调用即可,open 需要自己计算好坐标,openByEvent 可以不用自己计算,支持在 click 或 context-menu 事件中使用

html 复制代码
<template>
  <div>
    <vxe-button @contextmenu="showMenuEvent1">open 显示</vxe-button>
    <vxe-button @contextmenu="showMenuEvent2">openByEvent 显示</vxe-button>
  </div>
</template>

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

const showMenuEvent1 = ({ $event }) => {
  const x = $event.clientX
  const y = $event.clientY
  VxeUI.contextMenu.open({
    x,
    y,
    options: [
      [
        { code: '11', name: '新增' },
        { code: '22', name: '删除' },
        {
          code: '33',
          name: '审批',
          children: [
            { code: '44', name: '通过' },
            { code: '55', name: '不通过' }
          ]
        },
        { code: '66', name: '查看' }
      ],
      [
        {
          code: '111',
          name: '更多操作',
          children: [
            { code: '113', name: '编辑' },
            { code: '114', name: '取消' }
          ]
        },
        { code: '110', name: '驳回' }
      ]
    ],
    events: {
      optionClick ({ option }) {
        VxeUI.modal.message({
          content: `点击了 ${option.code}`,
          status: 'success'
        })
      }
    }
  })
}

const showMenuEvent2 = ({ $event }) => {
  VxeUI.contextMenu.openByEvent($event, {
    options: [
      [
        { code: '11', name: '新增' },
        { code: '22', name: '删除' },
        {
          code: '33',
          name: '审批',
          children: [
            { code: '44', name: '通过' },
            { code: '55', name: '不通过' }
          ]
        },
        { code: '66', name: '查看' }
      ],
      [
        {
          code: '111',
          name: '更多操作',
          children: [
            { code: '113', name: '编辑' },
            { code: '114', name: '取消' }
          ]
        },
        { code: '110', name: '驳回' }
      ]
    ],
    events: {
      optionClick ({ option }) {
        VxeUI.modal.message({
          content: `点击了 ${option.code}`,
          status: 'success'
        })
      }
    }
  })
}
</script>

树组件使用右键菜单

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: '新增' },
        { code: '2', name: '删除', prefixIcon: 'vxe-icon-delete-fill' },
        {
          code: '3',
          name: '审批',
          children: [
            { code: '4', name: '通过', prefixIcon: 'vxe-icon-check' },
            { code: '5', name: '不通过', prefixIcon: 'vxe-icon-close' }
          ]
        },
        { code: '6', name: '查看', prefixIcon: 'vxe-icon-link' }
      ],
      [
        {
          code: '11',
          name: '更多操作',
          children: [
            { code: '13', name: '编辑', prefixIcon: 'vxe-icon-feedback' },
            { code: '14', name: '取消' }
          ]
        },
        { code: '10', name: '驳回', prefixIcon: 'vxe-icon-undo' }
      ]
    ]
  },
  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

相关推荐
跳动的梦想家h13 分钟前
环境配置 + AI 提效双管齐下
java·vue.js·spring
Mr Xu_1 小时前
Vue 3 中 watch 的使用详解:监听响应式数据变化的利器
前端·javascript·vue.js
一 乐2 小时前
校园二手交易|基于springboot + vue校园二手交易系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端
科技D人生2 小时前
Vue.js 学习总结(20)—— Vue-Office 实战:word、pdf、excel、ppt 多种文档的在线预览
vue.js·word·vue-pdf·stylesheet·docx-preview·vue-office
vx1_Biye_Design2 小时前
基于Spring Boot+Vue的学生管理系统设计与实现-计算机毕业设计源码46223
java·vue.js·spring boot·spring·eclipse·tomcat·maven
vx_Biye_Design2 小时前
基于Spring Boot+vue的湖北旅游景点门票预约平台的设计--毕设附源码29593
java·vue.js·spring boot·spring cloud·servlet·eclipse·课程设计
hedley(●'◡'●)2 小时前
基于cesium和vue的大疆司空模仿程序
前端·javascript·vue.js·python·typescript·无人机
qq5_8115175152 小时前
web城乡居民基本医疗信息管理系统信息管理系统源码-SpringBoot后端+Vue前端+MySQL【可直接运行】
前端·vue.js·spring boot
百思可瑞教育2 小时前
构建自己的Vue UI组件库:从设计到发布
前端·javascript·vue.js·ui·百思可瑞教育·北京百思教育
百锦再2 小时前
Vue高阶知识:利用 defineModel 特性开发搜索组件组合
前端·vue.js·学习·flutter·typescript·前端框架