@feedmepos/mf-order-setting 0.0.51 → 0.0.52-dev.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.tsbuildinfo +1 -0
- package/dist/{KioskDevicesView-TIls1ag1.js → KioskDevicesView-Vy9FLX1n.js} +1 -1
- package/dist/{KioskDevicesView.vue_vue_type_script_setup_true_lang-B2gjPfOJ.js → KioskDevicesView.vue_vue_type_script_setup_true_lang-DhZPOEEQ.js} +2 -2
- package/dist/KioskSettingView-cE-JdCBB.js +551 -0
- package/dist/{KioskView-B0Jj2sOl.js → KioskView-BYs5bem0.js} +108 -111
- package/dist/OrderSettingsView-C4aEpC1j.js +56063 -0
- package/dist/{app-JqOEacuf.js → app-CwYXsqxX.js} +182 -26
- package/dist/app.js +1 -1
- package/dist/{dayjs.min-B42nUieJ.js → dayjs.min-JEYIJz2D.js} +1 -1
- package/dist/frontend/mf-order/src/api/reservation/index.d.ts +8 -0
- package/dist/frontend/mf-order/src/app.d.ts +164 -8
- package/dist/frontend/mf-order/src/main.d.ts +164 -8
- package/dist/frontend/mf-order/src/modules/order-setting/kiosk/interface.d.ts +0 -2
- package/dist/frontend/mf-order/src/stores/order-setting/index.d.ts +0 -6
- package/dist/frontend/mf-order/src/stores/restaurant/index.d.ts +3 -3
- package/dist/frontend/mf-order/src/views/all-orders/ReflowOrder.vue.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/reservation/CopySettingsSheet.vue.d.ts +186 -0
- package/dist/frontend/mf-order/src/views/order-settings/reservation/CustomSelect.vue.d.ts +15 -0
- package/dist/frontend/mf-order/src/views/order-settings/reservation/CustomTimePicker.vue.d.ts +10 -0
- package/dist/frontend/mf-order/src/views/order-settings/reservation/ReservationSetting.vue.d.ts +2 -0
- package/dist/{index-B0teNm7_.js → index-DZCjODMx.js} +2 -2
- package/dist/{menu.dto-DFTxveX1.js → menu.dto-D9CDVLiP.js} +22865 -20037
- package/dist/package/entity/food-court/order.do.d.ts +47 -2
- package/dist/package/entity/food-court/order.dto.d.ts +0 -3
- package/dist/package/entity/incoming-order/incoming-order-to-bill.dto.d.ts +12341 -1
- package/dist/package/entity/incoming-order/incoming-order.do.d.ts +3 -22266
- package/dist/package/entity/index.d.ts +5 -0
- package/dist/package/entity/kiosk/marketing/marketing.dto.d.ts +1 -19864
- package/dist/package/entity/order/order-item/order-item.dto.d.ts +1 -3721
- package/dist/package/entity/order-setting/kiosk/kiosk.do.d.ts +0 -3
- package/dist/package/entity/order-setting/kiosk/kiosk.dto.d.ts +0 -3
- package/dist/package/entity/order-setting/order-setting.do.d.ts +861 -5
- package/dist/package/entity/order-setting/order-setting.dto.d.ts +0 -10
- package/dist/package/entity/order-setting/reservationV2/reservation.do.d.ts +1269 -0
- package/dist/package/entity/queue/queue.do.d.ts +1 -11
- package/dist/package/entity/reservation/reservation.do.d.ts +101 -0
- package/dist/package/entity/reservation/reservation.dto.d.ts +325 -0
- package/dist/package/entity/reservation/reservation.enum.d.ts +3 -0
- package/dist/package/entity/reservation/reservation.utils.d.ts +152 -0
- package/dist/package/entity/restaurant/restaurant.dto.d.ts +0 -5
- package/dist/package/entity/websocket/websocket.dto.d.ts +0 -12
- package/dist/style.css +1 -0
- package/package.json +3 -3
- package/src/api/reservation/index.ts +28 -0
- package/src/assets/images/not-found.png +0 -0
- package/src/locales/en-US.json +57 -3
- package/src/locales/ja-JP.json +9 -11
- package/src/locales/th-TH.json +55 -3
- package/src/locales/zh-CN.json +55 -3
- package/src/main.ts +7 -5
- package/src/modules/order-setting/kiosk/interface.ts +13 -15
- package/src/stores/order-setting/mapper.ts +41 -44
- package/src/views/kiosk/settings/KioskPaymentTypeSection.vue +1 -19
- package/src/views/kiosk/settings/KioskSettingView.vue +23 -43
- package/src/views/order-settings/OrderSettingsView.vue +7 -2
- package/src/views/order-settings/delivery/integrated-delivery/IntegratedDelivery.vue +3 -1
- package/src/views/order-settings/drive-thru/DriveThruSetting.vue +13 -28
- package/src/views/order-settings/reservation/CopySettingsSheet.vue +238 -0
- package/src/views/order-settings/reservation/CustomSelect.vue +99 -0
- package/src/views/order-settings/reservation/CustomTimePicker.vue +201 -0
- package/src/views/order-settings/reservation/ReservationSetting.vue +1246 -0
- package/src/views/order-settings/servicecharge/ServiceChargeRule.vue +5 -1
- package/tsconfig.app.json +8 -6
- package/dist/KioskSettingView-UPE-q-Zd.js +0 -573
- package/dist/OrderSettingsView-Ca4y2PNF.js +0 -51603
- package/dist/frontend/mf-order/tsconfig.app.tsbuildinfo +0 -1
|
@@ -488,7 +488,6 @@ export declare const WebSocketEventDto: z.ZodDiscriminatedUnion<"type", z.Primit
|
|
|
488
488
|
}, {
|
|
489
489
|
showAllOnly: boolean;
|
|
490
490
|
}>>>;
|
|
491
|
-
otaChannel: z.ZodNullable<z.ZodOptional<z.ZodString>>;
|
|
492
491
|
}, "strip", z.ZodTypeAny, {
|
|
493
492
|
dineIn?: {
|
|
494
493
|
requiredSlot?: boolean | null | undefined;
|
|
@@ -545,7 +544,6 @@ export declare const WebSocketEventDto: z.ZodDiscriminatedUnion<"type", z.Primit
|
|
|
545
544
|
menuItem?: {
|
|
546
545
|
showAllOnly: boolean;
|
|
547
546
|
} | null | undefined;
|
|
548
|
-
otaChannel?: string | null | undefined;
|
|
549
547
|
}, {
|
|
550
548
|
dineIn?: {
|
|
551
549
|
requiredSlot?: boolean | null | undefined;
|
|
@@ -602,7 +600,6 @@ export declare const WebSocketEventDto: z.ZodDiscriminatedUnion<"type", z.Primit
|
|
|
602
600
|
menuItem?: {
|
|
603
601
|
showAllOnly: boolean;
|
|
604
602
|
} | null | undefined;
|
|
605
|
-
otaChannel?: string | null | undefined;
|
|
606
603
|
}>>;
|
|
607
604
|
}>, "strip", z.ZodTypeAny, {
|
|
608
605
|
data: {
|
|
@@ -661,7 +658,6 @@ export declare const WebSocketEventDto: z.ZodDiscriminatedUnion<"type", z.Primit
|
|
|
661
658
|
menuItem?: {
|
|
662
659
|
showAllOnly: boolean;
|
|
663
660
|
} | null | undefined;
|
|
664
|
-
otaChannel?: string | null | undefined;
|
|
665
661
|
};
|
|
666
662
|
type: "KIOSK:UPDATE_SETTING";
|
|
667
663
|
}, {
|
|
@@ -721,7 +717,6 @@ export declare const WebSocketEventDto: z.ZodDiscriminatedUnion<"type", z.Primit
|
|
|
721
717
|
menuItem?: {
|
|
722
718
|
showAllOnly: boolean;
|
|
723
719
|
} | null | undefined;
|
|
724
|
-
otaChannel?: string | null | undefined;
|
|
725
720
|
} | undefined;
|
|
726
721
|
type: "KIOSK:UPDATE_SETTING";
|
|
727
722
|
}>>;
|
|
@@ -1179,7 +1174,6 @@ export declare const WebSocketReqDto: z.ZodObject<{
|
|
|
1179
1174
|
}, {
|
|
1180
1175
|
showAllOnly: boolean;
|
|
1181
1176
|
}>>>;
|
|
1182
|
-
otaChannel: z.ZodNullable<z.ZodOptional<z.ZodString>>;
|
|
1183
1177
|
}, "strip", z.ZodTypeAny, {
|
|
1184
1178
|
dineIn?: {
|
|
1185
1179
|
requiredSlot?: boolean | null | undefined;
|
|
@@ -1236,7 +1230,6 @@ export declare const WebSocketReqDto: z.ZodObject<{
|
|
|
1236
1230
|
menuItem?: {
|
|
1237
1231
|
showAllOnly: boolean;
|
|
1238
1232
|
} | null | undefined;
|
|
1239
|
-
otaChannel?: string | null | undefined;
|
|
1240
1233
|
}, {
|
|
1241
1234
|
dineIn?: {
|
|
1242
1235
|
requiredSlot?: boolean | null | undefined;
|
|
@@ -1293,7 +1286,6 @@ export declare const WebSocketReqDto: z.ZodObject<{
|
|
|
1293
1286
|
menuItem?: {
|
|
1294
1287
|
showAllOnly: boolean;
|
|
1295
1288
|
} | null | undefined;
|
|
1296
|
-
otaChannel?: string | null | undefined;
|
|
1297
1289
|
}>>;
|
|
1298
1290
|
}>, "strip", z.ZodTypeAny, {
|
|
1299
1291
|
data: {
|
|
@@ -1352,7 +1344,6 @@ export declare const WebSocketReqDto: z.ZodObject<{
|
|
|
1352
1344
|
menuItem?: {
|
|
1353
1345
|
showAllOnly: boolean;
|
|
1354
1346
|
} | null | undefined;
|
|
1355
|
-
otaChannel?: string | null | undefined;
|
|
1356
1347
|
};
|
|
1357
1348
|
type: "KIOSK:UPDATE_SETTING";
|
|
1358
1349
|
}, {
|
|
@@ -1412,7 +1403,6 @@ export declare const WebSocketReqDto: z.ZodObject<{
|
|
|
1412
1403
|
menuItem?: {
|
|
1413
1404
|
showAllOnly: boolean;
|
|
1414
1405
|
} | null | undefined;
|
|
1415
|
-
otaChannel?: string | null | undefined;
|
|
1416
1406
|
} | undefined;
|
|
1417
1407
|
type: "KIOSK:UPDATE_SETTING";
|
|
1418
1408
|
}>>;
|
|
@@ -1520,7 +1510,6 @@ export declare const WebSocketReqDto: z.ZodObject<{
|
|
|
1520
1510
|
menuItem?: {
|
|
1521
1511
|
showAllOnly: boolean;
|
|
1522
1512
|
} | null | undefined;
|
|
1523
|
-
otaChannel?: string | null | undefined;
|
|
1524
1513
|
};
|
|
1525
1514
|
type: "KIOSK:UPDATE_SETTING";
|
|
1526
1515
|
};
|
|
@@ -1629,7 +1618,6 @@ export declare const WebSocketReqDto: z.ZodObject<{
|
|
|
1629
1618
|
menuItem?: {
|
|
1630
1619
|
showAllOnly: boolean;
|
|
1631
1620
|
} | null | undefined;
|
|
1632
|
-
otaChannel?: string | null | undefined;
|
|
1633
1621
|
} | undefined;
|
|
1634
1622
|
type: "KIOSK:UPDATE_SETTING";
|
|
1635
1623
|
};
|
package/dist/style.css
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.scrollbar-thin[data-v-fc459980]::-webkit-scrollbar{width:6px}.scrollbar-thin[data-v-fc459980]::-webkit-scrollbar-track{background:transparent;border-radius:3px;margin:4px 0}.scrollbar-thin[data-v-fc459980]::-webkit-scrollbar-thumb{background:#d1d5db;border-radius:3px}.scrollbar-thin[data-v-fc459980]::-webkit-scrollbar-thumb:hover{background:#9ca3af}.time-picker-field[data-v-fc459980] .fm-text-field-input{border-width:2px;border-radius:.75rem;padding:12px 16px;font-size:1.125rem;transition:all .2s}.time-picker-field[data-v-fc459980] .fm-text-field-input:not(:focus):not(:focus-within){border-color:#d1d5db;background-color:#fff}.time-picker-field[data-v-fc459980] .fm-text-field-input:not(:focus):not(:focus-within):hover{border-color:#9ca3af}.time-picker-field.focused[data-v-fc459980] .fm-text-field-input,.time-picker-field[data-v-fc459980] .fm-text-field-input:focus,.time-picker-field[data-v-fc459980] .fm-text-field-input:focus-within{border-color:#f97316!important;background-color:#fff7ed!important}.fm-text-field-input[data-v-6a4bdab2]{font-size:1.125rem;line-height:1.75rem}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@feedmepos/mf-order-setting",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.52-dev.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"module": "./dist/app.js",
|
|
6
6
|
"license": "UNLICENSED",
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
"@feedmepos/menu": "^1.7.32",
|
|
31
31
|
"@feedmepos/mf-common": "1.20.0-beta.2",
|
|
32
32
|
"@feedmepos/ordering": "^0.0.3",
|
|
33
|
-
"@feedmepos/ui-library": "1.
|
|
33
|
+
"@feedmepos/ui-library": "^1.8.8",
|
|
34
34
|
"@types/googlemaps": "^3.43.3",
|
|
35
35
|
"axios": "^1.7.2",
|
|
36
36
|
"change-case": "^5.4.4",
|
|
@@ -70,4 +70,4 @@
|
|
|
70
70
|
"vite": "^5.1.4",
|
|
71
71
|
"vue-tsc": "^2.2.0"
|
|
72
72
|
}
|
|
73
|
-
}
|
|
73
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { baseClientInstance, getData } from '@/api'
|
|
2
|
+
import { FdoOrderReservationSettingsV2 } from '@entity'
|
|
3
|
+
|
|
4
|
+
// const baseClientInstance = () =>
|
|
5
|
+
// _baseClientInstance(undefined, 'portal', {
|
|
6
|
+
// url: 'http://localhost:3000/portal'
|
|
7
|
+
// })
|
|
8
|
+
|
|
9
|
+
async function getReservationSetting(restaurantId: string): Promise<FdoOrderReservationSettingsV2> {
|
|
10
|
+
const result = await baseClientInstance().get(`/reservation/restaurant/${restaurantId}/setting`)
|
|
11
|
+
return getData<FdoOrderReservationSettingsV2>(result)
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
async function updateReservationSetting(
|
|
15
|
+
restaurantId: string,
|
|
16
|
+
payload: FdoOrderReservationSettingsV2
|
|
17
|
+
): Promise<FdoOrderReservationSettingsV2> {
|
|
18
|
+
const result = await baseClientInstance().put(
|
|
19
|
+
`/reservation/restaurant/${restaurantId}/setting`,
|
|
20
|
+
payload
|
|
21
|
+
)
|
|
22
|
+
return getData<FdoOrderReservationSettingsV2>(result)
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export const ReservationApi = {
|
|
26
|
+
getReservationSetting,
|
|
27
|
+
updateReservationSetting
|
|
28
|
+
}
|
|
Binary file
|
package/src/locales/en-US.json
CHANGED
|
@@ -95,8 +95,6 @@
|
|
|
95
95
|
"deliveryZone": "Delivery Zone",
|
|
96
96
|
"deviceBinding": "Device Binding",
|
|
97
97
|
"deviceDetails": "Device Details",
|
|
98
|
-
"otaChannel": "OTA channel",
|
|
99
|
-
"otaChannelHint": "Optional. Leave blank to use the default OTA feed.",
|
|
100
98
|
"dineIn": "Dine In",
|
|
101
99
|
"dineInCanTakeaway": "Allow Takeaway",
|
|
102
100
|
"driveThru": "Drive Thru",
|
|
@@ -233,6 +231,62 @@
|
|
|
233
231
|
"current": "Current",
|
|
234
232
|
"paxMin": "Pax Min",
|
|
235
233
|
"paxMax": "Pax Max",
|
|
234
|
+
"reservation": "Reservation",
|
|
235
|
+
"reservationStatus": "Reservation Status",
|
|
236
|
+
"reservationSettings": "Reservation Settings",
|
|
237
|
+
"reservationRanges": "Reservation Ranges",
|
|
238
|
+
"reservationAvailability": "Reservation Availability",
|
|
239
|
+
"addRange": "Add Range",
|
|
240
|
+
"range": "Range",
|
|
241
|
+
"rangeName": "Range Name",
|
|
242
|
+
"priority": "Priority",
|
|
243
|
+
"priorityDescription": "Higher number = higher priority when matching slots",
|
|
244
|
+
"capacity": "Capacity",
|
|
245
|
+
"capacityDescription": "Maximum concurrent reservations for this range",
|
|
246
|
+
"minPax": "Min Pax",
|
|
247
|
+
"maxPax": "Max Pax",
|
|
248
|
+
"slotInterval": "Slot Interval",
|
|
249
|
+
"slotIntervalDescription": "Time between each available booking slot (e.g., 30 mins)",
|
|
250
|
+
"bookingDuration": "Booking Duration",
|
|
251
|
+
"bookingDurationDescription": "Duration of each reservation (e.g., 60 mins)",
|
|
252
|
+
"minLeadDays": "Min Lead Days",
|
|
253
|
+
"minLeadDaysDescription": "Minimum days in advance customers must book (0 = same day)",
|
|
254
|
+
"maxLeadDays": "Max Lead Days",
|
|
255
|
+
"maxLeadDaysDescription": "Maximum days in advance customers can book",
|
|
256
|
+
"operatingWindows": "Operating Windows",
|
|
257
|
+
"addWindow": "Add Window",
|
|
258
|
+
"startTime": "Start Time",
|
|
259
|
+
"endTime": "End Time",
|
|
260
|
+
"customPresetRemarks": "Custom Preset Remarks",
|
|
261
|
+
"addRemark": "Add Remark",
|
|
262
|
+
"noRangesConfigured": "No reservation ranges configured. Click 'Add Range' to get started.",
|
|
263
|
+
"addFirstRange": "Add your first reservation range to get started",
|
|
264
|
+
"globalSettings": "Global Settings",
|
|
265
|
+
"paxRange": "Pax Range",
|
|
266
|
+
"noOperatingHours": "No operating hours",
|
|
267
|
+
"saveAllChanges": "Save All Changes",
|
|
268
|
+
"confirmDeleteRange": "Are you sure you want to delete {name}?",
|
|
269
|
+
"settingUpdated": "Settings updated successfully",
|
|
270
|
+
"newReservationRange": "New Reservation Range",
|
|
271
|
+
"basicInformation": "Basic Information",
|
|
272
|
+
"guestRequirements": "Guest Requirements",
|
|
273
|
+
"bookingConfiguration": "Booking Configuration",
|
|
274
|
+
"rangeNamePlaceholder": "e.g., VIP Room, Main Hall",
|
|
275
|
+
"presetRemarkPlaceholder": "e.g., Window seat, Quiet area",
|
|
276
|
+
"saveRange": "Save Range",
|
|
277
|
+
"draftHoldTimeMinutes": "Draft Hold Time (Minutes)",
|
|
278
|
+
"draftHoldTimeDescription": "How long to hold a draft reservation before it expires",
|
|
279
|
+
"posCanOverbook": "POS Can Overbook",
|
|
280
|
+
"posCanOverbookDescription": "Allow POS to create reservations even when capacity is full",
|
|
281
|
+
"notificationSettings": "Notification Settings",
|
|
282
|
+
"smsEnabled": "Enable SMS Notifications",
|
|
283
|
+
"smsEnabledDescription": "Send SMS notifications to customers for reservation updates",
|
|
284
|
+
"emailEnabled": "Enable Email Notifications",
|
|
285
|
+
"emailEnabledDescription": "Send email notifications to customers for reservation updates",
|
|
286
|
+
"notifyOnConfirm": "Notify on Confirmation",
|
|
287
|
+
"notifyOnConfirmDescription": "Send notifications when a reservation is confirmed",
|
|
288
|
+
"notifyOnCancel": "Notify on Cancellation",
|
|
289
|
+
"notifyOnCancelDescription": "Send notifications when a reservation is cancelled",
|
|
236
290
|
"qrPay": "QR Pay",
|
|
237
291
|
"terminalScanPay": "Terminal Scan Pay",
|
|
238
292
|
"terminalQrPay": "Terminal QR Pay",
|
|
@@ -356,4 +410,4 @@
|
|
|
356
410
|
"voucher": "Voucher"
|
|
357
411
|
}
|
|
358
412
|
}
|
|
359
|
-
}
|
|
413
|
+
}
|
package/src/locales/ja-JP.json
CHANGED
|
@@ -91,17 +91,15 @@
|
|
|
91
91
|
"deliveryOrder": "配達注文",
|
|
92
92
|
"deliveryTerm": "配達条件",
|
|
93
93
|
"deliveryTime": "配達時間",
|
|
94
|
-
"deliveryTitle": "{company}配達",
|
|
95
|
-
"deliveryZone": "配達エリア",
|
|
96
|
-
"deviceBinding": "デバイス紐付け",
|
|
97
|
-
"deviceDetails": "デバイス詳細",
|
|
98
|
-
"
|
|
99
|
-
"
|
|
100
|
-
"
|
|
101
|
-
"
|
|
102
|
-
"
|
|
103
|
-
"driveThruSettingUpdated": "ドライブスルー設定が更新されました。",
|
|
104
|
-
"enableDriveThru": "ドライブスルーを有効にする",
|
|
94
|
+
"deliveryTitle": "{company}配達",
|
|
95
|
+
"deliveryZone": "配達エリア",
|
|
96
|
+
"deviceBinding": "デバイス紐付け",
|
|
97
|
+
"deviceDetails": "デバイス詳細",
|
|
98
|
+
"dineIn": "店内飲食",
|
|
99
|
+
"dineInCanTakeaway": "テイクアウト許可",
|
|
100
|
+
"driveThru": "ドライブスルー",
|
|
101
|
+
"driveThruSettingUpdated": "ドライブスルー設定が更新されました。",
|
|
102
|
+
"enableDriveThru": "ドライブスルーを有効にする",
|
|
105
103
|
"enableDriveThruSublabel": "お客様向けのドライブスルー注文を有効にする",
|
|
106
104
|
"dineInType": "店内飲食タイプ",
|
|
107
105
|
"discountCampaign": "割引キャンペーン",
|
package/src/locales/th-TH.json
CHANGED
|
@@ -95,8 +95,6 @@
|
|
|
95
95
|
"deliveryZone": "โซนการจัดส่ง",
|
|
96
96
|
"deviceBinding": "การผูกอุปกรณ์",
|
|
97
97
|
"deviceDetails": "รายละเอียดอุปกรณ์",
|
|
98
|
-
"otaChannel": "ช่อง OTA",
|
|
99
|
-
"otaChannelHint": "ไม่บังคับ เว้นว่างเพื่อใช้ฟีด OTA เริ่มต้น",
|
|
100
98
|
"dineIn": "รับประทานอาหารที่ร้าน",
|
|
101
99
|
"dineInCanTakeaway": "อนุญาตให้นำกลับบ้าน",
|
|
102
100
|
"driveThru": "ไดรฟ์ทรู",
|
|
@@ -230,6 +228,60 @@
|
|
|
230
228
|
"current": "ปัจจุบัน",
|
|
231
229
|
"paxMin": "จำนวนผู้โดยสารขั้นต่ำ",
|
|
232
230
|
"paxMax": "จำนวนผู้โดยสารสูงสุด",
|
|
231
|
+
"reservation": "การจอง",
|
|
232
|
+
"reservationSettings": "การตั้งค่าการจอง",
|
|
233
|
+
"reservationRanges": "ช่วงการจอง",
|
|
234
|
+
"addRange": "เพิ่มช่วง",
|
|
235
|
+
"range": "ช่วง",
|
|
236
|
+
"rangeName": "ชื่อช่วง",
|
|
237
|
+
"priority": "ลำดับความสำคัญ",
|
|
238
|
+
"priorityDescription": "ตัวเลขที่สูงกว่า = ลำดับความสำคัญสูงกว่าเมื่อจับคู่ช่วงเวลา",
|
|
239
|
+
"capacity": "ความจุ",
|
|
240
|
+
"capacityDescription": "จำนวนการจองพร้อมกันสูงสุดสำหรับช่วงนี้",
|
|
241
|
+
"minPax": "จำนวนผู้โดยสารขั้นต่ำ",
|
|
242
|
+
"maxPax": "จำนวนผู้โดยสารสูงสุด",
|
|
243
|
+
"slotInterval": "ช่วงเวลา",
|
|
244
|
+
"slotIntervalDescription": "เวลาระหว่างช่วงการจองที่ว่าง (เช่น 30 นาที)",
|
|
245
|
+
"bookingDuration": "ระยะเวลาการจอง",
|
|
246
|
+
"bookingDurationDescription": "ระยะเวลาของการจองแต่ละครั้ง (เช่น 60 นาที)",
|
|
247
|
+
"minLeadDays": "จำนวนวันล่วงหน้าขั้นต่ำ",
|
|
248
|
+
"minLeadDaysDescription": "จำนวนวันขั้นต่ำที่ลูกค้าต้องจองล่วงหน้า (0 = วันเดียวกัน)",
|
|
249
|
+
"maxLeadDays": "จำนวนวันล่วงหน้าสูงสุด",
|
|
250
|
+
"maxLeadDaysDescription": "จำนวนวันสูงสุดที่ลูกค้าสามารถจองล่วงหน้าได้",
|
|
251
|
+
"operatingWindows": "ช่วงเวลาทำการ",
|
|
252
|
+
"addWindow": "เพิ่มช่วงเวลา",
|
|
253
|
+
"startTime": "เวลาเริ่มต้น",
|
|
254
|
+
"endTime": "เวลาสิ้นสุด",
|
|
255
|
+
"customPresetRemarks": "หมายเหตุที่กำหนดไว้ล่วงหน้า",
|
|
256
|
+
"addRemark": "เพิ่มหมายเหตุ",
|
|
257
|
+
"noRangesConfigured": "ยังไม่มีการกำหนดช่วงการจอง คลิก 'เพิ่มช่วง' เพื่อเริ่มต้น",
|
|
258
|
+
"addFirstRange": "เพิ่มช่วงการจองแรกของคุณเพื่อเริ่มต้น",
|
|
259
|
+
"globalSettings": "การตั้งค่าทั่วไป",
|
|
260
|
+
"paxRange": "ช่วงจำนวนผู้โดยสาร",
|
|
261
|
+
"noOperatingHours": "ไม่มีเวลาทำการ",
|
|
262
|
+
"saveAllChanges": "บันทึกการเปลี่ยนแปลงทั้งหมด",
|
|
263
|
+
"confirmDeleteRange": "คุณแน่ใจหรือไม่ว่าต้องการลบ {name}?",
|
|
264
|
+
"settingUpdated": "อัปเดตการตั้งค่าสำเร็จ",
|
|
265
|
+
"newReservationRange": "ช่วงการจองใหม่",
|
|
266
|
+
"basicInformation": "ข้อมูลพื้นฐาน",
|
|
267
|
+
"guestRequirements": "ความต้องการของแขก",
|
|
268
|
+
"bookingConfiguration": "การกำหนดค่าการจอง",
|
|
269
|
+
"rangeNamePlaceholder": "เช่น ห้อง VIP, ห้องโถง",
|
|
270
|
+
"presetRemarkPlaceholder": "เช่น ที่นั่งริมหน้าต่าง, พื้นที่เงียบ",
|
|
271
|
+
"saveRange": "บันทึกช่วง",
|
|
272
|
+
"draftHoldTimeMinutes": "เวลาเก็บร่าง (นาที)",
|
|
273
|
+
"draftHoldTimeDescription": "ระยะเวลาในการเก็บการจองแบบร่างก่อนที่จะหมดอายุ",
|
|
274
|
+
"posCanOverbook": "POS สามารถจองเกินได้",
|
|
275
|
+
"posCanOverbookDescription": "อนุญาตให้ POS สร้างการจองแม้ว่าความจุเต็มแล้ว",
|
|
276
|
+
"notificationSettings": "การตั้งค่าการแจ้งเตือน",
|
|
277
|
+
"smsEnabled": "เปิดใช้งานการแจ้งเตือนผ่าน SMS",
|
|
278
|
+
"smsEnabledDescription": "ส่งการแจ้งเตือนผ่าน SMS ให้กับลูกค้าสำหรับการอัพเดทการจอง",
|
|
279
|
+
"emailEnabled": "เปิดใช้งานการแจ้งเตือนผ่านอีเมล",
|
|
280
|
+
"emailEnabledDescription": "ส่งการแจ้งเตือนผ่านอีเมลให้กับลูกค้าสำหรับการอัพเดทการจอง",
|
|
281
|
+
"notifyOnConfirm": "แจ้งเตือนเมื่อยืนยัน",
|
|
282
|
+
"notifyOnConfirmDescription": "ส่งการแจ้งเตือนเมื่อการจองได้รับการยืนยัน",
|
|
283
|
+
"notifyOnCancel": "แจ้งเตือนเมื่อยกเลิก",
|
|
284
|
+
"notifyOnCancelDescription": "ส่งการแจ้งเตือนเมื่อการจองถูกยกเลิก",
|
|
233
285
|
"qrPay": "ชำระเงินด้วย QR",
|
|
234
286
|
"terminalScanPay": "ชำระเงินด้วยการสแกนเทอร์มินัล",
|
|
235
287
|
"terminalQrPay": "ชำระเงินด้วย QR เทอร์มินัล",
|
|
@@ -351,4 +403,4 @@
|
|
|
351
403
|
"voucher": "บัตรกำนัล"
|
|
352
404
|
}
|
|
353
405
|
}
|
|
354
|
-
}
|
|
406
|
+
}
|
package/src/locales/zh-CN.json
CHANGED
|
@@ -96,8 +96,6 @@
|
|
|
96
96
|
"deliveryZone": "配送区域",
|
|
97
97
|
"deviceBinding": "设备绑定",
|
|
98
98
|
"deviceDetails": "设备详情",
|
|
99
|
-
"otaChannel": "OTA 渠道",
|
|
100
|
-
"otaChannelHint": "可选。留空将使用默认的 OTA 源。",
|
|
101
99
|
"dineIn": "堂食",
|
|
102
100
|
"dineInCanTakeaway": "允许外带",
|
|
103
101
|
"driveThru": "得来速",
|
|
@@ -234,6 +232,60 @@
|
|
|
234
232
|
"current": "当前",
|
|
235
233
|
"paxMin": "最少人数",
|
|
236
234
|
"paxMax": "最多人数",
|
|
235
|
+
"reservation": "预订",
|
|
236
|
+
"reservationSettings": "预订设置",
|
|
237
|
+
"reservationRanges": "预订范围",
|
|
238
|
+
"addRange": "添加范围",
|
|
239
|
+
"range": "范围",
|
|
240
|
+
"rangeName": "范围名称",
|
|
241
|
+
"priority": "优先级",
|
|
242
|
+
"priorityDescription": "数字越大,匹配时段时优先级越高",
|
|
243
|
+
"capacity": "容量",
|
|
244
|
+
"capacityDescription": "此范围的最大并发预订数",
|
|
245
|
+
"minPax": "最少人数",
|
|
246
|
+
"maxPax": "最多人数",
|
|
247
|
+
"slotInterval": "时段间隔",
|
|
248
|
+
"slotIntervalDescription": "每个可预订时段之间的时间(例如30分钟)",
|
|
249
|
+
"bookingDuration": "预订时长",
|
|
250
|
+
"bookingDurationDescription": "每次预订的持续时间(例如60分钟)",
|
|
251
|
+
"minLeadDays": "最少提前天数",
|
|
252
|
+
"minLeadDaysDescription": "顾客必须提前预订的最少天数(0 = 当天)",
|
|
253
|
+
"maxLeadDays": "最多提前天数",
|
|
254
|
+
"maxLeadDaysDescription": "顾客可以提前预订的最多天数",
|
|
255
|
+
"operatingWindows": "营业时段",
|
|
256
|
+
"addWindow": "添加时段",
|
|
257
|
+
"startTime": "开始时间",
|
|
258
|
+
"endTime": "结束时间",
|
|
259
|
+
"customPresetRemarks": "自定义预设备注",
|
|
260
|
+
"addRemark": "添加备注",
|
|
261
|
+
"noRangesConfigured": "未配置预订范围。点击\"添加范围\"开始",
|
|
262
|
+
"addFirstRange": "添加您的第一个预订范围以开始",
|
|
263
|
+
"globalSettings": "全局设置",
|
|
264
|
+
"paxRange": "人数范围",
|
|
265
|
+
"noOperatingHours": "无营业时间",
|
|
266
|
+
"saveAllChanges": "保存所有更改",
|
|
267
|
+
"confirmDeleteRange": "您确定要删除{name}吗?",
|
|
268
|
+
"settingUpdated": "设置已成功更新",
|
|
269
|
+
"newReservationRange": "新预订范围",
|
|
270
|
+
"basicInformation": "基本信息",
|
|
271
|
+
"guestRequirements": "客人要求",
|
|
272
|
+
"bookingConfiguration": "预订配置",
|
|
273
|
+
"rangeNamePlaceholder": "例如:VIP包厢、大厅",
|
|
274
|
+
"presetRemarkPlaceholder": "例如:靠窗座位、安静区域",
|
|
275
|
+
"saveRange": "保存范围",
|
|
276
|
+
"draftHoldTimeMinutes": "草稿保留时间(分钟)",
|
|
277
|
+
"draftHoldTimeDescription": "在草稿预订过期前保留的时间",
|
|
278
|
+
"posCanOverbook": "POS可以超额预订",
|
|
279
|
+
"posCanOverbookDescription": "允许POS在容量已满时创建预订",
|
|
280
|
+
"notificationSettings": "通知设置",
|
|
281
|
+
"smsEnabled": "启用短信通知",
|
|
282
|
+
"smsEnabledDescription": "向客户发送预订更新的短信通知",
|
|
283
|
+
"emailEnabled": "启用电子邮件通知",
|
|
284
|
+
"emailEnabledDescription": "向客户发送预订更新的电子邮件通知",
|
|
285
|
+
"notifyOnConfirm": "确认时通知",
|
|
286
|
+
"notifyOnConfirmDescription": "当预订被确认时发送通知",
|
|
287
|
+
"notifyOnCancel": "取消时通知",
|
|
288
|
+
"notifyOnCancelDescription": "当预订被取消时发送通知",
|
|
237
289
|
"qrPay": "二维码支付",
|
|
238
290
|
"terminalScanPay": "终端扫描支付",
|
|
239
291
|
"terminalQrPay": "终端二维码支付",
|
|
@@ -359,4 +411,4 @@
|
|
|
359
411
|
"voucher": "代金券"
|
|
360
412
|
}
|
|
361
413
|
}
|
|
362
|
-
}
|
|
414
|
+
}
|
package/src/main.ts
CHANGED
|
@@ -16,6 +16,8 @@ import zhCN from "./locales/zh-CN.json"
|
|
|
16
16
|
import thTH from "./locales/th-TH.json"
|
|
17
17
|
import jaJP from "./locales/ja-JP.json"
|
|
18
18
|
|
|
19
|
+
import { setEnabledLocales } from "@feedmepos/mf-common"
|
|
20
|
+
|
|
19
21
|
export const i18nMessages = {
|
|
20
22
|
"en-US": enUS,
|
|
21
23
|
"zh-CN": zhCN,
|
|
@@ -34,15 +36,15 @@ function initI18n(): I18n {
|
|
|
34
36
|
|
|
35
37
|
const app = createApp(Entry)
|
|
36
38
|
|
|
39
|
+
app.use(initI18n())
|
|
40
|
+
app.use(createPinia())
|
|
41
|
+
app.use(router)
|
|
42
|
+
|
|
43
|
+
|
|
37
44
|
app.use(FeedMeUI, {
|
|
38
45
|
locale: detectLocale(),
|
|
39
46
|
})
|
|
40
47
|
|
|
41
|
-
app.use(createPinia() as any)
|
|
42
|
-
app.use(router)
|
|
43
|
-
app.use(initI18n() as any)
|
|
44
|
-
|
|
45
|
-
|
|
46
48
|
const CoreStore = useCoreStore();
|
|
47
49
|
const iframeMode = computed(() => {
|
|
48
50
|
return new URLSearchParams(window.location.search).get('iframe') === 'true';
|
|
@@ -75,25 +75,23 @@ export type KioskPaymentTypesForm = MfKioskPaymentTypes;
|
|
|
75
75
|
|
|
76
76
|
export type KioskPaymentSettingForm = MfKioskPaymentSetting;
|
|
77
77
|
|
|
78
|
-
export interface MfKioskOrderSetting {
|
|
79
|
-
dineIn: MfKioskDineInSetting,
|
|
80
|
-
takeaway: MfKioskTakeawaySetting,
|
|
81
|
-
paymentSetting: MfKioskPaymentSetting,
|
|
82
|
-
menuItem: MfKioskOrderSettingMenuItemForm,
|
|
83
|
-
|
|
84
|
-
}
|
|
78
|
+
export interface MfKioskOrderSetting {
|
|
79
|
+
dineIn: MfKioskDineInSetting,
|
|
80
|
+
takeaway: MfKioskTakeawaySetting,
|
|
81
|
+
paymentSetting: MfKioskPaymentSetting,
|
|
82
|
+
menuItem: MfKioskOrderSettingMenuItemForm,
|
|
83
|
+
}
|
|
85
84
|
|
|
86
85
|
export interface MfKioskOrderSettingMenuItemForm {
|
|
87
86
|
showAllOnly: boolean,
|
|
88
87
|
}
|
|
89
88
|
|
|
90
|
-
export interface MfKioskOrderSettingForm {
|
|
91
|
-
dineIn: KioskDineInSettingForm,
|
|
92
|
-
takeaway: KioskTakeawaySettingForm,
|
|
93
|
-
paymentSetting: KioskPaymentSettingForm,
|
|
94
|
-
menuItem: KioskMenuItemSettingForm,
|
|
95
|
-
|
|
96
|
-
}
|
|
89
|
+
export interface MfKioskOrderSettingForm {
|
|
90
|
+
dineIn: KioskDineInSettingForm,
|
|
91
|
+
takeaway: KioskTakeawaySettingForm,
|
|
92
|
+
paymentSetting: KioskPaymentSettingForm,
|
|
93
|
+
menuItem: KioskMenuItemSettingForm,
|
|
94
|
+
}
|
|
97
95
|
|
|
98
96
|
export type KioskPickAtCounterSettingForm = MfKioskPickAtCounterSetting;
|
|
99
97
|
export type KioskMenuItemSettingForm = MfKioskOrderSettingMenuItemForm;
|
|
@@ -102,4 +100,4 @@ export interface KioskDineInSettingForm {
|
|
|
102
100
|
sequenceNumber: MfKioskSequenceNumberSetting,
|
|
103
101
|
displayStand: DisplayStandSettingForm,
|
|
104
102
|
pickUp: KioskPickAtCounterSettingForm,
|
|
105
|
-
}
|
|
103
|
+
}
|
|
@@ -77,8 +77,7 @@ export const defaultKioskOrderSetting: MfKioskOrderSettingForm = {
|
|
|
77
77
|
},
|
|
78
78
|
menuItem: {
|
|
79
79
|
showAllOnly: false
|
|
80
|
-
}
|
|
81
|
-
otaChannel: ''
|
|
80
|
+
}
|
|
82
81
|
}
|
|
83
82
|
|
|
84
83
|
export const defaultSubmitOrderInstruction: MfKioskSubmitOrderInstruction = {
|
|
@@ -108,10 +107,10 @@ const toKiosk = (
|
|
|
108
107
|
enabled: kioskOrderSettings?.canTakeaway ?? false,
|
|
109
108
|
submitOrderInstruction: kioskOrderSettings?.takeaway?.submitOrderInstruction
|
|
110
109
|
? {
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
110
|
+
payAtCounter:
|
|
111
|
+
kioskOrderSettings?.takeaway?.submitOrderInstruction?.payAtCounter?.['en'] ?? null,
|
|
112
|
+
paid: kioskOrderSettings?.takeaway?.submitOrderInstruction?.paid?.['en'] ?? null
|
|
113
|
+
}
|
|
115
114
|
: defaultSubmitOrderInstruction
|
|
116
115
|
},
|
|
117
116
|
paymentSetting: {
|
|
@@ -132,8 +131,7 @@ const toKiosk = (
|
|
|
132
131
|
},
|
|
133
132
|
menuItem: {
|
|
134
133
|
showAllOnly: kioskOrderSettings?.menuItem?.showAllOnly ?? false
|
|
135
|
-
}
|
|
136
|
-
otaChannel: kioskOrderSettings?.otaChannel ?? ''
|
|
134
|
+
}
|
|
137
135
|
}
|
|
138
136
|
}
|
|
139
137
|
|
|
@@ -146,35 +144,35 @@ const toKioskDineInSetting = (
|
|
|
146
144
|
sequenceNumber: kioskDineInSeq,
|
|
147
145
|
pickUp: kioskDineInSetting?.pickUp
|
|
148
146
|
? {
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
147
|
+
...kioskDineInSetting.pickUp,
|
|
148
|
+
submitOrderInstruction: kioskDineInSetting.pickUp.submitOrderInstruction
|
|
149
|
+
? {
|
|
150
|
+
payAtCounter:
|
|
151
|
+
kioskDineInSetting.pickUp.submitOrderInstruction?.payAtCounter?.['en'] ?? null,
|
|
152
|
+
paid: kioskDineInSetting.pickUp.submitOrderInstruction?.paid?.['en'] ?? null
|
|
153
|
+
}
|
|
154
|
+
: defaultSubmitOrderInstruction,
|
|
155
|
+
enablePaxDialog: kioskDineInSetting.pickUp.enablePaxDialog
|
|
156
|
+
? kioskDineInSetting.pickUp.enablePaxDialog
|
|
157
|
+
: false
|
|
158
|
+
}
|
|
161
159
|
: defaultPickUp,
|
|
162
160
|
displayStand: kioskDineInSetting?.displayStand
|
|
163
161
|
? {
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
162
|
+
enabled: kioskDineInSetting.displayStand.enabled,
|
|
163
|
+
standSlotRange: kioskDineInSetting.displayStand.standSlotRange,
|
|
164
|
+
prefix: kioskDineInSetting.displayStand.prefix,
|
|
165
|
+
padDigit: kioskDineInSetting.displayStand.padDigit,
|
|
166
|
+
enablePaxDialog: kioskDineInSetting.displayStand.enablePaxDialog ?? false,
|
|
167
|
+
submitOrderInstruction: kioskDineInSetting.displayStand.submitOrderInstruction
|
|
168
|
+
? {
|
|
169
|
+
payAtCounter:
|
|
170
|
+
kioskDineInSetting.displayStand.submitOrderInstruction?.payAtCounter?.['en'] ??
|
|
171
|
+
null,
|
|
172
|
+
paid: kioskDineInSetting.displayStand.submitOrderInstruction?.paid?.['en'] ?? null
|
|
173
|
+
}
|
|
174
|
+
: defaultSubmitOrderInstruction
|
|
175
|
+
}
|
|
178
176
|
: defaultDisplayStand
|
|
179
177
|
}
|
|
180
178
|
}
|
|
@@ -191,13 +189,13 @@ const toOrderKioskSettingsDto = (
|
|
|
191
189
|
submitOrderInstruction: {
|
|
192
190
|
payAtCounter: dineInSetting.displayStand.submitOrderInstruction?.payAtCounter
|
|
193
191
|
? {
|
|
194
|
-
|
|
195
|
-
|
|
192
|
+
en: dineInSetting.displayStand.submitOrderInstruction.payAtCounter
|
|
193
|
+
}
|
|
196
194
|
: null,
|
|
197
195
|
paid: dineInSetting.displayStand.submitOrderInstruction?.paid
|
|
198
196
|
? {
|
|
199
|
-
|
|
200
|
-
|
|
197
|
+
en: dineInSetting.displayStand.submitOrderInstruction.paid
|
|
198
|
+
}
|
|
201
199
|
: null
|
|
202
200
|
}
|
|
203
201
|
},
|
|
@@ -206,13 +204,13 @@ const toOrderKioskSettingsDto = (
|
|
|
206
204
|
submitOrderInstruction: {
|
|
207
205
|
payAtCounter: dineInSetting.pickUp.submitOrderInstruction?.payAtCounter
|
|
208
206
|
? {
|
|
209
|
-
|
|
210
|
-
|
|
207
|
+
en: dineInSetting.pickUp.submitOrderInstruction.payAtCounter
|
|
208
|
+
}
|
|
211
209
|
: null,
|
|
212
210
|
paid: dineInSetting.pickUp.submitOrderInstruction?.paid
|
|
213
211
|
? {
|
|
214
|
-
|
|
215
|
-
|
|
212
|
+
en: dineInSetting.pickUp.submitOrderInstruction.paid
|
|
213
|
+
}
|
|
216
214
|
: null
|
|
217
215
|
}
|
|
218
216
|
}
|
|
@@ -223,7 +221,6 @@ const toOrderKioskSettingsDto = (
|
|
|
223
221
|
dineIn,
|
|
224
222
|
menuItem: kioskSetting.menuItem,
|
|
225
223
|
paymentSetting: createPaymentSettings(kioskSetting.paymentSetting),
|
|
226
|
-
otaChannel: kioskSetting.otaChannel || undefined,
|
|
227
224
|
takeaway: kioskSetting.takeaway.submitOrderInstruction
|
|
228
225
|
? {
|
|
229
226
|
submitOrderInstruction: {
|
|
@@ -237,8 +234,8 @@ const toOrderKioskSettingsDto = (
|
|
|
237
234
|
en: kioskSetting.takeaway.submitOrderInstruction.paid
|
|
238
235
|
}
|
|
239
236
|
: null
|
|
237
|
+
}
|
|
240
238
|
}
|
|
241
|
-
}
|
|
242
239
|
: undefined
|
|
243
240
|
})
|
|
244
241
|
|