schon/storefront/components/base/header/index.vue
Egor fureunoir Gorbunov cc11da01f9 refactor(storefront): replace evibes logo with schon logo in SVG format
Updated the SVG logo file in storefront to replace evibes branding with schon. Includes enhanced styling and additional view properties for resolution compatibility.
2026-02-05 17:23:59 +03:00

133 lines
No EOL
3.4 KiB
Vue

<template>
<header class="header">
<nuxt-link-locale to="/">
<nuxt-img
format="webp"
width="150px"
densities="x1"
src="/images/schon-big.png"
alt="logo"
class="header__logo"
/>
</nuxt-link-locale>
<base-header-catalog />
<base-header-search />
<div class="header__actions">
<nuxt-link-locale to="/profile/wishlist" class="header__actions-item">
<el-badge :value="productsInWishlistQuantity" type="primary">
<icon name="mdi:cards-heart-outline" size="28" />
</el-badge>
<p>{{ t('header.actions.wishlist') }}</p>
</nuxt-link-locale>
<nuxt-link-locale to="/profile/cart" class="header__actions-item">
<el-badge :value="productsInCartQuantity" type="primary">
<icon name="ph:shopping-cart-light" size="28" />
</el-badge>
<p>{{ t('header.actions.cart') }}</p>
</nuxt-link-locale>
<client-only>
<nuxt-link-locale
to="/profile/settings"
class="header__actions-item"
v-if="isAuthenticated"
>
<icon name="material-symbols-light:person-outline-rounded" size="32" />
<p>{{ t('header.actions.profile') }}</p>
</nuxt-link-locale>
<div
class="header__actions-item"
@click="appStore.setActiveState('login')"
v-else
>
<icon name="material-symbols-light:person-outline-rounded" size="32" />
<p>{{ t('header.actions.login') }}</p>
</div>
<template #fallback>
<div
class="header__actions-item"
@click="appStore.setActiveState('login')"
>
<icon name="material-symbols-light:person-outline-rounded" size="32" />
<p>{{ t('header.actions.login') }}</p>
</div>
</template>
</client-only>
</div>
<ui-language-switcher />
</header>
</template>
<script setup lang="ts">
const { t } = useI18n();
const appStore = useAppStore();
const userStore = useUserStore();
const wishlistStore = useWishlistStore();
const cartStore = useCartStore();
const isAuthenticated = computed(() => userStore.isAuthenticated);
const productsInCartQuantity = computed(() => {
let count = 0;
cartStore.currentOrder?.orderProducts?.edges.forEach((el) => {
count = count + el.node.quantity;
});
return count;
});
const productsInWishlistQuantity = computed(() => {
return wishlistStore.wishlist ? wishlistStore.wishlist.products.edges.length : 0;
});
</script>
<style lang="scss" scoped>
.header {
box-shadow: 0 1px 2px #0000001a;
position: fixed;
z-index: 3;
top: 0;
left: 0;
width: 100vw;
background-color: $white;
display: flex;
align-items: center;
justify-content: space-between;
gap: 50px;
padding: 10px 25px;
&__actions {
display: flex;
align-items: center;
gap: 15px;
&-item {
cursor: pointer;
display: flex;
flex-direction: column;
align-items: center;
gap: 5px;
padding: 7px 10px;
border-radius: $default_border_radius;
transition: 0.2s;
@include hover {
background-color: #f7f7f7;
color: $accent;
}
& div {
position: relative;
}
& i {
transition: 0.2s;
font-size: 24px;
}
& p {
transition: 0.2s;
font-size: 12px;
}
}
}
}
</style>