@feedmepos/mf-order-setting 0.0.56-dev.1 → 0.0.56-dev.2
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/.tsbuildinfo +1 -1
- package/dist/{KioskDevicesView-CccsAZqK.js → KioskDevicesView-Qv-xd_kZ.js} +1 -1
- package/dist/{KioskDevicesView.vue_vue_type_script_setup_true_lang-dF1jgi53.js → KioskDevicesView.vue_vue_type_script_setup_true_lang-CCF1mKni.js} +2 -2
- package/dist/KioskSettingView-CvvrK6Bv.js +643 -0
- package/dist/{KioskView-DmaCjLcw.js → KioskView-CppTVBv-.js} +117 -117
- package/dist/OrderSettingsView-C38N61dM.js +36564 -0
- package/dist/{app-EGmxrjDM.js → app-Bss1GkKY.js} +4 -4
- package/dist/app.js +1 -1
- package/dist/{dayjs.min-lCwCAXUZ.js → dayjs.min-DZfxGUk4.js} +1 -1
- package/dist/frontend/mf-order/src/stores/order-setting/index.d.ts +3 -0
- package/dist/frontend/mf-order/src/stores/restaurant/index.d.ts +1 -1
- package/dist/frontend/mf-order/src/views/kiosk/settings/KioskPaymentTypeSection.vue.d.ts +13 -3
- package/dist/frontend/mf-order/src/views/order-settings/delivery/integrated-delivery/ExternalSetting.vue.d.ts +12 -4
- package/dist/frontend/mf-order/src/views/order-settings/dine-in/OfflinePaymentTypeDialog.vue.d.ts +4 -4
- package/dist/frontend/mf-order/src/views/order-settings/dine-in/PaymentType.vue.d.ts +38 -4
- package/dist/frontend/mf-order/src/views/order-settings/pickup/PaymentSidesheet.vue.d.ts +1 -0
- package/dist/frontend/mf-order/src/views/order-settings/reservation/CustomTimePicker.vue.d.ts +1 -0
- package/dist/{index-CWrX79Jg.js → index-B6AGCsrw.js} +6 -6
- package/dist/index-BpKR-Cxd.js +19757 -0
- package/dist/{menu.dto-CgymySda.js → menu.dto-C_B3M2fs.js} +44222 -46755
- package/dist/package/entity/incoming-order/incoming-order.do.d.ts +22443 -3
- package/dist/package/entity/incoming-order/incoming-order.dto.d.ts +3 -3
- package/dist/package/entity/incoming-order/incoming-order.enum.d.ts +1 -1
- package/dist/package/entity/index.d.ts +1 -0
- package/dist/package/entity/marketing/marketing.dto.d.ts +1 -1
- package/dist/package/entity/order/dine-in/qr.dto.d.ts +38 -0
- package/dist/package/entity/order/order.do.d.ts +6358 -2
- package/dist/package/entity/order/order.dto.d.ts +22 -0
- package/dist/package/entity/order-platform/deliveroo/deliveroo-dto.d.ts +3 -0
- package/dist/package/entity/order-platform/deliveroo/deliveroo-setting.do.d.ts +3 -0
- package/dist/package/entity/order-platform/external/order/external-order.do.d.ts +12 -12
- package/dist/package/entity/order-platform/external/order/external-order.dto.d.ts +32 -32
- package/dist/package/entity/order-platform/external/setting/external-setting.do.d.ts +21 -3
- package/dist/package/entity/order-platform/external/setting/external-setting.dto.d.ts +12 -2
- package/dist/package/entity/order-platform/foodpanda/foodpanda-settings.do.d.ts +3 -0
- package/dist/package/entity/order-platform/foodpanda/foodpanda-settings.dto.d.ts +3 -0
- package/dist/package/entity/order-platform/grabfood/grabfood-edit-order.do.d.ts +9 -1
- package/dist/package/entity/order-platform/grabfood/grabfood-settings.do.d.ts +2 -2
- package/dist/package/entity/order-platform/grabfood/grabfood.dto.d.ts +3 -3
- package/dist/package/entity/order-platform/order-platform.dto.d.ts +2 -2
- package/dist/package/entity/order-platform/shopeefood/shopeefood-settings.do.d.ts +3 -0
- package/dist/package/entity/order-platform/shopeefood/shopeefood-settings.dto.d.ts +3 -0
- package/dist/package/entity/order-setting/order-setting.do.d.ts +3 -0
- package/dist/package/entity/order-setting/order-setting.dto.d.ts +6 -0
- package/dist/package/entity/queue/queue.do.d.ts +3 -8
- package/dist/package/entity/queue/queue.dto.d.ts +10 -0
- package/dist/package/entity/reservation/reservation.do.d.ts +4 -0
- package/dist/package/entity/reservation/reservation.dto.d.ts +10 -0
- package/dist/package/entity/reservation/reservation.utils.d.ts +2 -2
- package/dist/style.css +1 -1
- package/package.json +1 -1
- package/src/views/kiosk/KioskSummary.vue +3 -0
- package/src/views/kiosk/settings/KioskPaymentTypeSection.vue +99 -211
- package/src/views/kiosk/settings/KioskSettingView.vue +27 -11
- package/src/views/order-settings/dine-in/DineInSetting.vue +1 -0
- package/src/views/order-settings/dine-in/OfflinePaymentTypeDialog.vue +2 -3
- package/src/views/order-settings/dine-in/PaymentType.vue +151 -43
- package/src/views/order-settings/pickup/PaymentSidesheet.vue +33 -172
- package/src/views/order-settings/pickup/PickUpSettingDialogContent.vue +1 -0
- package/src/views/order-settings/reservation/CustomTimePicker.vue +129 -49
- package/src/views/order-settings/reservation/ReservationSetting.vue +547 -303
- package/dist/KioskSettingView-8GY7AT-N.js +0 -722
- package/dist/OrderSettingsView-BZcU4t9L.js +0 -56240
- package/dist/index-BXsnV_eO.js +0 -150
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
<script setup lang="ts">
|
|
2
|
-
import { FdoOfflinePaymentMethod } from '@feedmepos/core/entity'
|
|
2
|
+
import { FdoOfflinePaymentMethod, F_ORDER_PAYMENT_TYPE as _F_ORDER_PAYMENT_TYPE } from '@feedmepos/core/entity'
|
|
3
3
|
import { F_ORDER_PAYMENT_TYPE, F_ORDER_E_PAYMENT_TYPE, FdoEPaymentMethod } from '@entity'
|
|
4
4
|
import { type PropType, computed, onMounted, ref } from 'vue'
|
|
5
|
-
import
|
|
5
|
+
import PaymentType from '../../order-settings/dine-in/PaymentType.vue'
|
|
6
6
|
import { useI18n } from '@feedmepos/mf-common'
|
|
7
7
|
|
|
8
8
|
const { t } = useI18n()
|
|
@@ -20,6 +20,10 @@ const props = defineProps({
|
|
|
20
20
|
type: [Boolean, String],
|
|
21
21
|
required: true
|
|
22
22
|
},
|
|
23
|
+
allowCredit: {
|
|
24
|
+
type: [Boolean, String],
|
|
25
|
+
default: false
|
|
26
|
+
},
|
|
23
27
|
ePaymentTypes: {
|
|
24
28
|
type: Object as PropType<FdoEPaymentMethod>,
|
|
25
29
|
required: true
|
|
@@ -32,44 +36,18 @@ const emits = defineEmits<{
|
|
|
32
36
|
(event: 'update:ePaymentTypes', v: FdoEPaymentMethod): void
|
|
33
37
|
}>()
|
|
34
38
|
|
|
35
|
-
async function deleteOfflinePayment(index: number) {
|
|
36
|
-
emits(
|
|
37
|
-
'update:offlinePaymentTypes',
|
|
38
|
-
props.offlinePaymentTypes.filter((_, i) => i !== index)
|
|
39
|
-
)
|
|
40
|
-
}
|
|
41
|
-
|
|
42
39
|
const allowEPayment = computed(() => {
|
|
43
40
|
const paymentTypes = props.paymentTypes || []
|
|
44
41
|
return paymentTypes.includes(F_ORDER_PAYMENT_TYPE.enum.ePayment)
|
|
45
42
|
})
|
|
46
43
|
|
|
47
|
-
const allowOfflinePayment = computed(() => {
|
|
48
|
-
const paymentTypes = props.paymentTypes || []
|
|
49
|
-
const offlinePaymentTypes = props.offlinePaymentTypes || []
|
|
50
|
-
|
|
51
|
-
return paymentTypes.includes(F_ORDER_PAYMENT_TYPE.enum.cash) || offlinePaymentTypes.length > 0
|
|
52
|
-
})
|
|
53
|
-
|
|
54
|
-
const parentCheckbox = ref(false)
|
|
55
|
-
const paymentCheckboxVal = ref<string[]>([])
|
|
56
44
|
const cardPaymentRadioVal = ref<string>()
|
|
57
45
|
const eWalletPaymentCheckboxVal = ref<string[]>([])
|
|
58
46
|
const useCard = ref(false)
|
|
59
47
|
const useTerminal = ref(false)
|
|
60
48
|
const useEwallet = ref(false)
|
|
61
49
|
|
|
62
|
-
const checkboxChildren = [
|
|
63
|
-
{ label: t('order.offlinePayment'), value: 'offline' },
|
|
64
|
-
{ label: t('order.ePayment'), value: 'e-payment' }
|
|
65
|
-
]
|
|
66
|
-
|
|
67
50
|
const initializeCheckboxes = () => {
|
|
68
|
-
const initialValues: string[] = []
|
|
69
|
-
if (allowOfflinePayment.value) initialValues.push('offline')
|
|
70
|
-
if (allowEPayment.value) initialValues.push('e-payment')
|
|
71
|
-
paymentCheckboxVal.value = initialValues
|
|
72
|
-
parentCheckbox.value = initialValues.length === checkboxChildren.length
|
|
73
51
|
if (!(Object.keys(props.ePaymentTypes).length === 0)) {
|
|
74
52
|
if (props.ePaymentTypes.terminal) {
|
|
75
53
|
useTerminal.value = true
|
|
@@ -97,54 +75,6 @@ const initializeCheckboxes = () => {
|
|
|
97
75
|
|
|
98
76
|
initializeCheckboxes()
|
|
99
77
|
|
|
100
|
-
const handleParentUpdate = (ev: boolean) => {
|
|
101
|
-
paymentCheckboxVal.value = ev ? checkboxChildren.map((item) => item.value) : []
|
|
102
|
-
parentCheckbox.value = ev
|
|
103
|
-
|
|
104
|
-
const updatedPaymentTypes: F_ORDER_PAYMENT_TYPE[] = []
|
|
105
|
-
const updatedOfflinePaymentTypes = ev ? props.offlinePaymentTypes || [] : []
|
|
106
|
-
|
|
107
|
-
if (paymentCheckboxVal.value.includes('e-payment')) {
|
|
108
|
-
updatedPaymentTypes.push(F_ORDER_PAYMENT_TYPE.enum.ePayment)
|
|
109
|
-
useCard.value = true
|
|
110
|
-
useEwallet.value = true
|
|
111
|
-
}
|
|
112
|
-
if (paymentCheckboxVal.value.includes('offline')) {
|
|
113
|
-
updatedPaymentTypes.push(F_ORDER_PAYMENT_TYPE.enum.cash)
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
emits('update:paymentTypes', updatedPaymentTypes)
|
|
117
|
-
emits('update:offlinePaymentTypes', updatedOfflinePaymentTypes)
|
|
118
|
-
updateCardSwitch(useCard.value)
|
|
119
|
-
updateECardSwitch(useEwallet.value)
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
const handleChildUpdate = (ev: string[]) => {
|
|
123
|
-
const currentPaymentCheckboxVal = paymentCheckboxVal.value
|
|
124
|
-
paymentCheckboxVal.value = ev
|
|
125
|
-
parentCheckbox.value = ev.length === checkboxChildren.length
|
|
126
|
-
|
|
127
|
-
const updatedPaymentTypes: F_ORDER_PAYMENT_TYPE[] = []
|
|
128
|
-
const updatedOfflinePaymentTypes = ev.includes('offline') ? props.offlinePaymentTypes || [] : []
|
|
129
|
-
|
|
130
|
-
if (ev.includes('e-payment')) {
|
|
131
|
-
updatedPaymentTypes.push(F_ORDER_PAYMENT_TYPE.enum.ePayment)
|
|
132
|
-
}
|
|
133
|
-
if (ev.includes('offline')) {
|
|
134
|
-
updatedPaymentTypes.push(F_ORDER_PAYMENT_TYPE.enum.cash)
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
if (!currentPaymentCheckboxVal.includes('e-payment')) {
|
|
138
|
-
useCard.value = true
|
|
139
|
-
useEwallet.value = true
|
|
140
|
-
updateCardSwitch(useCard.value)
|
|
141
|
-
updateECardSwitch(useEwallet.value)
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
emits('update:paymentTypes', updatedPaymentTypes)
|
|
145
|
-
emits('update:offlinePaymentTypes', updatedOfflinePaymentTypes)
|
|
146
|
-
}
|
|
147
|
-
|
|
148
78
|
const handleEPaymentCardUpdate = (ev: string) => {
|
|
149
79
|
const ePaymentObj = {
|
|
150
80
|
terminal: false,
|
|
@@ -158,7 +88,7 @@ const handleEPaymentCardUpdate = (ev: string) => {
|
|
|
158
88
|
}
|
|
159
89
|
} as FdoEPaymentMethod
|
|
160
90
|
|
|
161
|
-
if (
|
|
91
|
+
if (allowEPayment.value) { // Check computed property instead of local state
|
|
162
92
|
if (ev == F_ORDER_E_PAYMENT_TYPE.enum.TERMINAL) {
|
|
163
93
|
ePaymentObj.card.terminal = true
|
|
164
94
|
}
|
|
@@ -200,7 +130,7 @@ const handleEPaymentEWalletUpdate = () => {
|
|
|
200
130
|
}
|
|
201
131
|
} as FdoEPaymentMethod
|
|
202
132
|
|
|
203
|
-
if (
|
|
133
|
+
if (allowEPayment.value) {
|
|
204
134
|
if (cardPaymentRadioVal.value) {
|
|
205
135
|
if (cardPaymentRadioVal.value === F_ORDER_E_PAYMENT_TYPE.enum.TERMINAL) {
|
|
206
136
|
ePaymentObj.card.terminal = true
|
|
@@ -254,145 +184,103 @@ const updateECardSwitch = (enabled: boolean) => {
|
|
|
254
184
|
handleEPaymentEWalletUpdate()
|
|
255
185
|
}
|
|
256
186
|
|
|
187
|
+
const handlePaymentTypesUpdate = (v: F_ORDER_PAYMENT_TYPE[]) => {
|
|
188
|
+
emits('update:paymentTypes', v)
|
|
189
|
+
if (!v.includes(F_ORDER_PAYMENT_TYPE.enum.ePayment)) {
|
|
190
|
+
useCard.value = false
|
|
191
|
+
useEwallet.value = false
|
|
192
|
+
updateCardSwitch(false)
|
|
193
|
+
updateECardSwitch(false)
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
|
|
257
197
|
onMounted(() => {
|
|
258
198
|
initializeCheckboxes()
|
|
259
199
|
})
|
|
260
200
|
</script>
|
|
261
201
|
<template>
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
</div>
|
|
280
|
-
<div
|
|
281
|
-
v-if="
|
|
282
|
-
paymentCheckboxVal.includes(checkboxChildren[0].value) && offlinePaymentTypes?.length === 0
|
|
283
|
-
"
|
|
284
|
-
>
|
|
285
|
-
<OfflinePaymentTypeDialog
|
|
286
|
-
@update:offline-payment-types="
|
|
287
|
-
(v: FdoOfflinePaymentMethod[]) => emits('update:offlinePaymentTypes', v)
|
|
288
|
-
"
|
|
289
|
-
/>
|
|
290
|
-
</div>
|
|
291
|
-
|
|
292
|
-
<div v-if="paymentCheckboxVal.includes('offline')" class="ml-7">
|
|
293
|
-
<div v-if="offlinePaymentTypes?.length === 0">
|
|
294
|
-
<FmCard variant="outlined">
|
|
295
|
-
<FmCardSection>{{ t('order.payAtCounter') }}</FmCardSection>
|
|
296
|
-
</FmCard>
|
|
297
|
-
</div>
|
|
298
|
-
<p v-for="(type, i) in offlinePaymentTypes" :key="i">
|
|
299
|
-
<FmCard variant="outlined">
|
|
300
|
-
<FmCardSection class="flex items-center justify-between">
|
|
301
|
-
<div>
|
|
302
|
-
<span class="font-bold">{{ type.name }}</span>
|
|
303
|
-
<br />
|
|
304
|
-
<span>{{ type.instruction }}</span>
|
|
305
|
-
</div>
|
|
306
|
-
<div v-for="(payment, index) in offlinePaymentTypes" :key="index">
|
|
307
|
-
<FmButton
|
|
308
|
-
append-icon="delete"
|
|
309
|
-
variant="tertiary"
|
|
310
|
-
@click="deleteOfflinePayment(index)"
|
|
202
|
+
<PaymentType
|
|
203
|
+
:payment-types="paymentTypes as unknown as _F_ORDER_PAYMENT_TYPE[]"
|
|
204
|
+
:offline-payment-types="offlinePaymentTypes"
|
|
205
|
+
:allow-e-payment="props.allowEPayment"
|
|
206
|
+
:allow-credit="props.allowCredit"
|
|
207
|
+
@update:payment-types="handlePaymentTypesUpdate"
|
|
208
|
+
@update:offline-payment-types="(v) => emits('update:offlinePaymentTypes', v || [])"
|
|
209
|
+
>
|
|
210
|
+
<template #e-payment-content>
|
|
211
|
+
<FmCard variant="outlined">
|
|
212
|
+
<FmCardSection>
|
|
213
|
+
<FmSwitch
|
|
214
|
+
:label="t('order.bankCard')"
|
|
215
|
+
:sublabel="t('order.cardPaymentDescription')"
|
|
216
|
+
label-placement="right"
|
|
217
|
+
v-model="useCard"
|
|
218
|
+
@update:modelValue="updateCardSwitch"
|
|
311
219
|
/>
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
<br />
|
|
334
|
-
<div v-show="useCard" class="ml-7">
|
|
335
|
-
<FmRadioGroup
|
|
336
|
-
v-model="cardPaymentRadioVal"
|
|
337
|
-
@update:model-value="handleEPaymentCardUpdate"
|
|
338
|
-
inline
|
|
339
|
-
>
|
|
340
|
-
<FmRadio :label="t('order.terminal')" :value="F_ORDER_E_PAYMENT_TYPE.enum.TERMINAL" />
|
|
341
|
-
<FmRadio :label="t('order.nfc')" :value="F_ORDER_E_PAYMENT_TYPE.enum.NFC" />
|
|
342
|
-
</FmRadioGroup>
|
|
343
|
-
</div>
|
|
344
|
-
</FmCardSection>
|
|
345
|
-
</FmCard>
|
|
346
|
-
<FmCard variant="outlined" class="mt-2">
|
|
347
|
-
<FmCardSection>
|
|
348
|
-
<FmSwitch
|
|
349
|
-
:label="t('order.terminal')"
|
|
350
|
-
:sublabel="t('order.terminalPaymentDescription')"
|
|
351
|
-
label-placement="right"
|
|
352
|
-
v-model="useTerminal"
|
|
353
|
-
@update:modelValue="updateCardSwitch"
|
|
354
|
-
/>
|
|
355
|
-
</FmCardSection>
|
|
356
|
-
</FmCard>
|
|
357
|
-
<FmCard variant="outlined" class="mt-2">
|
|
358
|
-
<FmCardSection>
|
|
359
|
-
<FmSwitch
|
|
360
|
-
:label="t('order.eWallet')"
|
|
361
|
-
:sublabel="t('order.eWalletDescription')"
|
|
362
|
-
label-placement="right"
|
|
363
|
-
v-model="useEwallet"
|
|
364
|
-
@update:modelValue="updateECardSwitch"
|
|
365
|
-
/>
|
|
366
|
-
<br />
|
|
367
|
-
<div v-show="useEwallet" class="ml-7">
|
|
368
|
-
<div class="flex flex-row gap-9">
|
|
369
|
-
<FmCheckbox
|
|
370
|
-
v-model="eWalletPaymentCheckboxVal"
|
|
371
|
-
:label="t('order.qrPay')"
|
|
372
|
-
:value="F_ORDER_E_PAYMENT_TYPE.enum.QRPAY"
|
|
373
|
-
@update:model-value="handleEPaymentEWalletUpdate"
|
|
374
|
-
/>
|
|
375
|
-
<FmCheckbox
|
|
376
|
-
v-model="eWalletPaymentCheckboxVal"
|
|
377
|
-
:label="t('order.scanPay')"
|
|
378
|
-
:value="F_ORDER_E_PAYMENT_TYPE.enum.SCANPAY"
|
|
379
|
-
@update:model-value="handleEPaymentEWalletUpdate"
|
|
380
|
-
/>
|
|
381
|
-
<FmCheckbox
|
|
382
|
-
v-model="eWalletPaymentCheckboxVal"
|
|
383
|
-
:label="t('order.terminalScanPay')"
|
|
384
|
-
:value="F_ORDER_E_PAYMENT_TYPE.enum.TERMINAL_SCAN_PAY"
|
|
385
|
-
@update:model-value="handleEPaymentEWalletUpdate"
|
|
220
|
+
<br />
|
|
221
|
+
<div v-show="useCard" class="ml-7">
|
|
222
|
+
<FmRadioGroup
|
|
223
|
+
v-model="cardPaymentRadioVal"
|
|
224
|
+
@update:model-value="handleEPaymentCardUpdate"
|
|
225
|
+
inline
|
|
226
|
+
>
|
|
227
|
+
<FmRadio :label="t('order.terminal')" :value="F_ORDER_E_PAYMENT_TYPE.enum.TERMINAL" />
|
|
228
|
+
<FmRadio :label="t('order.nfc')" :value="F_ORDER_E_PAYMENT_TYPE.enum.NFC" />
|
|
229
|
+
</FmRadioGroup>
|
|
230
|
+
</div>
|
|
231
|
+
</FmCardSection>
|
|
232
|
+
</FmCard>
|
|
233
|
+
<FmCard variant="outlined" class="mt-2">
|
|
234
|
+
<FmCardSection>
|
|
235
|
+
<FmSwitch
|
|
236
|
+
:label="t('order.terminal')"
|
|
237
|
+
:sublabel="t('order.terminalPaymentDescription')"
|
|
238
|
+
label-placement="right"
|
|
239
|
+
v-model="useTerminal"
|
|
240
|
+
@update:modelValue="handleEPaymentEWalletUpdate"
|
|
386
241
|
/>
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
242
|
+
</FmCardSection>
|
|
243
|
+
</FmCard>
|
|
244
|
+
<FmCard variant="outlined" class="mt-2">
|
|
245
|
+
<FmCardSection>
|
|
246
|
+
<FmSwitch
|
|
247
|
+
:label="t('order.eWallet')"
|
|
248
|
+
:sublabel="t('order.eWalletDescription')"
|
|
249
|
+
label-placement="right"
|
|
250
|
+
v-model="useEwallet"
|
|
251
|
+
@update:modelValue="updateECardSwitch"
|
|
392
252
|
/>
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
253
|
+
<br />
|
|
254
|
+
<div v-show="useEwallet" class="ml-7">
|
|
255
|
+
<div class="flex flex-row gap-9">
|
|
256
|
+
<FmCheckbox
|
|
257
|
+
v-model="eWalletPaymentCheckboxVal"
|
|
258
|
+
:label="t('order.qrPay')"
|
|
259
|
+
:value="F_ORDER_E_PAYMENT_TYPE.enum.QRPAY"
|
|
260
|
+
@update:model-value="handleEPaymentEWalletUpdate"
|
|
261
|
+
/>
|
|
262
|
+
<FmCheckbox
|
|
263
|
+
v-model="eWalletPaymentCheckboxVal"
|
|
264
|
+
:label="t('order.scanPay')"
|
|
265
|
+
:value="F_ORDER_E_PAYMENT_TYPE.enum.SCANPAY"
|
|
266
|
+
@update:model-value="handleEPaymentEWalletUpdate"
|
|
267
|
+
/>
|
|
268
|
+
<FmCheckbox
|
|
269
|
+
v-model="eWalletPaymentCheckboxVal"
|
|
270
|
+
:label="t('order.terminalScanPay')"
|
|
271
|
+
:value="F_ORDER_E_PAYMENT_TYPE.enum.TERMINAL_SCAN_PAY"
|
|
272
|
+
@update:model-value="handleEPaymentEWalletUpdate"
|
|
273
|
+
/>
|
|
274
|
+
<FmCheckbox
|
|
275
|
+
v-model="eWalletPaymentCheckboxVal"
|
|
276
|
+
:label="t('order.terminalQrPay')"
|
|
277
|
+
:value="F_ORDER_E_PAYMENT_TYPE.enum.TERMINAL_QR_PAY"
|
|
278
|
+
@update:model-value="handleEPaymentEWalletUpdate"
|
|
279
|
+
/>
|
|
280
|
+
</div>
|
|
281
|
+
</div>
|
|
282
|
+
</FmCardSection>
|
|
283
|
+
</FmCard>
|
|
284
|
+
</template>
|
|
285
|
+
</PaymentType>
|
|
398
286
|
</template>
|
|
@@ -217,10 +217,9 @@
|
|
|
217
217
|
|
|
218
218
|
<!-- Payment Section -->
|
|
219
219
|
<div class="flex flex-col gap-2">
|
|
220
|
-
<span class="fm-typo-en-title-sm-600">{{ t('order.acceptedPayment') }}</span>
|
|
221
|
-
<span class="fm-typo-en-title-sm-400 font-bold">{{ t('order.configuration') }}</span>
|
|
222
220
|
<KioskPaymentTypeSection
|
|
223
221
|
:payment-types="kioskOrderSettingForm.paymentSetting.paymentTypes ?? []"
|
|
222
|
+
:allow-credit="true"
|
|
224
223
|
:allow-e-payment="allowEPayment"
|
|
225
224
|
:offline-payment-types="kioskOrderSettingForm.paymentSetting.offlinePaymentTypes ?? []"
|
|
226
225
|
:ePaymentTypes="kioskOrderSettingForm.paymentSetting.ePaymentTypes ?? {}"
|
|
@@ -248,6 +247,7 @@
|
|
|
248
247
|
<script setup lang="ts">
|
|
249
248
|
import { computed, ref } from 'vue'
|
|
250
249
|
import KioskPaymentTypeSection from './KioskPaymentTypeSection.vue'
|
|
250
|
+
import { useRestaurantStore } from '@/stores/restaurant'
|
|
251
251
|
import { FdoOfflinePaymentMethod } from '@feedmepos/core/entity'
|
|
252
252
|
import { FdoEPaymentMethod, F_ORDER_PAYMENT_TYPE } from '@entity'
|
|
253
253
|
import type {
|
|
@@ -312,6 +312,22 @@ const validKioskOrderSetting = computed<MfKioskOrderSetting | null>(() => {
|
|
|
312
312
|
if (!isValid) return null
|
|
313
313
|
}
|
|
314
314
|
|
|
315
|
+
// Validate payment settings
|
|
316
|
+
const payment = f.paymentSetting
|
|
317
|
+
if (payment?.paymentTypes?.includes(F_ORDER_PAYMENT_TYPE.enum.ePayment)) {
|
|
318
|
+
const ePayment = payment.ePaymentTypes
|
|
319
|
+
if (!ePayment) return null
|
|
320
|
+
|
|
321
|
+
const hasCard = ePayment.card?.terminal || ePayment.card?.nfc
|
|
322
|
+
const hasWallet =
|
|
323
|
+
ePayment.eWallet?.qrPay ||
|
|
324
|
+
ePayment.eWallet?.scanPay ||
|
|
325
|
+
ePayment.eWallet?.terminalScanPay ||
|
|
326
|
+
ePayment.eWallet?.terminalQrPay
|
|
327
|
+
|
|
328
|
+
if (!hasCard && !hasWallet) return null
|
|
329
|
+
}
|
|
330
|
+
|
|
315
331
|
// Return the form as-is if valid, with display stand disabled when dineIn is disabled
|
|
316
332
|
return {
|
|
317
333
|
...f,
|
|
@@ -341,6 +357,7 @@ function updateEPaymentSetting(form: FdoEPaymentMethod) {
|
|
|
341
357
|
kioskOrderSettingForm.value.paymentSetting.ePaymentTypes = form
|
|
342
358
|
}
|
|
343
359
|
|
|
360
|
+
const restaurantStore = useRestaurantStore()
|
|
344
361
|
type CoverImageField = 'coverImageLandscape' | 'coverImagePortrait'
|
|
345
362
|
const MAX_IMAGE_FILE_SIZE = 10 * 1000 * 1000
|
|
346
363
|
|
|
@@ -376,10 +393,10 @@ async function uploadCoverImage(field: CoverImageField, file: File) {
|
|
|
376
393
|
}
|
|
377
394
|
}
|
|
378
395
|
|
|
379
|
-
function handleCoverImageRejected(
|
|
380
|
-
field: CoverImageField,
|
|
381
|
-
rejected: { file: File; reason: string[] }[]
|
|
382
|
-
) {
|
|
396
|
+
function handleCoverImageRejected(
|
|
397
|
+
field: CoverImageField,
|
|
398
|
+
rejected: { file: File; reason: string[] }[]
|
|
399
|
+
) {
|
|
383
400
|
const fieldName =
|
|
384
401
|
field === 'coverImageLandscape' ? t('order.coverImageLandscape') : t('order.coverImagePortrait')
|
|
385
402
|
const firstReason = rejected[0]?.reason?.[0]
|
|
@@ -387,13 +404,12 @@ function handleCoverImageRejected(
|
|
|
387
404
|
title: firstReason
|
|
388
405
|
? `${t('order.imageUploadRejected')}: ${fieldName} (${firstReason})`
|
|
389
406
|
: `${t('order.imageUploadRejected')}: ${fieldName}`,
|
|
390
|
-
type: 'error'
|
|
391
|
-
})
|
|
392
|
-
}
|
|
407
|
+
type: 'error'
|
|
408
|
+
})
|
|
409
|
+
}
|
|
393
410
|
|
|
394
411
|
const allowEPayment = computed(() => {
|
|
395
|
-
|
|
396
|
-
return paymentTypes.includes(F_ORDER_PAYMENT_TYPE.enum.ePayment)
|
|
412
|
+
return restaurantStore.getRestaurantEPayment()
|
|
397
413
|
})
|
|
398
414
|
|
|
399
415
|
const enablePaxDialog = computed({
|
|
@@ -90,6 +90,7 @@
|
|
|
90
90
|
<PaymentType
|
|
91
91
|
:payment-types="dineInSetting.paymentTypes ?? []"
|
|
92
92
|
:allow-e-payment="allowEPayment"
|
|
93
|
+
:allow-credit="true"
|
|
93
94
|
:offline-payment-types="dineInSetting.offlinePaymentTypes ?? []"
|
|
94
95
|
@update:payment-types="(v: F_ORDER_PAYMENT_TYPE[]) => (dineInSetting.paymentTypes = v)"
|
|
95
96
|
@update:offline-payment-types="
|
|
@@ -40,12 +40,11 @@ const openDialog = () => {
|
|
|
40
40
|
}
|
|
41
41
|
|
|
42
42
|
async function addOfflinePayment(newPaymentType: FdoOfflinePaymentMethod) {
|
|
43
|
-
|
|
44
|
-
emits('update:offlinePaymentTypes', updatedOfflinePaymentTypes)
|
|
43
|
+
emits('add:offline-payment-type', newPaymentType)
|
|
45
44
|
}
|
|
46
45
|
|
|
47
46
|
const emits = defineEmits<{
|
|
48
|
-
(event: '
|
|
47
|
+
(event: 'add:offline-payment-type', v: FdoOfflinePaymentMethod): void
|
|
49
48
|
}>()
|
|
50
49
|
</script>
|
|
51
50
|
|