@crm-market/template-shared 1.0.7 → 1.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/scss/_variables.scss +3 -3
- package/assets/scss/components/_header.scss +1 -1
- package/assets/scss/style.css +4 -4
- package/components/AboutUs/StaticContent.vue +32 -0
- package/components/Cart/CartEmpty.vue +42 -0
- package/components/Cart/CartItem.vue +145 -0
- package/components/Cart/CartSummary.vue +57 -0
- package/components/Cart/ProductQuantity.vue +23 -13
- package/components/Cart/index.vue +68 -150
- package/components/Categories/index.vue +88 -291
- package/components/Checkout/AddressFields.vue +74 -0
- package/components/Checkout/CheckoutForm.vue +75 -0
- package/components/Checkout/CityAutocomplete.vue +68 -0
- package/components/Checkout/DeliveryMethodCard.vue +66 -0
- package/components/Checkout/DeliveryOptions.vue +148 -0
- package/components/Checkout/OrderSummary.vue +116 -0
- package/components/Checkout/PaymentOptions.vue +76 -0
- package/components/Checkout/PickupPoints.vue +46 -0
- package/components/Checkout/PromoCode.vue +166 -0
- package/components/Checkout/index.vue +235 -173
- package/components/Checkout/types.ts +45 -0
- package/components/Common/PageBanner.vue +22 -20
- package/components/Common/ProductCard.vue +139 -115
- package/components/Common/Services.vue +4 -4
- package/components/Contact/ContactForm.vue +44 -74
- package/components/Contact/ContactInfo.vue +35 -61
- package/components/FAQ/index.vue +6 -119
- package/components/Layout/Copyright.vue +11 -9
- package/components/Layout/Footer.vue +49 -136
- package/components/Layout/HeaderBar.vue +174 -0
- package/components/Layout/HeaderLogo.vue +27 -0
- package/components/Layout/MiddleHeader.vue +1 -228
- package/components/Layout/MiddleHeaderThree.vue +1 -203
- package/components/Layout/MiddleHeaderTwo.vue +1 -239
- package/components/Layout/NavLinks.vue +23 -0
- package/components/Layout/Navbar.vue +38 -151
- package/components/Layout/NavbarStyleFour.vue +1 -332
- package/components/Layout/NavbarStyleThree.vue +1 -188
- package/components/Layout/NavbarStyleTwo.vue +1 -108
- package/components/Layout/Preloader.vue +5 -12
- package/components/Layout/ResponsiveNavbar.vue +32 -418
- package/components/Layout/SitewideBanner.vue +285 -0
- package/components/Layout/TopHeader.vue +17 -83
- package/components/Layout/layoutData.ts +83 -0
- package/components/PrivacyPolicy/index.vue +6 -110
- package/components/ProductDetails/ProductDetailsTab.vue +31 -321
- package/components/ProductDetails/ProductGallery.vue +45 -0
- package/components/ProductDetails/ProductQuantity.vue +8 -14
- package/components/ProductDetails/RecentlyViewed.vue +53 -289
- package/components/ProductDetails/RelatedProducts.vue +64 -0
- package/components/ProductDetails/index.vue +90 -230
- package/components/Products/index.vue +78 -16
- package/components/TermsConditions/index.vue +6 -110
- package/components/Wishlist/index.vue +62 -88
- package/composables/useCart.ts +133 -81
- package/composables/useCategories.ts +66 -29
- package/composables/useCategoryImages.ts +45 -0
- package/composables/useCheckout.ts +302 -95
- package/composables/useContactForm.ts +57 -0
- package/composables/useHomeContent.ts +220 -0
- package/composables/useI18n.ts +12 -24
- package/composables/useJsonLd.ts +162 -0
- package/composables/useProducts.ts +244 -81
- package/composables/useRecent.ts +30 -0
- package/composables/useSanitize.ts +76 -0
- package/composables/useSiteConfig.ts +51 -45
- package/composables/useStaticPages.ts +48 -0
- package/composables/useStoreOrigin.ts +32 -0
- package/composables/useTemplateSections.ts +51 -3
- package/composables/useThemeVars.ts +113 -0
- package/composables/useWishlist.ts +72 -0
- package/layouts/default.vue +80 -19
- package/locales/en.json +255 -86
- package/locales/uk.json +251 -82
- package/modules/template-schema.ts +35 -0
- package/nuxt.config.ts +8 -11
- package/package.json +1 -1
- package/pages/about-us.vue +9 -9
- package/pages/cart.vue +0 -1
- package/pages/categories.vue +0 -1
- package/pages/category/[slug].vue +84 -0
- package/pages/checkout.vue +0 -1
- package/pages/contact.vue +6 -6
- package/pages/delivery.vue +12 -0
- package/pages/faq.vue +6 -6
- package/pages/order-success.vue +113 -0
- package/pages/privacy-policy.vue +6 -6
- package/pages/product/[slug].vue +82 -0
- package/pages/product-details.vue +14 -6
- package/pages/products.vue +12 -1
- package/pages/returns.vue +12 -0
- package/pages/terms-conditions.vue +6 -6
- package/pages/wishlist.vue +2 -2
- package/utils/seo-urls.ts +70 -0
- package/utils/store-origin.ts +36 -0
- package/components/AboutUs/AboutUsTuan.vue +0 -25
- package/components/AboutUs/Statistics.vue +0 -42
- package/components/AboutUs/SubscribeToTheNewsletter.vue +0 -57
- package/components/AddAddress/index.vue +0 -68
- package/components/BestSellers/Products.vue +0 -1562
- package/components/BestSellers/RecentlyViewed.vue +0 -304
- package/components/ChangePassword/index.vue +0 -69
- package/components/Common/DashboardNavigation.vue +0 -35
- package/components/Dashboard/RecentOrder.vue +0 -173
- package/components/Dashboard/index.vue +0 -77
- package/components/EditAddress/index.vue +0 -117
- package/components/EditProfile/index.vue +0 -95
- package/components/FeaturedProduct/FeaturedProducts.vue +0 -304
- package/components/FeaturedProduct/Products.vue +0 -1562
- package/components/ForgotPassword/index.vue +0 -49
- package/components/Layout/FooterTwo.vue +0 -159
- package/components/Layout/LocationOption.vue +0 -178
- package/components/Layout/RTLSwitchBtn.vue +0 -40
- package/components/Login/index.vue +0 -89
- package/components/MyAccount/index.vue +0 -154
- package/components/NewArrivals/Products.vue +0 -1969
- package/components/NewArrivals/RecentlyViewed.vue +0 -304
- package/components/OrderDetails/index.vue +0 -75
- package/components/OrderHistory/index.vue +0 -195
- package/components/Products/RecentlyViewed.vue +0 -302
- package/components/Register/index.vue +0 -83
- package/components/TrendingProducts/FeaturedProducts.vue +0 -304
- package/components/TrendingProducts/Products.vue +0 -1564
- package/components/Wishlist/ProductQuantity.vue +0 -29
- package/layouts/inner.vue +0 -70
- package/locales/ar.json +0 -234
- package/locales/ru.json +0 -234
- package/pages/address.vue +0 -11
- package/pages/change-password.vue +0 -11
- package/pages/dashboard.vue +0 -11
- package/pages/edit-address.vue +0 -11
- package/pages/edit-profile.vue +0 -11
- package/pages/forgot-password.vue +0 -11
- package/pages/login.vue +0 -11
- package/pages/my-account.vue +0 -11
- package/pages/order-details.vue +0 -11
- package/pages/order-history.vue +0 -11
- package/pages/register.vue +0 -11
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { NAV_ITEMS } from './layoutData';
|
|
3
|
+
|
|
4
|
+
// Пункти меню з підсвіткою активного (для "/" — лише точний збіг)
|
|
5
|
+
const { t } = useI18n();
|
|
6
|
+
const emit = defineEmits<{ (e: 'navigate'): void }>();
|
|
7
|
+
</script>
|
|
8
|
+
|
|
9
|
+
<template>
|
|
10
|
+
<ul class="navbar-nav me-auto">
|
|
11
|
+
<li v-for="item in NAV_ITEMS" :key="item.to" class="nav-item">
|
|
12
|
+
<NuxtLink
|
|
13
|
+
class="nav-link"
|
|
14
|
+
:to="item.to"
|
|
15
|
+
:active-class="item.to === '/' ? '' : 'router-link-active'"
|
|
16
|
+
exact-active-class="router-link-active"
|
|
17
|
+
@click="emit('navigate')"
|
|
18
|
+
>
|
|
19
|
+
{{ t(item.key) }}
|
|
20
|
+
</NuxtLink>
|
|
21
|
+
</li>
|
|
22
|
+
</ul>
|
|
23
|
+
</template>
|
|
@@ -1,18 +1,31 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
// Навігація: логотип (мобільний), бургер, посилання на існуючі сторінки, телефон
|
|
3
|
+
import stateStore from '~/utils/store';
|
|
4
|
+
import { useLayoutData } from './layoutData';
|
|
5
|
+
|
|
6
|
+
const props = withDefaults(defineProps<{ withCategories?: boolean; wrapClass?: string }>(), {
|
|
7
|
+
withCategories: true,
|
|
8
|
+
wrapClass: 'ptb-6',
|
|
9
|
+
});
|
|
10
|
+
const { t } = useI18n();
|
|
11
|
+
const { topLevelCategories } = useCategories();
|
|
12
|
+
const { phone } = useLayoutData();
|
|
13
|
+
|
|
14
|
+
const isSticky = ref(false);
|
|
15
|
+
const catOpen = ref(false);
|
|
16
|
+
const onScroll = () => { isSticky.value = window.scrollY >= 100; };
|
|
17
|
+
onMounted(() => window.addEventListener('scroll', onScroll));
|
|
18
|
+
onBeforeUnmount(() => window.removeEventListener('scroll', onScroll));
|
|
19
|
+
</script>
|
|
20
|
+
|
|
1
21
|
<template>
|
|
2
|
-
|
|
22
|
+
<!-- На мобільному логотип і бургер винесено в шапку (HeaderBar), тож навбар лише від lg -->
|
|
23
|
+
<div :class="['navbar navbar-expand-lg bg-white d-none d-lg-flex', wrapClass, { sticky: isSticky }]">
|
|
3
24
|
<div class="container mw-1610">
|
|
4
25
|
<NuxtLink class="navbar-brand d-lg-none" to="/">
|
|
5
|
-
<img
|
|
6
|
-
:src="logoUrl || defaultLogo"
|
|
7
|
-
class="main-logo"
|
|
8
|
-
alt="logo"
|
|
9
|
-
/>
|
|
26
|
+
<LayoutHeaderLogo img-class="main-logo" />
|
|
10
27
|
</NuxtLink>
|
|
11
|
-
<a
|
|
12
|
-
class="navbar-toggler"
|
|
13
|
-
href="javascript:void(0);"
|
|
14
|
-
@click="stateStoreInstance.onChangeShow"
|
|
15
|
-
>
|
|
28
|
+
<a class="navbar-toggler" href="javascript:void(0);" :aria-label="t('layout.menu.toggle')" @click="stateStore.onChangeShow">
|
|
16
29
|
<span class="burger-menu">
|
|
17
30
|
<span class="top-bar"></span>
|
|
18
31
|
<span class="middle-bar"></span>
|
|
@@ -20,95 +33,36 @@
|
|
|
20
33
|
</span>
|
|
21
34
|
</a>
|
|
22
35
|
|
|
23
|
-
<ul class="categories-nav d-none d-lg-block">
|
|
36
|
+
<ul v-if="props.withCategories" class="categories-nav categories-style-three d-none d-lg-block">
|
|
24
37
|
<li class="categories-item dropdown">
|
|
25
|
-
<div
|
|
26
|
-
class="categories-link dropdown-toggle"
|
|
27
|
-
@click="toggleCategories"
|
|
28
|
-
:aria-pressed="show ? 'true' : 'false'"
|
|
29
|
-
:class="{ show: buttonShowState }"
|
|
30
|
-
>
|
|
38
|
+
<div class="categories-link dropdown-toggle" :class="{ show: catOpen }" @click="catOpen = !catOpen">
|
|
31
39
|
<i class="ri-menu-2-line"></i>
|
|
32
|
-
<span>{{ t('
|
|
40
|
+
<span>{{ t('layout.menu.browseCategories') }}</span>
|
|
33
41
|
</div>
|
|
34
|
-
|
|
35
|
-
<ul class="dropdown-menu" :class="{ show: show }">
|
|
42
|
+
<ul class="dropdown-menu" :class="{ show: catOpen }">
|
|
36
43
|
<li v-for="category in topLevelCategories" :key="category.id">
|
|
37
|
-
<
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
href="javascript:void(0)"
|
|
41
|
-
@click="toggleSubDropdown(category.id)"
|
|
42
|
-
>
|
|
43
|
-
<i class="ri-folder-line"></i>
|
|
44
|
-
<span>{{ category.name }}</span>
|
|
45
|
-
</a>
|
|
46
|
-
|
|
47
|
-
<ul
|
|
48
|
-
class="dropdown-menu dropdown-menu-sub"
|
|
49
|
-
:class="{ show: activeSubDropdown === category.id }"
|
|
50
|
-
>
|
|
51
|
-
<li v-for="sub in getSubcategories(category.id)" :key="sub.id">
|
|
52
|
-
<NuxtLink
|
|
53
|
-
class="dropdown-item"
|
|
54
|
-
:to="`/products?categoryId=${sub.id}`"
|
|
55
|
-
>
|
|
56
|
-
{{ sub.name }}
|
|
57
|
-
</NuxtLink>
|
|
58
|
-
</li>
|
|
59
|
-
</ul>
|
|
60
|
-
</template>
|
|
61
|
-
<template v-else>
|
|
62
|
-
<NuxtLink
|
|
63
|
-
class="dropdown-item single-style"
|
|
64
|
-
:to="`/products?categoryId=${category.id}`"
|
|
65
|
-
>
|
|
66
|
-
{{ category.name }}
|
|
67
|
-
</NuxtLink>
|
|
68
|
-
</template>
|
|
44
|
+
<NuxtLink class="dropdown-item single-style" :to="categoryPath(category)" @click="catOpen = false">
|
|
45
|
+
{{ category.name }}
|
|
46
|
+
</NuxtLink>
|
|
69
47
|
</li>
|
|
70
48
|
<li v-if="topLevelCategories.length === 0">
|
|
71
|
-
<span class="dropdown-item text-muted">{{ t('
|
|
49
|
+
<span class="dropdown-item text-muted">{{ t('layout.header.noCategories') }}</span>
|
|
72
50
|
</li>
|
|
73
51
|
</ul>
|
|
74
52
|
</li>
|
|
75
53
|
</ul>
|
|
76
54
|
|
|
77
55
|
<div class="collapse navbar-collapse">
|
|
78
|
-
<
|
|
79
|
-
<li class="nav-item">
|
|
80
|
-
<NuxtLink class="nav-link" to="/"> {{ t('nav.home') }} </NuxtLink>
|
|
81
|
-
</li>
|
|
82
|
-
|
|
83
|
-
<li class="nav-item">
|
|
84
|
-
<NuxtLink class="nav-link" to="/products"> {{ t('nav.products') }} </NuxtLink>
|
|
85
|
-
</li>
|
|
86
|
-
|
|
87
|
-
<li class="nav-item">
|
|
88
|
-
<NuxtLink class="nav-link" to="/categories"> {{ t('nav.categories') }} </NuxtLink>
|
|
89
|
-
</li>
|
|
90
|
-
|
|
91
|
-
<li class="nav-item">
|
|
92
|
-
<NuxtLink class="nav-link" to="/about-us"> {{ t('nav.about') }} </NuxtLink>
|
|
93
|
-
</li>
|
|
94
|
-
|
|
95
|
-
<li class="nav-item">
|
|
96
|
-
<NuxtLink class="nav-link" to="/contact"> {{ t('nav.contact') }} </NuxtLink>
|
|
97
|
-
</li>
|
|
98
|
-
</ul>
|
|
56
|
+
<LayoutNavLinks />
|
|
99
57
|
</div>
|
|
100
58
|
|
|
101
|
-
<ul
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
<li class="info" v-if="phone">
|
|
105
|
-
<a :href="`tel:${phone}`" class="text-decoration-none">
|
|
59
|
+
<ul class="d-none d-lg-flex others-options grocery-options ps-0 mb-0 list-unstyled justify-content-end">
|
|
60
|
+
<li v-if="phone" class="info">
|
|
61
|
+
<a :href="`tel:${phone}`" class="text-decoration-none success-hover-bg">
|
|
106
62
|
<div class="d-flex align-items-center">
|
|
107
|
-
<div class="flex-shrink-0">
|
|
108
|
-
<i class="ri-phone-line bg-danger-10"></i>
|
|
109
|
-
</div>
|
|
63
|
+
<div class="flex-shrink-0"><i class="ri-phone-line"></i></div>
|
|
110
64
|
<div class="flex-grow-1 ms-10">
|
|
111
|
-
<span>{{ t('
|
|
65
|
+
<span>{{ t('layout.header.hotline') }}</span>
|
|
112
66
|
<h3>{{ phone }}</h3>
|
|
113
67
|
</div>
|
|
114
68
|
</div>
|
|
@@ -118,70 +72,3 @@
|
|
|
118
72
|
</div>
|
|
119
73
|
</div>
|
|
120
74
|
</template>
|
|
121
|
-
|
|
122
|
-
<script lang="ts">
|
|
123
|
-
import { defineComponent, ref, watch, onMounted, computed } from "vue";
|
|
124
|
-
import stateStore from "~/utils/store";
|
|
125
|
-
|
|
126
|
-
import defaultLogoImg from "~/assets/images/logo.png";
|
|
127
|
-
|
|
128
|
-
export default defineComponent({
|
|
129
|
-
name: "Navbar",
|
|
130
|
-
setup() {
|
|
131
|
-
const isSticky = ref(false);
|
|
132
|
-
const show = ref(false);
|
|
133
|
-
const buttonShowState = ref(false);
|
|
134
|
-
const activeSubDropdown = ref<string | null>(null);
|
|
135
|
-
const stateStoreInstance = stateStore;
|
|
136
|
-
const defaultLogo = defaultLogoImg;
|
|
137
|
-
|
|
138
|
-
const { t } = useI18n();
|
|
139
|
-
const { topLevelCategories, getSubcategories } = useCategories();
|
|
140
|
-
const { logoUrl, contactInfo } = useSiteConfig();
|
|
141
|
-
|
|
142
|
-
const phone = computed(() => contactInfo.value?.phone);
|
|
143
|
-
|
|
144
|
-
const toggleCategories = () => {
|
|
145
|
-
show.value = !show.value;
|
|
146
|
-
buttonShowState.value = !buttonShowState.value;
|
|
147
|
-
};
|
|
148
|
-
|
|
149
|
-
const toggleSubDropdown = (subDropdown: string) => {
|
|
150
|
-
activeSubDropdown.value =
|
|
151
|
-
activeSubDropdown.value === subDropdown ? null : subDropdown;
|
|
152
|
-
};
|
|
153
|
-
|
|
154
|
-
const handleScroll = () => {
|
|
155
|
-
const scrollPos = window.scrollY;
|
|
156
|
-
isSticky.value = scrollPos >= 100;
|
|
157
|
-
};
|
|
158
|
-
|
|
159
|
-
onMounted(() => {
|
|
160
|
-
window.addEventListener("scroll", handleScroll);
|
|
161
|
-
});
|
|
162
|
-
|
|
163
|
-
watch(isSticky, (newValue: any) => {
|
|
164
|
-
if (newValue) {
|
|
165
|
-
show.value = false;
|
|
166
|
-
buttonShowState.value = false;
|
|
167
|
-
}
|
|
168
|
-
});
|
|
169
|
-
|
|
170
|
-
return {
|
|
171
|
-
isSticky,
|
|
172
|
-
show,
|
|
173
|
-
buttonShowState,
|
|
174
|
-
toggleCategories,
|
|
175
|
-
toggleSubDropdown,
|
|
176
|
-
activeSubDropdown,
|
|
177
|
-
stateStoreInstance,
|
|
178
|
-
defaultLogo,
|
|
179
|
-
topLevelCategories,
|
|
180
|
-
getSubcategories,
|
|
181
|
-
logoUrl,
|
|
182
|
-
phone,
|
|
183
|
-
t,
|
|
184
|
-
};
|
|
185
|
-
},
|
|
186
|
-
});
|
|
187
|
-
</script>
|
|
@@ -1,334 +1,3 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<
|
|
3
|
-
:class="[
|
|
4
|
-
'navbar navbar-expand-lg bg-warningdiv1 ptb-6',
|
|
5
|
-
{ sticky: isSticky },
|
|
6
|
-
]"
|
|
7
|
-
>
|
|
8
|
-
<div class="container mw-1610">
|
|
9
|
-
<NuxtLink class="navbar-brand d-lg-none" to="/">
|
|
10
|
-
<img
|
|
11
|
-
src="~/assets/images/grocery-shop-logo.png"
|
|
12
|
-
class="main-logo"
|
|
13
|
-
alt="white-logo"
|
|
14
|
-
/>
|
|
15
|
-
</NuxtLink>
|
|
16
|
-
<a
|
|
17
|
-
class="navbar-toggler"
|
|
18
|
-
href="javascript:void(0);"
|
|
19
|
-
@click="stateStoreInstance.onChangeShow"
|
|
20
|
-
>
|
|
21
|
-
<span class="burger-menu">
|
|
22
|
-
<span class="top-bar"></span>
|
|
23
|
-
<span class="middle-bar"></span>
|
|
24
|
-
<span class="bottom-bar"></span>
|
|
25
|
-
</span>
|
|
26
|
-
</a>
|
|
27
|
-
|
|
28
|
-
<div class="collapse navbar-collapse" id="navbarSupportedContent">
|
|
29
|
-
<ul class="navbar-nav me-auto">
|
|
30
|
-
<li class="nav-item dropdown">
|
|
31
|
-
<a class="nav-link dropdown-toggle" href="#"> Home </a>
|
|
32
|
-
|
|
33
|
-
<ul class="dropdown-menu">
|
|
34
|
-
<li>
|
|
35
|
-
<NuxtLink class="dropdown-item" to="/">
|
|
36
|
-
Electronics & Telemobile Online Shop
|
|
37
|
-
</NuxtLink>
|
|
38
|
-
</li>
|
|
39
|
-
<li>
|
|
40
|
-
<NuxtLink class="dropdown-item" to="/grocery-shop">
|
|
41
|
-
Grocery Shop
|
|
42
|
-
</NuxtLink>
|
|
43
|
-
</li>
|
|
44
|
-
<li>
|
|
45
|
-
<NuxtLink class="dropdown-item" to="/healthy-diet-foods-shop">
|
|
46
|
-
Healthy Diet Foods Shop
|
|
47
|
-
</NuxtLink>
|
|
48
|
-
</li>
|
|
49
|
-
</ul>
|
|
50
|
-
</li>
|
|
51
|
-
|
|
52
|
-
<li class="nav-item dropdown">
|
|
53
|
-
<a class="nav-link dropdown-toggle" href="#"> Pages </a>
|
|
54
|
-
|
|
55
|
-
<ul class="dropdown-menu">
|
|
56
|
-
<li>
|
|
57
|
-
<NuxtLink class="dropdown-item" to="/about-us">
|
|
58
|
-
About Us
|
|
59
|
-
</NuxtLink>
|
|
60
|
-
</li>
|
|
61
|
-
|
|
62
|
-
<li>
|
|
63
|
-
<a class="dropdown-item sub-dropdown dropdown-toggle" href="#">
|
|
64
|
-
Authentication
|
|
65
|
-
</a>
|
|
66
|
-
|
|
67
|
-
<ul class="dropdown-menu">
|
|
68
|
-
<li>
|
|
69
|
-
<NuxtLink class="dropdown-item" to="/login">
|
|
70
|
-
Login
|
|
71
|
-
</NuxtLink>
|
|
72
|
-
</li>
|
|
73
|
-
<li>
|
|
74
|
-
<NuxtLink class="dropdown-item" to="/register">
|
|
75
|
-
Register
|
|
76
|
-
</NuxtLink>
|
|
77
|
-
</li>
|
|
78
|
-
<li>
|
|
79
|
-
<NuxtLink class="dropdown-item" to="/my-account">
|
|
80
|
-
My Account
|
|
81
|
-
</NuxtLink>
|
|
82
|
-
</li>
|
|
83
|
-
<li>
|
|
84
|
-
<NuxtLink class="dropdown-item" to="/change-password">
|
|
85
|
-
Change Password
|
|
86
|
-
</NuxtLink>
|
|
87
|
-
</li>
|
|
88
|
-
<li>
|
|
89
|
-
<NuxtLink class="dropdown-item" to="/forgot-password">
|
|
90
|
-
Forgot Password
|
|
91
|
-
</NuxtLink>
|
|
92
|
-
</li>
|
|
93
|
-
</ul>
|
|
94
|
-
</li>
|
|
95
|
-
<li>
|
|
96
|
-
<NuxtLink class="dropdown-item" to="/faq"> FAQ </NuxtLink>
|
|
97
|
-
</li>
|
|
98
|
-
<li>
|
|
99
|
-
<NuxtLink class="dropdown-item" to="/privacy-policy">
|
|
100
|
-
Privacy Policy
|
|
101
|
-
</NuxtLink>
|
|
102
|
-
</li>
|
|
103
|
-
<li>
|
|
104
|
-
<NuxtLink class="dropdown-item" to="/terms-conditions">
|
|
105
|
-
Terms & Conditions
|
|
106
|
-
</NuxtLink>
|
|
107
|
-
</li>
|
|
108
|
-
</ul>
|
|
109
|
-
</li>
|
|
110
|
-
|
|
111
|
-
<li class="nav-item mega-menu">
|
|
112
|
-
<a href="#" class="nav-link dropdown-toggle"> Shop </a>
|
|
113
|
-
|
|
114
|
-
<ul class="dropdown-menu">
|
|
115
|
-
<li class="nav-item">
|
|
116
|
-
<div class="row">
|
|
117
|
-
<div class="col">
|
|
118
|
-
<h6 class="sub-menu-title">Product Layouts</h6>
|
|
119
|
-
|
|
120
|
-
<ul class="sub-menu">
|
|
121
|
-
<li>
|
|
122
|
-
<NuxtLink class="dropdown-item" to="/best-sellers">
|
|
123
|
-
Best Sellers
|
|
124
|
-
</NuxtLink>
|
|
125
|
-
</li>
|
|
126
|
-
<li>
|
|
127
|
-
<NuxtLink class="dropdown-item" to="/featured-products">
|
|
128
|
-
Featured Products
|
|
129
|
-
</NuxtLink>
|
|
130
|
-
</li>
|
|
131
|
-
<li>
|
|
132
|
-
<NuxtLink class="dropdown-item" to="/trending-products">
|
|
133
|
-
Trending Products
|
|
134
|
-
</NuxtLink>
|
|
135
|
-
</li>
|
|
136
|
-
<li>
|
|
137
|
-
<NuxtLink class="dropdown-item" to="/new-arrivals">
|
|
138
|
-
New Arrivals
|
|
139
|
-
</NuxtLink>
|
|
140
|
-
</li>
|
|
141
|
-
<li>
|
|
142
|
-
<NuxtLink class="dropdown-item" to="/categories">
|
|
143
|
-
Categories
|
|
144
|
-
</NuxtLink>
|
|
145
|
-
</li>
|
|
146
|
-
</ul>
|
|
147
|
-
</div>
|
|
148
|
-
|
|
149
|
-
<div class="col">
|
|
150
|
-
<h6 class="sub-menu-title">Products Step</h6>
|
|
151
|
-
|
|
152
|
-
<ul class="sub-menu">
|
|
153
|
-
<li>
|
|
154
|
-
<NuxtLink class="dropdown-item" to="/products">
|
|
155
|
-
Products
|
|
156
|
-
</NuxtLink>
|
|
157
|
-
</li>
|
|
158
|
-
<li>
|
|
159
|
-
<NuxtLink class="dropdown-item" to="/cart">
|
|
160
|
-
Cart
|
|
161
|
-
</NuxtLink>
|
|
162
|
-
</li>
|
|
163
|
-
<li>
|
|
164
|
-
<NuxtLink class="dropdown-item" to="/wishlist">
|
|
165
|
-
Wishlist
|
|
166
|
-
</NuxtLink>
|
|
167
|
-
</li>
|
|
168
|
-
<li>
|
|
169
|
-
<NuxtLink class="dropdown-item" to="/checkout">
|
|
170
|
-
Checkout
|
|
171
|
-
</NuxtLink>
|
|
172
|
-
</li>
|
|
173
|
-
<li>
|
|
174
|
-
<NuxtLink class="dropdown-item" to="/product-details">
|
|
175
|
-
Product Details
|
|
176
|
-
</NuxtLink>
|
|
177
|
-
</li>
|
|
178
|
-
</ul>
|
|
179
|
-
</div>
|
|
180
|
-
|
|
181
|
-
<div class="col">
|
|
182
|
-
<h6 class="sub-menu-title">Admin Page</h6>
|
|
183
|
-
|
|
184
|
-
<ul class="sub-menu">
|
|
185
|
-
<li>
|
|
186
|
-
<NuxtLink class="dropdown-item" to="/dashboard">
|
|
187
|
-
Dashboard
|
|
188
|
-
</NuxtLink>
|
|
189
|
-
</li>
|
|
190
|
-
<li>
|
|
191
|
-
<NuxtLink class="dropdown-item" to="/edit-profile">
|
|
192
|
-
Edit Profile
|
|
193
|
-
</NuxtLink>
|
|
194
|
-
</li>
|
|
195
|
-
<li>
|
|
196
|
-
<NuxtLink class="dropdown-item" to="/order-history">
|
|
197
|
-
Order History
|
|
198
|
-
</NuxtLink>
|
|
199
|
-
</li>
|
|
200
|
-
<li>
|
|
201
|
-
<NuxtLink class="dropdown-item" to="/order-details">
|
|
202
|
-
Order Details
|
|
203
|
-
</NuxtLink>
|
|
204
|
-
</li>
|
|
205
|
-
<li>
|
|
206
|
-
<NuxtLink class="dropdown-item" to="/password">
|
|
207
|
-
Change Password
|
|
208
|
-
</NuxtLink>
|
|
209
|
-
</li>
|
|
210
|
-
</ul>
|
|
211
|
-
</div>
|
|
212
|
-
|
|
213
|
-
<div class="col">
|
|
214
|
-
<NuxtLink
|
|
215
|
-
to="/products"
|
|
216
|
-
class="bg-img menu-img"
|
|
217
|
-
:style="{
|
|
218
|
-
'background-image': `url(${image})`,
|
|
219
|
-
}"
|
|
220
|
-
>
|
|
221
|
-
</NuxtLink>
|
|
222
|
-
</div>
|
|
223
|
-
</div>
|
|
224
|
-
</li>
|
|
225
|
-
</ul>
|
|
226
|
-
</li>
|
|
227
|
-
|
|
228
|
-
<li class="nav-item dropdown">
|
|
229
|
-
<a class="nav-link dropdown-toggle" href="#"> Blog </a>
|
|
230
|
-
|
|
231
|
-
<ul class="dropdown-menu">
|
|
232
|
-
<li>
|
|
233
|
-
<NuxtLink class="dropdown-item" to="/our-blog">
|
|
234
|
-
Our Blog
|
|
235
|
-
</NuxtLink>
|
|
236
|
-
</li>
|
|
237
|
-
<li>
|
|
238
|
-
<NuxtLink class="dropdown-item" to="/blog-details">
|
|
239
|
-
Blog Details
|
|
240
|
-
</NuxtLink>
|
|
241
|
-
</li>
|
|
242
|
-
<li>
|
|
243
|
-
<NuxtLink class="dropdown-item" to="/tags"> Tags </NuxtLink>
|
|
244
|
-
</li>
|
|
245
|
-
<li>
|
|
246
|
-
<NuxtLink class="dropdown-item" to="/categories">
|
|
247
|
-
Categories
|
|
248
|
-
</NuxtLink>
|
|
249
|
-
</li>
|
|
250
|
-
<li>
|
|
251
|
-
<NuxtLink class="dropdown-item" to="/author"> Author </NuxtLink>
|
|
252
|
-
</li>
|
|
253
|
-
</ul>
|
|
254
|
-
</li>
|
|
255
|
-
|
|
256
|
-
<li class="nav-item dropdown">
|
|
257
|
-
<NuxtLink class="nav-link" to="/contact"> Contact </NuxtLink>
|
|
258
|
-
</li>
|
|
259
|
-
</ul>
|
|
260
|
-
</div>
|
|
261
|
-
|
|
262
|
-
<ul
|
|
263
|
-
class="d-none d-lg-flex others-options grocery-options ps-0 mb-0 list-unstyled justify-content-end"
|
|
264
|
-
>
|
|
265
|
-
<li class="info">
|
|
266
|
-
<a href="tel:808-555-0111" class="text-decoration-none">
|
|
267
|
-
<div class="d-flex align-items-center">
|
|
268
|
-
<div class="flex-shrink-0">
|
|
269
|
-
<i class="ri-phone-line bg-danger-10"></i>
|
|
270
|
-
</div>
|
|
271
|
-
<div class="flex-grow-1 ms-10">
|
|
272
|
-
<span>Hotline</span>
|
|
273
|
-
<h3>(808) 555-0111</h3>
|
|
274
|
-
</div>
|
|
275
|
-
</div>
|
|
276
|
-
</a>
|
|
277
|
-
</li>
|
|
278
|
-
<li class="info">
|
|
279
|
-
<a
|
|
280
|
-
href="#"
|
|
281
|
-
class="text-decoration-none success-hover-bg"
|
|
282
|
-
@click="stateStoreInstance.onChange"
|
|
283
|
-
>
|
|
284
|
-
<div class="d-flex align-items-center">
|
|
285
|
-
<div class="flex-shrink-0">
|
|
286
|
-
<i class="ri-map-pin-2-line"></i>
|
|
287
|
-
</div>
|
|
288
|
-
<div class="flex-grow-1 ms-10">
|
|
289
|
-
<span>Deliver to</span>
|
|
290
|
-
<h3>Find Location</h3>
|
|
291
|
-
</div>
|
|
292
|
-
</div>
|
|
293
|
-
</a>
|
|
294
|
-
</li>
|
|
295
|
-
</ul>
|
|
296
|
-
</div>
|
|
297
|
-
</div>
|
|
2
|
+
<LayoutNavbar :with-categories="false" />
|
|
298
3
|
</template>
|
|
299
|
-
|
|
300
|
-
<script lang="ts">
|
|
301
|
-
import { defineComponent, ref, onMounted } from "vue";
|
|
302
|
-
import stateStore from "~/utils/store";
|
|
303
|
-
|
|
304
|
-
import image from "~/assets/images/menu-product.jpg";
|
|
305
|
-
|
|
306
|
-
export default defineComponent({
|
|
307
|
-
name: "NavbarStyleFour",
|
|
308
|
-
setup() {
|
|
309
|
-
const isSticky = ref(false);
|
|
310
|
-
const show = ref(false);
|
|
311
|
-
const stateStoreInstance = stateStore;
|
|
312
|
-
|
|
313
|
-
const toggleCategories = () => {
|
|
314
|
-
show.value = !show.value;
|
|
315
|
-
};
|
|
316
|
-
|
|
317
|
-
const handleScroll = () => {
|
|
318
|
-
const scrollPos = window.scrollY;
|
|
319
|
-
isSticky.value = scrollPos >= 100;
|
|
320
|
-
};
|
|
321
|
-
|
|
322
|
-
onMounted(() => {
|
|
323
|
-
window.addEventListener("scroll", handleScroll);
|
|
324
|
-
});
|
|
325
|
-
|
|
326
|
-
return {
|
|
327
|
-
isSticky,
|
|
328
|
-
toggleCategories,
|
|
329
|
-
stateStoreInstance,
|
|
330
|
-
image,
|
|
331
|
-
};
|
|
332
|
-
},
|
|
333
|
-
});
|
|
334
|
-
</script>
|