67 lines
1.2 KiB
Vue
67 lines
1.2 KiB
Vue
<template>
|
|
<nav
|
|
v-if="showSubmenuBar && subMenus.length > 0"
|
|
class="w-full bg-gray-100 shadow-sm px-4 py-2"
|
|
>
|
|
<div class="flex items-center space-x-6">
|
|
<span class="text-sm font-medium text-gray-600 mr-4">
|
|
{{ activeMenu }}
|
|
</span>
|
|
<div class="flex space-x-4">
|
|
<button
|
|
v-for="sub in subMenus"
|
|
:key="sub.key"
|
|
class="submenu-btn"
|
|
@click="onSubMenuClick(sub)"
|
|
>
|
|
{{ sub.label }}
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</nav>
|
|
</template>
|
|
|
|
<script setup lang="ts">
|
|
interface SubMenu {
|
|
key: string;
|
|
label: string;
|
|
to: string;
|
|
componentName: string;
|
|
}
|
|
|
|
interface Props {
|
|
showSubmenuBar: boolean;
|
|
activeMenu: string;
|
|
subMenus: SubMenu[];
|
|
}
|
|
|
|
interface Emits {
|
|
(e: "submenu-click", sub: SubMenu): void;
|
|
}
|
|
|
|
defineProps<Props>();
|
|
const emit = defineEmits<Emits>();
|
|
|
|
function onSubMenuClick(sub: SubMenu) {
|
|
emit("submenu-click", sub);
|
|
}
|
|
</script>
|
|
|
|
<style scoped>
|
|
.submenu-btn {
|
|
padding: 0.25rem 0.75rem;
|
|
font-size: 0.875rem;
|
|
color: #374151;
|
|
background: none;
|
|
border: none;
|
|
border-radius: 0.25rem;
|
|
cursor: pointer;
|
|
transition: all 0.15s ease;
|
|
}
|
|
|
|
.submenu-btn:hover {
|
|
color: #2563eb;
|
|
background-color: #eff6ff;
|
|
}
|
|
</style>
|