Skip to content

witContextMenu 上下文菜单

witContextMenu是一个基于 @imengyu/vue3-context-menu 封装的上下文菜单组件,提供了丰富的菜单选项和灵活的配置方式。组件支持菜单分组、分隔线、自定义图标等功能,可用于实现右键菜单、下拉菜单等交互场景。

用法实列

vue
<template>
  <div>
    <el-button
      @contextmenu.prevent="onContextMenu"
      type="primary"
    >
      右键点击我打开上下文菜单
    </el-button>
    
    <!-- 上下文菜单组件 -->
    <witContextMenu
      v-model:show="showContextMenu"
      :options="menuOptions"
      :x="menuX"
      :y="menuY"
    />
  </div>
</template>

<script lang="ts" setup>
import { ref, reactive } from 'vue'
import type { MenuOptions } from '@imengyu/vue3-context-menu'

const showContextMenu = ref(false)
const menuX = ref(0)
const menuY = ref(0)

// 菜单选项配置
const menuOptions = reactive<MenuOptions>({
  items: [
    {
      label: '复制',
      onClick: () => {
        console.log('复制操作')
        showContextMenu.value = false
      }
    },
    {
      label: '粘贴',
      onClick: () => {
        console.log('粘贴操作')
        showContextMenu.value = false
      }
    },
    {
      separator: true // 分隔线
    },
    {
      label: '编辑',
      children: [
        {
          label: '重命名',
          onClick: () => {
            console.log('重命名操作')
            showContextMenu.value = false
          }
        },
        {
          label: '删除',
          onClick: () => {
            console.log('删除操作')
            showContextMenu.value = false
          }
        }
      ]
    }
  ]
})

// 右键点击事件处理
const onContextMenu = (event: MouseEvent) => {
  menuX.value = event.clientX
  menuY.value = event.clientY
  showContextMenu.value = true
}
</script>

API

组件

组件名描述
witContextMenu上下文菜单主组件
witContextMenuGroup菜单分组组件
witContextMenuItem菜单项组件
witContextMenuSeparator菜单分隔线组件

类型

类型名描述
MenuOptions菜单配置选项类型
属性名类型默认值描述
itemsArray[]菜单项数组
zIndexNumber1000菜单层级
showMaskBooleanfalse是否显示遮罩层
maskClickCloseBooleantrue点击遮罩层是否关闭菜单
customClassString''自定义菜单类名
minWidthNumber120菜单最小宽度

菜单项配置

属性名类型默认值描述
labelString''菜单项文本
iconString''菜单项图标
onClickFunction() => {}点击菜单项回调函数
disabledBooleanfalse是否禁用菜单项
hiddenBooleanfalse是否隐藏菜单项
childrenArray[]子菜单项数组
separatorBooleanfalse是否为分隔线
customClassString''自定义菜单项类名

事件

事件名描述参数
show-change菜单显示状态变化时触发当前显示状态(Boolean)
close菜单关闭时触发-
open菜单打开时触发-

TIP

  1. 组件内部使用了 @imengyu/vue3-context-menu 库,更多详细配置可参考该库的官方文档。
  2. 支持通过 v-model:show 双向绑定控制菜单的显示与隐藏。
  3. 可通过 xy 属性设置菜单显示的位置坐标。
  4. 支持多级子菜单和菜单项分组,可通过 childrenwitContextMenuGroup 实现。
  5. 可通过自定义 icon 属性为菜单项添加图标,支持使用 Font Awesome、Element Plus 等图标库。

湘ICP备2024070110号