@viur/shop-components 0.1.2 → 0.1.4-0
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/.eslintrc.cjs +23 -0
- package/.github/workflows/npm-publish.yml +3 -3
- package/.prettierrc +11 -0
- package/package.json +1 -1
- package/src/Shop.vue +10 -5
- package/src/ShopOrderStepper.vue +22 -14
- package/src/ShopSummary.vue +49 -39
- package/src/Steps/ShopCart.vue +8 -7
- package/src/Steps/ShopOrderConfirm.vue +3 -3
- package/src/Steps/ShopUserDataGuest.vue +20 -16
- package/src/components/AddressForm.vue +10 -11
- package/src/components/AddressFormLayout.vue +10 -0
- package/src/components/CartItem.vue +90 -75
- package/src/components/CartItemSmall.vue +3 -3
- package/src/components/DiscountInput.vue +12 -7
- package/src/components/PaymentProviderUnzer.vue +8 -1
- package/src/components/StepperTab.vue +1 -1
- package/src/composables/address.js +12 -12
- package/src/composables/cart.js +3 -3
- package/src/composables/order.js +3 -5
- package/src/main.js +14 -5
- package/src/shop.js +6 -6
- package/src/translations/de.js +39 -11
- package/src/translations/fr.js +56 -0
- package/src/utils.js +7 -4
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<div class="item-wrapper">
|
|
2
|
+
<div class="viur-shop-item-wrapper">
|
|
3
3
|
<sl-card horizontal class="viur-shop-cart-leaf">
|
|
4
4
|
<img
|
|
5
5
|
class="viur-shop-cart-leaf-image"
|
|
@@ -12,44 +12,48 @@
|
|
|
12
12
|
)
|
|
13
13
|
"
|
|
14
14
|
/>
|
|
15
|
+
<h5 v-if="item.shop_art_no_or_gtin" class="viur-shop-cart-leaf-artno" slot="header">
|
|
16
|
+
{{ getValue(item.shop_art_no_or_gtin) }}
|
|
17
|
+
</h5>
|
|
15
18
|
<h4
|
|
16
19
|
class="viur-shop-cart-leaf-headline headline"
|
|
17
20
|
v-html="getValue(item.shop_name)"
|
|
18
21
|
></h4>
|
|
19
|
-
<h5 class="viur-shop-cart-leaf-artno">
|
|
20
|
-
{{ getValue(item.shop_art_no_or_gtin) }}
|
|
21
|
-
</h5>
|
|
22
22
|
<div
|
|
23
23
|
class="viur-shop-cart-leaf-description"
|
|
24
24
|
v-html="getValue(item.shop_description)"
|
|
25
25
|
></div>
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
<sl-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
26
|
+
|
|
27
|
+
<div class="viur-shop-cart-leaf-quantity">
|
|
28
|
+
<div class="viur-shop-cart-leaf-label">{{$t('shop.quantity')}}</div>
|
|
29
|
+
<sl-input
|
|
30
|
+
:disabled="!edit"
|
|
31
|
+
class="viur-shop-cart-leaf-value viur-shop-cart-leaf-value--quantity"
|
|
32
|
+
type="number"
|
|
33
|
+
placeholder="Number"
|
|
34
|
+
min="0"
|
|
35
|
+
noSpinButtons
|
|
36
|
+
:value="item.quantity"
|
|
37
|
+
@sl-change="changeAmount($event.target.value)"
|
|
38
|
+
>
|
|
39
|
+
<dialog-Button slot="prefix" class="decent" v-if="item.quantity===1" variant="danger" outline>
|
|
40
|
+
<sl-icon name="trash"></sl-icon>
|
|
41
|
+
<template #dialog="{close}">
|
|
42
|
+
{{ $t('messages.remove_article_from_cart') }}
|
|
43
|
+
<sl-bar>
|
|
44
|
+
<sl-button slot="left" @click="close">{{$t('actions.cancel')}}</sl-button>
|
|
45
|
+
<sl-button slot="right" variant="danger" @click="removeArticle(); close()">{{ $t('actions.delete') }}</sl-button>
|
|
46
|
+
</sl-bar>
|
|
47
|
+
</template>
|
|
48
|
+
</dialog-Button>
|
|
49
|
+
<sl-button slot="prefix" v-else @click="changeAmount(item.quantity-=1)">
|
|
50
|
+
<sl-icon name="dash-lg"></sl-icon>
|
|
51
|
+
</sl-button>
|
|
52
|
+
<sl-button slot="suffix" @click="changeAmount(item.quantity+=1)">
|
|
53
|
+
<sl-icon name="plus-lg"></sl-icon>
|
|
54
|
+
</sl-button>
|
|
55
|
+
</sl-input>
|
|
56
|
+
</div>
|
|
53
57
|
|
|
54
58
|
<div class="viur-shop-cart-leaf-unitprice">
|
|
55
59
|
<div class="viur-shop-cart-leaf-label">{{$t('shop.unit_price')}}</div>
|
|
@@ -63,11 +67,13 @@
|
|
|
63
67
|
</sl-format-number>
|
|
64
68
|
</div>
|
|
65
69
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
+
<div class="viur-shop-cart-leaf-availability">
|
|
71
|
+
<div class="viur-shop-cart-leaf-label">{{ $t('shop.availability') }}</div>
|
|
72
|
+
<div class="availability"
|
|
73
|
+
:class="`availability--${item.shop_availability}`"
|
|
74
|
+
>
|
|
70
75
|
{{$t(item.shop_availability)}}
|
|
76
|
+
</div>
|
|
71
77
|
</div>
|
|
72
78
|
|
|
73
79
|
<div class="viur-shop-cart-leaf-price">
|
|
@@ -125,44 +131,44 @@ function removeArticle(){
|
|
|
125
131
|
@layer foundation.shop {
|
|
126
132
|
|
|
127
133
|
.availability {
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
134
|
+
display: flex;
|
|
135
|
+
flex-basis: 70%;
|
|
136
|
+
font-size: .9em;
|
|
137
|
+
align-items: center;
|
|
138
|
+
justify-content: flex-start;
|
|
139
|
+
white-space: nowrap;
|
|
140
|
+
&:before {
|
|
141
|
+
content: '';
|
|
142
|
+
display: block;
|
|
143
|
+
background-color: #666;
|
|
144
|
+
width: .7em;
|
|
145
|
+
height: .7em;
|
|
146
|
+
border-radius: 50%;
|
|
147
|
+
margin-right: 5px;
|
|
148
|
+
margin-bottom: 2px;
|
|
149
|
+
}
|
|
143
150
|
}
|
|
144
|
-
|
|
145
|
-
.availability--
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
151
|
+
.availability--onrequest,
|
|
152
|
+
.availability--instock {
|
|
153
|
+
color: var(--ignt-color-success);
|
|
154
|
+
&:before {
|
|
155
|
+
background-color: var(--ignt-color-success);
|
|
156
|
+
}
|
|
150
157
|
}
|
|
151
|
-
|
|
152
|
-
.availability--
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
158
|
+
.availability--discontinued,
|
|
159
|
+
.availability--outofstock {
|
|
160
|
+
color: var(--ignt-color-danger);
|
|
161
|
+
&:before {
|
|
162
|
+
background-color: var(--ignt-color-danger);
|
|
163
|
+
}
|
|
157
164
|
}
|
|
158
|
-
|
|
159
|
-
.availability--
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
165
|
+
.availability--limited,
|
|
166
|
+
.availability--preorder {
|
|
167
|
+
color: var(--ignt-color-warning);
|
|
168
|
+
&:before {
|
|
169
|
+
background-color: var(--ignt-color-warning);
|
|
170
|
+
}
|
|
164
171
|
}
|
|
165
|
-
}
|
|
166
172
|
|
|
167
173
|
.viur-shop-cart-leaf {
|
|
168
174
|
--shop-leaf-label-color: var(--ignt-color-primary);
|
|
@@ -174,6 +180,7 @@ function removeArticle(){
|
|
|
174
180
|
&::part(base) {
|
|
175
181
|
display: flex;
|
|
176
182
|
position: relative;
|
|
183
|
+
padding-bottom: var(--shop-leaf-gap, var(--ignt-spacing-small));
|
|
177
184
|
}
|
|
178
185
|
|
|
179
186
|
&::part(header) {
|
|
@@ -189,8 +196,9 @@ function removeArticle(){
|
|
|
189
196
|
&::part(body) {
|
|
190
197
|
display: grid;
|
|
191
198
|
grid-template-columns: repeat(5, minmax(0, 1fr));
|
|
192
|
-
|
|
193
|
-
|
|
199
|
+
grid-template-rows: fit-content(20%) 1fr fit-content(20%);
|
|
200
|
+
gap: var(--shop-leaf-gap, var(--ignt-spacing-small));
|
|
201
|
+
padding: 0 var(--sl-spacing-large);
|
|
194
202
|
height: 100%;
|
|
195
203
|
}
|
|
196
204
|
|
|
@@ -201,8 +209,8 @@ function removeArticle(){
|
|
|
201
209
|
@media (max-width: 600px) {
|
|
202
210
|
&::part(body) {
|
|
203
211
|
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
204
|
-
gap: var(--
|
|
205
|
-
padding: var(--sl-spacing-large);
|
|
212
|
+
gap: var(--shop-leaf-gap, var(--ignt-spacing-small));
|
|
213
|
+
padding: 0 var(--sl-spacing-large);
|
|
206
214
|
height: 100%;
|
|
207
215
|
}
|
|
208
216
|
|
|
@@ -219,7 +227,6 @@ function removeArticle(){
|
|
|
219
227
|
|
|
220
228
|
.viur-shop-cart-leaf-headline {
|
|
221
229
|
grid-column: 1 / span 4;
|
|
222
|
-
order: -2;
|
|
223
230
|
margin: 0;
|
|
224
231
|
font-size: var(--shop-leaf-headline-font-size);
|
|
225
232
|
|
|
@@ -229,6 +236,7 @@ function removeArticle(){
|
|
|
229
236
|
}
|
|
230
237
|
|
|
231
238
|
.viur-shop-cart-leaf-artno {
|
|
239
|
+
font-size: .8em;
|
|
232
240
|
grid-column: 1 / span 5;
|
|
233
241
|
margin: 0;
|
|
234
242
|
|
|
@@ -284,6 +292,7 @@ function removeArticle(){
|
|
|
284
292
|
}
|
|
285
293
|
|
|
286
294
|
.viur-shop-cart-leaf-unitprice {
|
|
295
|
+
grid-column: 3 / span 1;
|
|
287
296
|
align-self: center;
|
|
288
297
|
|
|
289
298
|
@media (max-width: 600px) {
|
|
@@ -291,6 +300,12 @@ function removeArticle(){
|
|
|
291
300
|
}
|
|
292
301
|
}
|
|
293
302
|
|
|
303
|
+
.viur-shop-cart-leaf-availability {
|
|
304
|
+
grid-column: 4 / span 1;
|
|
305
|
+
align-self: center;
|
|
306
|
+
text-align: right;
|
|
307
|
+
}
|
|
308
|
+
|
|
294
309
|
.viur-shop-cart-leaf-label,
|
|
295
310
|
.viur-shop-cart-leaf-value--quantity::part(form-control-label) {
|
|
296
311
|
color: var(--shop-leaf-label-color);
|
|
@@ -317,7 +332,7 @@ function removeArticle(){
|
|
|
317
332
|
}
|
|
318
333
|
}
|
|
319
334
|
|
|
320
|
-
.item-wrapper{
|
|
335
|
+
.viur-shop-item-wrapper{
|
|
321
336
|
position: relative;
|
|
322
337
|
}
|
|
323
338
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<div class="item-wrapper">
|
|
2
|
+
<div class="viur-shop-item-wrapper">
|
|
3
3
|
<sl-card horizontal class="viur-shop-cart-leaf-small">
|
|
4
4
|
<img
|
|
5
5
|
class="viur-shop-cart-leaf-image"
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
</sl-input>
|
|
47
47
|
|
|
48
48
|
<div class="viur-shop-cart-leaf-article-number">
|
|
49
|
-
<div class="viur-shop-cart-leaf-label">{{ $t('shop.
|
|
49
|
+
<div class="viur-shop-cart-leaf-label">{{ $t('shop.article_number') }}</div>
|
|
50
50
|
{{ getValue(item.shop_art_no_or_gtin) }}
|
|
51
51
|
</div>
|
|
52
52
|
|
|
@@ -222,7 +222,7 @@ function removeArticle(){
|
|
|
222
222
|
}
|
|
223
223
|
}
|
|
224
224
|
|
|
225
|
-
.item-wrapper{
|
|
225
|
+
.viur-shop-item-wrapper{
|
|
226
226
|
position: relative;
|
|
227
227
|
}
|
|
228
228
|
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
</shop-alert>
|
|
13
13
|
|
|
14
14
|
<template v-if="shopStore.state.cartRoot.discount">
|
|
15
|
-
<div class="discount-view">
|
|
15
|
+
<div class="viur-shop-discount-view">
|
|
16
16
|
<span>Code: {{ shopStore.state.cartRoot.discount.dest.name }}</span>
|
|
17
17
|
<sl-button size="small" outline variant="danger" @click="removeDiscountAction" :loading="state.loading">
|
|
18
18
|
<sl-icon name="x-lg" slot="prefix"></sl-icon>
|
|
@@ -20,15 +20,16 @@
|
|
|
20
20
|
</sl-button>
|
|
21
21
|
</div>
|
|
22
22
|
</template>
|
|
23
|
-
<
|
|
23
|
+
<sl-button-group v-else>
|
|
24
24
|
<sl-input
|
|
25
|
-
|
|
25
|
+
class="viur-shop-discount-input"
|
|
26
|
+
:placeholder="$t('shop.add_discount_placeholder')"
|
|
26
27
|
v-model="state.code"
|
|
27
28
|
@keypress.enter="addDiscountAction()"
|
|
28
29
|
>
|
|
29
30
|
</sl-input>
|
|
30
|
-
<button @click="addDiscountAction()" :loading="state.loading">{{ $t('shop.add_discount') }}</button>
|
|
31
|
-
</
|
|
31
|
+
<sl-button @click="addDiscountAction()" :loading="state.loading">{{ $t('shop.add_discount') }}</sl-button>
|
|
32
|
+
</sl-button-group>
|
|
32
33
|
</template>
|
|
33
34
|
|
|
34
35
|
<script setup>
|
|
@@ -81,11 +82,15 @@ function removeDiscountAction(){
|
|
|
81
82
|
|
|
82
83
|
</script>
|
|
83
84
|
<style scoped>
|
|
84
|
-
.discount-view{
|
|
85
|
+
.viur-shop-discount-view{
|
|
85
86
|
font-size:0.8em;
|
|
86
87
|
display: flex;
|
|
87
88
|
align-items: center;
|
|
88
89
|
justify-content: space-between;
|
|
89
90
|
}
|
|
90
91
|
|
|
91
|
-
|
|
92
|
+
.viur-shop-discount-input {
|
|
93
|
+
flex-basis: 100%;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
</style>
|
|
@@ -198,4 +198,11 @@ onBeforeMount(()=>{
|
|
|
198
198
|
.loading{
|
|
199
199
|
font-size:3rem;
|
|
200
200
|
}
|
|
201
|
-
</style>
|
|
201
|
+
</style>
|
|
202
|
+
|
|
203
|
+
<style>
|
|
204
|
+
/* global style to overwrite UnzerCSS */
|
|
205
|
+
.unzerUI.primary.button, .unzerUI.primary.buttons .button {
|
|
206
|
+
background-color: var(--ignt-color-primary) !important;
|
|
207
|
+
}
|
|
208
|
+
</style>
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
<template v-if="tab && shopStore.state.tabs[tab]">
|
|
20
20
|
{{ shopStore.state.tabIndexMap[tab] + 1 }}.
|
|
21
21
|
<span class="viur-shop-order-status-span">
|
|
22
|
-
{{ shopStore.state.tabs[tab]?.displayName }}
|
|
22
|
+
{{ $t(shopStore.state.tabs[tab]?.displayName) }}
|
|
23
23
|
</span>
|
|
24
24
|
</template>
|
|
25
25
|
<template v-else>
|
|
@@ -43,46 +43,46 @@ export const useAddress = defineStore("useAddressStore", () => {
|
|
|
43
43
|
|
|
44
44
|
})
|
|
45
45
|
|
|
46
|
-
function saveForm(type,
|
|
46
|
+
function saveForm(type,billingIsShipping=false){
|
|
47
47
|
state[`${type}IsUpdating`] = true
|
|
48
48
|
return state[`${type}Form`].sendData().then(async (resp)=>{
|
|
49
49
|
let data = await resp.json()
|
|
50
|
+
|
|
50
51
|
if (['addSuccess','editSuccess'].includes(data['action'])){
|
|
51
52
|
state[`${type}Data`] = data['values']
|
|
52
|
-
await updateAddresses(type,
|
|
53
|
+
await updateAddresses(type, billingIsShipping)
|
|
53
54
|
}
|
|
54
55
|
state[`${type}IsUpdating`] = undefined
|
|
55
56
|
return data
|
|
56
57
|
})
|
|
57
58
|
}
|
|
58
59
|
|
|
59
|
-
function saveAddresses(
|
|
60
|
-
if (
|
|
61
|
-
return saveForm('
|
|
60
|
+
function saveAddresses(billingIsShipping=false){
|
|
61
|
+
if (billingIsShipping) {
|
|
62
|
+
return saveForm('billing',billingIsShipping)
|
|
62
63
|
}else{
|
|
63
64
|
return new Promise((resolve, reject) => {
|
|
64
65
|
saveForm('shipping').then(()=>{
|
|
65
66
|
saveForm('billing').then(()=>{
|
|
66
|
-
resolve({'
|
|
67
|
+
resolve({'action':'editSuccess'})
|
|
67
68
|
}).catch((e)=>reject(e))
|
|
68
69
|
}).catch((e)=>reject(e))
|
|
69
70
|
})
|
|
70
71
|
}
|
|
71
72
|
}
|
|
72
73
|
|
|
73
|
-
async function updateAddresses(type,
|
|
74
|
+
async function updateAddresses(type, billingIsShipping=false) {
|
|
74
75
|
let key = state[`${type}Data`]['key']
|
|
75
|
-
|
|
76
76
|
if (type === 'shipping'){
|
|
77
77
|
const {updateCart} = useCart()
|
|
78
78
|
updateCart({shipping_address_key:key})
|
|
79
|
-
if(shippingIsBilling){
|
|
80
|
-
const {addOrUpdateOrder} = useOrder()
|
|
81
|
-
await addOrUpdateOrder({billing_address_key:key})
|
|
82
|
-
}
|
|
83
79
|
}else if (type === 'billing'){
|
|
84
80
|
const {addOrUpdateOrder} = useOrder()
|
|
85
81
|
await addOrUpdateOrder({billing_address_key:key})
|
|
82
|
+
if(billingIsShipping){
|
|
83
|
+
const {updateCart} = useCart()
|
|
84
|
+
updateCart({shipping_address_key:key})
|
|
85
|
+
}
|
|
86
86
|
}
|
|
87
87
|
}
|
|
88
88
|
|
package/src/composables/cart.js
CHANGED
|
@@ -84,7 +84,7 @@ export function useCart() {
|
|
|
84
84
|
shipping_address_key,
|
|
85
85
|
shipping_key,
|
|
86
86
|
discount_key,
|
|
87
|
-
|
|
87
|
+
commission
|
|
88
88
|
} = {}){
|
|
89
89
|
|
|
90
90
|
let data= {
|
|
@@ -97,8 +97,8 @@ export function useCart() {
|
|
|
97
97
|
cart_key:cart_key ? cart_key : shopStore.state.cartRoot['key'],
|
|
98
98
|
}
|
|
99
99
|
|
|
100
|
-
if (
|
|
101
|
-
data.
|
|
100
|
+
if (commission) {
|
|
101
|
+
data.commission = commission
|
|
102
102
|
}
|
|
103
103
|
|
|
104
104
|
return Request.post(`${shopStore.state.shopApiUrl}/cart_update`, {
|
package/src/composables/order.js
CHANGED
|
@@ -13,7 +13,7 @@ export function useOrder() {
|
|
|
13
13
|
function updateOrderState(key,data){
|
|
14
14
|
shopStore.state.order = data
|
|
15
15
|
shopStore.state.orderKey = key
|
|
16
|
-
|
|
16
|
+
|
|
17
17
|
const params = useUrlSearchParams('hash')
|
|
18
18
|
params['order'] = shopStore.state.orderKey
|
|
19
19
|
|
|
@@ -38,7 +38,6 @@ export function useOrder() {
|
|
|
38
38
|
function addOrUpdateOrder({
|
|
39
39
|
payment_provider,
|
|
40
40
|
billing_address_key,
|
|
41
|
-
email,
|
|
42
41
|
customer_key,
|
|
43
42
|
state_ordered,
|
|
44
43
|
state_paid,
|
|
@@ -49,7 +48,6 @@ export function useOrder() {
|
|
|
49
48
|
let data = {
|
|
50
49
|
payment_provider:payment_provider?payment_provider:shopStore.state.order?.['payment_provider'],
|
|
51
50
|
billing_address_key:billing_address_key?billing_address_key:shopStore.state.order?.['billing_address_key']?.['dest']?.['key'],
|
|
52
|
-
email:email?email:shopStore.state.order?.['email'],
|
|
53
51
|
customer_key:customer_key?customer_key:shopStore.state.order?.['customer_key']?.['dest']?.['key'],
|
|
54
52
|
state_ordered:state_ordered?state_ordered:shopStore.state.order?.['state_ordered'],
|
|
55
53
|
state_paid:state_paid?state_paid:shopStore.state.order?.['state_paid'],
|
|
@@ -58,7 +56,7 @@ export function useOrder() {
|
|
|
58
56
|
if (shopStore.state.orderKey){
|
|
59
57
|
url = shopStore.state.shopApiUrl+"/order_update"
|
|
60
58
|
data["order_key"] = shopStore.state.orderKey
|
|
61
|
-
|
|
59
|
+
|
|
62
60
|
}else{
|
|
63
61
|
data["cart_key"] = shopStore.state.cartRoot['key']
|
|
64
62
|
}
|
|
@@ -77,4 +75,4 @@ export function useOrder() {
|
|
|
77
75
|
fetchOrder,
|
|
78
76
|
addOrUpdateOrder
|
|
79
77
|
}
|
|
80
|
-
}
|
|
78
|
+
}
|
package/src/main.js
CHANGED
|
@@ -5,6 +5,7 @@ import { getTranslations } from "./utils";
|
|
|
5
5
|
import { de_translations, en_translations } from "@viur/vue-utils";
|
|
6
6
|
import en from "./translations/en"
|
|
7
7
|
import de from "./translations/de"
|
|
8
|
+
import fr from "./translations/fr"
|
|
8
9
|
|
|
9
10
|
export { default as ViurShop } from "./Shop.vue";
|
|
10
11
|
|
|
@@ -14,18 +15,26 @@ const ViurShopComponents = {
|
|
|
14
15
|
let defaultLocale = options?.defaultLocale?options.defaultLocale:'de'
|
|
15
16
|
let locale = options?.locale?options.locale:['de']
|
|
16
17
|
let fallback = options?.fallback?options.fallback:'en'
|
|
18
|
+
|
|
19
|
+
let additionals = options?.additionals?options.additionals:{}
|
|
20
|
+
|
|
17
21
|
app.use(createPinia());
|
|
18
22
|
|
|
19
23
|
let messages = {}
|
|
20
24
|
// fetch translations from server
|
|
21
|
-
let data = await getTranslations(locale)
|
|
25
|
+
let data = await getTranslations(locale,options?.pattern)
|
|
22
26
|
for(const loc of locale){
|
|
27
|
+
let locAdditionals = additionals?.[loc]?additionals[loc]:{}
|
|
28
|
+
|
|
29
|
+
|
|
23
30
|
if (loc === 'de'){
|
|
24
|
-
messages[loc] = { ...de_translations, ...de, ...data[loc]}
|
|
31
|
+
messages[loc] = { ...de_translations, ...de, ...locAdditionals, ...data[loc]}
|
|
32
|
+
}else if (loc === 'fr'){
|
|
33
|
+
messages[loc] = { ...fr, ...locAdditionals, ...data[loc]}
|
|
25
34
|
}else if (loc === 'en'){
|
|
26
|
-
messages[loc] = {...en_translations, ...en, ...data[loc]}
|
|
35
|
+
messages[loc] = {...en_translations, ...en, ...locAdditionals, ...data[loc]}
|
|
27
36
|
}else{
|
|
28
|
-
messages[loc] = {...data[loc]}
|
|
37
|
+
messages[loc] = {...locAdditionals, ...data[loc]}
|
|
29
38
|
}
|
|
30
39
|
}
|
|
31
40
|
|
|
@@ -41,4 +50,4 @@ const ViurShopComponents = {
|
|
|
41
50
|
};
|
|
42
51
|
|
|
43
52
|
// Export the plugin as default
|
|
44
|
-
export default ViurShopComponents;
|
|
53
|
+
export default ViurShopComponents;
|
package/src/shop.js
CHANGED
|
@@ -24,7 +24,7 @@ export const useViurShopStore = defineStore("viurshopStore", () => {
|
|
|
24
24
|
tabs:{
|
|
25
25
|
cart: {
|
|
26
26
|
component: shallowRef(ShopCart),
|
|
27
|
-
displayName: "
|
|
27
|
+
displayName: "shop.order_step_cart", //Warenkorb
|
|
28
28
|
icon: { name: "cart3" },
|
|
29
29
|
active:computed(()=>!state.order?.['is_checkout_in_progress'] && !state.order?.['is_ordered']), //active if no orderkey or checkout not startet
|
|
30
30
|
validating:false,
|
|
@@ -32,7 +32,7 @@ export const useViurShopStore = defineStore("viurshopStore", () => {
|
|
|
32
32
|
},
|
|
33
33
|
userdata: {
|
|
34
34
|
component: shallowRef(ShopUserDataGuest),
|
|
35
|
-
displayName: "Daten Eingeben
|
|
35
|
+
displayName: "shop.order_step_data", //Daten Eingeben
|
|
36
36
|
icon: { name: "card-list" },
|
|
37
37
|
active:computed(()=>!state.order?.['is_checkout_in_progress'] && !state.order?.['is_ordered'] && state.cartList.length>0), //active if checkout not startet and cart is not empty
|
|
38
38
|
validating:false,
|
|
@@ -40,7 +40,7 @@ export const useViurShopStore = defineStore("viurshopStore", () => {
|
|
|
40
40
|
},
|
|
41
41
|
shippingmethod: {
|
|
42
42
|
component: shallowRef(ShopShippingMethod),
|
|
43
|
-
displayName: "
|
|
43
|
+
displayName: "shop.order_step_shipping", // Versandart
|
|
44
44
|
icon: { name: "truck" },
|
|
45
45
|
active:computed(()=>!state.order?.['is_checkout_in_progress'] && !state.order?.['is_ordered'] && state.cartRoot?.['shipping_address']), // we need a shipping country
|
|
46
46
|
validating:false,
|
|
@@ -48,7 +48,7 @@ export const useViurShopStore = defineStore("viurshopStore", () => {
|
|
|
48
48
|
},
|
|
49
49
|
paymentprovider: {
|
|
50
50
|
component: shallowRef(ShopPaymentProvider),
|
|
51
|
-
displayName: "Zahlungsart auswählen
|
|
51
|
+
displayName: "shop.order_step_payment", //Zahlungsart auswählen
|
|
52
52
|
icon: { name: "credit-card" },
|
|
53
53
|
active:computed(()=>!state.order?.['is_checkout_in_progress'] && state.order && state.cartRoot?.['shipping']), // we need a active order
|
|
54
54
|
validating:false,
|
|
@@ -56,7 +56,7 @@ export const useViurShopStore = defineStore("viurshopStore", () => {
|
|
|
56
56
|
},
|
|
57
57
|
confirm: {
|
|
58
58
|
component: shallowRef(ShopOrderConfirm),
|
|
59
|
-
displayName: "Bestellung prüfen
|
|
59
|
+
displayName: "shop.order_step_verify", //Bestellung prüfen
|
|
60
60
|
icon: { name: "clipboard-check" },
|
|
61
61
|
active:computed(()=>!state.order?.['is_paid'] && state.canCheckout?.['status']), // active if canCheckout and not already paid
|
|
62
62
|
validating:false,
|
|
@@ -64,7 +64,7 @@ export const useViurShopStore = defineStore("viurshopStore", () => {
|
|
|
64
64
|
},
|
|
65
65
|
complete: {
|
|
66
66
|
component: shallowRef(ShopOrderComplete),
|
|
67
|
-
displayName: "Bestellung Abgeschlossen
|
|
67
|
+
displayName: "shop.order_step_complete", //Bestellung Abgeschlossen
|
|
68
68
|
icon: { name: "bag-check" },
|
|
69
69
|
active:computed(()=>state.order?.['is_ordered']), // active if ordered
|
|
70
70
|
validating:false,
|
package/src/translations/de.js
CHANGED
|
@@ -5,32 +5,60 @@ export default {
|
|
|
5
5
|
delete: "Löschen"
|
|
6
6
|
},
|
|
7
7
|
shop:{
|
|
8
|
-
"check_order":"
|
|
8
|
+
"check_order":"Prüfen und absenden",
|
|
9
9
|
"order_pay":"Zahlungspflichtig bestellen",
|
|
10
|
-
"order_number":"Ihre
|
|
10
|
+
"order_number":"Ihre Vorgangsnummer",
|
|
11
11
|
"order_thanks":"Vielen Dank für Ihre Bestellung",
|
|
12
|
-
"order_message":"Wir haben Ihre Bestellung erhalten und werden diese
|
|
12
|
+
"order_message":"Wir haben Ihre Bestellung erhalten und werden diese schnellstmöglich bearbeiten.<br /> Sie erhalten in wenigen Minuten eine Bestätigung per E-Mail.",
|
|
13
13
|
"order_paid":"Ihre Zahlung ist bei uns eingegangen.",
|
|
14
14
|
"order_ready_to_ship":"Ihre Bestellung ist fertig für den Versand.",
|
|
15
|
-
"cart_empty":"
|
|
15
|
+
"cart_empty":"Es befinden sich noch keine Artikel im Warenkorb.",
|
|
16
16
|
"order_summary":"Bestellzusammenfassung",
|
|
17
17
|
"deliverytime":"Lieferzeit",
|
|
18
18
|
"day": "Tag | Tage",
|
|
19
|
+
"availability": "Verfügbarkeit",
|
|
20
|
+
"quantity": "Anzahl",
|
|
19
21
|
"unit_price":"Stückpreis",
|
|
20
22
|
"total_price":"Gesamtpreis",
|
|
21
|
-
"
|
|
23
|
+
"article_number":"Artikelnummer",
|
|
22
24
|
"pay":"Bezahlen",
|
|
23
|
-
"add_discount":"
|
|
24
|
-
"
|
|
25
|
+
"add_discount":"Hinzufügen",
|
|
26
|
+
"add_discount_placeholder":"Dein Rabattcode",
|
|
27
|
+
"use_shipping_as_billing_address": "Lieferung zur Rechnungsadresse",
|
|
25
28
|
"no_valid_shipping_found":"Keine passenden Versandarten gefunden.",
|
|
26
29
|
"error_message":"Eine Fehler ist aufgetreten.",
|
|
27
|
-
"free_shipping":"
|
|
30
|
+
"free_shipping":"Versandkostenfrei",
|
|
31
|
+
"proceed-checkout":"Zur Kasse gehen",
|
|
32
|
+
"summary_headline":"Zusammenfassung",
|
|
33
|
+
"summary_subtotal":"Zwischensumme",
|
|
34
|
+
"summary_shipping_total":"Versand- und Bearbeitungspauschale",
|
|
35
|
+
"summary_delivery_time":"Lieferzeit",
|
|
36
|
+
"summary_discount":"Sie sparen bei Ihrem Einkauf im Aktionszeitraum",
|
|
37
|
+
"summary_checkout":"Zur Kasse gehen",
|
|
38
|
+
"summary_total":"Gesamtbetrag",
|
|
39
|
+
"summary_vat":"inkl. {percentage} MwSt.",
|
|
40
|
+
"discount_not_found": "Dieser Rabattcode existiert nicht.",
|
|
41
|
+
"discount_not_active": "Dieser Rabattcode ist nicht aktiv.",
|
|
42
|
+
"discount_not_available": "Dieser Rabattcode ist für dieses Land nicht verfügbar.",
|
|
43
|
+
"discount_already_used": "Dieser Rabattcode wurde bereits benutzt.",
|
|
44
|
+
"discount_invalid_period": "Der Rabattzeitraum hat noch nicht begonnen oder ist bereits vorbei.",
|
|
45
|
+
"discount_minimum_not_reached": "Der Mindestbestellwert von {{minimum_order_value}} € wurde nicht erreicht.",
|
|
46
|
+
"discount_no_sale_article": "Der Rabattcode ist nicht auf bereits rabattierte Artikel anwendbar.",
|
|
47
|
+
"discount_scope_not_satisfied": "Der Rabattcode ist für diesen Warenkorb / diese Artikel nicht anwendbar.",
|
|
48
|
+
"order_step_cart":"Warenkorb",
|
|
49
|
+
"order_step_data":"Daten",
|
|
50
|
+
"order_step_shipping":"Versandart",
|
|
51
|
+
"order_step_payment":"Zahlungsart",
|
|
52
|
+
"order_step_verify":"Bestellung prüfen",
|
|
53
|
+
"order_step_complete":"Bestellung Abgeschlossen"
|
|
54
|
+
|
|
55
|
+
|
|
28
56
|
},
|
|
29
57
|
messages:{
|
|
30
58
|
loading:"Daten werden abgefragt...",
|
|
31
59
|
updating:"Daten werden aktualisiert...",
|
|
32
|
-
wait_for_payment:"
|
|
60
|
+
wait_for_payment:"Warte auf Zahlung...",
|
|
33
61
|
remove_article_from_cart:"Wollen sie den Artikel wirklich entfernen?",
|
|
34
|
-
order_check_later:"Sie können Ihre Bestellung am Ende noch einmal überprüfen."
|
|
62
|
+
order_check_later:"Sie können Ihre Bestellung am Ende noch einmal überprüfen.",
|
|
35
63
|
}
|
|
36
|
-
}
|
|
64
|
+
}
|