From fbd434b2aaf5e1f7035f3843508c62ea930d2549 Mon Sep 17 00:00:00 2001 From: zs <zhousong@weben-smart.com> Date: 周三, 07 5月 2025 10:47:56 +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