admin-vben5/packages/effects/layouts/src/basic/menu/mixed-menu.vue

47 lines
1.0 KiB
Vue
Raw Normal View History

2024-05-19 21:20:42 +08:00
<script lang="ts" setup>
import type { MenuRecordRaw } from '@vben/types';
2024-05-19 21:20:42 +08:00
import type { NormalMenuProps } from '@vben-core/menu-ui';
2024-06-09 15:39:11 +08:00
import { onBeforeMount } from 'vue';
2024-05-19 21:20:42 +08:00
import { useRoute } from 'vue-router';
import { findMenuByPath } from '@vben/utils';
2024-06-08 19:49:06 +08:00
import { NormalMenu } from '@vben-core/menu-ui';
2024-05-19 21:20:42 +08:00
interface Props extends NormalMenuProps {}
2024-06-09 15:39:11 +08:00
const props = defineProps<Props>();
2024-05-19 21:20:42 +08:00
const emit = defineEmits<{
defaultSelect: [MenuRecordRaw, MenuRecordRaw?];
enter: [MenuRecordRaw];
select: [MenuRecordRaw];
}>();
const route = useRoute();
onBeforeMount(() => {
2024-06-09 15:39:11 +08:00
const menu = findMenuByPath(props.menus || [], route.path);
2024-05-19 21:20:42 +08:00
if (menu) {
2024-06-09 15:39:11 +08:00
const rootMenu = (props.menus || []).find(
2024-05-19 21:20:42 +08:00
(item) => item.path === menu.parents?.[0],
);
emit('defaultSelect', menu, rootMenu);
}
});
</script>
<template>
<NormalMenu
2024-06-09 13:31:43 +08:00
:active-path="activePath"
2024-05-19 21:20:42 +08:00
:collapse="collapse"
:menus="menus"
2024-06-09 13:31:43 +08:00
:rounded="rounded"
2024-05-19 21:20:42 +08:00
:theme="theme"
@enter="(menu) => emit('enter', menu)"
@select="(menu) => emit('select', menu)"
2024-05-19 21:20:42 +08:00
/>
</template>