UnisKB/ui/src/layout/components/top-bar/top-menu/MenuItem.vue

64 lines
1.4 KiB
Vue
Raw Normal View History

2023-09-15 09:40:35 +00:00
<template>
2024-04-28 07:23:41 +00:00
<div class="menu-item-container flex-center h-full" :class="isActive ? 'active' : ''"
@click="router.push({ name: menu.name })">
2023-11-02 10:25:09 +00:00
<!-- <div class="icon">
2023-10-13 08:11:54 +00:00
<AppIcon :iconName="menu.meta ? (menu.meta.icon as string) : '404'" />
2023-11-02 10:25:09 +00:00
</div> -->
2024-04-28 07:23:41 +00:00
<div class="title">
{{
$te(`layout.topbar.MenuItem.${String(props.menu.name)}`)
? $t(`layout.topbar.MenuItem.${String(props.menu.name)}`)
: menu.meta?.title
}}
</div>
2023-10-13 08:11:54 +00:00
</div>
2023-09-15 09:40:35 +00:00
</template>
<script setup lang="ts">
import { useRouter, useRoute, type RouteRecordRaw } from 'vue-router'
2023-10-13 08:11:54 +00:00
import { computed } from 'vue'
const router = useRouter()
const route = useRoute()
2023-11-07 11:04:59 +00:00
2023-09-15 09:40:35 +00:00
const props = defineProps<{
2023-10-13 08:11:54 +00:00
menu: RouteRecordRaw
2023-09-15 09:40:35 +00:00
}>()
const isActive = computed(() => {
2023-11-07 11:04:59 +00:00
const { name, path, meta } = route
return (name == props.menu.name && path == props.menu.path) || meta?.activeMenu == props.menu.path
2023-09-15 09:40:35 +00:00
})
</script>
<style lang="scss" scoped>
.menu-item-container {
2023-11-02 10:25:09 +00:00
margin-right: 28px;
2023-10-13 08:11:54 +00:00
cursor: pointer;
2023-11-02 10:25:09 +00:00
font-size: 16px;
position: relative;
2024-04-28 07:23:41 +00:00
2023-10-13 08:11:54 +00:00
.icon {
font-size: 15px;
margin-right: 5px;
margin-top: 2px;
}
2024-04-28 07:23:41 +00:00
2023-10-13 08:11:54 +00:00
&:hover {
color: var(--el-color-primary);
}
2023-09-15 09:40:35 +00:00
}
.active {
2023-10-13 08:11:54 +00:00
color: var(--el-color-primary);
2024-04-28 07:23:41 +00:00
2023-11-02 10:25:09 +00:00
&::after {
position: absolute;
bottom: 0;
width: 100%;
height: 2px;
content: '';
background-color: var(--el-color-primary-light-9);
border-bottom: 3px solid var(--el-color-primary);
}
2023-09-15 09:40:35 +00:00
}
2023-10-13 08:11:54 +00:00
</style>