layui/.svn/pristine/5c/5c0fddde415b0fb1bed01cf3441a61e683544c4d.svn-base
2022-12-09 16:41:41 +08:00

81 lines
2.1 KiB
Plaintext

<script lang="ts">
export default {
name: "LayMenuItem",
};
</script>
<script setup lang="ts">
import { computed, ComputedRef, inject, ref, Ref, useSlots } from "vue";
import { DropdownContext, dropdownInjectionKey } from "../dropdown/interface";
import useLevel from "../menu/useLevel";
import { indentHandle } from "../menu/utils";
import LayTooltip from "../tooltip/index.vue";
export interface MenuItemProps {
id: string;
title?: string;
}
const slots = useSlots();
const props = defineProps<MenuItemProps>();
const { level } = useLevel();
const selectedKey: Ref<string> = inject("selectedKey") as Ref<string>;
const isTree = inject("isTree") as ComputedRef<boolean>;
const isCollapse = inject("isCollapse") as ComputedRef<boolean | string>;
const theme = inject("menuTheme") as Ref<string>;
const indent = inject("indent") as Ref<string | boolean>;
const dropdownCtx = inject<DropdownContext | undefined>(
dropdownInjectionKey,
undefined
);
const selectHandle = function () {
selectedKey.value = props.id;
dropdownCtx?.hide();
};
const needTooltip = computed(
() =>
isTree.value &&
(isCollapse.value === true || isCollapse.value === "true") &&
level.value === 1
);
</script>
<template>
<li
:class="['layui-nav-item', { 'layui-this': selectedKey === id }]"
:style="indentHandle({ indent, level, isTree })"
@click="selectHandle()"
>
<template v-if="needTooltip">
<lay-tooltip position="right" :isDark="theme !== 'light'">
<a href="javascript:void(0)">
<i v-if="slots.icon">
<slot name="icon"></slot>
</i>
</a>
<template #content>
<span v-if="slots.title">
<slot name="title"></slot>
</span>
</template>
</lay-tooltip>
</template>
<template v-else>
<a href="javascript:void(0)">
<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>
<span v-else>
<slot></slot>
</span>
</a>
</template>
</li>
</template>