@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.
Files changed (67) hide show
  1. package/.tsbuildinfo +1 -0
  2. package/dist/{KioskDevicesView-TIls1ag1.js → KioskDevicesView-Vy9FLX1n.js} +1 -1
  3. package/dist/{KioskDevicesView.vue_vue_type_script_setup_true_lang-B2gjPfOJ.js → KioskDevicesView.vue_vue_type_script_setup_true_lang-DhZPOEEQ.js} +2 -2
  4. package/dist/KioskSettingView-cE-JdCBB.js +551 -0
  5. package/dist/{KioskView-B0Jj2sOl.js → KioskView-BYs5bem0.js} +108 -111
  6. package/dist/OrderSettingsView-C4aEpC1j.js +56063 -0
  7. package/dist/{app-JqOEacuf.js → app-CwYXsqxX.js} +182 -26
  8. package/dist/app.js +1 -1
  9. package/dist/{dayjs.min-B42nUieJ.js → dayjs.min-JEYIJz2D.js} +1 -1
  10. package/dist/frontend/mf-order/src/api/reservation/index.d.ts +8 -0
  11. package/dist/frontend/mf-order/src/app.d.ts +164 -8
  12. package/dist/frontend/mf-order/src/main.d.ts +164 -8
  13. package/dist/frontend/mf-order/src/modules/order-setting/kiosk/interface.d.ts +0 -2
  14. package/dist/frontend/mf-order/src/stores/order-setting/index.d.ts +0 -6
  15. package/dist/frontend/mf-order/src/stores/restaurant/index.d.ts +3 -3
  16. package/dist/frontend/mf-order/src/views/all-orders/ReflowOrder.vue.d.ts +2 -2
  17. package/dist/frontend/mf-order/src/views/order-settings/delivery/inhouse/InHouseDelivery.vue.d.ts +2 -2
  18. package/dist/frontend/mf-order/src/views/order-settings/reservation/CopySettingsSheet.vue.d.ts +186 -0
  19. package/dist/frontend/mf-order/src/views/order-settings/reservation/CustomSelect.vue.d.ts +15 -0
  20. package/dist/frontend/mf-order/src/views/order-settings/reservation/CustomTimePicker.vue.d.ts +10 -0
  21. package/dist/frontend/mf-order/src/views/order-settings/reservation/ReservationSetting.vue.d.ts +2 -0
  22. package/dist/{index-B0teNm7_.js → index-DZCjODMx.js} +2 -2
  23. package/dist/{menu.dto-DFTxveX1.js → menu.dto-D9CDVLiP.js} +22865 -20037
  24. package/dist/package/entity/food-court/order.do.d.ts +47 -2
  25. package/dist/package/entity/food-court/order.dto.d.ts +0 -3
  26. package/dist/package/entity/incoming-order/incoming-order-to-bill.dto.d.ts +12341 -1
  27. package/dist/package/entity/incoming-order/incoming-order.do.d.ts +3 -22266
  28. package/dist/package/entity/index.d.ts +5 -0
  29. package/dist/package/entity/kiosk/marketing/marketing.dto.d.ts +1 -19864
  30. package/dist/package/entity/order/order-item/order-item.dto.d.ts +1 -3721
  31. package/dist/package/entity/order-setting/kiosk/kiosk.do.d.ts +0 -3
  32. package/dist/package/entity/order-setting/kiosk/kiosk.dto.d.ts +0 -3
  33. package/dist/package/entity/order-setting/order-setting.do.d.ts +861 -5
  34. package/dist/package/entity/order-setting/order-setting.dto.d.ts +0 -10
  35. package/dist/package/entity/order-setting/reservationV2/reservation.do.d.ts +1269 -0
  36. package/dist/package/entity/queue/queue.do.d.ts +1 -11
  37. package/dist/package/entity/reservation/reservation.do.d.ts +101 -0
  38. package/dist/package/entity/reservation/reservation.dto.d.ts +325 -0
  39. package/dist/package/entity/reservation/reservation.enum.d.ts +3 -0
  40. package/dist/package/entity/reservation/reservation.utils.d.ts +152 -0
  41. package/dist/package/entity/restaurant/restaurant.dto.d.ts +0 -5
  42. package/dist/package/entity/websocket/websocket.dto.d.ts +0 -12
  43. package/dist/style.css +1 -0
  44. package/package.json +3 -3
  45. package/src/api/reservation/index.ts +28 -0
  46. package/src/assets/images/not-found.png +0 -0
  47. package/src/locales/en-US.json +57 -3
  48. package/src/locales/ja-JP.json +9 -11
  49. package/src/locales/th-TH.json +55 -3
  50. package/src/locales/zh-CN.json +55 -3
  51. package/src/main.ts +7 -5
  52. package/src/modules/order-setting/kiosk/interface.ts +13 -15
  53. package/src/stores/order-setting/mapper.ts +41 -44
  54. package/src/views/kiosk/settings/KioskPaymentTypeSection.vue +1 -19
  55. package/src/views/kiosk/settings/KioskSettingView.vue +23 -43
  56. package/src/views/order-settings/OrderSettingsView.vue +7 -2
  57. package/src/views/order-settings/delivery/integrated-delivery/IntegratedDelivery.vue +3 -1
  58. package/src/views/order-settings/drive-thru/DriveThruSetting.vue +13 -28
  59. package/src/views/order-settings/reservation/CopySettingsSheet.vue +238 -0
  60. package/src/views/order-settings/reservation/CustomSelect.vue +99 -0
  61. package/src/views/order-settings/reservation/CustomTimePicker.vue +201 -0
  62. package/src/views/order-settings/reservation/ReservationSetting.vue +1246 -0
  63. package/src/views/order-settings/servicecharge/ServiceChargeRule.vue +5 -1
  64. package/tsconfig.app.json +8 -6
  65. package/dist/KioskSettingView-UPE-q-Zd.js +0 -573
  66. package/dist/OrderSettingsView-Ca4y2PNF.js +0 -51603
  67. 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.51",
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.5.2-beta.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
@@ -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
+ }
@@ -91,17 +91,15 @@
91
91
  "deliveryOrder": "配達注文",
92
92
  "deliveryTerm": "配達条件",
93
93
  "deliveryTime": "配達時間",
94
- "deliveryTitle": "{company}配達",
95
- "deliveryZone": "配達エリア",
96
- "deviceBinding": "デバイス紐付け",
97
- "deviceDetails": "デバイス詳細",
98
- "otaChannel": "OTAチャネル",
99
- "otaChannelHint": "任意。空欄の場合はデフォルトのOTAフィードを使用します。",
100
- "dineIn": "店内飲食",
101
- "dineInCanTakeaway": "テイクアウト許可",
102
- "driveThru": "ドライブスルー",
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": "割引キャンペーン",
@@ -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
+ }
@@ -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
- otaChannel?: string | null,
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
- otaChannel?: string | null,
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
- payAtCounter:
112
- kioskOrderSettings?.takeaway?.submitOrderInstruction?.payAtCounter?.['en'] ?? null,
113
- paid: kioskOrderSettings?.takeaway?.submitOrderInstruction?.paid?.['en'] ?? null
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
- ...kioskDineInSetting.pickUp,
150
- submitOrderInstruction: kioskDineInSetting.pickUp.submitOrderInstruction
151
- ? {
152
- payAtCounter:
153
- kioskDineInSetting.pickUp.submitOrderInstruction?.payAtCounter?.['en'] ?? null,
154
- paid: kioskDineInSetting.pickUp.submitOrderInstruction?.paid?.['en'] ?? null
155
- }
156
- : defaultSubmitOrderInstruction,
157
- enablePaxDialog: kioskDineInSetting.pickUp.enablePaxDialog
158
- ? kioskDineInSetting.pickUp.enablePaxDialog
159
- : false
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
- enabled: kioskDineInSetting.displayStand.enabled,
165
- standSlotRange: kioskDineInSetting.displayStand.standSlotRange,
166
- prefix: kioskDineInSetting.displayStand.prefix,
167
- padDigit: kioskDineInSetting.displayStand.padDigit,
168
- enablePaxDialog: kioskDineInSetting.displayStand.enablePaxDialog ?? false,
169
- submitOrderInstruction: kioskDineInSetting.displayStand.submitOrderInstruction
170
- ? {
171
- payAtCounter:
172
- kioskDineInSetting.displayStand.submitOrderInstruction?.payAtCounter?.['en'] ??
173
- null,
174
- paid: kioskDineInSetting.displayStand.submitOrderInstruction?.paid?.['en'] ?? null
175
- }
176
- : defaultSubmitOrderInstruction
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
- en: dineInSetting.displayStand.submitOrderInstruction.payAtCounter
195
- }
192
+ en: dineInSetting.displayStand.submitOrderInstruction.payAtCounter
193
+ }
196
194
  : null,
197
195
  paid: dineInSetting.displayStand.submitOrderInstruction?.paid
198
196
  ? {
199
- en: dineInSetting.displayStand.submitOrderInstruction.paid
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
- en: dineInSetting.pickUp.submitOrderInstruction.payAtCounter
210
- }
207
+ en: dineInSetting.pickUp.submitOrderInstruction.payAtCounter
208
+ }
211
209
  : null,
212
210
  paid: dineInSetting.pickUp.submitOrderInstruction?.paid
213
211
  ? {
214
- en: dineInSetting.pickUp.submitOrderInstruction.paid
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