@crm-market/template-shared 1.0.2 → 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/useCategories.ts +2 -0
- package/composables/useCheckout.ts +3 -0
- package/composables/useI18n.ts +114 -0
- package/composables/useProducts.ts +2 -0
- package/composables/useSiteConfig.ts +1 -0
- package/composables/useTemplateSections.ts +2 -1
- 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/modules/auto-imports.ts +20 -0
- package/nuxt.config.ts +3 -11
- package/package.json +8 -6
- 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/site-init.client.ts +5 -0
- package/plugins/vuetify.ts +0 -1
- package/utils/image.ts +2 -0
- package/e2e/cart.spec.ts +0 -71
- package/e2e/fixtures/mock-api.ts +0 -166
- package/e2e/homepage.spec.ts +0 -65
- package/e2e/layout.spec.ts +0 -73
- package/e2e/navigation.spec.ts +0 -61
- package/e2e/pages/cart.page.ts +0 -44
- package/e2e/pages/homepage.page.ts +0 -46
- package/e2e/playwright.config.ts +0 -32
- package/e2e/products.spec.ts +0 -33
|
@@ -14,50 +14,47 @@
|
|
|
14
14
|
</div>
|
|
15
15
|
<div class="col-lg-7">
|
|
16
16
|
<div class="authentication-form form-wrap">
|
|
17
|
-
<h3 class="title mb-2">
|
|
18
|
-
<p>
|
|
19
|
-
Your Gateway to Excellence: Contact Us and Unlock a World of
|
|
20
|
-
Possibilities
|
|
21
|
-
</p>
|
|
17
|
+
<h3 class="title mb-2">{{ t('contact.getInTouch') }}</h3>
|
|
18
|
+
<p>{{ t('contact.contactDescription') }}</p>
|
|
22
19
|
|
|
23
20
|
<form>
|
|
24
21
|
<div class="row">
|
|
25
22
|
<div class="col-lg-6">
|
|
26
23
|
<div class="form-group mb-4">
|
|
27
|
-
<label class="label">
|
|
24
|
+
<label class="label">{{ t('contact.yourName') }} *</label>
|
|
28
25
|
<input
|
|
29
26
|
type="text"
|
|
30
27
|
class="form-control"
|
|
31
|
-
placeholder="
|
|
28
|
+
:placeholder="t('contact.enterName')"
|
|
32
29
|
/>
|
|
33
30
|
</div>
|
|
34
31
|
</div>
|
|
35
32
|
<div class="col-lg-6">
|
|
36
33
|
<div class="form-group mb-4">
|
|
37
|
-
<label class="label">
|
|
34
|
+
<label class="label">{{ t('contact.yourEmail') }} *</label>
|
|
38
35
|
<input
|
|
39
36
|
type="email"
|
|
40
37
|
class="form-control"
|
|
41
|
-
placeholder="
|
|
38
|
+
:placeholder="t('contact.enterEmail')"
|
|
42
39
|
/>
|
|
43
40
|
</div>
|
|
44
41
|
</div>
|
|
45
42
|
<div class="col-lg-12">
|
|
46
43
|
<div class="form-group mb-4">
|
|
47
|
-
<label class="label">
|
|
44
|
+
<label class="label">{{ t('contact.yourSubject') }} *</label>
|
|
48
45
|
<input
|
|
49
46
|
type="text"
|
|
50
47
|
class="form-control"
|
|
51
|
-
placeholder="
|
|
48
|
+
:placeholder="t('contact.yourSubject')"
|
|
52
49
|
/>
|
|
53
50
|
</div>
|
|
54
51
|
</div>
|
|
55
52
|
<div class="col-lg-12">
|
|
56
53
|
<div class="form-group mb-4">
|
|
57
|
-
<label class="label">
|
|
54
|
+
<label class="label">{{ t('contact.yourMessage') }} *</label>
|
|
58
55
|
<textarea
|
|
59
56
|
class="form-control"
|
|
60
|
-
placeholder="
|
|
57
|
+
:placeholder="t('contact.writeMessage')"
|
|
61
58
|
cols="30"
|
|
62
59
|
rows="5"
|
|
63
60
|
></textarea>
|
|
@@ -70,7 +67,7 @@
|
|
|
70
67
|
type="submit"
|
|
71
68
|
class="btn btn-warning btn-pill text-white"
|
|
72
69
|
>
|
|
73
|
-
|
|
70
|
+
{{ t('footer.submitNow') }}
|
|
74
71
|
</button>
|
|
75
72
|
</div>
|
|
76
73
|
</div>
|
|
@@ -84,8 +81,6 @@
|
|
|
84
81
|
</div>
|
|
85
82
|
</template>
|
|
86
83
|
|
|
87
|
-
<script>
|
|
88
|
-
|
|
89
|
-
name: "ContactForm",
|
|
90
|
-
};
|
|
84
|
+
<script setup lang="ts">
|
|
85
|
+
const { t } = useI18n();
|
|
91
86
|
</script>
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
to="/edit-profile"
|
|
26
26
|
class="btn btn-warning text-white"
|
|
27
27
|
>
|
|
28
|
-
|
|
28
|
+
{{ t('account.editProfile') }}
|
|
29
29
|
</NuxtLink>
|
|
30
30
|
</div>
|
|
31
31
|
</div>
|
|
@@ -33,22 +33,22 @@
|
|
|
33
33
|
|
|
34
34
|
<div class="col-lg-6">
|
|
35
35
|
<div class="billing-address-bar">
|
|
36
|
-
<h3>
|
|
36
|
+
<h3>{{ t('common.default') }}</h3>
|
|
37
37
|
<ul>
|
|
38
38
|
<li class="p-0">Amanda McCarter</li>
|
|
39
39
|
<li>
|
|
40
|
-
<span>
|
|
40
|
+
<span>{{ t('account.address') }}:</span>
|
|
41
41
|
4 Shady Pines Drive Bowling Green
|
|
42
42
|
</li>
|
|
43
43
|
</ul>
|
|
44
44
|
|
|
45
45
|
<ul>
|
|
46
46
|
<li>
|
|
47
|
-
<span>
|
|
47
|
+
<span>{{ t('account.phone') }}:</span>
|
|
48
48
|
<a href="tel:270-957-9995">270-957-9995</a>
|
|
49
49
|
</li>
|
|
50
50
|
<li>
|
|
51
|
-
<span>
|
|
51
|
+
<span>{{ t('account.email') }}:</span>
|
|
52
52
|
<a href="mailto:contact@tuan.com">contact@tuan.com</a>
|
|
53
53
|
</li>
|
|
54
54
|
</ul>
|
|
@@ -58,7 +58,7 @@
|
|
|
58
58
|
to="/edit-address"
|
|
59
59
|
class="btn btn-warning text-white"
|
|
60
60
|
>
|
|
61
|
-
|
|
61
|
+
{{ t('account.editAddress') }}
|
|
62
62
|
</NuxtLink>
|
|
63
63
|
</div>
|
|
64
64
|
</div>
|
|
@@ -72,8 +72,6 @@
|
|
|
72
72
|
</div>
|
|
73
73
|
</template>
|
|
74
74
|
|
|
75
|
-
<script>
|
|
76
|
-
|
|
77
|
-
name: "Dashboard",
|
|
78
|
-
};
|
|
75
|
+
<script setup lang="ts">
|
|
76
|
+
const { t } = useI18n();
|
|
79
77
|
</script>
|
|
@@ -8,27 +8,27 @@
|
|
|
8
8
|
|
|
9
9
|
<div class="col-lg-8">
|
|
10
10
|
<div class="edit-profile">
|
|
11
|
-
<h3>
|
|
11
|
+
<h3>{{ t('account.editAddress') }}</h3>
|
|
12
12
|
|
|
13
13
|
<form class="submit-property-form">
|
|
14
14
|
<div class="row">
|
|
15
15
|
<div class="col-lg-6">
|
|
16
16
|
<div class="form-group">
|
|
17
|
-
<label>
|
|
17
|
+
<label>{{ t('checkout.firstName') }}</label>
|
|
18
18
|
<input type="text" class="form-control" value="Amanda" />
|
|
19
19
|
</div>
|
|
20
20
|
</div>
|
|
21
21
|
|
|
22
22
|
<div class="col-lg-6">
|
|
23
23
|
<div class="form-group">
|
|
24
|
-
<label>
|
|
24
|
+
<label>{{ t('checkout.lastName') }}</label>
|
|
25
25
|
<input type="text" class="form-control" value="McCarter" />
|
|
26
26
|
</div>
|
|
27
27
|
</div>
|
|
28
28
|
|
|
29
29
|
<div class="col-lg-6">
|
|
30
30
|
<div class="form-group">
|
|
31
|
-
<label>
|
|
31
|
+
<label>{{ t('checkout.emailAddress') }}</label>
|
|
32
32
|
<input
|
|
33
33
|
type="email"
|
|
34
34
|
class="form-control"
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
|
|
40
40
|
<div class="col-lg-6">
|
|
41
41
|
<div class="form-group">
|
|
42
|
-
<label>
|
|
42
|
+
<label>{{ t('checkout.phoneNumber') }}</label>
|
|
43
43
|
<input
|
|
44
44
|
type="text"
|
|
45
45
|
class="form-control"
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
|
|
51
51
|
<div class="col-lg-6">
|
|
52
52
|
<div class="form-group">
|
|
53
|
-
<label>
|
|
53
|
+
<label>{{ t('checkout.companyName') }}</label>
|
|
54
54
|
<input
|
|
55
55
|
type="text"
|
|
56
56
|
class="form-control"
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
|
|
62
62
|
<div class="col-lg-6">
|
|
63
63
|
<div class="form-group">
|
|
64
|
-
<label>
|
|
64
|
+
<label>{{ t('account.country') }}</label>
|
|
65
65
|
<input
|
|
66
66
|
type="text"
|
|
67
67
|
class="form-control"
|
|
@@ -72,35 +72,35 @@
|
|
|
72
72
|
|
|
73
73
|
<div class="col-lg-6">
|
|
74
74
|
<div class="form-group">
|
|
75
|
-
<label>
|
|
75
|
+
<label>{{ t('checkout.streetAddress') }}</label>
|
|
76
76
|
<input type="text" class="form-control" value="Cities" />
|
|
77
77
|
</div>
|
|
78
78
|
</div>
|
|
79
79
|
|
|
80
80
|
<div class="col-lg-6">
|
|
81
81
|
<div class="form-group">
|
|
82
|
-
<label>
|
|
82
|
+
<label>{{ t('checkout.townCity') }}</label>
|
|
83
83
|
<input type="text" class="form-control" value="Cities" />
|
|
84
84
|
</div>
|
|
85
85
|
</div>
|
|
86
86
|
|
|
87
87
|
<div class="col-lg-6">
|
|
88
88
|
<div class="form-group">
|
|
89
|
-
<label>
|
|
89
|
+
<label>{{ t('account.stateCounty') }}</label>
|
|
90
90
|
<input type="text" class="form-control" value="Liverpool" />
|
|
91
91
|
</div>
|
|
92
92
|
</div>
|
|
93
93
|
|
|
94
94
|
<div class="col-lg-6">
|
|
95
95
|
<div class="form-group">
|
|
96
|
-
<label>
|
|
96
|
+
<label>{{ t('account.zip') }}</label>
|
|
97
97
|
<input type="text" class="form-control" value="1457856" />
|
|
98
98
|
</div>
|
|
99
99
|
</div>
|
|
100
100
|
|
|
101
101
|
<div class="col-lg-12">
|
|
102
102
|
<button type="submit" class="btn btn-warning text-white">
|
|
103
|
-
|
|
103
|
+
{{ t('common.save') }}
|
|
104
104
|
</button>
|
|
105
105
|
</div>
|
|
106
106
|
</div>
|
|
@@ -112,8 +112,6 @@
|
|
|
112
112
|
</section>
|
|
113
113
|
</template>
|
|
114
114
|
|
|
115
|
-
<script>
|
|
116
|
-
|
|
117
|
-
name: "EditAddress",
|
|
118
|
-
};
|
|
115
|
+
<script setup lang="ts">
|
|
116
|
+
const { t } = useI18n();
|
|
119
117
|
</script>
|
|
@@ -8,27 +8,27 @@
|
|
|
8
8
|
|
|
9
9
|
<div class="col-lg-8">
|
|
10
10
|
<div class="edit-profile">
|
|
11
|
-
<h3>
|
|
11
|
+
<h3>{{ t('account.editProfile') }}</h3>
|
|
12
12
|
|
|
13
13
|
<form class="submit-property-form">
|
|
14
14
|
<div class="row">
|
|
15
15
|
<div class="col-lg-6">
|
|
16
16
|
<div class="form-group">
|
|
17
|
-
<label>
|
|
17
|
+
<label>{{ t('checkout.firstName') }}</label>
|
|
18
18
|
<input type="text" class="form-control" value="Amanda" />
|
|
19
19
|
</div>
|
|
20
20
|
</div>
|
|
21
21
|
|
|
22
22
|
<div class="col-lg-6">
|
|
23
23
|
<div class="form-group">
|
|
24
|
-
<label>
|
|
24
|
+
<label>{{ t('checkout.lastName') }}</label>
|
|
25
25
|
<input type="text" class="form-control" value="McCarter" />
|
|
26
26
|
</div>
|
|
27
27
|
</div>
|
|
28
28
|
|
|
29
29
|
<div class="col-lg-6">
|
|
30
30
|
<div class="form-group">
|
|
31
|
-
<label>
|
|
31
|
+
<label>{{ t('checkout.emailAddress') }}</label>
|
|
32
32
|
<input
|
|
33
33
|
type="email"
|
|
34
34
|
class="form-control"
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
|
|
40
40
|
<div class="col-lg-6">
|
|
41
41
|
<div class="form-group">
|
|
42
|
-
<label>
|
|
42
|
+
<label>{{ t('checkout.phoneNumber') }}</label>
|
|
43
43
|
<input
|
|
44
44
|
type="text"
|
|
45
45
|
class="form-control"
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
|
|
51
51
|
<div class="col-lg-12">
|
|
52
52
|
<div class="form-group">
|
|
53
|
-
<label>
|
|
53
|
+
<label>{{ t('common.changeImage') }}</label>
|
|
54
54
|
<div class="file-upload">
|
|
55
55
|
<input
|
|
56
56
|
type="file"
|
|
@@ -60,7 +60,7 @@
|
|
|
60
60
|
/>
|
|
61
61
|
<label class="upload" for="file">
|
|
62
62
|
<i class="ri-image-2-fill"></i>
|
|
63
|
-
|
|
63
|
+
{{ t('common.clickHere') }}
|
|
64
64
|
</label>
|
|
65
65
|
</div>
|
|
66
66
|
</div>
|
|
@@ -78,7 +78,7 @@
|
|
|
78
78
|
|
|
79
79
|
<div class="col-lg-12">
|
|
80
80
|
<button type="submit" class="btn btn-warning text-white">
|
|
81
|
-
|
|
81
|
+
{{ t('common.saveChange') }}
|
|
82
82
|
</button>
|
|
83
83
|
</div>
|
|
84
84
|
</div>
|
|
@@ -90,8 +90,6 @@
|
|
|
90
90
|
</section>
|
|
91
91
|
</template>
|
|
92
92
|
|
|
93
|
-
<script>
|
|
94
|
-
|
|
95
|
-
name: "EditProfile",
|
|
96
|
-
};
|
|
93
|
+
<script setup lang="ts">
|
|
94
|
+
const { t } = useI18n();
|
|
97
95
|
</script>
|
|
@@ -13,18 +13,18 @@
|
|
|
13
13
|
<ul class="nav nav-tabs login-tabs" id="myTab" role="tablist">
|
|
14
14
|
<li class="nav-item" role="presentation">
|
|
15
15
|
<NuxtLink to="/forgot-password" class="nav-link active">
|
|
16
|
-
|
|
16
|
+
{{ t('auth.forgotPassword') }}
|
|
17
17
|
</NuxtLink>
|
|
18
18
|
</li>
|
|
19
19
|
</ul>
|
|
20
|
-
<p>
|
|
20
|
+
<p>{{ t('auth.loginDescription') }}</p>
|
|
21
21
|
<form>
|
|
22
22
|
<div class="form-group mb-4">
|
|
23
|
-
<label class="label">
|
|
23
|
+
<label class="label">{{ t('auth.email') }}</label>
|
|
24
24
|
<input
|
|
25
25
|
type="email"
|
|
26
26
|
class="form-control"
|
|
27
|
-
placeholder="
|
|
27
|
+
:placeholder="t('auth.enterEmail')"
|
|
28
28
|
/>
|
|
29
29
|
</div>
|
|
30
30
|
<div class="form-group mb-0">
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
type="submit"
|
|
33
33
|
class="btn btn-warning btn-pill text-white w-100 d-block"
|
|
34
34
|
>
|
|
35
|
-
|
|
35
|
+
{{ t('auth.forgotPassword') }}
|
|
36
36
|
</button>
|
|
37
37
|
</div>
|
|
38
38
|
</form>
|
|
@@ -44,8 +44,6 @@
|
|
|
44
44
|
</div>
|
|
45
45
|
</template>
|
|
46
46
|
|
|
47
|
-
<script>
|
|
48
|
-
|
|
49
|
-
name: "ForgotPassword",
|
|
50
|
-
};
|
|
47
|
+
<script setup lang="ts">
|
|
48
|
+
const { t } = useI18n();
|
|
51
49
|
</script>
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
<v-row class="align-items-center">
|
|
5
5
|
<v-col cols="12" lg="6" md="6">
|
|
6
6
|
<p class="mb-2 mb-md-0 text-center text-md-start">
|
|
7
|
-
© <span>Tuan.</span>
|
|
7
|
+
© <span>Tuan.</span> {{ t('footer.allRightsReserved') }}
|
|
8
8
|
<a href="https://envytheme.com/" target="_blank">EnvyTheme</a>
|
|
9
9
|
</p>
|
|
10
10
|
</v-col>
|
|
@@ -18,8 +18,6 @@
|
|
|
18
18
|
</div>
|
|
19
19
|
</template>
|
|
20
20
|
|
|
21
|
-
<script>
|
|
22
|
-
|
|
23
|
-
name: "Copyright",
|
|
24
|
-
};
|
|
21
|
+
<script setup lang="ts">
|
|
22
|
+
const { t } = useI18n();
|
|
25
23
|
</script>
|
|
@@ -10,11 +10,11 @@
|
|
|
10
10
|
{{ siteConfig.siteDescription }}
|
|
11
11
|
</p>
|
|
12
12
|
<p v-else>
|
|
13
|
-
|
|
13
|
+
{{ t('footer.storeDescription') }}
|
|
14
14
|
</p>
|
|
15
15
|
|
|
16
16
|
<div class="call-info" v-if="phone">
|
|
17
|
-
<span class="title">
|
|
17
|
+
<span class="title">{{ t('footer.gotQuestion') }}</span>
|
|
18
18
|
<div class="d-flex align-items-center">
|
|
19
19
|
<i class="flaticon-headphones-1"></i>
|
|
20
20
|
<a :href="`tel:${phone}`">{{ phone }}</a>
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
</v-col>
|
|
31
31
|
<v-col cols="12" lg="3" sm="6">
|
|
32
32
|
<div class="single-footer-widget">
|
|
33
|
-
<h3>
|
|
33
|
+
<h3>{{ t('footer.popularCategories') }}</h3>
|
|
34
34
|
|
|
35
35
|
<ul class="ps-0 mb-0 list-unstyled import-link">
|
|
36
36
|
<li v-for="category in footerCategories" :key="category.id">
|
|
@@ -39,50 +39,50 @@
|
|
|
39
39
|
</NuxtLink>
|
|
40
40
|
</li>
|
|
41
41
|
<li v-if="footerCategories.length === 0">
|
|
42
|
-
<NuxtLink to="/products">
|
|
42
|
+
<NuxtLink to="/products">{{ t('nav.allProducts') }}</NuxtLink>
|
|
43
43
|
</li>
|
|
44
44
|
</ul>
|
|
45
45
|
</div>
|
|
46
46
|
</v-col>
|
|
47
47
|
<v-col cols="12" lg="3" sm="6">
|
|
48
48
|
<div class="single-footer-widget">
|
|
49
|
-
<h3>
|
|
49
|
+
<h3>{{ t('footer.letUsHelp') }}</h3>
|
|
50
50
|
|
|
51
51
|
<ul class="ps-0 mb-0 list-unstyled import-link">
|
|
52
52
|
<li>
|
|
53
|
-
<NuxtLink to="/dashboard">
|
|
53
|
+
<NuxtLink to="/dashboard">{{ t('account.yourAccount') }}</NuxtLink>
|
|
54
54
|
</li>
|
|
55
55
|
<li>
|
|
56
|
-
<NuxtLink to="/order-history">
|
|
56
|
+
<NuxtLink to="/order-history">{{ t('account.yourOrders') }}</NuxtLink>
|
|
57
57
|
</li>
|
|
58
58
|
<li>
|
|
59
|
-
<NuxtLink to="/privacy-policy">
|
|
59
|
+
<NuxtLink to="/privacy-policy">{{ t('common.privacyPolicy') }}</NuxtLink>
|
|
60
60
|
</li>
|
|
61
61
|
<li>
|
|
62
|
-
<NuxtLink to="/faq">
|
|
62
|
+
<NuxtLink to="/faq">{{ t('common.helpCenter') }}</NuxtLink>
|
|
63
63
|
</li>
|
|
64
64
|
<li>
|
|
65
|
-
<NuxtLink to="/terms-conditions">
|
|
65
|
+
<NuxtLink to="/terms-conditions">{{ t('common.termsConditions') }}</NuxtLink>
|
|
66
66
|
</li>
|
|
67
67
|
</ul>
|
|
68
68
|
</div>
|
|
69
69
|
</v-col>
|
|
70
70
|
<v-col cols="12" lg="3" sm="6">
|
|
71
71
|
<div class="single-footer-widget">
|
|
72
|
-
<h3>
|
|
72
|
+
<h3>{{ t('footer.getToKnowUs') }}</h3>
|
|
73
73
|
|
|
74
74
|
<ul class="ps-0 mb-0 list-unstyled import-link">
|
|
75
75
|
<li>
|
|
76
|
-
<NuxtLink to="/about-us">
|
|
76
|
+
<NuxtLink to="/about-us">{{ t('nav.aboutUs') }}</NuxtLink>
|
|
77
77
|
</li>
|
|
78
78
|
<li>
|
|
79
|
-
<NuxtLink to="/contact">
|
|
79
|
+
<NuxtLink to="/contact">{{ t('nav.contact') }}</NuxtLink>
|
|
80
80
|
</li>
|
|
81
81
|
<li>
|
|
82
|
-
<NuxtLink to="/categories">
|
|
82
|
+
<NuxtLink to="/categories">{{ t('nav.categories') }}</NuxtLink>
|
|
83
83
|
</li>
|
|
84
84
|
<li>
|
|
85
|
-
<NuxtLink to="/products">
|
|
85
|
+
<NuxtLink to="/products">{{ t('nav.allProducts') }}</NuxtLink>
|
|
86
86
|
</li>
|
|
87
87
|
</ul>
|
|
88
88
|
</div>
|
|
@@ -92,17 +92,17 @@
|
|
|
92
92
|
<v-row class="align-items-end justify-content-center">
|
|
93
93
|
<v-col cols="12" lg="3" md="6">
|
|
94
94
|
<div class="single-footer-bottom-item">
|
|
95
|
-
<span class="title">
|
|
95
|
+
<span class="title">{{ t('footer.subscribe') }}</span>
|
|
96
96
|
<form class="subscribe-form position-relative" @submit.prevent>
|
|
97
97
|
<input
|
|
98
98
|
type="text"
|
|
99
99
|
class="form-control"
|
|
100
|
-
placeholder="
|
|
100
|
+
:placeholder="t('footer.enterEmail')"
|
|
101
101
|
/>
|
|
102
102
|
<button
|
|
103
103
|
class="btn btn-warning text-white position-absolute top-50 end-0 translate-middle-y"
|
|
104
104
|
>
|
|
105
|
-
|
|
105
|
+
{{ t('footer.submitNow') }}
|
|
106
106
|
</button>
|
|
107
107
|
</form>
|
|
108
108
|
</div>
|
|
@@ -113,7 +113,7 @@
|
|
|
113
113
|
class="ps-0 mb-0 list-unstyled d-flex align-items-center social-link justify-content-center"
|
|
114
114
|
>
|
|
115
115
|
<li>
|
|
116
|
-
<span class="titles">
|
|
116
|
+
<span class="titles">{{ t('footer.followUs') }}:</span>
|
|
117
117
|
</li>
|
|
118
118
|
<li v-if="socialMedia?.facebook">
|
|
119
119
|
<a :href="socialMedia.facebook" target="_blank">
|
|
@@ -136,7 +136,7 @@
|
|
|
136
136
|
<v-col cols="12" lg="5" md="6">
|
|
137
137
|
<div class="single-footer-bottom-item">
|
|
138
138
|
<p class="text-center text-lg-end mb-0 text-muted">
|
|
139
|
-
© {{ new Date().getFullYear() }} {{ storeName }}.
|
|
139
|
+
© {{ new Date().getFullYear() }} {{ storeName }}. {{ t('footer.allRightsReserved') }}.
|
|
140
140
|
</p>
|
|
141
141
|
</div>
|
|
142
142
|
</v-col>
|
|
@@ -145,39 +145,24 @@
|
|
|
145
145
|
</div>
|
|
146
146
|
</template>
|
|
147
147
|
|
|
148
|
-
<script lang="ts">
|
|
148
|
+
<script setup lang="ts">
|
|
149
149
|
import { computed } from "vue";
|
|
150
150
|
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
const { siteConfig, siteName, contactInfo } = useSiteConfig();
|
|
155
|
-
const { topLevelCategories } = useCategories();
|
|
151
|
+
const { t } = useI18n();
|
|
152
|
+
const { siteConfig, siteName, contactInfo } = useSiteConfig();
|
|
153
|
+
const { topLevelCategories } = useCategories();
|
|
156
154
|
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
155
|
+
const storeName = computed(() => siteName.value || 'Our Store');
|
|
156
|
+
const phone = computed(() => contactInfo.value?.phone);
|
|
157
|
+
const email = computed(() => contactInfo.value?.email);
|
|
158
|
+
const address = computed(() => contactInfo.value?.address);
|
|
159
|
+
const socialMedia = computed(() => contactInfo.value?.socialMedia);
|
|
160
|
+
const hasSocialMedia = computed(() => {
|
|
161
|
+
const sm = socialMedia.value;
|
|
162
|
+
return sm && (sm.facebook || sm.twitter || sm.instagram);
|
|
163
|
+
});
|
|
166
164
|
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
return {
|
|
172
|
-
siteConfig,
|
|
173
|
-
storeName,
|
|
174
|
-
phone,
|
|
175
|
-
email,
|
|
176
|
-
address,
|
|
177
|
-
socialMedia,
|
|
178
|
-
hasSocialMedia,
|
|
179
|
-
footerCategories,
|
|
180
|
-
};
|
|
181
|
-
},
|
|
182
|
-
};
|
|
165
|
+
const footerCategories = computed(() =>
|
|
166
|
+
topLevelCategories.value.slice(0, 6)
|
|
167
|
+
);
|
|
183
168
|
</script>
|