layui/.svn/pristine/97/972cbaca281865f3e49ad54ed150f3353480ccbb.svn-base
2022-12-09 16:41:41 +08:00

76 lines
1.9 KiB
Plaintext

<script lang="ts">
export default {
name: "SubMenuPopup",
};
</script>
<script setup lang="ts">
import { computed, inject, Ref } from "vue";
import LayDropdown from "../dropdown/index.vue";
import { LayIcon } from "@layui/icons-vue";
import useLevel from "../menu/useLevel";
export interface SubMenuPopupProps {
id: string;
title?: string;
}
const props = defineProps<SubMenuPopupProps>();
const { level } = useLevel();
const isTree: Ref<boolean> = inject("isTree") as Ref<boolean>;
const theme = inject("menuTheme") as Ref<string>;
const computedTheme = computed(() => {
return theme.value === "light" ? "-light" : "";
});
const computedExpandIcon = computed(() => {
if (isTree.value) return "layui-icon-right";
return level.value === 2 ? "layui-icon-down" : "layui-icon-right";
});
const computedPlacement = computed(() => {
return !isTree.value && level.value === 2 ? "bottom" : "right-start";
});
</script>
<template>
<lay-dropdown
trigger="hover"
class="layui-sub-menu-popup"
:placement="computedPlacement"
:autoFitMinWidth="false"
:updateAtScroll="true"
:contentOffset="3"
>
<li class="layui-nav-item">
<a href="javascript:void(0)" style="justify-content: space-between">
<div>
<i v-if="$slots.icon" class="layui-sub-menu-icon">
<slot name="icon"></slot>
</i>
<span v-if="$slots.title">
<slot name="title"></slot>
</span>
</div>
<span v-if="$slots.expandIcon" class="layui-nav-more">
<slot name="expandIcon">
<lay-icon :type="computedExpandIcon" />
</slot>
</span>
</a>
</li>
<template #content>
<div
:class="[
'layui-sub-menu-popup-content',
`layui-sub-menu-popup-theme${computedTheme}`,
]"
>
<slot></slot>
</div>
</template>
</lay-dropdown>
</template>