| | <script lang="ts" setup> |
| | import router from "@/router.ts"; |
| | import {watch, ref, onMounted, onUnmounted} from "vue"; |
| | import {ArrowRightOutlined, DashboardOutlined, |
| | ExperimentOutlined, SettingOutlined} from "@ant-design/icons-vue"; |
| | |
| | const windowWidth = ref(window.innerWidth) |
| | |
| | onMounted(() => { |
| | window.addEventListener('resize', () => { |
| | windowWidth.value = window.innerWidth |
| | }) |
| | }) |
| | onUnmounted(() => { |
| | window.removeEventListener('resize', () => { |
| | windowWidth.value = window.innerWidth |
| | }) |
| | }) |
| | |
| | const sessionActive = ref(false) |
| | const toolsActive = ref(false) |
| | watch(router.currentRoute, (to, from) => { |
| | console.log('router changed', to, from) |
| | |
| | const sessionActivePath = ['/sessions', '/sessions/', '/form', '/form/', '/output'] |
| | |
| | if (sessionActivePath.includes(to.path)) { |
| | sessionActive.value = true |
| | toolsActive.value = false |
| | return |
| | } |
| | |
| | const toolsActivePath = ['/tools', '/tools/', '/benchmark', '/benchmark/', '/benchmark_detail', '/benchmark_detail/'] |
| | if (toolsActivePath.includes(to.path)) { |
| | sessionActive.value = false |
| | toolsActive.value = true |
| | return |
| | } |
| | |
| | sessionActive.value = false |
| | toolsActive.value = false |
| | }) |
| | |
| | const gotoSettings = (e: any) => { |
| | e.preventDefault() |
| | router.push('/settings') |
| | } |
| | |
| | const gotoProfiling = (e: any) => { |
| | e.preventDefault() |
| | router.push('/profiling') |
| | } |
| | |
| | const gotoHealthcheck = (e: any) => { |
| | e.preventDefault() |
| | router.push('/healthcheck') |
| | } |
| | |
| | </script> |
| | <template> |
| | <nav class="header-nav"> |
| | <div class="nav-left flex flex-row justify-between items-center"> |
| | <router-link to="/" > |
| | <img |
| | alt="logo" |
| | src="/logo.webp" |
| | class="logo" |
| | /> |
| | </router-link> |
| |
|
| | </div> |
| | <div class="title"> |
| | <div v-if="windowWidth >= 1280"> |
| | <div class="primary">AVATAR |
| | </div> |
| | <div class="secondary">(power by AI)</div> |
| | </div> |
| | <h3 v-if="windowWidth < 1280" |
| | class="text-3xl font-medium text-primary-dark dark:text-ternary-light hidden sm:block" |
| | style="font-size: 22px; line-height: 60px; font-weight: 600;" |
| | >AVATAR</h3> |
| | </div> |
| | <div class="nav-right flex flex-row justify-between items-center"> |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | <a-button type="ghost" style="margin-right: 12px;" |
| | size="large" @click="gotoProfiling"> |
| | <template #icon> |
| | <ExperimentOutlined style="font-size: 24px;"/> |
| | </template> |
| | </a-button> |
| | <a-button type="ghost" style="margin-right: 12px;" |
| | size="large" @click="gotoHealthcheck"> |
| | <template #icon> |
| | <DashboardOutlined style="font-size: 24px;"/> |
| | </template> |
| | </a-button> |
| | <a-button type="ghost" size="large" @click="gotoSettings"> |
| | <template #icon> |
| | <SettingOutlined style="font-size: 24px;"/> |
| | </template> |
| | </a-button> |
| | |
| | |
| | |
| | </div> |
| | </nav> |
| | </template> |
| | <style scoped lang="scss"> |
| | .header-nav { |
| | display: flex; |
| | align-items: center; |
| | justify-content: space-between; |
| | width: 100vw; |
| | height: 72px; |
| | background: aliceblue; |
| | box-shadow: 1px 1px 2px 1px #d9d9d9; |
| | top: 0; |
| | position: sticky; |
| | z-index: 99; |
| | } |
| | |
| | .nav-left { |
| | position: absolute; |
| | left: 20px; |
| | top: 12px; |
| | } |
| | |
| | .nav-right { |
| | .ant-btn { |
| | span { |
| | font-size: 15px; |
| | font-weight: 600; |
| | } |
| | } |
| | } |
| | |
| | .logo { |
| | width: 48px; |
| | height: 48px; |
| | border-radius: 24px; |
| | will-change: filter; |
| | transition: filter 300ms; |
| | } |
| | |
| | .logo:hover { |
| | filter: drop-shadow(0 0 2em #646cffaa); |
| | } |
| | |
| | .logo.vue:hover { |
| | filter: drop-shadow(0 0 2em #42b883aa); |
| | } |
| | |
| | .nav-items { |
| | margin-left: 10px; |
| | } |
| | |
| | .nav-right { |
| | position: absolute; |
| | right: 20px; |
| | height: 64px; |
| | align-items: center; |
| | display: flex; |
| | } |
| | |
| | .title { |
| | margin-left: 84px; |
| | line-height: 48px; |
| | height: 54px; |
| | |
| | .primary { |
| | font-weight: bold; |
| | text-align: left; |
| | font-size: 16px; |
| | letter-spacing: -0.8px; |
| | font-family: Courier,Menlo, monospace, 'SFMono-Regular', Consolas, 'Liberation Mono'; |
| | } |
| | .secondary { |
| | font-family: Courier,Menlo, monospace, 'SFMono-Regular', Consolas, 'Liberation Mono'; |
| | text-align: left; |
| | font-size: 8px; |
| | letter-spacing: -0.2px; |
| | font-weight: 400; |
| | line-height: 20px; |
| | margin-top: -12px; |
| | } |
| | } |
| | |
| | .switch-icon { |
| | margin-left: 20px; |
| | } |
| | </style> |
| |
|