@feedmepos/mf-order-setting 0.0.72-test.1 → 0.0.73-dev
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/.env +1 -1
- package/README.md +7 -23
- package/dist/{KioskDevicesView-CP_cGMXE.js → KioskDevicesView-Dztw-Q35.js} +1 -1
- package/dist/{KioskDevicesView.vue_vue_type_script_setup_true_lang-CiNLqFw6.js → KioskDevicesView.vue_vue_type_script_setup_true_lang-Ol419NZh.js} +3 -3
- package/dist/{KioskSettingView-BiKYEjfe.js → KioskSettingView-BUHmoxyO.js} +183 -202
- package/dist/{KioskView-BYxPrI7N.js → KioskView-B8j77zMA.js} +4 -4
- package/dist/OrderSettingsView-C5PK8CKZ.js +60009 -0
- package/dist/{app-BN02cB5o.js → app-C2_s0fkK.js} +4921 -4797
- package/dist/app.js +1 -1
- package/dist/{dayjs.min-Bml-FvS7.js → dayjs.min-B3nOmXcs.js} +1 -1
- package/dist/frontend/mf-order/src/api/menu/index.d.ts +1 -1
- package/dist/frontend/mf-order/src/api/remoteOrder/index.d.ts +10 -3
- package/dist/frontend/mf-order/src/app.d.ts +44 -8
- package/dist/frontend/mf-order/src/components/GoogleMap.vue.d.ts +1 -1
- package/dist/frontend/mf-order/src/composables/useQrOrderingEnabled.d.ts +2 -0
- package/dist/frontend/mf-order/src/helpers/menu.d.ts +1 -1
- package/dist/frontend/mf-order/src/main.d.ts +44 -8
- package/dist/frontend/mf-order/src/stores/kiosk/index.d.ts +21 -21
- package/dist/frontend/mf-order/src/stores/menu/menu.d.ts +906 -1044
- package/dist/frontend/mf-order/src/stores/order-setting/index.d.ts +36 -3
- package/dist/frontend/mf-order/src/stores/restaurant/index.d.ts +5 -2
- 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/components/TaxInput.vue.d.ts +3 -8
- package/dist/frontend/mf-order/src/views/order-settings/delivery/delivery.d.ts +3 -1
- package/dist/frontend/mf-order/src/views/order-settings/delivery/delivery.data.d.ts +5 -1
- package/dist/frontend/mf-order/src/views/order-settings/delivery/inhouse/InHouseDelivery.vue.d.ts +21 -0
- package/dist/frontend/mf-order/src/views/order-settings/delivery/integrated-delivery/ExternalSetting.vue.d.ts +2 -2
- package/dist/frontend/mf-order/src/views/order-settings/delivery/integrated-delivery/GrabfoodSetting.vue.d.ts +1 -1
- package/dist/frontend/mf-order/src/views/order-settings/delivery/integrated-delivery/IntegratedDelivery.vue.d.ts +28 -2
- package/dist/frontend/mf-order/src/views/order-settings/delivery/integrated-delivery/LinemanSetting.vue.d.ts +46 -0
- package/dist/frontend/mf-order/src/views/order-settings/delivery/integrated-delivery/TngSetting.vue.d.ts +57 -0
- package/dist/frontend/mf-order/src/views/order-settings/pickup/PickUpSettingDialogContent.vue.d.ts +23 -1
- package/dist/frontend/mf-order/src/views/order-settings/pickup/Preorder.vue.d.ts +27 -0
- package/dist/frontend/mf-order/src/views/order-settings/servicecharge/RateInput.vue.d.ts +8 -0
- package/dist/frontend/mf-order/tsconfig.app.tsbuildinfo +1 -1
- package/dist/index-6PQJ07gD.js +665 -0
- package/dist/{index-BlKeAWPk.js → index-B4XxBqiV.js} +1 -1
- package/dist/lineman-settings.dto-DcYJFu0U.js +60394 -0
- package/dist/package/entity/_type-assert.d.ts +7 -0
- package/dist/package/entity/booking/booking.dto.d.ts +24 -24
- package/dist/package/entity/delivery/delivery.dto.d.ts +8 -8
- package/dist/package/entity/delivery/delivery.enum.d.ts +12 -0
- package/dist/package/entity/delivery/gateway/grab.dto.d.ts +2 -2
- package/dist/package/entity/delivery/gateway/kosmo.dto.d.ts +16 -16
- package/dist/package/entity/delivery/gateway/pandago.dto.d.ts +4 -4
- package/dist/package/entity/incoming-order/incoming-order-to-bill.dto.d.ts +282 -4591
- package/dist/package/entity/incoming-order/incoming-order.do.d.ts +32 -24
- package/dist/package/entity/incoming-order/incoming-order.dto.d.ts +23 -11719
- package/dist/package/entity/incoming-order/incoming-order.enum.d.ts +2 -2
- package/dist/package/entity/index.d.ts +12 -0
- package/dist/package/entity/kiosk/kiosk.do.d.ts +140 -140
- package/dist/package/entity/kiosk/kiosk.dto.d.ts +168 -168
- package/dist/package/entity/kiosk/marketing/marketing.dto.d.ts +63 -7
- package/dist/package/entity/marketing/marketing.dto.d.ts +4 -4
- package/dist/package/entity/member/member.dto.d.ts +6 -0
- package/dist/package/entity/order/dine-in/dine-in.do.d.ts +8 -8
- package/dist/package/entity/order/effects/effect.dto.d.ts +68 -16
- package/dist/package/entity/order/menu/menu.dto.d.ts +45 -8
- package/dist/package/entity/order/order-item/order-item.dto.d.ts +358 -3853
- package/dist/package/entity/order/order.do.d.ts +239 -42
- package/dist/package/entity/order/order.dto.d.ts +6497 -2236
- package/dist/package/entity/order/payment/payment.dto.d.ts +52 -12
- package/dist/package/entity/order-platform/base-integration.do.d.ts +8 -0
- package/dist/package/entity/order-platform/deliveroo/deliveroo-dto.d.ts +2 -2
- package/dist/package/entity/order-platform/deliveroo/deliveroo-order.do.d.ts +524 -524
- package/dist/package/entity/order-platform/deliveroo/deliveroo-setting.do.d.ts +2 -2
- package/dist/package/entity/order-platform/deliveroo/deliveroo.menu.dto.d.ts +58 -58
- package/dist/package/entity/order-platform/external/menu/external-master-menu.do.d.ts +212 -284
- package/dist/package/entity/order-platform/external/menu/external-menu.do.d.ts +331 -589
- package/dist/package/entity/order-platform/external/menu/external-menu.dto.d.ts +1 -1
- 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 +275 -275
- package/dist/package/entity/order-platform/external/setting/external-setting.do.d.ts +3 -3
- package/dist/package/entity/order-platform/external/setting/external-setting.dto.d.ts +3 -3
- package/dist/package/entity/order-platform/foodpanda/foodpanda-menu.dto.d.ts +284 -284
- package/dist/package/entity/order-platform/foodpanda/foodpanda-order.do.d.ts +40 -40
- package/dist/package/entity/order-platform/foodpanda/foodpanda-order.dto.d.ts +16 -16
- package/dist/package/entity/order-platform/foodpanda/foodpanda-settings.do.d.ts +2 -2
- package/dist/package/entity/order-platform/foodpanda/foodpanda-settings.dto.d.ts +2 -2
- package/dist/package/entity/order-platform/gofood/gofood-order.do.d.ts +18 -18
- package/dist/package/entity/order-platform/gofood/gofood-settings.do.d.ts +2 -2
- package/dist/package/entity/order-platform/gofood/gofood-settings.dto.d.ts +2 -2
- package/dist/package/entity/order-platform/gofood/gofood.dto.d.ts +32 -32
- package/dist/package/entity/order-platform/grabfood/grabfood-edit-order.do.d.ts +12 -12
- package/dist/package/entity/order-platform/grabfood/grabfood-omni.do.d.ts +134 -115
- package/dist/package/entity/order-platform/grabfood/grabfood-order.do.d.ts +187 -165
- package/dist/package/entity/order-platform/grabfood/grabfood-settings.do.d.ts +8 -2
- package/dist/package/entity/order-platform/grabfood/grabfood-webhook.dto.d.ts +49 -42
- package/dist/package/entity/order-platform/grabfood/grabfood.dto.d.ts +67 -54
- package/dist/package/entity/order-platform/grabfood/grabfood.enum.d.ts +1 -1
- package/dist/package/entity/order-platform/lineman/lineman-settings.do.d.ts +37 -0
- package/dist/package/entity/order-platform/lineman/lineman-settings.dto.d.ts +40 -0
- package/dist/package/entity/order-platform/menu.dto.d.ts +716 -13887
- package/dist/package/entity/order-platform/order-platform.dto.d.ts +136 -2
- 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 +176 -176
- package/dist/package/entity/order-platform/shopeefood/shopeefood-order.dto.d.ts +62 -62
- package/dist/package/entity/order-platform/shopeefood/shopeefood-settings.do.d.ts +8 -2
- package/dist/package/entity/order-platform/shopeefood/shopeefood-settings.dto.d.ts +8 -2
- package/dist/package/entity/order-platform/tng/tng-menu.do.d.ts +1061 -0
- package/dist/package/entity/order-platform/tng/tng-order.do.d.ts +1915 -0
- package/dist/package/entity/order-platform/tng/tng-settings.do.d.ts +379 -0
- package/dist/package/entity/order-platform/tng/tng-settings.dto.d.ts +301 -0
- package/dist/package/entity/order-platform/tng/tng.dto.d.ts +1162 -0
- package/dist/package/entity/order-platform/tng/tng.enum.d.ts +29 -0
- package/dist/package/entity/order-setting/delivery/inhouse-delivery.do.d.ts +12 -0
- package/dist/package/entity/order-setting/delivery/inhouse-delivery.dto.d.ts +12 -0
- package/dist/package/entity/order-setting/dine-in/dine-in.do.d.ts +11 -0
- package/dist/package/entity/order-setting/dine-in/dine-in.dto.d.ts +9 -0
- package/dist/package/entity/order-setting/kiosk/kiosk.do.d.ts +2 -2
- package/dist/package/entity/order-setting/kiosk/kiosk.dto.d.ts +2 -2
- package/dist/package/entity/order-setting/order-setting.do.d.ts +55 -4
- package/dist/package/entity/order-setting/order-setting.dto.d.ts +110 -8
- package/dist/package/entity/order-setting/pickup/pickup.do.d.ts +12 -0
- package/dist/package/entity/order-setting/pickup/pickup.dto.d.ts +12 -0
- package/dist/package/entity/payment/transaction.d.ts +80 -8
- package/dist/package/entity/printer/printer.do.d.ts +14 -14
- package/dist/package/entity/pubsub/ably/ably.enum.d.ts +1 -1
- package/dist/package/entity/queue/queue.do.d.ts +236 -1901
- package/dist/package/entity/queue/queue.dto.d.ts +743 -445
- package/dist/package/entity/restaurant/restaurant.dto.d.ts +27 -4
- package/dist/package/entity/websocket/websocket.dto.d.ts +10 -10
- package/dist/style.css +1 -0
- package/golar.config.ts +20 -0
- package/package.json +9 -3
- package/src/Entry.vue +2 -10
- package/src/api/menu/index.ts +1 -1
- package/src/api/remoteOrder/index.ts +176 -110
- package/src/composables/useQrOrderingEnabled.ts +66 -0
- package/src/helpers/menu.ts +1 -1
- package/src/locales/en-US.json +421 -412
- package/src/locales/ja-JP.json +1769 -1760
- package/src/locales/th-TH.json +409 -400
- package/src/locales/zh-CN.json +417 -408
- package/src/main.ts +4 -44
- package/src/router/index.ts +2 -2
- package/src/stores/menu/menu.ts +48 -27
- package/src/stores/restaurant/index.ts +24 -9
- package/src/utils/firebase-storage.ts +3 -13
- package/src/views/kiosk/settings/KioskSettingView.vue +3 -2
- package/src/views/order-settings/OrderSettingsView.vue +31 -11
- package/src/views/order-settings/delivery/DeliverySetting.vue +223 -11
- package/src/views/order-settings/delivery/components/TaxInput.vue +1 -1
- package/src/views/order-settings/delivery/delivery.data.ts +31 -10
- package/src/views/order-settings/delivery/delivery.ts +60 -28
- package/src/views/order-settings/delivery/inhouse/InHouseDelivery.vue +40 -1
- package/src/views/order-settings/delivery/integrated-delivery/DeliverooSetting.vue +1 -1
- package/src/views/order-settings/delivery/integrated-delivery/GrabfoodSetting.vue +15 -7
- package/src/views/order-settings/delivery/integrated-delivery/IntegratedDelivery.vue +83 -27
- package/src/views/order-settings/delivery/integrated-delivery/LinemanSetting.vue +79 -0
- package/src/views/order-settings/delivery/integrated-delivery/ShopeefoodSetting.vue +2 -0
- package/src/views/order-settings/delivery/integrated-delivery/TngSetting.vue +749 -0
- package/src/views/order-settings/dine-in/DineInSetting.vue +54 -23
- package/src/views/order-settings/dine-in/PaymentType.vue +9 -12
- package/src/views/order-settings/general/GeneralSetting.vue +15 -6
- package/src/views/order-settings/pickup/PickUpSettingDialog.vue +31 -3
- package/src/views/order-settings/pickup/PickUpSettingDialogContent.vue +34 -0
- package/src/views/order-settings/pickup/Preorder.vue +13 -12
- package/src/views/order-settings/queue/QueueSetting.vue +30 -1
- package/src/views/order-settings/servicecharge/RateInput.vue +9 -7
- package/vite.config.ts +16 -16
- package/dist/OrderSettingsView-C7Y-_y5U.js +0 -32222
- package/dist/frontend/mf-order/src/api/auth/index.d.ts +0 -7
- package/dist/frontend/mf-order/src/stores/iframe/index.d.ts +0 -14
- package/dist/index-DZA8A0m4.js +0 -630
- package/dist/queue-transfer.dto-C7nRZOZH.js +0 -45618
- package/src/api/auth/index.ts +0 -20
- package/src/stores/iframe/index.ts +0 -23
|
@@ -106,6 +106,22 @@
|
|
|
106
106
|
label-placement="right"
|
|
107
107
|
@update:model-value="updateOverridePax"
|
|
108
108
|
></FmSwitch>
|
|
109
|
+
|
|
110
|
+
<FmSwitch
|
|
111
|
+
:model-value="orderSetting?.dineInSettings?.autoCloseBill ?? false"
|
|
112
|
+
:label="t('order.autoCloseBill')"
|
|
113
|
+
:sublabel="t('order.autoCloseBillSublabel')"
|
|
114
|
+
label-placement="right"
|
|
115
|
+
@update:model-value="updateAutoCloseBill"
|
|
116
|
+
></FmSwitch>
|
|
117
|
+
|
|
118
|
+
<FmSwitch
|
|
119
|
+
:model-value="orderSetting?.dineInSettings?.printReceiptAfterClose ?? false"
|
|
120
|
+
:label="t('order.printReceiptAfterClose')"
|
|
121
|
+
:sublabel="t('order.printReceiptAfterCloseSublabel')"
|
|
122
|
+
label-placement="right"
|
|
123
|
+
@update:model-value="updatePrintReceiptAfterClose"
|
|
124
|
+
></FmSwitch>
|
|
109
125
|
</div>
|
|
110
126
|
<div class="p-[1.5rem] flex flex-col gap-2 m-5 w-2/3">
|
|
111
127
|
<PaymentType
|
|
@@ -153,6 +169,8 @@ import { useSnackbarFunctions } from '@/components/snackbar'
|
|
|
153
169
|
|
|
154
170
|
const { t } = useI18n()
|
|
155
171
|
|
|
172
|
+
type OrderDineInSettings = NonNullable<OrderSettingsDto['dineInSettings']>
|
|
173
|
+
|
|
156
174
|
const { currentRestaurant } = useCoreStore()
|
|
157
175
|
const restaurantStore = useRestaurantStore()
|
|
158
176
|
const dineInSetting = ref<FdoRestaurantDineIn>(initDineInSetting())
|
|
@@ -208,27 +226,42 @@ function updateLastOrderMinutesBeforeClose(minutes: number) {
|
|
|
208
226
|
}
|
|
209
227
|
}
|
|
210
228
|
|
|
211
|
-
function
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
orderSetting.value.dineInSettings.printChecklist = v
|
|
229
|
+
function defaultOrderDineInSettings(
|
|
230
|
+
overrides: Partial<OrderDineInSettings> = {}
|
|
231
|
+
): OrderDineInSettings {
|
|
232
|
+
return {
|
|
233
|
+
overridePax: true,
|
|
234
|
+
tableCartSyncMode: 'poll',
|
|
235
|
+
...overrides
|
|
219
236
|
}
|
|
220
237
|
}
|
|
221
238
|
|
|
222
|
-
function
|
|
223
|
-
if (orderSetting.value)
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
overridePax: v,
|
|
227
|
-
};
|
|
228
|
-
} else {
|
|
229
|
-
orderSetting.value.dineInSettings.overridePax = v
|
|
230
|
-
}
|
|
239
|
+
function ensureOrderDineInSettings(): OrderDineInSettings | undefined {
|
|
240
|
+
if (!orderSetting.value) return undefined
|
|
241
|
+
if (!orderSetting.value.dineInSettings) {
|
|
242
|
+
orderSetting.value.dineInSettings = defaultOrderDineInSettings()
|
|
231
243
|
}
|
|
244
|
+
return orderSetting.value.dineInSettings
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
function updatePrintChecklist(v: boolean) {
|
|
248
|
+
const dineInSettings = ensureOrderDineInSettings()
|
|
249
|
+
if (dineInSettings) dineInSettings.printChecklist = v
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
function updateOverridePax(v: boolean) {
|
|
253
|
+
const dineInSettings = ensureOrderDineInSettings()
|
|
254
|
+
if (dineInSettings) dineInSettings.overridePax = v
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
function updateAutoCloseBill(v: boolean) {
|
|
258
|
+
const dineInSettings = ensureOrderDineInSettings()
|
|
259
|
+
if (dineInSettings) dineInSettings.autoCloseBill = v
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
function updatePrintReceiptAfterClose(v: boolean) {
|
|
263
|
+
const dineInSettings = ensureOrderDineInSettings()
|
|
264
|
+
if (dineInSettings) dineInSettings.printReceiptAfterClose = v
|
|
232
265
|
}
|
|
233
266
|
|
|
234
267
|
// Threshold mirrors backend `posSupportsDineInRemarkMerge` — must be kept
|
|
@@ -259,12 +292,10 @@ const dineInRemarkMergeActionOptions = computed(() => [
|
|
|
259
292
|
])
|
|
260
293
|
|
|
261
294
|
function ensureRemarkSettings() {
|
|
262
|
-
|
|
263
|
-
if (!
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
if (!orderSetting.value.dineInSettings.remark) {
|
|
267
|
-
orderSetting.value.dineInSettings.remark = {
|
|
295
|
+
const dineInSettings = ensureOrderDineInSettings()
|
|
296
|
+
if (!dineInSettings) return
|
|
297
|
+
if (!dineInSettings.remark) {
|
|
298
|
+
dineInSettings.remark = {
|
|
268
299
|
enabled: false,
|
|
269
300
|
mergeAction: 'override'
|
|
270
301
|
}
|
|
@@ -5,8 +5,7 @@ import OfflinePaymentTypeDialog from './OfflinePaymentTypeDialog.vue'
|
|
|
5
5
|
import { useCoreStore, useI18n } from '@feedmepos/mf-common'
|
|
6
6
|
|
|
7
7
|
const { t } = useI18n()
|
|
8
|
-
const { currentRestaurant
|
|
9
|
-
const isDev = computed(() => namespace.value === 'dev')
|
|
8
|
+
const { currentRestaurant } = useCoreStore()
|
|
10
9
|
|
|
11
10
|
const props = defineProps({
|
|
12
11
|
paymentTypes: {
|
|
@@ -85,7 +84,7 @@ const checkboxChildren = computed(() => {
|
|
|
85
84
|
}
|
|
86
85
|
: undefined
|
|
87
86
|
},
|
|
88
|
-
|
|
87
|
+
{
|
|
89
88
|
label: t('order.credit'),
|
|
90
89
|
value: 'credit',
|
|
91
90
|
disable: !props.allowCredit,
|
|
@@ -95,7 +94,7 @@ const checkboxChildren = computed(() => {
|
|
|
95
94
|
class: 'text-negative t-system'
|
|
96
95
|
}
|
|
97
96
|
: undefined
|
|
98
|
-
}
|
|
97
|
+
}
|
|
99
98
|
]
|
|
100
99
|
return options
|
|
101
100
|
})
|
|
@@ -104,7 +103,7 @@ const initializeCheckboxes = () => {
|
|
|
104
103
|
const initialValues: string[] = []
|
|
105
104
|
if (allowOfflinePayment.value) initialValues.push('offline')
|
|
106
105
|
if (allowEPayment.value) initialValues.push('e-payment')
|
|
107
|
-
if (
|
|
106
|
+
if (allowCreditPayment.value) initialValues.push('credit')
|
|
108
107
|
nestedVal.value = initialValues
|
|
109
108
|
|
|
110
109
|
let availableOptionsCount = 0
|
|
@@ -256,14 +255,12 @@ onMounted(() => {
|
|
|
256
255
|
<slot name="e-payment-content"></slot>
|
|
257
256
|
</div>
|
|
258
257
|
|
|
259
|
-
<
|
|
260
|
-
|
|
261
|
-
@update:model-value="handleChildUpdate" :disabled="checkboxChildren[2].disable" />
|
|
258
|
+
<FmCheckbox v-if="allowCredit || showDisabledOptions" v-model="nestedVal" :label="checkboxChildren[2].label" :value="checkboxChildren[2].value"
|
|
259
|
+
@update:model-value="handleChildUpdate" :disabled="checkboxChildren[2].disable" />
|
|
262
260
|
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
</template>
|
|
261
|
+
<div class="text-fm-color-secondary-salmon fm-typo-en-body-sm-600 ml-7" v-if="checkboxChildren[2].suffix">
|
|
262
|
+
{{ checkboxChildren?.[2]?.suffix?.text }}
|
|
263
|
+
</div>
|
|
267
264
|
|
|
268
265
|
</div>
|
|
269
266
|
</template>
|
|
@@ -28,12 +28,21 @@
|
|
|
28
28
|
<div class="mr-9 grid grid-cols-1 md:grid-cols-2 lg:grid-cols-2 gap-5">
|
|
29
29
|
<div class="min-w-0">
|
|
30
30
|
<div class="bg-gray-50 p-3 rounded-lg border">
|
|
31
|
-
<
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
31
|
+
<div class="flex items-center gap-2">
|
|
32
|
+
<FmSwitch
|
|
33
|
+
:model-value="!!orderSetting?.sequenceSettings?.autoReset?.resetTime"
|
|
34
|
+
:label="t('order.autoResetOrderNumber')"
|
|
35
|
+
@update:model-value="toggleResetTime"
|
|
36
|
+
label-placement="right"
|
|
37
|
+
></FmSwitch>
|
|
38
|
+
<FmTooltip :content="t('order.autoResetOrderNumberTooltip')" :zIndex="1000">
|
|
39
|
+
<FmIcon
|
|
40
|
+
name="info"
|
|
41
|
+
size="sm"
|
|
42
|
+
class="cursor-help text-fm-color-neutral-gray-400"
|
|
43
|
+
/>
|
|
44
|
+
</FmTooltip>
|
|
45
|
+
</div>
|
|
37
46
|
<FmTimePicker
|
|
38
47
|
v-if="!!orderSetting?.sequenceSettings?.autoReset?.resetTime"
|
|
39
48
|
:model-value="orderSetting?.sequenceSettings?.autoReset?.resetTime"
|
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<FmSideSheet :header="t('order.updatePickupSetting')" dismiss-away class="w-full fm-typo-en-title-md-600" :maxWidth="600"
|
|
3
3
|
:model-value="props.showPickupDialog" @update:model-value="togglePickupDialog">
|
|
4
|
-
<PickUpSettingDialogContent
|
|
4
|
+
<PickUpSettingDialogContent
|
|
5
|
+
@update-pickup="updatePickupSetting"
|
|
6
|
+
@update-order-settings="updateOrderPickupSettings"
|
|
7
|
+
:pickup="pickupSetting"
|
|
8
|
+
:order-pickup-settings="orderPickupSettings"
|
|
9
|
+
/>
|
|
5
10
|
<template #side-sheet-footer>
|
|
6
11
|
<div class="flex gap-8 items-center justify-start">
|
|
7
12
|
<FmButton variant="primary" :label="t('order.apply')" size="lg" @click="onSave" />
|
|
@@ -21,6 +26,8 @@ import { useRestaurantStore } from '@/stores/restaurant'
|
|
|
21
26
|
import { useSnackbarFunctions } from '@/components/snackbar'
|
|
22
27
|
import { F_ORDER_PAYMENT_TYPE, FdoRestaurantPickup } from '@feedmepos/core/entity'
|
|
23
28
|
import { useI18n } from '@feedmepos/mf-common'
|
|
29
|
+
import { OrderSettingApi } from '@/api/order-setting'
|
|
30
|
+
import type { OrderPickupSettingsDto, OrderSettingsDto } from '@entity'
|
|
24
31
|
|
|
25
32
|
const { t } = useI18n()
|
|
26
33
|
|
|
@@ -30,6 +37,10 @@ const restaurantStore = useRestaurantStore()
|
|
|
30
37
|
const { showSuccess, showError } = useSnackbarFunctions()
|
|
31
38
|
|
|
32
39
|
const pickupSetting = ref<FdoRestaurantPickup>(initDefaultPickupSetting())
|
|
40
|
+
// `orderSetting.pickupSettings` (bill auto-close / receipt-print) is a separate doc
|
|
41
|
+
// from the restaurant-level pickup setting; loaded/saved alongside it here.
|
|
42
|
+
const orderSetting = ref<OrderSettingsDto | undefined>(undefined)
|
|
43
|
+
const orderPickupSettings = ref<OrderPickupSettingsDto>({})
|
|
33
44
|
const props = defineProps({
|
|
34
45
|
showPickupDialog: {
|
|
35
46
|
type: Boolean,
|
|
@@ -58,12 +69,16 @@ function updatePickupSetting(value: FdoRestaurantPickup) {
|
|
|
58
69
|
pickupSetting.value = value
|
|
59
70
|
}
|
|
60
71
|
|
|
72
|
+
function updateOrderPickupSettings(value: OrderPickupSettingsDto) {
|
|
73
|
+
orderPickupSettings.value = value
|
|
74
|
+
}
|
|
75
|
+
|
|
61
76
|
async function onSave() {
|
|
62
77
|
const pickupTime = pickupSetting.value.pickupTime
|
|
63
78
|
if (pickupTime) {
|
|
64
79
|
const { min, max } = pickupTime.day
|
|
65
80
|
if (max <= min || max - min > MAX_PREORDER_DAYS) {
|
|
66
|
-
showError(t('order.
|
|
81
|
+
showError(t('order.preOrderMaxDaysError', { days: MAX_PREORDER_DAYS }))
|
|
67
82
|
return
|
|
68
83
|
}
|
|
69
84
|
}
|
|
@@ -73,6 +88,12 @@ async function onSave() {
|
|
|
73
88
|
if (currentRestaurant.value) {
|
|
74
89
|
currentRestaurant.value.pickup = pickupSetting.value
|
|
75
90
|
}
|
|
91
|
+
if (orderSetting.value) {
|
|
92
|
+
orderSetting.value = await OrderSettingApi.updateOrderSetting({
|
|
93
|
+
...orderSetting.value,
|
|
94
|
+
pickupSettings: orderPickupSettings.value
|
|
95
|
+
})
|
|
96
|
+
}
|
|
76
97
|
showSuccess('Pickup setting updated. ')
|
|
77
98
|
})
|
|
78
99
|
await emits('close-side-sheet', true)
|
|
@@ -81,10 +102,17 @@ async function onSave() {
|
|
|
81
102
|
|
|
82
103
|
watch(
|
|
83
104
|
() => props.showPickupDialog,
|
|
84
|
-
() => {
|
|
105
|
+
async (show) => {
|
|
85
106
|
if (currentRestaurant.value) {
|
|
86
107
|
pickupSetting.value = currentRestaurant.value.pickup ?? initDefaultPickupSetting()
|
|
87
108
|
}
|
|
109
|
+
if (show && currentRestaurant.value) {
|
|
110
|
+
await startAsyncCallWithErr(async () => {
|
|
111
|
+
const setting = await OrderSettingApi.getOrderSetting()
|
|
112
|
+
orderSetting.value = setting
|
|
113
|
+
orderPickupSettings.value = setting.pickupSettings ?? {}
|
|
114
|
+
})
|
|
115
|
+
}
|
|
88
116
|
}
|
|
89
117
|
)
|
|
90
118
|
</script>
|
|
@@ -8,6 +8,24 @@
|
|
|
8
8
|
label-placement="right"
|
|
9
9
|
@update:model-value="updateIgnoreStock"
|
|
10
10
|
/>
|
|
11
|
+
<FmSwitch
|
|
12
|
+
class="mt-5"
|
|
13
|
+
:model-value="orderPickupSettings.autoCloseBill ?? false"
|
|
14
|
+
value="autoCloseBill"
|
|
15
|
+
:label="t('order.autoCloseBill')"
|
|
16
|
+
:sublabel="t('order.autoCloseBillSublabel')"
|
|
17
|
+
label-placement="right"
|
|
18
|
+
@update:model-value="updateAutoCloseBill"
|
|
19
|
+
/>
|
|
20
|
+
<FmSwitch
|
|
21
|
+
class="mt-5"
|
|
22
|
+
:model-value="orderPickupSettings.printReceiptAfterClose ?? false"
|
|
23
|
+
value="printReceiptAfterClose"
|
|
24
|
+
:label="t('order.printReceiptAfterClose')"
|
|
25
|
+
:sublabel="t('order.printReceiptAfterCloseSublabel')"
|
|
26
|
+
label-placement="right"
|
|
27
|
+
@update:model-value="updatePrintReceiptAfterClose"
|
|
28
|
+
/>
|
|
11
29
|
<FmCard variant="outlined" class="p-5 mt-10">
|
|
12
30
|
<Preorder :model-value="pickupData" @update:model-value="updatePickupSetting" />
|
|
13
31
|
</FmCard>
|
|
@@ -60,6 +78,7 @@ import {
|
|
|
60
78
|
FdoPickupPoint,
|
|
61
79
|
FdoRestaurantPickup
|
|
62
80
|
} from '@feedmepos/core/entity'
|
|
81
|
+
import type { OrderPickupSettingsDto } from '@entity'
|
|
63
82
|
|
|
64
83
|
import { computed, ref, watch, type PropType } from 'vue'
|
|
65
84
|
import PickUpPointDialog from './PickUpPointDialog.vue'
|
|
@@ -82,14 +101,29 @@ const restaurantStore = useRestaurantStore()
|
|
|
82
101
|
|
|
83
102
|
const emits = defineEmits<{
|
|
84
103
|
(event: 'update-pickup', v: FdoRestaurantPickup): void
|
|
104
|
+
(event: 'update-order-settings', v: OrderPickupSettingsDto): void
|
|
85
105
|
}>()
|
|
86
106
|
|
|
87
107
|
const props = defineProps({
|
|
88
108
|
pickup: {
|
|
89
109
|
type: Object as PropType<FdoRestaurantPickup>,
|
|
90
110
|
required: true
|
|
111
|
+
},
|
|
112
|
+
// Bill auto-close / receipt-print preferences live on `orderSetting.pickupSettings`,
|
|
113
|
+
// a separate doc from the restaurant-level pickup setting above.
|
|
114
|
+
orderPickupSettings: {
|
|
115
|
+
type: Object as PropType<OrderPickupSettingsDto>,
|
|
116
|
+
default: () => ({})
|
|
91
117
|
}
|
|
92
118
|
})
|
|
119
|
+
|
|
120
|
+
function updateAutoCloseBill(autoCloseBill: boolean) {
|
|
121
|
+
emits('update-order-settings', { ...props.orderPickupSettings, autoCloseBill })
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
function updatePrintReceiptAfterClose(printReceiptAfterClose: boolean) {
|
|
125
|
+
emits('update-order-settings', { ...props.orderPickupSettings, printReceiptAfterClose })
|
|
126
|
+
}
|
|
93
127
|
const pickupSetting = ref<FdoRestaurantPickup>(defaultPickupSetting())
|
|
94
128
|
const pickupData = computed<PreorderData | null>(() => {
|
|
95
129
|
if (!pickupSetting.value.pickupTime) {
|
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
export const MAX_PREORDER_DAYS =
|
|
2
|
+
export const MAX_PREORDER_DAYS = 30
|
|
3
|
+
|
|
4
|
+
export interface PreorderData {
|
|
5
|
+
day: {
|
|
6
|
+
min: number
|
|
7
|
+
max: number
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export type InputModel = string | number | boolean | null
|
|
3
12
|
</script>
|
|
4
13
|
|
|
5
14
|
<script setup lang="ts">
|
|
@@ -9,13 +18,6 @@ import { useI18n } from '@feedmepos/mf-common'
|
|
|
9
18
|
|
|
10
19
|
const { t } = useI18n()
|
|
11
20
|
|
|
12
|
-
interface PreorderData {
|
|
13
|
-
day: {
|
|
14
|
-
min: number
|
|
15
|
-
max: number
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
|
|
19
21
|
enum PICKUP_TYPE {
|
|
20
22
|
asap = 'asap',
|
|
21
23
|
preorder = 'preorder'
|
|
@@ -72,8 +74,6 @@ function updatePickupTime(v: { min?: number; max?: number }) {
|
|
|
72
74
|
emits('update:model-value', res)
|
|
73
75
|
}
|
|
74
76
|
|
|
75
|
-
type InputModel = string | number | boolean | null
|
|
76
|
-
|
|
77
77
|
function getValue<T>(value: InputModel, type: 'string' | 'number'): T {
|
|
78
78
|
let result = value
|
|
79
79
|
switch (type) {
|
|
@@ -100,7 +100,8 @@ function updateEndTime(v: InputModel) {
|
|
|
100
100
|
|
|
101
101
|
const validationError = computed<string | null>(() => {
|
|
102
102
|
if (max.value < min.value) return t('order.preOrderInvalidRange')
|
|
103
|
-
if (max.value - min.value + 1 > MAX_PREORDER_DAYS)
|
|
103
|
+
if (max.value - min.value + 1 > MAX_PREORDER_DAYS)
|
|
104
|
+
return t('order.preOrderMaxDaysError', { days: MAX_PREORDER_DAYS })
|
|
104
105
|
return null
|
|
105
106
|
})
|
|
106
107
|
</script>
|
|
@@ -126,6 +127,6 @@ const validationError = computed<string | null>(() => {
|
|
|
126
127
|
{{ validationError }}
|
|
127
128
|
</div>
|
|
128
129
|
<div v-if="pickupType === 'preorder'" class="text-fm-color-overlay-background fm-typo-en-body-sm-400 mt-3">
|
|
129
|
-
{{ t('order.preOrderHint', {today: preorderHint.today, start: preorderHint.start, end:preorderHint.end}) }}
|
|
130
|
+
{{ t('order.preOrderHint', {today: preorderHint.today, start: preorderHint.start, end:preorderHint.end, maxDays: MAX_PREORDER_DAYS}) }}
|
|
130
131
|
</div>
|
|
131
132
|
</template>
|
|
@@ -25,6 +25,7 @@ const orderSettingDefault = ref<FdoOrderSettings | undefined>(undefined)
|
|
|
25
25
|
const queueSettings = ref<FdoOrderQueueSettings>({ ...defaultQueueSetting })
|
|
26
26
|
const restaurantSetting = ref<RestaurantSettingDoc | undefined>(undefined)
|
|
27
27
|
const presetRemarks = ref<string[]>([])
|
|
28
|
+
const allowOverrideQueueCode = ref<boolean>(false)
|
|
28
29
|
|
|
29
30
|
const Dialog = useDialog()
|
|
30
31
|
|
|
@@ -77,6 +78,7 @@ async function init() {
|
|
|
77
78
|
)
|
|
78
79
|
const queueQrSetting = restaurantSetting.value?.queueQrSetting
|
|
79
80
|
presetRemarks.value = queueQrSetting?.presetRemarks ?? []
|
|
81
|
+
allowOverrideQueueCode.value = queueQrSetting?.allowOverrideQueueCode ?? false
|
|
80
82
|
})
|
|
81
83
|
}
|
|
82
84
|
}
|
|
@@ -151,7 +153,10 @@ async function savePresetRemarks(remarks: string[]) {
|
|
|
151
153
|
const result = await restaurantApi.updateQueueSetting(currentRestaurant.value._id, {
|
|
152
154
|
printerIds: queueQrSetting?.printerIds ?? [],
|
|
153
155
|
promptConfirmationDialog: queueQrSetting?.promptConfirmationDialog,
|
|
154
|
-
presetRemarks: remarks
|
|
156
|
+
presetRemarks: remarks,
|
|
157
|
+
// Preserve the override-code toggle — the backend replaces the whole
|
|
158
|
+
// queueQrSetting object, so omitting this would wipe it.
|
|
159
|
+
allowOverrideQueueCode: allowOverrideQueueCode.value
|
|
155
160
|
})
|
|
156
161
|
|
|
157
162
|
restaurantSetting.value = result
|
|
@@ -160,6 +165,23 @@ async function savePresetRemarks(remarks: string[]) {
|
|
|
160
165
|
}
|
|
161
166
|
})
|
|
162
167
|
}
|
|
168
|
+
|
|
169
|
+
async function saveAllowOverrideQueueCode(value: boolean) {
|
|
170
|
+
allowOverrideQueueCode.value = value
|
|
171
|
+
await startAsyncCallWithErr(async () => {
|
|
172
|
+
if (currentRestaurant.value && restaurantSetting.value) {
|
|
173
|
+
const queueQrSetting = restaurantSetting.value.queueQrSetting
|
|
174
|
+
const result = await restaurantApi.updateQueueSetting(currentRestaurant.value._id, {
|
|
175
|
+
printerIds: queueQrSetting?.printerIds ?? [],
|
|
176
|
+
promptConfirmationDialog: queueQrSetting?.promptConfirmationDialog,
|
|
177
|
+
presetRemarks: queueQrSetting?.presetRemarks ?? presetRemarks.value,
|
|
178
|
+
allowOverrideQueueCode: value
|
|
179
|
+
})
|
|
180
|
+
restaurantSetting.value = result
|
|
181
|
+
}
|
|
182
|
+
})
|
|
183
|
+
showSuccess(t('order.settingUpdated'))
|
|
184
|
+
}
|
|
163
185
|
</script>
|
|
164
186
|
|
|
165
187
|
<template>
|
|
@@ -200,6 +222,13 @@ async function savePresetRemarks(remarks: string[]) {
|
|
|
200
222
|
label-placement="right"
|
|
201
223
|
/>
|
|
202
224
|
|
|
225
|
+
<FmSwitch
|
|
226
|
+
:model-value="allowOverrideQueueCode"
|
|
227
|
+
@update:model-value="(v: boolean) => saveAllowOverrideQueueCode(v)"
|
|
228
|
+
:label="t('order.allowOverrideQueueCode')"
|
|
229
|
+
label-placement="right"
|
|
230
|
+
/>
|
|
231
|
+
|
|
203
232
|
<FmSwitch
|
|
204
233
|
:model-value="queueSettings.disableSMS ?? false"
|
|
205
234
|
@update:model-value="(v: boolean) => updateQueueSetting('disableSMS', v)"
|
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<FmTextField
|
|
3
|
-
:model-value="rate"
|
|
4
|
-
:label="t('order.rate')"
|
|
5
|
-
append-icon="percent"
|
|
6
|
-
:rules="[
|
|
7
|
-
(val) => (val >= 0 && val <= 100) || 'Invalid rate (0% - 100%)',
|
|
8
|
-
]"
|
|
9
3
|
type="number"
|
|
4
|
+
append-icon="percent"
|
|
5
|
+
:model-value="rate"
|
|
6
|
+
:label="props.label ?? t('order.rate')"
|
|
7
|
+
:rules="[(val) => (val >= 0 && val <= 100) || 'Invalid rate (0% - 100%)']"
|
|
10
8
|
@update:model-value="handleInputChange"
|
|
11
9
|
/>
|
|
12
10
|
</template>
|
|
@@ -23,6 +21,10 @@ const props = defineProps({
|
|
|
23
21
|
modelValue: {
|
|
24
22
|
type: Object as PropType<AdjustmentAmount>,
|
|
25
23
|
required: true
|
|
24
|
+
},
|
|
25
|
+
label: {
|
|
26
|
+
type: String,
|
|
27
|
+
required: false
|
|
26
28
|
}
|
|
27
29
|
})
|
|
28
30
|
|
|
@@ -35,7 +37,7 @@ const rate = computed(() => {
|
|
|
35
37
|
})
|
|
36
38
|
|
|
37
39
|
function handleInputChange(value: string) {
|
|
38
|
-
const numberValue = parseFloat(value)
|
|
40
|
+
const numberValue = parseFloat(value)
|
|
39
41
|
emits('update:model-value', percentToAdjustment(numberValue))
|
|
40
42
|
}
|
|
41
43
|
</script>
|
package/vite.config.ts
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import { fileURLToPath, URL } from 'node:url'
|
|
2
2
|
import { defineConfig, loadEnv } from 'vite'
|
|
3
3
|
import vue from '@vitejs/plugin-vue'
|
|
4
|
-
import { fmmfVitePresent } from
|
|
5
|
-
|
|
4
|
+
import { fmmfVitePresent } from '@feedmepos/mf-common/vite-preset'
|
|
6
5
|
|
|
7
6
|
// https://vitejs.dev/config/
|
|
8
7
|
export default defineConfig((env) => {
|
|
9
|
-
process.env = { ...process.env, ...loadEnv(env.mode, process.cwd(),
|
|
8
|
+
process.env = { ...process.env, ...loadEnv(env.mode, process.cwd(), '') }
|
|
10
9
|
const config = {
|
|
11
10
|
plugins: [vue()],
|
|
12
11
|
resolve: {
|
|
@@ -19,8 +18,7 @@ export default defineConfig((env) => {
|
|
|
19
18
|
}
|
|
20
19
|
},
|
|
21
20
|
define: {
|
|
22
|
-
devInfo: JSON.stringify({
|
|
23
|
-
}),
|
|
21
|
+
devInfo: JSON.stringify({}),
|
|
24
22
|
appApi: JSON.stringify({
|
|
25
23
|
googleMap: process.env.VITE_GOOGLE_MAP_API_KEY,
|
|
26
24
|
firebase: {
|
|
@@ -31,7 +29,7 @@ export default defineConfig((env) => {
|
|
|
31
29
|
storageBucket: process.env.FIREBASE_STORAGE_BUCKET,
|
|
32
30
|
messagingSenderId: process.env.FIREBASE_MESSAGING_SENDER_ID,
|
|
33
31
|
appId: process.env.FIREBASE_APP_ID,
|
|
34
|
-
measurementId: process.env.FIREBASE_MEASUREMENT_ID
|
|
32
|
+
measurementId: process.env.FIREBASE_MEASUREMENT_ID
|
|
35
33
|
},
|
|
36
34
|
assetBucketUrl: process.env.ASSET_STORAGE_BUCKET,
|
|
37
35
|
feedMeClientId: process.env.FEEDME_CLIENT_ID,
|
|
@@ -41,20 +39,22 @@ export default defineConfig((env) => {
|
|
|
41
39
|
serverUrl: process.env.GTM_SERVER_URL,
|
|
42
40
|
env: process.env.GTM_ENV,
|
|
43
41
|
serverMeasurementId: process.env.GTM_SERVER_MEASUREMENT_ID,
|
|
44
|
-
debug: process.env.GTM_DEBUG === 'true'
|
|
42
|
+
debug: process.env.GTM_DEBUG === 'true'
|
|
45
43
|
},
|
|
46
|
-
r2: process.env.R2_ENDPOINT
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
44
|
+
r2: process.env.R2_ENDPOINT
|
|
45
|
+
? {
|
|
46
|
+
endPoint: process.env.R2_ENDPOINT,
|
|
47
|
+
bucketName: process.env.R2_BUCKET_NAME,
|
|
48
|
+
accessKeyId: process.env.R2_ACCESS_KEY || '',
|
|
49
|
+
secretAccessKey: process.env.R2_ACCESS_SECRET || ''
|
|
50
|
+
}
|
|
51
|
+
: null
|
|
52
52
|
}),
|
|
53
53
|
appEndpoint: JSON.stringify({
|
|
54
|
-
customerV3App: process.env.CUSTOMER_V3_APP_URL
|
|
54
|
+
customerV3App: process.env.CUSTOMER_V3_APP_URL
|
|
55
55
|
}),
|
|
56
|
-
'process.env': JSON.stringify(process.env)
|
|
57
|
-
}
|
|
56
|
+
'process.env': JSON.stringify(process.env)
|
|
57
|
+
}
|
|
58
58
|
}
|
|
59
59
|
|
|
60
60
|
// return config
|