From 716eeb4b87efbdc5b149410bbea4c1f35ac116ac Mon Sep 17 00:00:00 2001
From: zs <zhousong@weben-smart.com>
Date: 周二, 29 4月 2025 17:32:35 +0800
Subject: [PATCH] 修改目录结构

---
 HIAWms/web/src/components/vue3-context-menu/ContextMenu.vue |   70 +++++++++++++++++++++++++++++++++++
 1 files changed, 70 insertions(+), 0 deletions(-)

diff --git a/HIAWms/web/src/components/vue3-context-menu/ContextMenu.vue b/HIAWms/web/src/components/vue3-context-menu/ContextMenu.vue
new file mode 100644
index 0000000..8b4c115
--- /dev/null
+++ b/HIAWms/web/src/components/vue3-context-menu/ContextMenu.vue
@@ -0,0 +1,70 @@
+<script lang="ts">
+import { defineComponent, h, Teleport, toRefs } from 'vue'
+import type { PropType, VNode } from 'vue'
+import type { MenuOptions } from './ContextMenuDefine'
+import { genContainer } from "./ContextMenuUtils";
+import ContextSubMenuWrapperConstructor from './ContextSubMenuWrapper.vue'
+
+export type GlobalHasSlot = (name: string) => boolean;
+export type GlobalRenderSlot = (name: string, params: Record<string, unknown>) => VNode;
+
+/**
+ * Context menu component
+ */
+export default defineComponent({
+  name: 'ContextMenu',
+  emits: [ 'update:show', 'close' ],
+  props: {
+    /**
+     * Menu options
+     */
+    options: {
+      type: Object as PropType<MenuOptions>,
+      default: null
+    },
+    /**
+     * Show menu?
+     */
+    show: {
+      type: Boolean,
+      default: false
+    },
+  },
+  setup(props, ctx) {
+
+    const {
+      options,
+      show,
+    } = toRefs(props);
+
+    ctx.expose({
+      closeMenu: () => ctx.emit('update:show', false),
+      isClosed: () => !show.value,
+    });
+
+    return () => {  
+      const { isNew, container, eleId } = genContainer(options.value);
+      
+      return [
+        h(
+          Teleport,
+          { to: `#${eleId}` },
+          [
+            h(ContextSubMenuWrapperConstructor as unknown as string, { 
+              options: options,
+              show: show,
+              container: container,
+              isFullScreenContainer: !isNew,
+              onClose: (fromItem: undefined) => {
+                ctx.emit('update:show', false);
+                ctx.emit('close');
+                options.value.onClose?.(fromItem);
+              },
+            }, ctx.slots)
+          ]
+        )
+      ];
+    }
+  },
+})
+</script>

--
Gitblit v1.9.3