From a1d7e81859f554f3a53680cc35f0f49bf1f77098 Mon Sep 17 00:00:00 2001
From: wwf <1971391498@qq.com>
Date: 星期四, 14 五月 2026 14:37:02 +0800
Subject: [PATCH] 导入项目
---
src/layout/components/ContextMenu/src/ContextMenu.vue | 76 ++++++++++++++++++++++++++++++++++++++
1 files changed, 76 insertions(+), 0 deletions(-)
diff --git a/src/layout/components/ContextMenu/src/ContextMenu.vue b/src/layout/components/ContextMenu/src/ContextMenu.vue
new file mode 100644
index 0000000..90eea4c
--- /dev/null
+++ b/src/layout/components/ContextMenu/src/ContextMenu.vue
@@ -0,0 +1,76 @@
+<script lang="ts" setup>
+import { PropType } from 'vue'
+
+import { useDesign } from '@/hooks/web/useDesign'
+import type { RouteLocationNormalizedLoaded } from 'vue-router'
+import { contextMenuSchema } from '@/types/contextMenu'
+import type { ElDropdown } from 'element-plus'
+
+defineOptions({ name: 'ContextMenu' })
+
+const { getPrefixCls } = useDesign()
+
+const prefixCls = getPrefixCls('context-menu')
+
+const { t } = useI18n()
+
+const emit = defineEmits(['visibleChange'])
+
+const props = defineProps({
+ schema: {
+ type: Array as PropType<contextMenuSchema[]>,
+ default: () => []
+ },
+ trigger: {
+ type: String as PropType<'click' | 'hover' | 'focus' | 'contextmenu'>,
+ default: 'contextmenu'
+ },
+ tagItem: {
+ type: Object as PropType<RouteLocationNormalizedLoaded>,
+ default: () => ({})
+ }
+})
+
+const command = (item: contextMenuSchema) => {
+ item.command && item.command(item)
+}
+
+const visibleChange = (visible: boolean) => {
+ emit('visibleChange', visible, props.tagItem)
+}
+
+const elDropdownMenuRef = ref<ComponentRef<typeof ElDropdown>>()
+
+defineExpose({
+ elDropdownMenuRef,
+ tagItem: props.tagItem
+})
+</script>
+
+<template>
+ <ElDropdown
+ ref="elDropdownMenuRef"
+ :class="prefixCls"
+ :trigger="trigger"
+ placement="bottom-start"
+ popper-class="v-context-menu-popper"
+ @command="command"
+ @visible-change="visibleChange"
+ >
+ <slot></slot>
+ <template #dropdown>
+ <ElDropdownMenu>
+ <ElDropdownItem
+ v-for="(item, index) in schema"
+ :key="`dropdown${index}`"
+ :command="item"
+ :disabled="item.disabled"
+ :divided="item.divided"
+ >
+ <Icon :icon="item.icon" />
+ {{ t(item.label) }}
+ </ElDropdownItem>
+ </ElDropdownMenu>
+ </template>
+ </ElDropdown>
+</template>
--
Gitblit v1.8.0