@crm-market/template-shared 1.0.3 → 1.0.4
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/components/AddAddress/index.vue +10 -12
- package/components/Cart/index.vue +15 -17
- package/components/ChangePassword/index.vue +11 -13
- package/components/Checkout/index.vue +35 -37
- package/components/Common/DashboardNavigation.vue +11 -13
- package/components/Common/PageBanner.vue +4 -6
- package/components/Common/ProductCard.vue +38 -52
- package/components/Common/Services.vue +10 -12
- package/components/Contact/ContactForm.vue +13 -18
- package/components/Dashboard/index.vue +8 -10
- package/components/EditAddress/index.vue +14 -16
- package/components/EditProfile/index.vue +10 -12
- package/components/ForgotPassword/index.vue +7 -9
- package/components/Layout/Copyright.vue +3 -5
- package/components/Layout/Footer.vue +36 -51
- package/components/Layout/FooterTwo.vue +34 -40
- package/components/Layout/MiddleHeader.vue +11 -9
- package/components/Layout/MiddleHeaderThree.vue +7 -5
- package/components/Layout/MiddleHeaderTwo.vue +9 -7
- package/components/Layout/Navbar.vue +10 -8
- package/components/Layout/NavbarStyleThree.vue +10 -8
- package/components/Layout/NavbarStyleTwo.vue +8 -6
- package/components/Layout/ResponsiveNavbar.vue +40 -38
- package/components/Layout/TopHeader.vue +30 -63
- package/components/Login/index.vue +14 -19
- package/components/MyAccount/index.vue +31 -31
- package/components/OrderDetails/index.vue +16 -18
- package/components/OrderHistory/index.vue +13 -15
- package/components/ProductDetails/index.vue +17 -15
- package/components/Products/RecentlyViewed.vue +12 -14
- package/components/Products/index.vue +20 -18
- package/components/Register/index.vue +14 -19
- package/components/Wishlist/index.vue +12 -14
- package/composables/useI18n.ts +114 -0
- package/locales/ar.json +234 -0
- package/locales/en.json +234 -0
- package/locales/ru.json +234 -0
- package/locales/uk.json +234 -0
- package/nuxt.config.ts +1 -0
- package/package.json +6 -4
- package/pages/about-us.vue +2 -1
- package/pages/address.vue +2 -1
- package/pages/cart.vue +2 -1
- package/pages/categories.vue +2 -1
- package/pages/change-password.vue +2 -1
- package/pages/checkout.vue +2 -1
- package/pages/contact.vue +2 -1
- package/pages/dashboard.vue +2 -1
- package/pages/edit-address.vue +2 -1
- package/pages/edit-profile.vue +2 -1
- package/pages/faq.vue +2 -1
- package/pages/forgot-password.vue +2 -1
- package/pages/login.vue +2 -1
- package/pages/my-account.vue +2 -1
- package/pages/order-details.vue +2 -1
- package/pages/order-history.vue +2 -1
- package/pages/privacy-policy.vue +2 -1
- package/pages/product-details.vue +2 -1
- package/pages/products.vue +2 -1
- package/pages/register.vue +2 -1
- package/pages/terms-conditions.vue +2 -1
- package/pages/wishlist.vue +2 -1
- package/plugins/i18n.ts +7 -0
- package/plugins/vuetify.ts +0 -1
|
@@ -5,14 +5,13 @@
|
|
|
5
5
|
<v-row class="justify-content-center">
|
|
6
6
|
<v-col cols="12" lg="3" sm="6">
|
|
7
7
|
<div class="single-footer-widget">
|
|
8
|
-
<h3>
|
|
8
|
+
<h3>{{ t('footer.aboutTheShop') }}</h3>
|
|
9
9
|
<p>
|
|
10
|
-
|
|
11
|
-
cutting-edge electronics and telemobile devices
|
|
10
|
+
{{ t('footer.storeDescription') }}
|
|
12
11
|
</p>
|
|
13
12
|
|
|
14
13
|
<div class="call-info">
|
|
15
|
-
<span class="title">
|
|
14
|
+
<span class="title">{{ t('footer.gotQuestion') }}</span>
|
|
16
15
|
<div class="d-flex align-items-center">
|
|
17
16
|
<i class="flaticon-headphones-1"></i>
|
|
18
17
|
<a href="tel:(808)-555-0111">(808) 555-0111</a>
|
|
@@ -22,78 +21,68 @@
|
|
|
22
21
|
</v-col>
|
|
23
22
|
<v-col cols="12" lg="3" sm="6">
|
|
24
23
|
<div class="single-footer-widget">
|
|
25
|
-
<h3>
|
|
24
|
+
<h3>{{ t('footer.popularCategories') }}</h3>
|
|
26
25
|
|
|
27
26
|
<ul class="ps-0 mb-0 list-unstyled import-link">
|
|
28
|
-
<li>
|
|
29
|
-
<NuxtLink to="
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
<NuxtLink to="/products">Laptop & Desktop</NuxtLink>
|
|
33
|
-
</li>
|
|
34
|
-
<li>
|
|
35
|
-
<NuxtLink to="/products">Headphones</NuxtLink>
|
|
36
|
-
</li>
|
|
37
|
-
<li>
|
|
38
|
-
<NuxtLink to="/products">Smart Watches</NuxtLink>
|
|
39
|
-
</li>
|
|
40
|
-
<li>
|
|
41
|
-
<NuxtLink to="/products">Drone & Camera</NuxtLink>
|
|
27
|
+
<li v-for="category in footerCategories" :key="category.id">
|
|
28
|
+
<NuxtLink :to="`/products?categoryId=${category.id}`">
|
|
29
|
+
{{ category.name }}
|
|
30
|
+
</NuxtLink>
|
|
42
31
|
</li>
|
|
43
|
-
<li>
|
|
44
|
-
<NuxtLink to="/products">
|
|
32
|
+
<li v-if="footerCategories.length === 0">
|
|
33
|
+
<NuxtLink to="/products">{{ t('nav.allProducts') }}</NuxtLink>
|
|
45
34
|
</li>
|
|
46
35
|
</ul>
|
|
47
36
|
</div>
|
|
48
37
|
</v-col>
|
|
49
38
|
<v-col cols="12" lg="3" sm="6">
|
|
50
39
|
<div class="single-footer-widget">
|
|
51
|
-
<h3>
|
|
40
|
+
<h3>{{ t('footer.letUsHelp') }}</h3>
|
|
52
41
|
|
|
53
42
|
<ul class="ps-0 mb-0 list-unstyled import-link">
|
|
54
43
|
<li>
|
|
55
|
-
<NuxtLink to="/dashboard">
|
|
44
|
+
<NuxtLink to="/dashboard">{{ t('account.yourAccount') }}</NuxtLink>
|
|
56
45
|
</li>
|
|
57
46
|
<li>
|
|
58
|
-
<NuxtLink to="/order-history">
|
|
47
|
+
<NuxtLink to="/order-history">{{ t('account.yourOrders') }}</NuxtLink>
|
|
59
48
|
</li>
|
|
60
49
|
<li>
|
|
61
|
-
<NuxtLink to="/privacy-policy">
|
|
50
|
+
<NuxtLink to="/privacy-policy">{{ t('footer.returnPolicy') }}</NuxtLink>
|
|
62
51
|
</li>
|
|
63
52
|
<li>
|
|
64
|
-
<NuxtLink to="/faq">
|
|
53
|
+
<NuxtLink to="/faq">{{ t('common.helpCenter') }}</NuxtLink>
|
|
65
54
|
</li>
|
|
66
55
|
<li>
|
|
67
|
-
<NuxtLink to="/products">
|
|
56
|
+
<NuxtLink to="/products">{{ t('footer.productReplacement') }}</NuxtLink>
|
|
68
57
|
</li>
|
|
69
58
|
<li>
|
|
70
|
-
<NuxtLink to="/dashboard">
|
|
59
|
+
<NuxtLink to="/dashboard">{{ t('footer.shopWithPoints') }}</NuxtLink>
|
|
71
60
|
</li>
|
|
72
61
|
</ul>
|
|
73
62
|
</div>
|
|
74
63
|
</v-col>
|
|
75
64
|
<v-col cols="12" lg="3" sm="6">
|
|
76
65
|
<div class="single-footer-widget">
|
|
77
|
-
<h3>
|
|
66
|
+
<h3>{{ t('footer.getToKnowUs') }}</h3>
|
|
78
67
|
|
|
79
68
|
<ul class="ps-0 mb-0 list-unstyled import-link">
|
|
80
69
|
<li>
|
|
81
|
-
<NuxtLink to="/about-us">
|
|
70
|
+
<NuxtLink to="/about-us">{{ t('nav.aboutUs') }}</NuxtLink>
|
|
82
71
|
</li>
|
|
83
72
|
<li>
|
|
84
|
-
<NuxtLink to="/about-us">
|
|
73
|
+
<NuxtLink to="/about-us">{{ t('footer.careers') }}</NuxtLink>
|
|
85
74
|
</li>
|
|
86
75
|
<li>
|
|
87
|
-
<NuxtLink to="/contact">
|
|
76
|
+
<NuxtLink to="/contact">{{ t('footer.storeLocation') }}</NuxtLink>
|
|
88
77
|
</li>
|
|
89
78
|
<li>
|
|
90
|
-
<NuxtLink to="/our-blog">
|
|
79
|
+
<NuxtLink to="/our-blog">{{ t('footer.newsCenter') }}</NuxtLink>
|
|
91
80
|
</li>
|
|
92
81
|
<li>
|
|
93
82
|
<NuxtLink to="/about-us">Investor Relations</NuxtLink>
|
|
94
83
|
</li>
|
|
95
84
|
<li>
|
|
96
|
-
<NuxtLink to="/contact">
|
|
85
|
+
<NuxtLink to="/contact">{{ t('nav.contact') }}</NuxtLink>
|
|
97
86
|
</li>
|
|
98
87
|
</ul>
|
|
99
88
|
</div>
|
|
@@ -107,7 +96,7 @@
|
|
|
107
96
|
class="ps-0 mb-0 list-unstyled d-flex align-items-center social-link ms-0 justify-content-md-start justify-content-center"
|
|
108
97
|
>
|
|
109
98
|
<li>
|
|
110
|
-
<span class="titles">
|
|
99
|
+
<span class="titles">{{ t('footer.followUs') }}:</span>
|
|
111
100
|
</li>
|
|
112
101
|
<li>
|
|
113
102
|
<a href="https://www.facebook.com/" target="_blank">
|
|
@@ -138,7 +127,7 @@
|
|
|
138
127
|
class="ps-0 mb-0 list-unstyled d-flex align-items-center justify-content-center justify-content-lg-end app-link"
|
|
139
128
|
>
|
|
140
129
|
<li>
|
|
141
|
-
<span class="titles">
|
|
130
|
+
<span class="titles">{{ t('footer.downloadApp') }}:</span>
|
|
142
131
|
</li>
|
|
143
132
|
<li>
|
|
144
133
|
<a href="https://www.apple.com/store" target="_blank">
|
|
@@ -158,8 +147,13 @@
|
|
|
158
147
|
</div>
|
|
159
148
|
</template>
|
|
160
149
|
|
|
161
|
-
<script>
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
};
|
|
150
|
+
<script setup lang="ts">
|
|
151
|
+
import { computed } from "vue";
|
|
152
|
+
|
|
153
|
+
const { t } = useI18n();
|
|
154
|
+
const { topLevelCategories } = useCategories();
|
|
155
|
+
|
|
156
|
+
const footerCategories = computed(() =>
|
|
157
|
+
topLevelCategories.value.slice(0, 6)
|
|
158
|
+
);
|
|
165
159
|
</script>
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
:aria-pressed="show ? 'true' : 'false'"
|
|
17
17
|
:class="{ show: buttonShowState }"
|
|
18
18
|
>
|
|
19
|
-
|
|
19
|
+
{{ t('nav.allCategories') }}
|
|
20
20
|
</button>
|
|
21
21
|
<ul class="dropdown-menu" :class="{ toggler: show }">
|
|
22
22
|
<li v-for="category in topLevelCategories" :key="category.id">
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
</NuxtLink>
|
|
29
29
|
</li>
|
|
30
30
|
<li v-if="topLevelCategories.length === 0">
|
|
31
|
-
<span class="dropdown-item text-muted">
|
|
31
|
+
<span class="dropdown-item text-muted">{{ t('nav.noCategories') }}</span>
|
|
32
32
|
</li>
|
|
33
33
|
</ul>
|
|
34
34
|
</div>
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
<input
|
|
37
37
|
type="text"
|
|
38
38
|
class="form-control border-2"
|
|
39
|
-
placeholder="
|
|
39
|
+
:placeholder="t('nav.searchProducts')"
|
|
40
40
|
v-model="searchQuery"
|
|
41
41
|
@keyup.enter="handleSearch"
|
|
42
42
|
/>
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
@click="handleSearch"
|
|
47
47
|
>
|
|
48
48
|
<i class="ri-search-line"></i>
|
|
49
|
-
<span class="d-none d-sm-inline-block">
|
|
49
|
+
<span class="d-none d-sm-inline-block">{{ t('nav.search') }}</span>
|
|
50
50
|
</button>
|
|
51
51
|
</div>
|
|
52
52
|
</div>
|
|
@@ -62,8 +62,8 @@
|
|
|
62
62
|
<i class="ri-user-line"></i>
|
|
63
63
|
</div>
|
|
64
64
|
<div class="flex-grow-1 ms-10">
|
|
65
|
-
<span>
|
|
66
|
-
<h3>
|
|
65
|
+
<span>{{ t('auth.login') }}</span>
|
|
66
|
+
<h3>{{ t('account.yourAccount') }}</h3>
|
|
67
67
|
</div>
|
|
68
68
|
</div>
|
|
69
69
|
</NuxtLink>
|
|
@@ -93,7 +93,7 @@
|
|
|
93
93
|
</div>
|
|
94
94
|
</div>
|
|
95
95
|
<div class="flex-grow-1 ms-1">
|
|
96
|
-
<span>
|
|
96
|
+
<span>{{ t('account.yourCart') }}</span>
|
|
97
97
|
<h3>${{ subtotal.toFixed(2) }}</h3>
|
|
98
98
|
</div>
|
|
99
99
|
</div>
|
|
@@ -142,13 +142,13 @@
|
|
|
142
142
|
class="d-flex justify-content-between align-items-center cart-item"
|
|
143
143
|
>
|
|
144
144
|
<NuxtLink to="/cart" class="btn btn-primary fs-14 text-white">
|
|
145
|
-
|
|
145
|
+
{{ t('account.viewCart') }}
|
|
146
146
|
</NuxtLink>
|
|
147
147
|
<NuxtLink
|
|
148
148
|
to="/checkout"
|
|
149
149
|
class="btn btn-warning fs-14 text-white"
|
|
150
150
|
>
|
|
151
|
-
|
|
151
|
+
{{ t('account.checkout') }}
|
|
152
152
|
</NuxtLink>
|
|
153
153
|
</li>
|
|
154
154
|
</template>
|
|
@@ -177,6 +177,7 @@ export default defineComponent({
|
|
|
177
177
|
const defaultLogo = defaultLogoImg;
|
|
178
178
|
const router = useRouter();
|
|
179
179
|
|
|
180
|
+
const { t } = useI18n();
|
|
180
181
|
const { topLevelCategories } = useCategories();
|
|
181
182
|
const { logoUrl } = useSiteConfig();
|
|
182
183
|
const { cart, itemCount, subtotal, isEmpty, removeFromCart } = useCart();
|
|
@@ -223,6 +224,7 @@ export default defineComponent({
|
|
|
223
224
|
isEmpty,
|
|
224
225
|
removeFromCart,
|
|
225
226
|
resolveImageUrl,
|
|
227
|
+
t,
|
|
226
228
|
};
|
|
227
229
|
},
|
|
228
230
|
});
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
<input
|
|
13
13
|
type="text"
|
|
14
14
|
class="form-control border-2"
|
|
15
|
-
placeholder="
|
|
15
|
+
:placeholder="t('nav.searchProducts')"
|
|
16
16
|
v-model="searchQuery"
|
|
17
17
|
@keyup.enter="handleSearch"
|
|
18
18
|
/>
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
@click="handleSearch"
|
|
23
23
|
>
|
|
24
24
|
<i class="ri-search-line"></i>
|
|
25
|
-
<span class="d-none d-sm-inline-block">
|
|
25
|
+
<span class="d-none d-sm-inline-block">{{ t('nav.search') }}</span>
|
|
26
26
|
</button>
|
|
27
27
|
</div>
|
|
28
28
|
</div>
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
<i class="ri-phone-line bg-danger-10"></i>
|
|
38
38
|
</div>
|
|
39
39
|
<div class="flex-grow-1 ms-10">
|
|
40
|
-
<span>
|
|
40
|
+
<span>{{ t('nav.hotline') }}</span>
|
|
41
41
|
<h3>{{ phone }}</h3>
|
|
42
42
|
</div>
|
|
43
43
|
</div>
|
|
@@ -125,13 +125,13 @@
|
|
|
125
125
|
class="d-flex justify-content-between align-items-center cart-item"
|
|
126
126
|
>
|
|
127
127
|
<NuxtLink to="/cart" class="btn btn-primary fs-14 text-white">
|
|
128
|
-
|
|
128
|
+
{{ t('account.viewCart') }}
|
|
129
129
|
</NuxtLink>
|
|
130
130
|
<NuxtLink
|
|
131
131
|
to="/checkout"
|
|
132
132
|
class="btn btn-warning fs-14 text-white"
|
|
133
133
|
>
|
|
134
|
-
|
|
134
|
+
{{ t('account.checkout') }}
|
|
135
135
|
</NuxtLink>
|
|
136
136
|
</li>
|
|
137
137
|
</template>
|
|
@@ -158,6 +158,7 @@ export default defineComponent({
|
|
|
158
158
|
const defaultLogo = defaultLogoImg;
|
|
159
159
|
const router = useRouter();
|
|
160
160
|
|
|
161
|
+
const { t } = useI18n();
|
|
161
162
|
const { logoUrl, contactInfo } = useSiteConfig();
|
|
162
163
|
const { cart, itemCount, subtotal, isEmpty, removeFromCart } = useCart();
|
|
163
164
|
|
|
@@ -198,6 +199,7 @@ export default defineComponent({
|
|
|
198
199
|
isEmpty,
|
|
199
200
|
removeFromCart,
|
|
200
201
|
resolveImageUrl,
|
|
202
|
+
t,
|
|
201
203
|
};
|
|
202
204
|
},
|
|
203
205
|
});
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
:aria-pressed="show ? 'true' : 'false'"
|
|
17
17
|
:class="{ show: buttonShowState }"
|
|
18
18
|
>
|
|
19
|
-
|
|
19
|
+
{{ t('nav.allCategories') }}
|
|
20
20
|
</button>
|
|
21
21
|
<ul class="dropdown-menu" :class="{ toggler: show }">
|
|
22
22
|
<li v-for="category in topLevelCategories" :key="category.id">
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
</NuxtLink>
|
|
29
29
|
</li>
|
|
30
30
|
<li v-if="topLevelCategories.length === 0">
|
|
31
|
-
<span class="dropdown-item text-muted">
|
|
31
|
+
<span class="dropdown-item text-muted">{{ t('nav.noCategories') }}</span>
|
|
32
32
|
</li>
|
|
33
33
|
</ul>
|
|
34
34
|
</div>
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
<input
|
|
37
37
|
type="text"
|
|
38
38
|
class="form-control border-2"
|
|
39
|
-
placeholder="
|
|
39
|
+
:placeholder="t('nav.searchProducts')"
|
|
40
40
|
v-model="searchQuery"
|
|
41
41
|
@keyup.enter="handleSearch"
|
|
42
42
|
/>
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
@click="handleSearch"
|
|
47
47
|
>
|
|
48
48
|
<i class="ri-search-line"></i>
|
|
49
|
-
<span class="d-none d-sm-inline-block">
|
|
49
|
+
<span class="d-none d-sm-inline-block">{{ t('nav.search') }}</span>
|
|
50
50
|
</button>
|
|
51
51
|
</div>
|
|
52
52
|
</div>
|
|
@@ -62,7 +62,7 @@
|
|
|
62
62
|
<i class="ri-phone-line bg-danger-10"></i>
|
|
63
63
|
</div>
|
|
64
64
|
<div class="flex-grow-1 ms-10">
|
|
65
|
-
<span>
|
|
65
|
+
<span>{{ t('nav.hotline') }}</span>
|
|
66
66
|
<h3>{{ phone }}</h3>
|
|
67
67
|
</div>
|
|
68
68
|
</div>
|
|
@@ -150,13 +150,13 @@
|
|
|
150
150
|
class="d-flex justify-content-between align-items-center cart-item"
|
|
151
151
|
>
|
|
152
152
|
<NuxtLink to="/cart" class="btn btn-primary fs-14 text-white">
|
|
153
|
-
|
|
153
|
+
{{ t('account.viewCart') }}
|
|
154
154
|
</NuxtLink>
|
|
155
155
|
<NuxtLink
|
|
156
156
|
to="/checkout"
|
|
157
157
|
class="btn btn-warning fs-14 text-white"
|
|
158
158
|
>
|
|
159
|
-
|
|
159
|
+
{{ t('account.checkout') }}
|
|
160
160
|
</NuxtLink>
|
|
161
161
|
</li>
|
|
162
162
|
</template>
|
|
@@ -185,6 +185,7 @@ export default defineComponent({
|
|
|
185
185
|
const defaultLogo = defaultLogoImg;
|
|
186
186
|
const router = useRouter();
|
|
187
187
|
|
|
188
|
+
const { t } = useI18n();
|
|
188
189
|
const { topLevelCategories } = useCategories();
|
|
189
190
|
const { logoUrl, contactInfo } = useSiteConfig();
|
|
190
191
|
const { cart, itemCount, subtotal, isEmpty, removeFromCart } = useCart();
|
|
@@ -234,6 +235,7 @@ export default defineComponent({
|
|
|
234
235
|
isEmpty,
|
|
235
236
|
removeFromCart,
|
|
236
237
|
resolveImageUrl,
|
|
238
|
+
t,
|
|
237
239
|
};
|
|
238
240
|
},
|
|
239
241
|
});
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
:class="{ show: buttonShowState }"
|
|
30
30
|
>
|
|
31
31
|
<i class="ri-menu-2-line"></i>
|
|
32
|
-
<span>
|
|
32
|
+
<span>{{ t('nav.browseCategories') }}</span>
|
|
33
33
|
</div>
|
|
34
34
|
|
|
35
35
|
<ul class="dropdown-menu" :class="{ show: show }">
|
|
@@ -68,7 +68,7 @@
|
|
|
68
68
|
</template>
|
|
69
69
|
</li>
|
|
70
70
|
<li v-if="topLevelCategories.length === 0">
|
|
71
|
-
<span class="dropdown-item text-muted">
|
|
71
|
+
<span class="dropdown-item text-muted">{{ t('nav.noCategories') }}</span>
|
|
72
72
|
</li>
|
|
73
73
|
</ul>
|
|
74
74
|
</li>
|
|
@@ -77,23 +77,23 @@
|
|
|
77
77
|
<div class="collapse navbar-collapse">
|
|
78
78
|
<ul class="navbar-nav me-auto ms-68">
|
|
79
79
|
<li class="nav-item">
|
|
80
|
-
<NuxtLink class="nav-link" to="/">
|
|
80
|
+
<NuxtLink class="nav-link" to="/"> {{ t('nav.home') }} </NuxtLink>
|
|
81
81
|
</li>
|
|
82
82
|
|
|
83
83
|
<li class="nav-item">
|
|
84
|
-
<NuxtLink class="nav-link" to="/products">
|
|
84
|
+
<NuxtLink class="nav-link" to="/products"> {{ t('nav.products') }} </NuxtLink>
|
|
85
85
|
</li>
|
|
86
86
|
|
|
87
87
|
<li class="nav-item">
|
|
88
|
-
<NuxtLink class="nav-link" to="/categories">
|
|
88
|
+
<NuxtLink class="nav-link" to="/categories"> {{ t('nav.categories') }} </NuxtLink>
|
|
89
89
|
</li>
|
|
90
90
|
|
|
91
91
|
<li class="nav-item">
|
|
92
|
-
<NuxtLink class="nav-link" to="/about-us">
|
|
92
|
+
<NuxtLink class="nav-link" to="/about-us"> {{ t('nav.about') }} </NuxtLink>
|
|
93
93
|
</li>
|
|
94
94
|
|
|
95
95
|
<li class="nav-item">
|
|
96
|
-
<NuxtLink class="nav-link" to="/contact">
|
|
96
|
+
<NuxtLink class="nav-link" to="/contact"> {{ t('nav.contact') }} </NuxtLink>
|
|
97
97
|
</li>
|
|
98
98
|
</ul>
|
|
99
99
|
</div>
|
|
@@ -108,7 +108,7 @@
|
|
|
108
108
|
<i class="ri-phone-line bg-danger-10"></i>
|
|
109
109
|
</div>
|
|
110
110
|
<div class="flex-grow-1 ms-10">
|
|
111
|
-
<span>
|
|
111
|
+
<span>{{ t('nav.hotline') }}</span>
|
|
112
112
|
<h3>{{ phone }}</h3>
|
|
113
113
|
</div>
|
|
114
114
|
</div>
|
|
@@ -135,6 +135,7 @@ export default defineComponent({
|
|
|
135
135
|
const stateStoreInstance = stateStore;
|
|
136
136
|
const defaultLogo = defaultLogoImg;
|
|
137
137
|
|
|
138
|
+
const { t } = useI18n();
|
|
138
139
|
const { topLevelCategories, getSubcategories } = useCategories();
|
|
139
140
|
const { logoUrl, contactInfo } = useSiteConfig();
|
|
140
141
|
|
|
@@ -179,6 +180,7 @@ export default defineComponent({
|
|
|
179
180
|
getSubcategories,
|
|
180
181
|
logoUrl,
|
|
181
182
|
phone,
|
|
183
|
+
t,
|
|
182
184
|
};
|
|
183
185
|
},
|
|
184
186
|
});
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
:class="{ show: buttonShowState }"
|
|
30
30
|
>
|
|
31
31
|
<i class="ri-menu-2-line"></i>
|
|
32
|
-
<span>
|
|
32
|
+
<span>{{ t('nav.browseCategories') }}</span>
|
|
33
33
|
</div>
|
|
34
34
|
|
|
35
35
|
<ul class="dropdown-menu" :class="{ show: show }">
|
|
@@ -68,7 +68,7 @@
|
|
|
68
68
|
</template>
|
|
69
69
|
</li>
|
|
70
70
|
<li v-if="topLevelCategories.length === 0">
|
|
71
|
-
<span class="dropdown-item text-muted">
|
|
71
|
+
<span class="dropdown-item text-muted">{{ t('nav.noCategories') }}</span>
|
|
72
72
|
</li>
|
|
73
73
|
</ul>
|
|
74
74
|
</li>
|
|
@@ -77,23 +77,23 @@
|
|
|
77
77
|
<div class="collapse navbar-collapse">
|
|
78
78
|
<ul class="navbar-nav me-auto ms-68">
|
|
79
79
|
<li class="nav-item">
|
|
80
|
-
<NuxtLink class="nav-link" to="/">
|
|
80
|
+
<NuxtLink class="nav-link" to="/"> {{ t('nav.home') }} </NuxtLink>
|
|
81
81
|
</li>
|
|
82
82
|
|
|
83
83
|
<li class="nav-item">
|
|
84
|
-
<NuxtLink class="nav-link" to="/products">
|
|
84
|
+
<NuxtLink class="nav-link" to="/products"> {{ t('nav.products') }} </NuxtLink>
|
|
85
85
|
</li>
|
|
86
86
|
|
|
87
87
|
<li class="nav-item">
|
|
88
|
-
<NuxtLink class="nav-link" to="/categories">
|
|
88
|
+
<NuxtLink class="nav-link" to="/categories"> {{ t('nav.categories') }} </NuxtLink>
|
|
89
89
|
</li>
|
|
90
90
|
|
|
91
91
|
<li class="nav-item">
|
|
92
|
-
<NuxtLink class="nav-link" to="/about-us">
|
|
92
|
+
<NuxtLink class="nav-link" to="/about-us"> {{ t('nav.about') }} </NuxtLink>
|
|
93
93
|
</li>
|
|
94
94
|
|
|
95
95
|
<li class="nav-item">
|
|
96
|
-
<NuxtLink class="nav-link" to="/contact">
|
|
96
|
+
<NuxtLink class="nav-link" to="/contact"> {{ t('nav.contact') }} </NuxtLink>
|
|
97
97
|
</li>
|
|
98
98
|
</ul>
|
|
99
99
|
</div>
|
|
@@ -111,7 +111,7 @@
|
|
|
111
111
|
<i class="ri-phone-line"></i>
|
|
112
112
|
</div>
|
|
113
113
|
<div class="flex-grow-1 ms-10">
|
|
114
|
-
<span>
|
|
114
|
+
<span>{{ t('nav.hotline') }}</span>
|
|
115
115
|
<h3>{{ phone }}</h3>
|
|
116
116
|
</div>
|
|
117
117
|
</div>
|
|
@@ -138,6 +138,7 @@ export default defineComponent({
|
|
|
138
138
|
const stateStoreInstance = stateStore;
|
|
139
139
|
const defaultLogo = defaultLogoImg;
|
|
140
140
|
|
|
141
|
+
const { t } = useI18n();
|
|
141
142
|
const { topLevelCategories, getSubcategories } = useCategories();
|
|
142
143
|
const { logoUrl, contactInfo } = useSiteConfig();
|
|
143
144
|
|
|
@@ -182,6 +183,7 @@ export default defineComponent({
|
|
|
182
183
|
getSubcategories,
|
|
183
184
|
logoUrl,
|
|
184
185
|
phone,
|
|
186
|
+
t,
|
|
185
187
|
};
|
|
186
188
|
},
|
|
187
189
|
});
|
|
@@ -25,23 +25,23 @@
|
|
|
25
25
|
<div class="collapse navbar-collapse" id="navbarSupportedContent">
|
|
26
26
|
<ul class="navbar-nav me-auto">
|
|
27
27
|
<li class="nav-item">
|
|
28
|
-
<NuxtLink class="nav-link" to="/">
|
|
28
|
+
<NuxtLink class="nav-link" to="/"> {{ t('nav.home') }} </NuxtLink>
|
|
29
29
|
</li>
|
|
30
30
|
|
|
31
31
|
<li class="nav-item">
|
|
32
|
-
<NuxtLink class="nav-link" to="/products">
|
|
32
|
+
<NuxtLink class="nav-link" to="/products"> {{ t('nav.products') }} </NuxtLink>
|
|
33
33
|
</li>
|
|
34
34
|
|
|
35
35
|
<li class="nav-item">
|
|
36
|
-
<NuxtLink class="nav-link" to="/categories">
|
|
36
|
+
<NuxtLink class="nav-link" to="/categories"> {{ t('nav.categories') }} </NuxtLink>
|
|
37
37
|
</li>
|
|
38
38
|
|
|
39
39
|
<li class="nav-item">
|
|
40
|
-
<NuxtLink class="nav-link" to="/about-us">
|
|
40
|
+
<NuxtLink class="nav-link" to="/about-us"> {{ t('nav.about') }} </NuxtLink>
|
|
41
41
|
</li>
|
|
42
42
|
|
|
43
43
|
<li class="nav-item">
|
|
44
|
-
<NuxtLink class="nav-link" to="/contact">
|
|
44
|
+
<NuxtLink class="nav-link" to="/contact"> {{ t('nav.contact') }} </NuxtLink>
|
|
45
45
|
</li>
|
|
46
46
|
</ul>
|
|
47
47
|
</div>
|
|
@@ -59,7 +59,7 @@
|
|
|
59
59
|
<i class="ri-phone-line"></i>
|
|
60
60
|
</div>
|
|
61
61
|
<div class="flex-grow-1 ms-10">
|
|
62
|
-
<span>
|
|
62
|
+
<span>{{ t('nav.hotline') }}</span>
|
|
63
63
|
<h3>{{ phone }}</h3>
|
|
64
64
|
</div>
|
|
65
65
|
</div>
|
|
@@ -83,6 +83,7 @@ export default defineComponent({
|
|
|
83
83
|
const stateStoreInstance = stateStore;
|
|
84
84
|
const defaultLogo = defaultLogoImg;
|
|
85
85
|
|
|
86
|
+
const { t } = useI18n();
|
|
86
87
|
const { logoUrl, contactInfo } = useSiteConfig();
|
|
87
88
|
|
|
88
89
|
const phone = computed(() => contactInfo.value?.phone);
|
|
@@ -102,6 +103,7 @@ export default defineComponent({
|
|
|
102
103
|
defaultLogo,
|
|
103
104
|
logoUrl,
|
|
104
105
|
phone,
|
|
106
|
+
t,
|
|
105
107
|
};
|
|
106
108
|
},
|
|
107
109
|
});
|