@feedmepos/mf-order-setting 0.0.21-beta.3 → 0.0.23
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/dist/{KioskDevicesView-Cb7Rw7t8.js → KioskDevicesView-BdJCcotz.js} +1 -1
- package/dist/{KioskDevicesView.vue_vue_type_script_setup_true_lang-raPhhBpi.js → KioskDevicesView.vue_vue_type_script_setup_true_lang-DUPfN7ti.js} +2 -2
- package/dist/KioskSettingView-BChhriPk.js +782 -0
- package/dist/KioskView-DPU-oQ1H.js +426 -0
- package/dist/{OrderSettingsView-BJ1b1Qjg.js → OrderSettingsView-BOiflwB_.js} +34011 -32822
- package/dist/{app-BY258ajB.js → app-CaYWSLe1.js} +39 -17
- package/dist/app.js +1 -1
- package/dist/common/convertor/index.d.ts +2 -0
- package/dist/common/sms/index.d.ts +1 -1
- package/dist/common/util/index.d.ts +6 -0
- package/dist/{dayjs.min-4COVK72W.js → dayjs.min-8NyoNely.js} +36 -36
- package/dist/frontend/mf-order/src/api/remoteOrder/index.d.ts +5 -2
- package/dist/frontend/mf-order/src/app.d.ts +22 -0
- package/dist/frontend/mf-order/src/helpers/menu.d.ts +1 -1
- package/dist/frontend/mf-order/src/modules/order-setting/kiosk/interface.d.ts +13 -0
- package/dist/frontend/mf-order/src/stores/app/index.d.ts +14 -4
- package/dist/frontend/mf-order/src/stores/menu/menu.d.ts +45 -35
- package/dist/frontend/mf-order/src/stores/order-setting/index.d.ts +168 -12
- package/dist/frontend/mf-order/src/stores/order-setting/mapper.d.ts +2 -1
- package/dist/frontend/mf-order/src/stores/restaurant/index.d.ts +581 -716
- package/dist/frontend/mf-order/src/views/all-orders/ReflowOrder.vue.d.ts +140 -174
- package/dist/frontend/mf-order/src/views/kiosk/settings/KioskInstructionSection.vue.d.ts +15 -0
- package/dist/frontend/mf-order/src/views/kiosk/settings/KioskPickAtCounterSection.vue.d.ts +4 -3
- package/dist/frontend/mf-order/src/views/order-settings/delivery/DeliverySetting.vue.d.ts +2 -2
- package/dist/frontend/mf-order/src/views/order-settings/delivery/delivery.d.ts +2 -1
- package/dist/frontend/mf-order/src/views/order-settings/delivery/delivery.data.d.ts +3 -0
- package/dist/frontend/mf-order/src/views/order-settings/delivery/integrated-delivery/ExternalSetting.vue.d.ts +97 -0
- package/dist/frontend/mf-order/src/views/order-settings/delivery/integrated-delivery/ShopeefoodSetting.vue.d.ts +3 -3
- package/dist/frontend/mf-order/tsconfig.app.tsbuildinfo +1 -1
- package/dist/{index-t_7ThPjm.js → index-B7GFhkAE.js} +2 -2
- package/dist/package/entity/booking/booking.do.d.ts +1516 -1276
- package/dist/package/entity/delivery/delivery.dto.d.ts +298 -251
- package/dist/package/entity/incoming-order/incoming-order-to-bill.dto.d.ts +539 -0
- package/dist/package/entity/incoming-order/incoming-order.do.d.ts +114 -9
- package/dist/package/entity/incoming-order/incoming-order.dto.d.ts +862 -4
- package/dist/package/entity/incoming-order/incoming-order.enum.d.ts +1 -1
- package/dist/package/entity/index.d.ts +34 -22
- package/dist/package/entity/kiosk/kiosk.do.d.ts +12 -12
- package/dist/package/entity/kiosk/kiosk.dto.d.ts +12 -12
- package/dist/package/entity/kiosk/marketing/marketing.dto.d.ts +1942 -1642
- package/dist/package/entity/member/member.dto.d.ts +33 -0
- package/dist/package/entity/order/order-item/order-item.dto.d.ts +15 -0
- package/dist/package/entity/order/order.do.d.ts +37 -0
- package/dist/package/entity/order/order.dto.d.ts +808 -17435
- package/dist/package/entity/order/order.enum.d.ts +2 -0
- package/dist/package/entity/order-platform/external/auth/external-auth.do.d.ts +12 -0
- package/dist/package/entity/order-platform/external/auth/external-auth.dto.d.ts +27 -0
- package/dist/package/entity/order-platform/external/menu/external-menu.do.d.ts +2868 -0
- package/dist/package/entity/order-platform/external/menu/external-menu.dto.d.ts +21 -0
- package/dist/package/entity/order-platform/external/menu/external-menu.enum.d.ts +3 -0
- package/dist/package/entity/order-platform/external/order/external-order.do.d.ts +1373 -0
- package/dist/package/entity/order-platform/external/order/external-order.dto.d.ts +2834 -0
- package/dist/package/entity/order-platform/external/order/external-order.enum.d.ts +9 -0
- package/dist/package/entity/order-platform/external/setting/external-setting.do.d.ts +127 -0
- package/dist/package/entity/order-platform/external/setting/external-setting.dto.d.ts +95 -0
- package/dist/package/entity/order-platform/foodpanda/foodpanda-order.do.d.ts +98 -98
- package/dist/package/entity/order-platform/foodpanda/foodpanda-order.dto.d.ts +345 -297
- package/dist/package/entity/order-platform/foodpanda/foodpanda-settings.do.d.ts +4 -4
- package/dist/package/entity/order-platform/foodpanda/foodpanda-settings.dto.d.ts +3 -3
- package/dist/package/entity/order-platform/grabfood/grabfood-menu.do.d.ts +65 -65
- package/dist/package/entity/order-platform/grabfood/grabfood-order.do.d.ts +311 -263
- 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 +7 -7
- package/dist/package/entity/order-platform/menu.dto.d.ts +126 -0
- package/dist/package/entity/order-platform/order-platform.dto.d.ts +4 -4
- package/dist/package/entity/order-platform/order-platform.enum.d.ts +1 -1
- package/dist/package/entity/order-platform/shopeefood/shopeefood-order.do.d.ts +298 -250
- package/dist/package/entity/order-setting/kiosk/kiosk.do.d.ts +115 -0
- package/dist/package/entity/order-setting/kiosk/kiosk.dto.d.ts +225 -41
- package/dist/package/entity/order-setting/kiosk/kiosk.enum.d.ts +3 -0
- package/dist/package/entity/order-setting/order-setting.do.d.ts +138 -8
- package/dist/package/entity/order-setting/order-setting.dto.d.ts +276 -16
- package/dist/package/entity/order-setting/sequence/sequence.do.d.ts +4 -4
- package/dist/package/entity/order-setting/sequence/sequence.dto.d.ts +4 -4
- package/dist/package/entity/payment/payment.enum.d.ts +2 -0
- package/dist/package/entity/printer/printer.do.d.ts +2 -2
- package/dist/package/entity/pubsub/ably/ably.do.d.ts +60 -9
- package/dist/package/entity/pubsub/ably/ably.enum.d.ts +1 -1
- package/dist/package/entity/queue/queue.do.d.ts +40 -0
- package/dist/package/entity/restaurant/restaurant.dto.d.ts +136 -6
- package/dist/package/entity/websocket/websocket.dto.d.ts +288 -0
- package/dist/{auth.dto-BOoRSQkS.js → queue.do-CIyIpp22.js} +30390 -29706
- package/package.json +4 -3
- package/src/api/remoteOrder/index.ts +13 -2
- package/src/helpers/menu.ts +2 -2
- package/src/locales/en-US.json +13 -2
- package/src/locales/zh-CN.json +12 -1
- package/src/modules/order-setting/kiosk/interface.ts +16 -0
- package/src/stores/order-setting/mapper.ts +58 -7
- package/src/stores/restaurant/index.ts +4 -1
- package/src/views/kiosk/settings/KioskDineInSection.vue +4 -5
- package/src/views/kiosk/settings/KioskDisplayStandSection.vue +36 -0
- package/src/views/kiosk/settings/KioskInstructionSection.vue +40 -0
- package/src/views/kiosk/settings/KioskPaymentTypeSection.vue +30 -19
- package/src/views/kiosk/settings/KioskPickAtCounterSection.vue +45 -7
- package/src/views/kiosk/settings/KioskSettingView.vue +15 -3
- package/src/views/kiosk/settings/KioskTakeawaySection.vue +38 -4
- package/src/views/order-settings/delivery/DeliverySetting.vue +82 -6
- package/src/views/order-settings/delivery/delivery.data.ts +16 -1
- package/src/views/order-settings/delivery/delivery.ts +1 -0
- package/src/views/order-settings/delivery/integrated-delivery/ExternalSetting.vue +114 -0
- package/src/views/order-settings/delivery/integrated-delivery/FoodpandaSetting.vue +23 -6
- package/src/views/order-settings/delivery/integrated-delivery/GrabfoodSetting.vue +21 -16
- package/src/views/order-settings/delivery/integrated-delivery/ShopeefoodSetting.vue +58 -59
- package/src/views/order-settings/pickup/PickUpSetting.vue +1 -1
- package/src/views/order-settings/servicecharge/ServiceChargeRule.vue +216 -165
- package/src/views/order-settings/servicecharge/ServiceChargeSetting.vue +1 -0
- package/dist/KioskSettingView-BQgyeWbo.js +0 -649
- package/dist/KioskView-BLkuqfZ_.js +0 -371
|
@@ -106,7 +106,11 @@ const validKioskOrderSetting = computed<MfKioskOrderSetting | null>(() => {
|
|
|
106
106
|
min: f.dineIn.displayStand.standSlotRange.min ?? 0,
|
|
107
107
|
max: f.dineIn.displayStand.standSlotRange.max ?? 10
|
|
108
108
|
},
|
|
109
|
-
prefix: f.dineIn.displayStand.prefix ?? ''
|
|
109
|
+
prefix: f.dineIn.displayStand.prefix ?? '',
|
|
110
|
+
submitOrderInstruction: {
|
|
111
|
+
payAtCounter: f.dineIn.displayStand.submitOrderInstruction.payAtCounter ?? null,
|
|
112
|
+
paid: f.dineIn.displayStand.submitOrderInstruction.paid ?? null
|
|
113
|
+
}
|
|
110
114
|
}
|
|
111
115
|
}
|
|
112
116
|
}
|
|
@@ -134,7 +138,11 @@ const validKioskOrderSetting = computed<MfKioskOrderSetting | null>(() => {
|
|
|
134
138
|
min: displayStand.standSlotRange.min,
|
|
135
139
|
max: displayStand.standSlotRange.max
|
|
136
140
|
},
|
|
137
|
-
prefix: displayStand.prefix ?? ''
|
|
141
|
+
prefix: displayStand.prefix ?? '',
|
|
142
|
+
submitOrderInstruction: {
|
|
143
|
+
payAtCounter: displayStand.submitOrderInstruction.payAtCounter ?? null,
|
|
144
|
+
paid: displayStand.submitOrderInstruction.paid ?? null
|
|
145
|
+
}
|
|
138
146
|
}
|
|
139
147
|
}
|
|
140
148
|
}
|
|
@@ -154,7 +162,11 @@ const validKioskOrderSetting = computed<MfKioskOrderSetting | null>(() => {
|
|
|
154
162
|
min: f.dineIn.displayStand.standSlotRange.min ?? 0,
|
|
155
163
|
max: f.dineIn.displayStand.standSlotRange.max ?? 10
|
|
156
164
|
},
|
|
157
|
-
prefix: f.dineIn.displayStand.prefix ?? ''
|
|
165
|
+
prefix: f.dineIn.displayStand.prefix ?? '',
|
|
166
|
+
submitOrderInstruction: {
|
|
167
|
+
payAtCounter: f.dineIn.displayStand.submitOrderInstruction.payAtCounter ?? null,
|
|
168
|
+
paid: f.dineIn.displayStand.submitOrderInstruction.paid ?? null
|
|
169
|
+
}
|
|
158
170
|
}
|
|
159
171
|
}
|
|
160
172
|
}
|
|
@@ -4,14 +4,21 @@
|
|
|
4
4
|
:model-value="v.enabled"
|
|
5
5
|
:label="t('order.takeaway')"
|
|
6
6
|
label-placement="right"
|
|
7
|
-
@update:model-value="
|
|
7
|
+
@update:model-value="updateTakeawaySettingEnabled"
|
|
8
8
|
class="mb-5"
|
|
9
9
|
/>
|
|
10
|
+
<kiosk-instruction-section
|
|
11
|
+
v-show="v.enabled"
|
|
12
|
+
:fields="instructionFields"
|
|
13
|
+
@update:field="updateTakeawaySettingInstructions"
|
|
14
|
+
/>
|
|
10
15
|
</div>
|
|
11
16
|
</template>
|
|
12
17
|
<script setup lang="ts">
|
|
13
18
|
import type { KioskTakeawaySettingForm } from '@/modules/order-setting/kiosk/interface'
|
|
14
19
|
import { useI18n } from '@feedmepos/mf-common'
|
|
20
|
+
import { computed } from 'vue'
|
|
21
|
+
import KioskInstructionSection from './KioskInstructionSection.vue'
|
|
15
22
|
|
|
16
23
|
const { t } = useI18n()
|
|
17
24
|
|
|
@@ -23,10 +30,37 @@ interface Emits {
|
|
|
23
30
|
(e: 'updateTakeaway', setting: KioskTakeawaySettingForm): void
|
|
24
31
|
}
|
|
25
32
|
|
|
26
|
-
defineProps<Props>()
|
|
33
|
+
const props = defineProps<Props>()
|
|
27
34
|
const emits = defineEmits<Emits>()
|
|
28
35
|
|
|
29
|
-
|
|
30
|
-
|
|
36
|
+
const instructionFields = computed(() => {
|
|
37
|
+
return [
|
|
38
|
+
{
|
|
39
|
+
id: 'payAtCounter',
|
|
40
|
+
value: props.v.submitOrderInstruction.payAtCounter ?? undefined,
|
|
41
|
+
title: t('order.payAtCounter'),
|
|
42
|
+
defaultValue: 'Collect your transaction slip below and present it to the cashier'
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
id: 'paid',
|
|
46
|
+
value: props.v.submitOrderInstruction.paid ?? undefined,
|
|
47
|
+
title: t('order.paid'),
|
|
48
|
+
defaultValue: "Please wait as we prepare your food. We'll call your number when it's ready."
|
|
49
|
+
}
|
|
50
|
+
]
|
|
51
|
+
})
|
|
52
|
+
|
|
53
|
+
function updateTakeawaySettingEnabled(v: boolean) {
|
|
54
|
+
emits('updateTakeaway', { ...props.v, enabled: v })
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
function updateTakeawaySettingInstructions(id: string, instructions: string) {
|
|
58
|
+
emits('updateTakeaway', {
|
|
59
|
+
...props.v,
|
|
60
|
+
submitOrderInstruction: {
|
|
61
|
+
...props.v.submitOrderInstruction,
|
|
62
|
+
[id]: instructions
|
|
63
|
+
}
|
|
64
|
+
})
|
|
31
65
|
}
|
|
32
66
|
</script>
|
|
@@ -78,6 +78,12 @@
|
|
|
78
78
|
:address="formatAddress(currentRestaurant?.profile.address)"
|
|
79
79
|
@update:model-value="handleModelValueUpdateInHouse"
|
|
80
80
|
/>
|
|
81
|
+
<ExternalSetting
|
|
82
|
+
v-if="externalComponentProps.key === AUTO_INTEGRATION_CLIENT.external"
|
|
83
|
+
:initial-value="externalComponentProps.initialValue"
|
|
84
|
+
@update:model-value="handleModelValueUpdateExternal"
|
|
85
|
+
/>
|
|
86
|
+
|
|
81
87
|
<template #side-sheet-footer v-if="feedmeValidate !== false">
|
|
82
88
|
<div class="flex gap-8 items-center justify-start">
|
|
83
89
|
<FmButton
|
|
@@ -157,7 +163,7 @@
|
|
|
157
163
|
import { computed, h, ref, watch } from 'vue'
|
|
158
164
|
import RestaurantSelector from '../components/RestaurantSelector.vue'
|
|
159
165
|
import { type ColumnDef } from '@feedmepos/ui-library'
|
|
160
|
-
import type { FdoFoodpandaSettings } from '@entity'
|
|
166
|
+
import type { FdoExternalSetting, FdoFoodpandaSettings } from '@entity'
|
|
161
167
|
import type {
|
|
162
168
|
FdoLinkedDelivery,
|
|
163
169
|
FdoRestaurantFeedmeDelivery,
|
|
@@ -182,6 +188,7 @@ import type { FdoRestaurantFeedme } from '../delivery/integrated-delivery/Feedme
|
|
|
182
188
|
import FoodpandaSetting from './integrated-delivery/FoodpandaSetting.vue'
|
|
183
189
|
import GrabfoodSetting from './integrated-delivery/GrabfoodSetting.vue'
|
|
184
190
|
import ShopeefoodSetting from './integrated-delivery/ShopeefoodSetting.vue'
|
|
191
|
+
import ExternalSetting from './integrated-delivery/ExternalSetting.vue'
|
|
185
192
|
import { useRestaurantStore } from '@/stores/restaurant'
|
|
186
193
|
import FeedmeDelivery from './integrated-delivery/FeedmeDelivery.vue'
|
|
187
194
|
import InHouseDelivery, { type InhouseDialogData } from './inhouse/InHouseDelivery.vue'
|
|
@@ -215,6 +222,7 @@ type IntegratedDeliveryCompany =
|
|
|
215
222
|
| FdoFoodpandaSettings
|
|
216
223
|
| FdoGrabfoodSettings
|
|
217
224
|
| FdoShopeeFoodSettings
|
|
225
|
+
| FdoExternalSetting
|
|
218
226
|
export interface IntegratedDeliveryRow extends DeliveryRow {
|
|
219
227
|
setting: IntegratedDeliveryCompany
|
|
220
228
|
company?: DeliveryCompany
|
|
@@ -264,6 +272,10 @@ async function toggleIntegratedSidesheet(data: any) {
|
|
|
264
272
|
title.value = `${t('order.inhouseDeliveryTitle')}`
|
|
265
273
|
updateInHouse(rowData)
|
|
266
274
|
break
|
|
275
|
+
case AUTO_INTEGRATION_CLIENT.external:
|
|
276
|
+
title.value = `${t('order.manageExternalDelivery')}`
|
|
277
|
+
updateExternalDelivery(rowData)
|
|
278
|
+
break
|
|
267
279
|
}
|
|
268
280
|
}
|
|
269
281
|
|
|
@@ -287,6 +299,11 @@ const inHouseComponentProps = ref({
|
|
|
287
299
|
initialValue: {} as InhouseDialogData
|
|
288
300
|
})
|
|
289
301
|
|
|
302
|
+
const externalComponentProps = ref({
|
|
303
|
+
key: '' as string,
|
|
304
|
+
initialValue: {} as FdoExternalSetting
|
|
305
|
+
})
|
|
306
|
+
|
|
290
307
|
function clearComponentProps() {
|
|
291
308
|
feedMeComponentProps.value = {
|
|
292
309
|
key: '',
|
|
@@ -307,6 +324,11 @@ function clearComponentProps() {
|
|
|
307
324
|
},
|
|
308
325
|
canUseAuto: {} as boolean | string
|
|
309
326
|
}
|
|
327
|
+
|
|
328
|
+
externalComponentProps.value = {
|
|
329
|
+
key: '',
|
|
330
|
+
initialValue: {} as any
|
|
331
|
+
}
|
|
310
332
|
}
|
|
311
333
|
|
|
312
334
|
async function updateIntegratedDeliveryType({
|
|
@@ -358,6 +380,18 @@ async function updateInHouse({ key, setting }: IntegratedDeliveryRow) {
|
|
|
358
380
|
}
|
|
359
381
|
}
|
|
360
382
|
|
|
383
|
+
async function updateExternalDelivery( {key, setting}: IntegratedDeliveryRow) {
|
|
384
|
+
clearComponentProps()
|
|
385
|
+
const externalSetting = setting as FdoExternalSetting
|
|
386
|
+
|
|
387
|
+
externalComponentProps.value = {
|
|
388
|
+
key,
|
|
389
|
+
initialValue: {
|
|
390
|
+
...externalSetting
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
|
|
361
395
|
const { startAsyncCallWithErr, isLoading } = useLoading()
|
|
362
396
|
const columns: ColumnDef<any>[] = [
|
|
363
397
|
{
|
|
@@ -447,6 +481,13 @@ const shopee = computed<FdoShopeeFoodSettings>(() => {
|
|
|
447
481
|
...shopeefoodSetting.value
|
|
448
482
|
}
|
|
449
483
|
})
|
|
484
|
+
|
|
485
|
+
const external = computed<FdoExternalSetting>(() => {
|
|
486
|
+
return {
|
|
487
|
+
...deliveryData.initExternalDelivery(),
|
|
488
|
+
...externalSetting.value
|
|
489
|
+
}
|
|
490
|
+
})
|
|
450
491
|
const localDeliveryCompanies = computed<DeliveryRow[]>(() => {
|
|
451
492
|
const res = filterLocalDeliveryCompanies(deliveryCompanies.value).map<DeliveryRow>((company) => {
|
|
452
493
|
const { name, paymentTypeKey, key } = company
|
|
@@ -571,7 +612,16 @@ const integratedCompanies = computed<IntegratedDeliveryRow[]>(() => {
|
|
|
571
612
|
canUseAutoDeliveryIntegration: canUseAutoDeliveryIntegration(
|
|
572
613
|
AUTO_INTEGRATION_CLIENT.shopeefood
|
|
573
614
|
)
|
|
574
|
-
}
|
|
615
|
+
},
|
|
616
|
+
{
|
|
617
|
+
id: loadingKey.value.external,
|
|
618
|
+
name: 'External delivery',
|
|
619
|
+
key: AUTO_INTEGRATION_CLIENT.external,
|
|
620
|
+
setting: external.value,
|
|
621
|
+
catalog: '-',
|
|
622
|
+
paymentType: '-',
|
|
623
|
+
status: [generateStatus(false, external.value.enable)],
|
|
624
|
+
},
|
|
575
625
|
]
|
|
576
626
|
})
|
|
577
627
|
|
|
@@ -583,6 +633,7 @@ const loadingKey = computed(() => {
|
|
|
583
633
|
gf: `${id}_gf`,
|
|
584
634
|
sf: `${id}_sf`,
|
|
585
635
|
fm: `${id}_fm`,
|
|
636
|
+
external: `${id}_external`,
|
|
586
637
|
local: (deliveryName: string) => `${id}_${deliveryName}`
|
|
587
638
|
}
|
|
588
639
|
})
|
|
@@ -604,6 +655,9 @@ async function updateIntegratedDeliveryCompany(company: IntegratedDeliveryRow) {
|
|
|
604
655
|
case F_ORDER_PLATFORM.enum.IN_HOUSE:
|
|
605
656
|
await updateInHouseSetting()
|
|
606
657
|
break
|
|
658
|
+
case AUTO_INTEGRATION_CLIENT.external:
|
|
659
|
+
await updateExternalDeliverySetting()
|
|
660
|
+
break
|
|
607
661
|
}
|
|
608
662
|
await readData()
|
|
609
663
|
}
|
|
@@ -625,6 +679,7 @@ const filteredCompanies = computed(() => {
|
|
|
625
679
|
const grabfoodSetting = ref<FdoGrabfoodSettings | null>(null)
|
|
626
680
|
const foodpandaSetting = ref<FdoFoodpandaSettings | null>(null)
|
|
627
681
|
const shopeefoodSetting = ref<FdoShopeeFoodSettings | null>(null)
|
|
682
|
+
const externalSetting = ref<FdoExternalSetting | null>(null)
|
|
628
683
|
const loadingDpi = ref<boolean>(false)
|
|
629
684
|
|
|
630
685
|
async function readData() {
|
|
@@ -642,6 +697,9 @@ async function readData() {
|
|
|
642
697
|
shopeefoodSetting.value = await remoteOrderApi.integratedDelivery.readShopeefood(
|
|
643
698
|
currentRestaurant.value?._id || ''
|
|
644
699
|
)
|
|
700
|
+
externalSetting.value = await remoteOrderApi.integratedDelivery.readExternal(
|
|
701
|
+
currentRestaurant.value?._id || ''
|
|
702
|
+
)
|
|
645
703
|
})
|
|
646
704
|
loadingDpi.value = false
|
|
647
705
|
}
|
|
@@ -654,7 +712,7 @@ async function updateLocalDeliveryCompany() {
|
|
|
654
712
|
company: selectedLocalRow.value.doc,
|
|
655
713
|
data: localDocUpdate
|
|
656
714
|
})
|
|
657
|
-
showSuccess('
|
|
715
|
+
showSuccess(t('order.DeliverySettingUpdated'))
|
|
658
716
|
}
|
|
659
717
|
|
|
660
718
|
async function updateManualDelivery({
|
|
@@ -738,7 +796,7 @@ async function updateIntegratedDeliverySetting() {
|
|
|
738
796
|
componentProps.value.canUseAuto
|
|
739
797
|
)
|
|
740
798
|
})
|
|
741
|
-
showSuccess('
|
|
799
|
+
showSuccess(t('order.DeliverySettingUpdated'))
|
|
742
800
|
}
|
|
743
801
|
|
|
744
802
|
async function updateFeedmeExpressSetting() {
|
|
@@ -755,7 +813,7 @@ async function updateFeedmeExpressSetting() {
|
|
|
755
813
|
currentRestaurant.value.feedmeDelivery = restaurant.feedmeDelivery
|
|
756
814
|
}
|
|
757
815
|
})
|
|
758
|
-
showSuccess('
|
|
816
|
+
showSuccess(t('order.DeliverySettingUpdated'))
|
|
759
817
|
}
|
|
760
818
|
|
|
761
819
|
async function updateInHouseSetting() {
|
|
@@ -765,7 +823,17 @@ async function updateInHouseSetting() {
|
|
|
765
823
|
if (!!res) {
|
|
766
824
|
await changeRestaurant(res)
|
|
767
825
|
}
|
|
768
|
-
showSuccess('
|
|
826
|
+
showSuccess(t('order.DeliverySettingUpdated'))
|
|
827
|
+
}
|
|
828
|
+
|
|
829
|
+
async function updateExternalDeliverySetting() {
|
|
830
|
+
sideSheetIntegrated.value = false
|
|
831
|
+
await restaurantStore.updateExternalDelivery(currentRestaurant.value?._id ?? '', externalDoc.value)
|
|
832
|
+
const res = (await readRestaurants())?.find((res) => res._id === currentRestaurant.value?._id)
|
|
833
|
+
if (!!res) {
|
|
834
|
+
await changeRestaurant(res)
|
|
835
|
+
}
|
|
836
|
+
showSuccess(t('order.DeliverySettingUpdated'))
|
|
769
837
|
}
|
|
770
838
|
|
|
771
839
|
async function updateDelivery(
|
|
@@ -808,6 +876,7 @@ async function updateDelivery(
|
|
|
808
876
|
|
|
809
877
|
const feedMeDoc = computed(() => feedMeComponentProps.value.initialValue)
|
|
810
878
|
const inHouseDoc = computed(() => inHouseComponentProps.value.initialValue)
|
|
879
|
+
const externalDoc = computed(() => externalComponentProps.value.initialValue)
|
|
811
880
|
|
|
812
881
|
const localManual = ref<LinkedDeliveryDoc>(componentProps.value.initialValue.manual)
|
|
813
882
|
const localAuto = ref(componentProps.value.initialValue.integrated)
|
|
@@ -829,6 +898,10 @@ function handleModelValueUpdateInHouse(v: any) {
|
|
|
829
898
|
inHouseComponentProps.value.initialValue = v
|
|
830
899
|
}
|
|
831
900
|
|
|
901
|
+
function handleModelValueUpdateExternal(v: any) {
|
|
902
|
+
externalComponentProps.value.initialValue = v
|
|
903
|
+
}
|
|
904
|
+
|
|
832
905
|
const feedmeValidate = ref<boolean | null>(null)
|
|
833
906
|
function handleValidationResult(v: boolean) {
|
|
834
907
|
feedmeValidate.value = v
|
|
@@ -855,6 +928,7 @@ type companyName =
|
|
|
855
928
|
| 'FoodPanda delivery'
|
|
856
929
|
| 'GrabFood delivery'
|
|
857
930
|
| 'ShopeeFood delivery'
|
|
931
|
+
| 'External delivery'
|
|
858
932
|
|
|
859
933
|
function convertIntegratedCompanyName(name: companyName): string {
|
|
860
934
|
switch (name) {
|
|
@@ -868,6 +942,8 @@ function convertIntegratedCompanyName(name: companyName): string {
|
|
|
868
942
|
return `${t('order.deliveryTitle', { company: 'GrabFood' })}`
|
|
869
943
|
case 'ShopeeFood delivery':
|
|
870
944
|
return `${t('order.deliveryTitle', { company: 'ShopeeFood' })}`
|
|
945
|
+
case 'External delivery':
|
|
946
|
+
return `${t('order.externalDelivery')}`
|
|
871
947
|
default:
|
|
872
948
|
return ''
|
|
873
949
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { FdoExternalSetting } from '@entity';
|
|
1
2
|
import {
|
|
2
3
|
FdoRestaurantFeedmeDelivery,
|
|
3
4
|
FdoGrabfoodSettings,
|
|
@@ -66,10 +67,24 @@ function initShopeefoodDelivery(): FdoShopeeFoodSettings {
|
|
|
66
67
|
}
|
|
67
68
|
}
|
|
68
69
|
|
|
70
|
+
function initExternalDelivery(): FdoExternalSetting {
|
|
71
|
+
return {
|
|
72
|
+
_id: '',
|
|
73
|
+
enable: false,
|
|
74
|
+
config: {
|
|
75
|
+
autoAccept: false,
|
|
76
|
+
autoSend: false,
|
|
77
|
+
autoCloseBill: false,
|
|
78
|
+
},
|
|
79
|
+
platform: 'ZUS',
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
69
83
|
export default {
|
|
70
84
|
initInhouseDelivery,
|
|
71
85
|
initFeedmeExpress,
|
|
72
86
|
initFoodpandaDelivery,
|
|
73
87
|
initGrabfoodDelivery,
|
|
74
|
-
initShopeefoodDelivery
|
|
88
|
+
initShopeefoodDelivery,
|
|
89
|
+
initExternalDelivery
|
|
75
90
|
}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="flex-grow mb-3 mt-3">
|
|
3
|
+
<FmSwitch
|
|
4
|
+
:model-value="data.enable"
|
|
5
|
+
:label="t('order.activateIntegration', { integrationType: t('order.auto') })"
|
|
6
|
+
label-placement="right"
|
|
7
|
+
@update:model-value="updateEnable"
|
|
8
|
+
/>
|
|
9
|
+
<div v-if="data.enable">
|
|
10
|
+
<FmCard variant="outlined" class="mt-10 p-5">
|
|
11
|
+
<div class="mb-3">
|
|
12
|
+
<div class="flex-grow fm-typo-en-title-sm-600 mb-5">{{ t('order.syncMenu') }}</div>
|
|
13
|
+
|
|
14
|
+
<FmSelect
|
|
15
|
+
:placeholder="t('order.selectPlatform')"
|
|
16
|
+
:model-value="data.platform"
|
|
17
|
+
:label="t('order.platform')"
|
|
18
|
+
:items="platformOptions"
|
|
19
|
+
@update:model-value="updatePlatform"
|
|
20
|
+
/>
|
|
21
|
+
|
|
22
|
+
<FmSelect
|
|
23
|
+
class="mt-5"
|
|
24
|
+
:placeholder="t('order.selectItem')"
|
|
25
|
+
:model-value="data.delivery!.catalogId"
|
|
26
|
+
:label="t('order.deliveryCatalog')"
|
|
27
|
+
:items="menuStore.catalogOptions"
|
|
28
|
+
@update:model-value="updateDeliveryMenuCatalog"
|
|
29
|
+
/>
|
|
30
|
+
|
|
31
|
+
<FmSelect
|
|
32
|
+
class="mt-5"
|
|
33
|
+
:placeholder="t('order.selectItem')"
|
|
34
|
+
:model-value="data.pickup!.catalogId"
|
|
35
|
+
:label="t('order.pickupCatalog')"
|
|
36
|
+
:items="menuStore.catalogOptions"
|
|
37
|
+
@update:model-value="updatePickupMenuCatalog"
|
|
38
|
+
/>
|
|
39
|
+
</div>
|
|
40
|
+
|
|
41
|
+
<div class="flex flex-row mt-5">
|
|
42
|
+
<FmButton variant="primary" :label="t('order.syncMenu')" @click="syncMenu()" />
|
|
43
|
+
</div>
|
|
44
|
+
</FmCard>
|
|
45
|
+
</div>
|
|
46
|
+
</div>
|
|
47
|
+
</template>
|
|
48
|
+
|
|
49
|
+
<script setup lang="ts">
|
|
50
|
+
import { type PropType, computed, reactive, ref, watch } from 'vue'
|
|
51
|
+
import { F_ORDER_PLATFORM, type FdoExternalSetting } from '@entity'
|
|
52
|
+
import { useI18n } from '@feedmepos/mf-common'
|
|
53
|
+
import { clone } from '@/helpers/object'
|
|
54
|
+
import { useMenuStore } from '@/stores/menu/menu'
|
|
55
|
+
import { useLoading } from '@/composables/loading'
|
|
56
|
+
import { remoteOrderApi } from '@/api/remoteOrder'
|
|
57
|
+
import { useSnackbarFunctions } from '@/components/snackbar'
|
|
58
|
+
|
|
59
|
+
const { showSuccess } = useSnackbarFunctions()
|
|
60
|
+
const { t } = useI18n()
|
|
61
|
+
const menuStore = useMenuStore()
|
|
62
|
+
|
|
63
|
+
const props = defineProps({
|
|
64
|
+
initialValue: {
|
|
65
|
+
type: Object as PropType<FdoExternalSetting>,
|
|
66
|
+
required: true
|
|
67
|
+
}
|
|
68
|
+
})
|
|
69
|
+
|
|
70
|
+
const data = reactive<FdoExternalSetting>({
|
|
71
|
+
...clone(props.initialValue),
|
|
72
|
+
platform: props.initialValue.platform ?? 'ZUS',
|
|
73
|
+
delivery: props.initialValue.delivery ?? { catalogId: null },
|
|
74
|
+
pickup: props.initialValue.pickup ?? { catalogId: null }
|
|
75
|
+
})
|
|
76
|
+
|
|
77
|
+
const platformOptions = ref([{ label: 'ZUS', value: F_ORDER_PLATFORM.enum.ZUS }])
|
|
78
|
+
|
|
79
|
+
const emits = defineEmits<{
|
|
80
|
+
(event: 'update:model-value', v: FdoExternalSetting): void
|
|
81
|
+
}>()
|
|
82
|
+
|
|
83
|
+
function emitUpdatedValue() {
|
|
84
|
+
emits('update:model-value', { ...data })
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
function updateEnable(value: boolean) {
|
|
88
|
+
data.enable = value
|
|
89
|
+
emitUpdatedValue()
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
function updateDeliveryMenuCatalog(catalogId: string) {
|
|
93
|
+
data.delivery!.catalogId = catalogId
|
|
94
|
+
emitUpdatedValue()
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
function updatePickupMenuCatalog(catalogId: string) {
|
|
98
|
+
data.pickup!.catalogId = catalogId
|
|
99
|
+
emitUpdatedValue()
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
function updatePlatform(platform: F_ORDER_PLATFORM) {
|
|
103
|
+
data.platform = platform
|
|
104
|
+
emitUpdatedValue()
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
const { startAsyncCallWithErr } = useLoading()
|
|
108
|
+
async function syncMenu() {
|
|
109
|
+
await startAsyncCallWithErr(async () => {
|
|
110
|
+
await remoteOrderApi.integratedDelivery.syncExternalMenu(data._id ?? '')
|
|
111
|
+
showSuccess(t('order.syncMenuSuccess'))
|
|
112
|
+
})
|
|
113
|
+
}
|
|
114
|
+
</script>
|
|
@@ -198,6 +198,7 @@ async function syncMenu() {
|
|
|
198
198
|
lastSynchronize: res?.lastSynchronize || modelValue.value.auto.lastSynchronize
|
|
199
199
|
}
|
|
200
200
|
updateData({ auto: temp, manual: data.manual })
|
|
201
|
+
showSuccess(t('order.syncMenuSuccess'))
|
|
201
202
|
})
|
|
202
203
|
}
|
|
203
204
|
|
|
@@ -222,18 +223,34 @@ async function cancelTestOrder() {
|
|
|
222
223
|
}
|
|
223
224
|
</script>
|
|
224
225
|
<template>
|
|
225
|
-
<IntegratedDelivery
|
|
226
|
-
:
|
|
227
|
-
|
|
226
|
+
<IntegratedDelivery
|
|
227
|
+
:model-value="modelValue"
|
|
228
|
+
:company="company"
|
|
229
|
+
:can-use-auto-delivery-integration="canUseAutoDeliveryIntegration"
|
|
230
|
+
@update:model-value="updateDataPass"
|
|
231
|
+
@sync-menu="syncMenu"
|
|
232
|
+
@flow-test-order="flowTestOrder"
|
|
233
|
+
@cancel-test-order="cancelTestOrder"
|
|
234
|
+
>
|
|
228
235
|
<template #default="{ editable }">
|
|
229
|
-
<div class="flex-grow fm-typo-en-title-sm-600 mb-3 mt-10">
|
|
230
|
-
|
|
236
|
+
<div class="flex-grow fm-typo-en-title-sm-600 mb-3 mt-10">
|
|
237
|
+
{{ t('order.discountCampaign') }}
|
|
238
|
+
</div>
|
|
239
|
+
<FmButton
|
|
240
|
+
:label="t('order.addNewCampaign')"
|
|
241
|
+
icon="add"
|
|
242
|
+
variant="plain"
|
|
243
|
+
@click="addCampaign"
|
|
244
|
+
class="mb-3"
|
|
245
|
+
/>
|
|
231
246
|
|
|
232
247
|
<div v-if="campaigns.length > 0">
|
|
233
248
|
<div v-for="(campaign, index) in campaigns" :key="index">
|
|
234
249
|
<FmCard variant="outlined" class="p-5 flex justify-between items-center mb-5">
|
|
235
250
|
<div>
|
|
236
|
-
<span class="font-bold"
|
|
251
|
+
<span class="font-bold"
|
|
252
|
+
>{{ campaign.name }} ({{ campaign.vendorBearPercentage }}%)</span
|
|
253
|
+
>
|
|
237
254
|
<br />
|
|
238
255
|
{{ formatCampaignDate(campaign.date) }}
|
|
239
256
|
</div>
|
|
@@ -9,12 +9,13 @@ import { useLoading } from '@/composables/loading'
|
|
|
9
9
|
import { remoteOrderApi } from '@/api/remoteOrder'
|
|
10
10
|
import IntegratedDelivery from './IntegratedDelivery.vue'
|
|
11
11
|
import { clone } from '@/helpers/object'
|
|
12
|
-
import { useCoreStore } from '@feedmepos/mf-common'
|
|
12
|
+
import { useI18n, useCoreStore } from '@feedmepos/mf-common'
|
|
13
13
|
|
|
14
14
|
export interface GrabfoodDeliveryData {
|
|
15
15
|
manual: FdoLinkedDelivery | null
|
|
16
16
|
integrated: FdoGrabfoodSettings
|
|
17
17
|
}
|
|
18
|
+
const { t } = useI18n()
|
|
18
19
|
|
|
19
20
|
const props = defineProps({
|
|
20
21
|
initialValue: {
|
|
@@ -31,7 +32,7 @@ const props = defineProps({
|
|
|
31
32
|
}
|
|
32
33
|
})
|
|
33
34
|
|
|
34
|
-
const data = reactive(clone(props.initialValue))
|
|
35
|
+
const data = reactive(clone(props.initialValue))
|
|
35
36
|
const modelValue = computed<IntegratedDeliverySettingData>(() => {
|
|
36
37
|
const auto = data.integrated
|
|
37
38
|
return {
|
|
@@ -45,35 +46,32 @@ const modelValue = computed<IntegratedDeliverySettingData>(() => {
|
|
|
45
46
|
lastSynchronize: auto.lastSynchronize,
|
|
46
47
|
status: auto.status,
|
|
47
48
|
updatedAt: auto.updatedAt,
|
|
48
|
-
menuSyncError: auto.menuSyncError
|
|
49
|
+
menuSyncError: auto.menuSyncError
|
|
49
50
|
}
|
|
50
51
|
}
|
|
51
52
|
})
|
|
52
53
|
|
|
53
54
|
const { currentRestaurant } = useCoreStore()
|
|
54
55
|
|
|
55
|
-
|
|
56
56
|
function updateData({ manual, auto }: IntegratedDeliverySettingData) {
|
|
57
57
|
data.manual = manual
|
|
58
58
|
data.integrated = {
|
|
59
59
|
...auto,
|
|
60
60
|
merchantID: auto.integrationId,
|
|
61
|
-
commissionRate: auto.commissionRate
|
|
61
|
+
commissionRate: auto.commissionRate
|
|
62
62
|
}
|
|
63
|
-
return { manual: data.manual, integrated: data.integrated }
|
|
63
|
+
return { manual: data.manual, integrated: data.integrated }
|
|
64
64
|
}
|
|
65
65
|
|
|
66
66
|
const emits = defineEmits<{
|
|
67
|
-
(e: 'update:model-value', payload: { manual: any; auto: any }): void
|
|
68
|
-
}>()
|
|
69
|
-
|
|
67
|
+
(e: 'update:model-value', payload: { manual: any; auto: any }): void
|
|
68
|
+
}>()
|
|
70
69
|
|
|
71
70
|
function updateDataPass({ manual, auto }: IntegratedDeliverySettingData) {
|
|
72
|
-
const updatedData = updateData({ manual, auto })
|
|
73
|
-
emits('update:model-value', { manual: updatedData.manual, auto: updatedData.integrated })
|
|
71
|
+
const updatedData = updateData({ manual, auto })
|
|
72
|
+
emits('update:model-value', { manual: updatedData.manual, auto: updatedData.integrated })
|
|
74
73
|
}
|
|
75
74
|
|
|
76
|
-
|
|
77
75
|
const { startAsyncCallWithErr } = useLoading()
|
|
78
76
|
async function syncMenu() {
|
|
79
77
|
await startAsyncCallWithErr(async () => {
|
|
@@ -85,11 +83,12 @@ async function syncMenu() {
|
|
|
85
83
|
lastSynchronize: res?.lastSynchronize || modelValue.value.auto.lastSynchronize
|
|
86
84
|
}
|
|
87
85
|
updateData({ auto: temp, manual: data.manual })
|
|
86
|
+
showSuccess(t('order.syncMenuSuccess'))
|
|
88
87
|
})
|
|
89
88
|
}
|
|
90
89
|
|
|
91
90
|
import { useSnackbarFunctions } from '@/components/snackbar'
|
|
92
|
-
const { showSuccess } = useSnackbarFunctions()
|
|
91
|
+
const { showSuccess } = useSnackbarFunctions()
|
|
93
92
|
|
|
94
93
|
async function flowTestOrder() {
|
|
95
94
|
await startAsyncCallWithErr(async () => {
|
|
@@ -112,7 +111,13 @@ async function cancelTestOrder() {
|
|
|
112
111
|
</script>
|
|
113
112
|
|
|
114
113
|
<template>
|
|
115
|
-
<IntegratedDelivery
|
|
116
|
-
:
|
|
117
|
-
|
|
114
|
+
<IntegratedDelivery
|
|
115
|
+
:model-value="modelValue"
|
|
116
|
+
:company="company"
|
|
117
|
+
:can-use-auto-delivery-integration="canUseAutoDeliveryIntegration"
|
|
118
|
+
@update:model-value="updateDataPass"
|
|
119
|
+
@sync-menu="syncMenu"
|
|
120
|
+
@flow-test-order="flowTestOrder"
|
|
121
|
+
@cancel-test-order="cancelTestOrder"
|
|
122
|
+
/>
|
|
118
123
|
</template>
|