@feedmepos/mf-order-setting 0.0.44 → 0.0.45
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-KBpXQJmy.js → KioskDevicesView-CZ9B7VmM.js} +1 -1
- package/dist/{KioskDevicesView.vue_vue_type_script_setup_true_lang-taf41a-7.js → KioskDevicesView.vue_vue_type_script_setup_true_lang-B9mM8Vcl.js} +101 -96
- package/dist/{KioskSettingView-DG12ZvfT.js → KioskSettingView-CJAw9osg.js} +1 -1
- package/dist/KioskView-CN-Dk8fn.js +448 -0
- package/dist/{OrderSettingsView-CEh1QUZm.js → OrderSettingsView-B0shsMTu.js} +33723 -34786
- package/dist/{app-CKeIud_f.js → app-BK8d3ff5.js} +115 -43
- package/dist/app.js +1 -1
- package/dist/{dayjs.min-D9bsUd57.js → dayjs.min-DgWdPF1p.js} +1 -1
- package/dist/frontend/mf-order/src/api/remoteOrder/index.d.ts +2 -2
- package/dist/frontend/mf-order/src/api/restaurant-setting/index.d.ts +2 -1
- package/dist/frontend/mf-order/src/app.d.ts +72 -0
- package/dist/frontend/mf-order/src/main.d.ts +72 -0
- package/dist/frontend/mf-order/src/modules/kiosk/interface.d.ts +1 -0
- package/dist/frontend/mf-order/src/stores/kiosk/index.d.ts +3 -0
- package/dist/frontend/mf-order/src/stores/menu/menu.d.ts +111 -1
- package/dist/frontend/mf-order/src/stores/order-setting/index.d.ts +291 -288
- package/dist/frontend/mf-order/src/stores/restaurant/index.d.ts +20 -173
- package/dist/frontend/mf-order/src/views/all-orders/ReflowOrder.vue.d.ts +12 -114
- package/dist/frontend/mf-order/src/views/order-settings/delivery/delivery.data.d.ts +2 -2
- package/dist/frontend/mf-order/src/views/order-settings/delivery/inhouse/InHouseDelivery.vue.d.ts +2 -2
- package/dist/frontend/mf-order/src/views/order-settings/pickup/PickUpSettingDialogContent.vue.d.ts +4 -4
- package/dist/frontend/mf-order/src/views/order-settings/queue/PresetRemarksSheet.vue.d.ts +19 -0
- package/dist/frontend/mf-order/src/views/order-settings/queue/QueueSetting.vue.d.ts +2 -0
- package/dist/frontend/mf-order/tsconfig.app.tsbuildinfo +1 -1
- package/dist/{index-D_Tmm1qL.js → index-DHbH8gKt.js} +2 -2
- package/dist/{menu.dto-BY9dVf93.js → menu.dto-Cua9zYpc.js} +54753 -57698
- package/dist/package/entity/booking/booking.do.d.ts +168 -2368
- package/dist/package/entity/delivery/delivery.dto.d.ts +33 -473
- package/dist/package/entity/food-court/food-court.dto.d.ts +44 -44
- package/dist/package/entity/incoming-order/incoming-order-to-bill.dto.d.ts +23 -0
- package/dist/package/entity/incoming-order/incoming-order.do.d.ts +432 -60
- package/dist/package/entity/incoming-order/incoming-order.dto.d.ts +670 -628
- package/dist/package/entity/incoming-order/incoming-order.enum.d.ts +2 -2
- package/dist/package/entity/index.d.ts +2 -0
- package/dist/package/entity/kiosk/kiosk.do.d.ts +16 -0
- package/dist/package/entity/kiosk/kiosk.dto.d.ts +19 -0
- package/dist/package/entity/kiosk/marketing/marketing.dto.d.ts +201 -2031
- package/dist/package/entity/order/order-item/order-item.dto.d.ts +129 -16
- package/dist/package/entity/order/order.do.d.ts +8 -0
- package/dist/package/entity/order/order.dto.d.ts +390 -974
- package/dist/package/entity/order/order.enum.d.ts +2 -0
- package/dist/package/entity/order-platform/external/menu/external-master-menu.do.d.ts +367 -18
- package/dist/package/entity/order-platform/external/menu/external-menu.do.d.ts +48 -8
- package/dist/package/entity/order-platform/external/order/external-order.do.d.ts +1 -0
- package/dist/package/entity/order-platform/foodpanda/foodpanda-order.dto.d.ts +33 -473
- package/dist/package/entity/order-platform/grabfood/grabfood-omni.do.d.ts +672 -0
- package/dist/package/entity/order-platform/grabfood/grabfood-omni.dto.d.ts +9 -0
- package/dist/package/entity/order-platform/grabfood/grabfood-order.do.d.ts +90 -508
- package/dist/package/entity/order-platform/grabfood/grabfood-settings.do.d.ts +3 -0
- package/dist/package/entity/order-platform/grabfood/grabfood-webhook.dto.d.ts +1130 -0
- package/dist/package/entity/order-platform/grabfood/grabfood.dto.d.ts +34 -47
- package/dist/package/entity/order-platform/grabfood/grabfood.enum.d.ts +8 -2
- package/dist/package/entity/order-platform/menu.dto.d.ts +46 -12
- package/dist/package/entity/order-platform/order-platform.dto.d.ts +8 -5
- package/dist/package/entity/order-platform/shopeefood/shopeefood-order.do.d.ts +33 -473
- 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/customization/color.do.d.ts +3 -0
- package/dist/package/entity/order-setting/kiosk/kiosk.dto.d.ts +18 -18
- package/dist/package/entity/order-setting/order-setting.do.d.ts +72 -88
- package/dist/package/entity/order-setting/order-setting.dto.d.ts +724 -1036
- package/dist/package/entity/order-setting/queue/queue.do.d.ts +22 -0
- package/dist/package/entity/order-setting/queue/queue.dto.d.ts +12 -0
- package/dist/package/entity/order-setting/reservation/reservation.do.d.ts +4 -51
- package/dist/package/entity/order-setting/reservation/reservation.dto.d.ts +248 -585
- package/dist/package/entity/pubsub/ably/ably.enum.d.ts +10 -1
- package/dist/package/entity/queue/queue.dto.d.ts +76 -14
- package/dist/package/entity/restaurant/restaurant.dto.d.ts +41 -26
- package/dist/package/entity/websocket/websocket.dto.d.ts +22 -22
- package/package.json +3 -3
- package/src/api/remoteOrder/index.ts +13 -2
- package/src/api/restaurant-setting/index.ts +6 -0
- package/src/locales/en-US.json +24 -0
- package/src/locales/th-TH.json +24 -0
- package/src/locales/zh-CN.json +24 -0
- package/src/modules/kiosk/interface.ts +1 -0
- package/src/stores/kiosk/mapper.ts +1 -0
- package/src/stores/order-setting/mapper.ts +20 -33
- package/src/stores/restaurant/index.ts +7 -3
- package/src/views/all-orders/FilterStatus.vue +1 -1
- package/src/views/kiosk/devices/KioskDeviceCard.vue +6 -0
- package/src/views/order-settings/OrderSettingsView.vue +13 -5
- package/src/views/order-settings/delivery/delivery.data.ts +7 -4
- package/src/views/order-settings/delivery/integrated-delivery/FoodpandaSetting.vue +2 -2
- package/src/views/order-settings/dine-in/DineInSetting.vue +18 -2
- package/src/views/order-settings/general/GeneralSetting.vue +2 -2
- package/src/views/order-settings/queue/PresetRemarksSheet.vue +103 -0
- package/src/views/order-settings/queue/QueueSetting.vue +358 -0
- package/dist/KioskView-KNiT-upH.js +0 -453
|
@@ -0,0 +1,358 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { ref, watch, onMounted } from 'vue'
|
|
3
|
+
import { OrderSettingApi } from '@/api/order-setting'
|
|
4
|
+
import { restaurantApi, type RestaurantSettingDoc } from '@/api/restaurant-setting'
|
|
5
|
+
import { useLoading } from '@/composables/loading'
|
|
6
|
+
import {
|
|
7
|
+
type FdoOrderSettings,
|
|
8
|
+
type FdoOrderQueueSettings,
|
|
9
|
+
defaultQueueSetting,
|
|
10
|
+
OrderSettingsDto,
|
|
11
|
+
OrderSettingUpdateDto
|
|
12
|
+
} from '@entity'
|
|
13
|
+
import RestaurantSelector from '../components/RestaurantSelector.vue'
|
|
14
|
+
import { useCoreStore, useI18n } from '@feedmepos/mf-common'
|
|
15
|
+
import { useSnackbarFunctions } from '@/components/snackbar'
|
|
16
|
+
import { useDialog } from '@feedmepos/ui-library'
|
|
17
|
+
import PresetRemarksSheet from './PresetRemarksSheet.vue'
|
|
18
|
+
|
|
19
|
+
const { t } = useI18n()
|
|
20
|
+
const { showSuccess } = useSnackbarFunctions()
|
|
21
|
+
const { currentRestaurant } = useCoreStore()
|
|
22
|
+
const { isLoading, startAsyncCallWithErr } = useLoading()
|
|
23
|
+
|
|
24
|
+
const orderSettingDefault = ref<FdoOrderSettings | undefined>(undefined)
|
|
25
|
+
const queueSettings = ref<FdoOrderQueueSettings>({ ...defaultQueueSetting })
|
|
26
|
+
const restaurantSetting = ref<RestaurantSettingDoc | undefined>(undefined)
|
|
27
|
+
const presetRemarks = ref<string[]>([])
|
|
28
|
+
|
|
29
|
+
const Dialog = useDialog()
|
|
30
|
+
|
|
31
|
+
onMounted(() => {
|
|
32
|
+
init()
|
|
33
|
+
})
|
|
34
|
+
|
|
35
|
+
watch(
|
|
36
|
+
() => currentRestaurant.value,
|
|
37
|
+
() => {
|
|
38
|
+
init()
|
|
39
|
+
},
|
|
40
|
+
{ immediate: true }
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
async function readOrderSetting(): Promise<OrderSettingsDto> {
|
|
44
|
+
return await startAsyncCallWithErr(async () => {
|
|
45
|
+
return await OrderSettingApi.getOrderSetting()
|
|
46
|
+
})
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
async function updateOrderSetting() {
|
|
50
|
+
await startAsyncCallWithErr(async () => {
|
|
51
|
+
if (orderSettingDefault.value) {
|
|
52
|
+
await OrderSettingApi.updateOrderSetting(
|
|
53
|
+
OrderSettingUpdateDto.parse({
|
|
54
|
+
...orderSettingDefault.value,
|
|
55
|
+
queueSettings: queueSettings.value
|
|
56
|
+
})
|
|
57
|
+
)
|
|
58
|
+
}
|
|
59
|
+
await init()
|
|
60
|
+
})
|
|
61
|
+
showSuccess(t('order.settingUpdated'))
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
async function init() {
|
|
65
|
+
if (currentRestaurant.value) {
|
|
66
|
+
queueSettings.value = { ...defaultQueueSetting }
|
|
67
|
+
orderSettingDefault.value = await readOrderSetting()
|
|
68
|
+
if (orderSettingDefault.value?.queueSettings) {
|
|
69
|
+
queueSettings.value = { ...defaultQueueSetting, ...orderSettingDefault.value.queueSettings }
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// Load restaurant settings for preset remarks
|
|
73
|
+
await startAsyncCallWithErr(async () => {
|
|
74
|
+
restaurantSetting.value = await restaurantApi.readRestaurantSetting(
|
|
75
|
+
currentRestaurant.value!._id
|
|
76
|
+
)
|
|
77
|
+
const queueQrSetting = restaurantSetting.value?.queueQrSetting
|
|
78
|
+
presetRemarks.value = queueQrSetting?.presetRemarks ?? []
|
|
79
|
+
})
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
function updateQueueSetting<K extends keyof FdoOrderQueueSettings>(
|
|
84
|
+
key: K,
|
|
85
|
+
value: FdoOrderQueueSettings[K]
|
|
86
|
+
) {
|
|
87
|
+
queueSettings.value[key] = value
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
function addCodeSetting() {
|
|
91
|
+
if (!queueSettings.value.codeSettings) {
|
|
92
|
+
queueSettings.value.codeSettings = []
|
|
93
|
+
}
|
|
94
|
+
queueSettings.value.codeSettings.push({
|
|
95
|
+
start: 0,
|
|
96
|
+
end: 100,
|
|
97
|
+
current: 0,
|
|
98
|
+
prefix: '',
|
|
99
|
+
pax: { min: 1, max: 99 }
|
|
100
|
+
})
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
function removeCodeSetting(index: number) {
|
|
104
|
+
queueSettings.value.codeSettings?.splice(index, 1)
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
function updateCodeSetting(index: number, key: string, value: any) {
|
|
108
|
+
if (queueSettings.value.codeSettings && queueSettings.value.codeSettings[index]) {
|
|
109
|
+
const setting = queueSettings.value.codeSettings[index] as any
|
|
110
|
+
if (key.includes('.')) {
|
|
111
|
+
const [parent, child] = key.split('.')
|
|
112
|
+
setting[parent][child] = value
|
|
113
|
+
} else {
|
|
114
|
+
setting[key] = value
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
function openPresetRemarksSheet() {
|
|
120
|
+
let updatedRemarks: string[] = [...presetRemarks.value]
|
|
121
|
+
|
|
122
|
+
Dialog.open({
|
|
123
|
+
title: t('order.editPresetRemarks'),
|
|
124
|
+
contentComponent: PresetRemarksSheet,
|
|
125
|
+
contentComponentProps: {
|
|
126
|
+
initialValue: [...presetRemarks.value],
|
|
127
|
+
'onUpdate:modelValue': (remarks: string[]) => {
|
|
128
|
+
updatedRemarks = remarks
|
|
129
|
+
}
|
|
130
|
+
},
|
|
131
|
+
primaryActions: {
|
|
132
|
+
text: t('order.save'),
|
|
133
|
+
variant: 'primary',
|
|
134
|
+
close: true
|
|
135
|
+
},
|
|
136
|
+
secondaryActions: {
|
|
137
|
+
text: t('order.cancel'),
|
|
138
|
+
variant: 'tertiary',
|
|
139
|
+
close: true
|
|
140
|
+
}
|
|
141
|
+
}).onPrimary(async () => {
|
|
142
|
+
await savePresetRemarks(updatedRemarks)
|
|
143
|
+
})
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
async function savePresetRemarks(remarks: string[]) {
|
|
147
|
+
await startAsyncCallWithErr(async () => {
|
|
148
|
+
if (currentRestaurant.value && restaurantSetting.value) {
|
|
149
|
+
const queueQrSetting = restaurantSetting.value.queueQrSetting
|
|
150
|
+
const result = await restaurantApi.updateQueueSetting(currentRestaurant.value._id, {
|
|
151
|
+
printerIds: queueQrSetting?.printerIds ?? [],
|
|
152
|
+
promptConfirmationDialog: queueQrSetting?.promptConfirmationDialog,
|
|
153
|
+
presetRemarks: remarks
|
|
154
|
+
})
|
|
155
|
+
|
|
156
|
+
restaurantSetting.value = result
|
|
157
|
+
presetRemarks.value = remarks
|
|
158
|
+
showSuccess(t('order.presetRemarksSaved'))
|
|
159
|
+
}
|
|
160
|
+
})
|
|
161
|
+
}
|
|
162
|
+
</script>
|
|
163
|
+
|
|
164
|
+
<template>
|
|
165
|
+
<RestaurantSelector />
|
|
166
|
+
<div v-if="isLoading" class="column">
|
|
167
|
+
<FmCircularProgress size="xxl" />
|
|
168
|
+
</div>
|
|
169
|
+
<div v-else>
|
|
170
|
+
<div class="p-[1.5rem] flex flex-col gap-5 m-5 mr-8 w-full max-w-4xl">
|
|
171
|
+
<div class="flex flex-col gap-5">
|
|
172
|
+
<div class="flex-grow fm-typo-en-title-sm-600">{{ t('order.queueSettings') }}</div>
|
|
173
|
+
|
|
174
|
+
<FmSwitch
|
|
175
|
+
:model-value="queueSettings.enableOrder"
|
|
176
|
+
@update:model-value="(v: boolean) => updateQueueSetting('enableOrder', v)"
|
|
177
|
+
:label="t('order.enableQueueOrder')"
|
|
178
|
+
label-placement="right"
|
|
179
|
+
/>
|
|
180
|
+
|
|
181
|
+
<div class="grid grid-cols-1 md:grid-cols-2 gap-5">
|
|
182
|
+
<div class="flex flex-col gap-2">
|
|
183
|
+
<span class="fm-typo-en-body-md-600">{{ t('order.autoCalledLimit') }}</span>
|
|
184
|
+
<FmTextField
|
|
185
|
+
type="number"
|
|
186
|
+
:model-value="queueSettings.autoCalledLimit"
|
|
187
|
+
@update:model-value="
|
|
188
|
+
(v: string | number) =>
|
|
189
|
+
updateQueueSetting('autoCalledLimit', v === '' ? 0 : Number(v))
|
|
190
|
+
"
|
|
191
|
+
/>
|
|
192
|
+
</div>
|
|
193
|
+
</div>
|
|
194
|
+
|
|
195
|
+
<FmSwitch
|
|
196
|
+
:model-value="queueSettings.disableRemoteQueue ?? false"
|
|
197
|
+
@update:model-value="(v: boolean) => updateQueueSetting('disableRemoteQueue', v)"
|
|
198
|
+
:label="t('order.disableRemoteQueue')"
|
|
199
|
+
label-placement="right"
|
|
200
|
+
/>
|
|
201
|
+
|
|
202
|
+
<FmSwitch
|
|
203
|
+
:model-value="queueSettings.disableSMS ?? false"
|
|
204
|
+
@update:model-value="(v: boolean) => updateQueueSetting('disableSMS', v)"
|
|
205
|
+
:label="t('order.disableSMS')"
|
|
206
|
+
label-placement="right"
|
|
207
|
+
/>
|
|
208
|
+
|
|
209
|
+
<FmSwitch
|
|
210
|
+
:model-value="queueSettings.printChecklist ?? false"
|
|
211
|
+
@update:model-value="(v: boolean) => updateQueueSetting('printChecklist', v)"
|
|
212
|
+
:label="t('order.printChecklist')"
|
|
213
|
+
label-placement="right"
|
|
214
|
+
/>
|
|
215
|
+
|
|
216
|
+
<div class="flex flex-col gap-2">
|
|
217
|
+
<span class="fm-typo-en-body-md-600">{{ t('order.autoSendKitchen') }}</span>
|
|
218
|
+
<FmSelect
|
|
219
|
+
:model-value="
|
|
220
|
+
queueSettings.autoSendKitchen === null
|
|
221
|
+
? 'null'
|
|
222
|
+
: String(queueSettings.autoSendKitchen)
|
|
223
|
+
"
|
|
224
|
+
@update:model-value="
|
|
225
|
+
(v: string) =>
|
|
226
|
+
updateQueueSetting('autoSendKitchen', v === 'null' ? null : v === 'true')
|
|
227
|
+
"
|
|
228
|
+
:items="[
|
|
229
|
+
{ label: t('order.followDineIn'), value: 'null' },
|
|
230
|
+
{ label: t('order.enabled'), value: 'true' },
|
|
231
|
+
{ label: t('order.disabled'), value: 'false' }
|
|
232
|
+
]"
|
|
233
|
+
/>
|
|
234
|
+
</div>
|
|
235
|
+
|
|
236
|
+
<div class="flex flex-col gap-3 mt-4">
|
|
237
|
+
<div class="flex justify-between items-center">
|
|
238
|
+
<span class="fm-typo-en-body-md-600">{{ t('order.presetRemarks') }}</span>
|
|
239
|
+
<FmButton
|
|
240
|
+
variant="secondary"
|
|
241
|
+
:label="t('order.edit')"
|
|
242
|
+
icon="edit"
|
|
243
|
+
@click="openPresetRemarksSheet"
|
|
244
|
+
/>
|
|
245
|
+
</div>
|
|
246
|
+
<div v-if="presetRemarks.length > 0" class="flex flex-wrap gap-2">
|
|
247
|
+
<div
|
|
248
|
+
v-for="(remark, index) in presetRemarks"
|
|
249
|
+
:key="index"
|
|
250
|
+
class="bg-gray-100 px-3 py-1 rounded-full text-sm"
|
|
251
|
+
>
|
|
252
|
+
{{ remark }}
|
|
253
|
+
</div>
|
|
254
|
+
</div>
|
|
255
|
+
<div v-else class="text-gray-400 text-sm">
|
|
256
|
+
{{ t('order.noPresetRemarks') }}
|
|
257
|
+
</div>
|
|
258
|
+
</div>
|
|
259
|
+
|
|
260
|
+
<div class="flex flex-col gap-4 mt-4">
|
|
261
|
+
<div class="flex justify-between items-center">
|
|
262
|
+
<span class="fm-typo-en-title-sm-600">{{ t('order.codeSettings') }}</span>
|
|
263
|
+
<FmButton
|
|
264
|
+
variant="secondary"
|
|
265
|
+
:label="t('order.addCodeSetting')"
|
|
266
|
+
icon="add"
|
|
267
|
+
@click="addCodeSetting"
|
|
268
|
+
/>
|
|
269
|
+
</div>
|
|
270
|
+
|
|
271
|
+
<div
|
|
272
|
+
v-for="(codeSetting, index) in queueSettings.codeSettings"
|
|
273
|
+
:key="index"
|
|
274
|
+
class="bg-gray-50 border border-gray-200 p-5 rounded-lg flex flex-col gap-4 mt-4"
|
|
275
|
+
>
|
|
276
|
+
<div class="flex justify-between items-center">
|
|
277
|
+
<span class="font-bold">#{{ index + 1 }}</span>
|
|
278
|
+
<FmButton color="error" icon="delete" @click="removeCodeSetting(index)" />
|
|
279
|
+
</div>
|
|
280
|
+
|
|
281
|
+
<div class="grid grid-cols-2 gap-x-6 gap-y-5">
|
|
282
|
+
<div class="flex flex-col gap-1">
|
|
283
|
+
<span class="text-sm">{{ t('order.prefix') }}</span>
|
|
284
|
+
<FmTextField
|
|
285
|
+
:model-value="codeSetting.prefix ?? ''"
|
|
286
|
+
@update:model-value="(v: string) => updateCodeSetting(index, 'prefix', v)"
|
|
287
|
+
/>
|
|
288
|
+
</div>
|
|
289
|
+
<div class="flex flex-col gap-1">
|
|
290
|
+
<span class="text-sm">{{ t('order.current') }}</span>
|
|
291
|
+
<FmTextField
|
|
292
|
+
type="number"
|
|
293
|
+
:model-value="codeSetting.current"
|
|
294
|
+
@update:model-value="
|
|
295
|
+
(v: string | number) =>
|
|
296
|
+
updateCodeSetting(index, 'current', v === '' ? 0 : Number(v))
|
|
297
|
+
"
|
|
298
|
+
/>
|
|
299
|
+
</div>
|
|
300
|
+
<div class="flex flex-col gap-1">
|
|
301
|
+
<span class="text-sm">{{ t('order.start') }}</span>
|
|
302
|
+
<FmTextField
|
|
303
|
+
type="number"
|
|
304
|
+
:model-value="codeSetting.start"
|
|
305
|
+
@update:model-value="
|
|
306
|
+
(v: string | number) =>
|
|
307
|
+
updateCodeSetting(index, 'start', v === '' ? 0 : Number(v))
|
|
308
|
+
"
|
|
309
|
+
/>
|
|
310
|
+
</div>
|
|
311
|
+
<div class="flex flex-col gap-1">
|
|
312
|
+
<span class="text-sm">{{ t('order.end') }}</span>
|
|
313
|
+
<FmTextField
|
|
314
|
+
type="number"
|
|
315
|
+
:model-value="codeSetting.end"
|
|
316
|
+
@update:model-value="
|
|
317
|
+
(v: string | number) =>
|
|
318
|
+
updateCodeSetting(index, 'end', v === '' ? 0 : Number(v))
|
|
319
|
+
"
|
|
320
|
+
/>
|
|
321
|
+
</div>
|
|
322
|
+
<div class="flex flex-col gap-1">
|
|
323
|
+
<span class="text-sm">{{ t('order.paxMin') }}</span>
|
|
324
|
+
<FmTextField
|
|
325
|
+
type="number"
|
|
326
|
+
:model-value="codeSetting.pax.min"
|
|
327
|
+
@update:model-value="
|
|
328
|
+
(v: string | number) =>
|
|
329
|
+
updateCodeSetting(index, 'pax.min', v === '' ? 0 : Number(v))
|
|
330
|
+
"
|
|
331
|
+
/>
|
|
332
|
+
</div>
|
|
333
|
+
<div class="flex flex-col gap-1">
|
|
334
|
+
<span class="text-sm">{{ t('order.paxMax') }}</span>
|
|
335
|
+
<FmTextField
|
|
336
|
+
type="number"
|
|
337
|
+
:model-value="codeSetting.pax.max"
|
|
338
|
+
@update:model-value="
|
|
339
|
+
(v: string | number) =>
|
|
340
|
+
updateCodeSetting(index, 'pax.max', v === '' ? 0 : Number(v))
|
|
341
|
+
"
|
|
342
|
+
/>
|
|
343
|
+
</div>
|
|
344
|
+
</div>
|
|
345
|
+
</div>
|
|
346
|
+
</div>
|
|
347
|
+
</div>
|
|
348
|
+
</div>
|
|
349
|
+
<div class="fm-corner-radius-lg flex flex-col gap-5 m-5">
|
|
350
|
+
<FmButton
|
|
351
|
+
variant="primary"
|
|
352
|
+
:label="t('order.saveSetting')"
|
|
353
|
+
class="mr-auto"
|
|
354
|
+
@click="updateOrderSetting"
|
|
355
|
+
/>
|
|
356
|
+
</div>
|
|
357
|
+
</div>
|
|
358
|
+
</template>
|