@feedmepos/mf-order-setting 0.0.22 → 0.0.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/dist/{KioskDevicesView-C6YmdLKc.js → KioskDevicesView-BdJCcotz.js} +1 -1
  2. package/dist/{KioskDevicesView.vue_vue_type_script_setup_true_lang-DiLHpWbm.js → KioskDevicesView.vue_vue_type_script_setup_true_lang-DUPfN7ti.js} +2 -2
  3. package/dist/KioskSettingView-BChhriPk.js +782 -0
  4. package/dist/KioskView-DPU-oQ1H.js +426 -0
  5. package/dist/{OrderSettingsView-D_bGK-3J.js → OrderSettingsView-BOiflwB_.js} +14 -11
  6. package/dist/{app-C5qwExhL.js → app-CaYWSLe1.js} +17 -13
  7. package/dist/app.js +1 -1
  8. package/dist/{dayjs.min-kEC9G7bx.js → dayjs.min-8NyoNely.js} +1 -1
  9. package/dist/frontend/mf-order/src/app.d.ts +4 -0
  10. package/dist/frontend/mf-order/src/modules/order-setting/kiosk/interface.d.ts +13 -0
  11. package/dist/frontend/mf-order/src/stores/order-setting/index.d.ts +168 -12
  12. package/dist/frontend/mf-order/src/stores/order-setting/mapper.d.ts +2 -1
  13. package/dist/frontend/mf-order/src/views/kiosk/settings/KioskInstructionSection.vue.d.ts +15 -0
  14. package/dist/frontend/mf-order/src/views/kiosk/settings/KioskPickAtCounterSection.vue.d.ts +4 -3
  15. package/dist/frontend/mf-order/tsconfig.app.tsbuildinfo +1 -1
  16. package/dist/{index-C_53CwBa.js → index-B7GFhkAE.js} +2 -2
  17. package/dist/package/entity/order-platform/foodpanda/foodpanda-order.do.d.ts +16 -16
  18. package/dist/package/entity/order-platform/foodpanda/foodpanda-order.dto.d.ts +6 -6
  19. package/dist/package/entity/order-setting/kiosk/kiosk.do.d.ts +115 -0
  20. package/dist/package/entity/order-setting/kiosk/kiosk.dto.d.ts +225 -0
  21. package/dist/package/entity/order-setting/kiosk/kiosk.enum.d.ts +3 -0
  22. package/dist/package/entity/order-setting/order-setting.do.d.ts +138 -8
  23. package/dist/package/entity/order-setting/order-setting.dto.d.ts +276 -16
  24. package/dist/package/entity/order-setting/sequence/sequence.do.d.ts +4 -4
  25. package/dist/package/entity/order-setting/sequence/sequence.dto.d.ts +4 -4
  26. package/dist/package/entity/payment/payment.enum.d.ts +2 -0
  27. package/dist/package/entity/restaurant/restaurant.dto.d.ts +136 -6
  28. package/dist/package/entity/websocket/websocket.dto.d.ts +288 -0
  29. package/dist/{queue.do-Vog69wnQ.js → queue.do-CIyIpp22.js} +4536 -4517
  30. package/package.json +1 -1
  31. package/src/locales/en-US.json +3 -2
  32. package/src/locales/zh-CN.json +2 -0
  33. package/src/modules/order-setting/kiosk/interface.ts +16 -0
  34. package/src/stores/order-setting/mapper.ts +58 -7
  35. package/src/views/kiosk/settings/KioskDineInSection.vue +4 -5
  36. package/src/views/kiosk/settings/KioskDisplayStandSection.vue +36 -0
  37. package/src/views/kiosk/settings/KioskInstructionSection.vue +40 -0
  38. package/src/views/kiosk/settings/KioskPaymentTypeSection.vue +30 -19
  39. package/src/views/kiosk/settings/KioskPickAtCounterSection.vue +45 -7
  40. package/src/views/kiosk/settings/KioskSettingView.vue +15 -3
  41. package/src/views/kiosk/settings/KioskTakeawaySection.vue +38 -4
  42. package/src/views/order-settings/servicecharge/ServiceChargeRule.vue +3 -8
  43. package/dist/KioskSettingView-D-muNxlb.js +0 -649
  44. package/dist/KioskView-kcjjk4fF.js +0 -371
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@feedmepos/mf-order-setting",
3
- "version": "0.0.22",
3
+ "version": "0.0.23",
4
4
  "type": "module",
5
5
  "module": "./dist/app.js",
6
6
  "license": "UNLICENSED",
@@ -60,7 +60,7 @@
60
60
  "customerItemRemarkSublabel": "Customer can attach remark to item",
61
61
  "customOfflinePayment": "Custom Offline Payment",
62
62
  "customOfflinePaymentHeader": "Custom offline payments",
63
- "customServiceCharge": "Custom Servive Charge",
63
+ "customServiceCharge": "Custom Service Charge",
64
64
  "customTime": "Custom time",
65
65
  "day": "Day",
66
66
  "days": "days",
@@ -164,6 +164,7 @@
164
164
  "orderSetting": "Order Setting",
165
165
  "orderType": "Order Type",
166
166
  "padDigit": "Pad Digit",
167
+ "paid": "Paid",
167
168
  "payAtCounter": "Pay at Counter",
168
169
  "paymentMethod": "Payment Method",
169
170
  "paymentType": "Payment Type",
@@ -212,6 +213,7 @@
212
213
  "staticQRcode": "Static QR code",
213
214
  "staticQRcodeSublabel": "Customer can order with static QR code",
214
215
  "status": "Status",
216
+ "submitOrderInstruction": "Submit order instruction",
215
217
  "success": "SUCCESS",
216
218
  "sunday": "Sunday",
217
219
  "syncMenu": "Sync Menu",
@@ -248,7 +250,6 @@
248
250
  "updateSetting": "Update setting",
249
251
  "vendorBearPercentage": "Vendor bear percentage",
250
252
  "wednesday": "Wednesday",
251
- "integratedDeliveryCompany": "Integrated delivery company",
252
253
  "externalDelivery": "External Delivery",
253
254
  "manageExternalDelivery": "Manage external delivery",
254
255
  "deliveryCatalog": "Delivery catalog",
@@ -165,6 +165,7 @@
165
165
  "orderSetting": "订单设置",
166
166
  "orderType": "订单类型",
167
167
  "padDigit": "位数",
168
+ "paid": "已付款",
168
169
  "payAtCounter": "在柜台付款",
169
170
  "paymentMethod": "付款方式",
170
171
  "paymentType": "交易类型",
@@ -212,6 +213,7 @@
212
213
  "staticQRcode": "静态二维码",
213
214
  "staticQRcodeSublabel": "客户可以通过静态二维码下单",
214
215
  "status": "状态",
216
+ "submitOrderInstruction": "提交订单文本",
215
217
  "success": "成功",
216
218
  "sunday": "星期日",
217
219
  "syncMenu": "同步菜单",
@@ -1,6 +1,12 @@
1
1
  import { FdoEPaymentMethod, F_ORDER_PAYMENT_TYPE } from "@entity";
2
2
  import { FdoOfflinePaymentMethod } from '@feedmepos/core/entity';
3
3
 
4
+ export interface MfKioskSubmitOrderInstruction {
5
+ payAtCounter: string | null,
6
+ paid: string | null,
7
+ }
8
+
9
+ export type KioskSubmitOrderInstructionForm = MfKioskSubmitOrderInstruction;
4
10
 
5
11
  export interface MfDisplayStandSetting {
6
12
  enabled: boolean,
@@ -10,6 +16,7 @@ export interface MfDisplayStandSetting {
10
16
  },
11
17
  prefix: string | null,
12
18
  padDigit: number,
19
+ submitOrderInstruction: MfKioskSubmitOrderInstruction,
13
20
  }
14
21
 
15
22
  export interface DisplayStandSettingForm {
@@ -20,9 +27,17 @@ export interface DisplayStandSettingForm {
20
27
  },
21
28
  prefix: string | null,
22
29
  padDigit: number | null,
30
+ submitOrderInstruction: KioskSubmitOrderInstructionForm,
23
31
  }
32
+
24
33
  export interface MfKioskPickAtCounterSetting {
25
34
  enabled: boolean,
35
+ submitOrderInstruction: MfKioskSubmitOrderInstruction,
36
+ }
37
+
38
+ export interface PickAtCounterSettingForm {
39
+ enabled: boolean,
40
+ submitOrderInstruction: KioskSubmitOrderInstructionForm,
26
41
  }
27
42
 
28
43
  export interface MfKioskSequenceNumberSetting {
@@ -39,6 +54,7 @@ export interface MfKioskDineInSetting {
39
54
 
40
55
  export interface MfKioskTakeawaySetting {
41
56
  enabled: boolean,
57
+ submitOrderInstruction: MfKioskSubmitOrderInstruction,
42
58
  }
43
59
 
44
60
  export interface MfKioskPaymentSetting {
@@ -1,5 +1,5 @@
1
1
  import { OrderSettingsDto, OrderKioskDineIn, OrderKioskDineInSequenceDto, FdoOrderKioskDineInSequence, FdoEPaymentMethod } from "@entity";
2
- import type { MfKioskOrderSetting, MfKioskDineInSetting, MfDisplayStandSetting, KioskTakeawaySettingForm, MfKioskOrderSettingForm, MfKioskPaymentSetting } from '@/modules/order-setting/kiosk/interface';
2
+ import type { MfKioskOrderSetting, MfKioskDineInSetting, MfDisplayStandSetting, KioskTakeawaySettingForm, MfKioskOrderSettingForm, MfKioskPaymentSetting, MfKioskSubmitOrderInstruction } from '@/modules/order-setting/kiosk/interface';
3
3
  import type { MfOrderSetting } from "@/modules/order-setting/interface";
4
4
  import type { OrderKioskSettings, OrderKioskPaymentSetting } from "@entity";
5
5
 
@@ -11,10 +11,18 @@ export const defaultDisplayStand: MfDisplayStandSetting = {
11
11
  min: 1,
12
12
  max: 10,
13
13
  },
14
+ submitOrderInstruction: {
15
+ payAtCounter: null,
16
+ paid: null,
17
+ },
14
18
  }
15
19
 
16
20
  export const defaultPickUp: KioskTakeawaySettingForm = {
17
21
  enabled: false,
22
+ submitOrderInstruction: {
23
+ payAtCounter: null,
24
+ paid: null,
25
+ },
18
26
  }
19
27
 
20
28
  export const defaultKioskOrderSetting: MfKioskOrderSettingForm = {
@@ -26,6 +34,10 @@ export const defaultKioskOrderSetting: MfKioskOrderSettingForm = {
26
34
  },
27
35
  takeaway: {
28
36
  enabled: false,
37
+ submitOrderInstruction: {
38
+ payAtCounter: null,
39
+ paid: null,
40
+ },
29
41
  },
30
42
  paymentSetting: {
31
43
  paymentTypes: [],
@@ -46,6 +58,11 @@ export const defaultKioskOrderSetting: MfKioskOrderSettingForm = {
46
58
  }
47
59
  }
48
60
 
61
+ export const defaultSubmitOrderInstruction: MfKioskSubmitOrderInstruction = {
62
+ payAtCounter: null,
63
+ paid: null,
64
+ }
65
+
49
66
  const convertOrderSettingDto = (dto: OrderSettingsDto): MfOrderSetting => {
50
67
  return {
51
68
  kiosk: toKiosk(dto.kioskSettings, dto.sequenceSettings?.kioskDineIn),
@@ -59,7 +76,11 @@ const toKiosk = (kioskOrderSettings: OrderKioskSettings, kioskDineInSeq?: OrderK
59
76
  prefix: '#K',
60
77
  }, kioskOrderSettings.dineIn ?? undefined),
61
78
  takeaway: {
62
- enabled: kioskOrderSettings?.canTakeaway ?? false
79
+ enabled: kioskOrderSettings?.canTakeaway ?? false,
80
+ submitOrderInstruction: kioskOrderSettings?.takeaway?.submitOrderInstruction ? {
81
+ payAtCounter: kioskOrderSettings.takeaway.submitOrderInstruction?.payAtCounter?.['en'] ?? null,
82
+ paid: kioskOrderSettings.takeaway.submitOrderInstruction?.paid?.['en'] ?? null,
83
+ } : defaultSubmitOrderInstruction,
63
84
  },
64
85
  paymentSetting: {
65
86
  paymentTypes: kioskOrderSettings?.paymentSetting?.paymentTypes ?? [],
@@ -85,12 +106,22 @@ const toKioskDineInSetting = (kioskDineInSeq: OrderKioskDineInSequenceDto, kiosk
85
106
  return {
86
107
  enabled: !!kioskDineInSetting,
87
108
  sequenceNumber: kioskDineInSeq,
88
- pickUp: kioskDineInSetting?.pickUp ?? defaultPickUp,
109
+ pickUp: kioskDineInSetting?.pickUp ? {
110
+ ...kioskDineInSetting.pickUp,
111
+ submitOrderInstruction: kioskDineInSetting.pickUp.submitOrderInstruction ? {
112
+ payAtCounter: kioskDineInSetting.pickUp.submitOrderInstruction?.payAtCounter?.['en'] ?? null,
113
+ paid: kioskDineInSetting.pickUp.submitOrderInstruction?.paid?.['en'] ?? null,
114
+ } : defaultSubmitOrderInstruction,
115
+ } : defaultPickUp,
89
116
  displayStand: kioskDineInSetting?.displayStand ? {
90
117
  enabled: kioskDineInSetting.displayStand.enabled,
91
118
  standSlotRange: kioskDineInSetting.displayStand.standSlotRange,
92
119
  prefix: kioskDineInSetting.displayStand.prefix,
93
120
  padDigit: kioskDineInSetting.displayStand.padDigit,
121
+ submitOrderInstruction: kioskDineInSetting.displayStand.submitOrderInstruction ? {
122
+ payAtCounter: kioskDineInSetting.displayStand.submitOrderInstruction?.payAtCounter?.['en'] ?? null,
123
+ paid: kioskDineInSetting.displayStand.submitOrderInstruction?.paid?.['en'] ?? null,
124
+ } : defaultSubmitOrderInstruction,
94
125
  } : defaultDisplayStand
95
126
  }
96
127
  }
@@ -98,10 +129,30 @@ const toOrderKioskSettingsDto = (kioskSetting: MfKioskOrderSetting): {
98
129
  kioskSettings: OrderKioskSettings,
99
130
  kioskDineIn?: OrderKioskDineInSequenceDto
100
131
  } => {
101
- const createDineInSettings = (dineInSetting: MfKioskDineInSetting) => ({
132
+ const createDineInSettings = (dineInSetting: MfKioskDineInSetting): OrderKioskDineIn => ({
102
133
  requiredSlot: !!dineInSetting.displayStand,
103
- displayStand: dineInSetting.displayStand,
104
- pickUp: dineInSetting.pickUp
134
+ displayStand: {
135
+ ...dineInSetting.displayStand,
136
+ submitOrderInstruction: {
137
+ payAtCounter: dineInSetting.displayStand.submitOrderInstruction?.payAtCounter ? {
138
+ en: dineInSetting.displayStand.submitOrderInstruction.payAtCounter,
139
+ } : null,
140
+ paid: dineInSetting.displayStand.submitOrderInstruction?.paid ? {
141
+ en: dineInSetting.displayStand.submitOrderInstruction.paid,
142
+ } : null,
143
+ }
144
+ },
145
+ pickUp: {
146
+ ...dineInSetting.pickUp,
147
+ submitOrderInstruction: {
148
+ payAtCounter: dineInSetting.pickUp.submitOrderInstruction?.payAtCounter ? {
149
+ en: dineInSetting.pickUp.submitOrderInstruction.payAtCounter,
150
+ } : null,
151
+ paid: dineInSetting.pickUp.submitOrderInstruction?.paid ? {
152
+ en: dineInSetting.pickUp.submitOrderInstruction.paid,
153
+ } : null,
154
+ }
155
+ }
105
156
  })
106
157
 
107
158
  const createKioskSettings = (dineIn?: OrderKioskDineIn) => ({
@@ -111,7 +162,7 @@ const toOrderKioskSettingsDto = (kioskSetting: MfKioskOrderSetting): {
111
162
  paymentSetting: createPaymentSettings(kioskSetting.paymentSetting)
112
163
  })
113
164
 
114
- const createPaymentSettings = (paymentSetting: MfKioskPaymentSetting) : OrderKioskPaymentSetting | undefined => {
165
+ const createPaymentSettings = (paymentSetting: MfKioskPaymentSetting): OrderKioskPaymentSetting | undefined => {
115
166
  return {
116
167
  paymentTypes: paymentSetting.paymentTypes,
117
168
  offlinePaymentTypes: paymentSetting.offlinePaymentTypes,
@@ -10,7 +10,7 @@
10
10
  <div v-show="v.enabled" class="flex flex-col gap-16">
11
11
  <KioskPickAtCounterSection
12
12
  v-if="v.pickUp"
13
- :enabled="v.pickUp.enabled"
13
+ :form="v.pickUp"
14
14
  @update-pick-up="updatePickUp"
15
15
  />
16
16
  <KioskDisplayStandSection
@@ -29,6 +29,7 @@ import type {
29
29
  } from '@/modules/order-setting/kiosk/interface'
30
30
  import KioskDisplayStandSection from './KioskDisplayStandSection.vue'
31
31
  import KioskPickAtCounterSection from './KioskPickAtCounterSection.vue'
32
+ import type { PickAtCounterSettingForm } from '@/modules/order-setting/kiosk/interface'
32
33
  import { useI18n } from '@feedmepos/mf-common'
33
34
 
34
35
  const { t } = useI18n()
@@ -41,12 +42,10 @@ interface Emits {
41
42
  (e: 'updateDineIn', setting: KioskDineInSettingForm): void
42
43
  }
43
44
 
44
- function updatePickUp(v: boolean) {
45
+ function updatePickUp(form: PickAtCounterSettingForm) {
45
46
  emits('updateDineIn', {
46
47
  ...props.v,
47
- pickUp: {
48
- enabled: v
49
- }
48
+ pickUp: form,
50
49
  })
51
50
  }
52
51
 
@@ -55,6 +55,12 @@
55
55
  />
56
56
  </div>
57
57
  </div>
58
+
59
+ <kiosk-instruction-section
60
+ v-show="displayStand.enabled"
61
+ :fields="instructionFields"
62
+ @update:field="updateInstruction"
63
+ />
58
64
  </div>
59
65
  </template>
60
66
  <script lang="ts" setup>
@@ -62,6 +68,7 @@ import { computed } from 'vue'
62
68
  import { NumberUtil } from '@/utils/number'
63
69
  import type { DisplayStandSettingForm } from '@/modules/order-setting/kiosk/interface'
64
70
  import { useI18n } from '@feedmepos/mf-common'
71
+ import KioskInstructionSection from './KioskInstructionSection.vue'
65
72
 
66
73
  const { t } = useI18n()
67
74
 
@@ -76,6 +83,35 @@ interface Emits {
76
83
  const props = defineProps<Props>()
77
84
  const emits = defineEmits<Emits>()
78
85
 
86
+ const instructionFields = computed(() => {
87
+ const instructions = props.displayStand.submitOrderInstruction
88
+ return [
89
+ {
90
+ id: 'payAtCounter',
91
+ value: instructions.payAtCounter ?? undefined,
92
+ title: t('order.payAtCounter'),
93
+ defaultValue: 'Collect your transaction slip below and present it to the cashier'
94
+ },
95
+ {
96
+ id: 'paid',
97
+ value: instructions.paid ?? undefined,
98
+ title: t('order.paid'),
99
+ defaultValue:
100
+ "Please collect your receipt and we'll bring your food to your table once it's ready."
101
+ }
102
+ ]
103
+ })
104
+
105
+ function updateInstruction(id: string, value: string) {
106
+ emits('updateDisplayStand', {
107
+ ...props.displayStand,
108
+ submitOrderInstruction: {
109
+ ...props.displayStand.submitOrderInstruction,
110
+ [id]: value
111
+ }
112
+ })
113
+ }
114
+
79
115
  const nonNegativeRule = (val: any) => {
80
116
  if (val < 0) {
81
117
  return t('order.nonNegativeRule')
@@ -0,0 +1,40 @@
1
+ <template>
2
+ <div class="border p-[1.5rem] fm-corner-radius-lg flex flex-col gap-2 my-5 w-11/12">
3
+ <span class="fm-typo-en-title-sm-600">{{ t('order.submitOrderInstruction') }}</span>
4
+ <div class="flex flex-col gap-10" v-for="field in props.fields" :key="field.title">
5
+ <FmTextField
6
+ :model-value="field.value"
7
+ :label="field.title"
8
+ :placeholder="field.defaultValue"
9
+ @update:model-value="(v: string) => updateField(field.id, v)"
10
+ />
11
+ </div>
12
+ </div>
13
+ </template>
14
+ <script lang="ts" setup>
15
+ import { useI18n } from '@feedmepos/mf-common'
16
+ const { t } = useI18n()
17
+
18
+ interface ITextField {
19
+ id: string
20
+ value: string | undefined
21
+ title: string
22
+ defaultValue: string
23
+ }
24
+
25
+ interface Props {
26
+ fields: ITextField[]
27
+ }
28
+
29
+ const props = defineProps<Props>()
30
+
31
+ interface Emits {
32
+ (e: 'update:field', id: string, value: string): void
33
+ }
34
+
35
+ const emit = defineEmits<Emits>()
36
+
37
+ function updateField(id: string, value: string) {
38
+ emit('update:field', id, value)
39
+ }
40
+ </script>
@@ -54,7 +54,7 @@ const allowOfflinePayment = computed(() => {
54
54
  const parentCheckbox = ref(false)
55
55
  const paymentCheckboxVal = ref<string[]>([])
56
56
  const cardPaymentRadioVal = ref<string>()
57
- const eWalletPaymentRadioVal = ref<string>()
57
+ const eWalletPaymentCheckboxVal = ref<string[]>([])
58
58
  const useCard = ref(false)
59
59
  const useEwallet = ref(false)
60
60
 
@@ -79,10 +79,12 @@ const initializeCheckboxes = () => {
79
79
  }
80
80
 
81
81
  if (props.ePaymentTypes.eWallet.qrPay) {
82
- eWalletPaymentRadioVal.value = F_ORDER_E_PAYMENT_TYPE.enum.QRPAY
82
+ eWalletPaymentCheckboxVal.value.push(F_ORDER_E_PAYMENT_TYPE.enum.QRPAY)
83
83
  useEwallet.value = true
84
- } else if (props.ePaymentTypes.eWallet.scanPay) {
85
- eWalletPaymentRadioVal.value = F_ORDER_E_PAYMENT_TYPE.enum.SCANPAY
84
+ }
85
+
86
+ if (props.ePaymentTypes.eWallet.scanPay) {
87
+ eWalletPaymentCheckboxVal.value.push(F_ORDER_E_PAYMENT_TYPE.enum.SCANPAY)
86
88
  useEwallet.value = true
87
89
  }
88
90
  }
@@ -159,12 +161,12 @@ const handleEPaymentCardUpdate = (ev: string) => {
159
161
  ePaymentObj.card.nfc = true
160
162
  }
161
163
 
162
- if (eWalletPaymentRadioVal.value) {
163
- if (eWalletPaymentRadioVal.value === F_ORDER_E_PAYMENT_TYPE.enum.QRPAY) {
164
+ if (eWalletPaymentCheckboxVal.value.length > 0) {
165
+ if (eWalletPaymentCheckboxVal.value.includes(F_ORDER_E_PAYMENT_TYPE.enum.QRPAY)) {
164
166
  ePaymentObj.eWallet.qrPay = true
165
167
  }
166
168
 
167
- if (eWalletPaymentRadioVal.value === F_ORDER_E_PAYMENT_TYPE.enum.SCANPAY) {
169
+ if (eWalletPaymentCheckboxVal.value.includes(F_ORDER_E_PAYMENT_TYPE.enum.SCANPAY)) {
168
170
  ePaymentObj.eWallet.scanPay = true
169
171
  }
170
172
  }
@@ -196,11 +198,11 @@ const handleEPaymentEWalletUpdate = () => {
196
198
  }
197
199
  }
198
200
 
199
- if (eWalletPaymentRadioVal.value === F_ORDER_E_PAYMENT_TYPE.enum.QRPAY) {
201
+ if (eWalletPaymentCheckboxVal.value.includes(F_ORDER_E_PAYMENT_TYPE.enum.QRPAY)) {
200
202
  ePaymentObj.eWallet.qrPay = true
201
203
  }
202
204
 
203
- if (eWalletPaymentRadioVal.value === F_ORDER_E_PAYMENT_TYPE.enum.SCANPAY) {
205
+ if (eWalletPaymentCheckboxVal.value.includes(F_ORDER_E_PAYMENT_TYPE.enum.SCANPAY)) {
204
206
  ePaymentObj.eWallet.scanPay = true
205
207
  }
206
208
  }
@@ -217,9 +219,12 @@ const updateCardSwitch = (enabled: boolean) => {
217
219
  }
218
220
 
219
221
  const updateECardSwitch = (enabled: boolean) => {
220
- eWalletPaymentRadioVal.value = ''
222
+ eWalletPaymentCheckboxVal.value = []
221
223
  if (enabled) {
222
- eWalletPaymentRadioVal.value = F_ORDER_E_PAYMENT_TYPE.enum.QRPAY
224
+ eWalletPaymentCheckboxVal.value = [
225
+ F_ORDER_E_PAYMENT_TYPE.enum.QRPAY,
226
+ F_ORDER_E_PAYMENT_TYPE.enum.SCANPAY
227
+ ]
223
228
  }
224
229
  handleEPaymentEWalletUpdate()
225
230
  }
@@ -324,14 +329,20 @@ onMounted(() => {
324
329
  />
325
330
  <br />
326
331
  <div v-show="useEwallet" class="ml-7">
327
- <FmRadioGroup
328
- v-model="eWalletPaymentRadioVal"
329
- @update:model-value="handleEPaymentEWalletUpdate"
330
- inline
331
- >
332
- <FmRadio :label="t('order.qrPay')" :value="F_ORDER_E_PAYMENT_TYPE.enum.QRPAY" />
333
- <FmRadio :label="t('order.scanPay')" :value="F_ORDER_E_PAYMENT_TYPE.enum.SCANPAY" />
334
- </FmRadioGroup>
332
+ <div class="flex flex-row gap-9">
333
+ <FmCheckbox
334
+ v-model="eWalletPaymentCheckboxVal"
335
+ :label="t('order.qrPay')"
336
+ :value="F_ORDER_E_PAYMENT_TYPE.enum.QRPAY"
337
+ @update:model-value="handleEPaymentEWalletUpdate"
338
+ />
339
+ <FmCheckbox
340
+ v-model="eWalletPaymentCheckboxVal"
341
+ :label="t('order.scanPay')"
342
+ :value="F_ORDER_E_PAYMENT_TYPE.enum.SCANPAY"
343
+ @update:model-value="handleEPaymentEWalletUpdate"
344
+ />
345
+ </div>
335
346
  </div>
336
347
  </FmCardSection>
337
348
  </FmCard>
@@ -1,30 +1,68 @@
1
1
  <template>
2
2
  <div>
3
3
  <FmSwitch
4
- :model-value="enabled"
4
+ :model-value="form.enabled"
5
5
  :label="t('order.pickAtCounter')"
6
6
  label-placement="right"
7
- @update:model-value="updatePickUp"
7
+ @update:model-value="updatePickUpEnabled"
8
+ />
9
+ <kiosk-instruction-section
10
+ v-show="form.enabled"
11
+ :fields="instructionFields"
12
+ @update:field="updatePickUpInstruction"
8
13
  />
9
14
  </div>
10
15
  </template>
11
16
  <script lang="ts" setup>
17
+ import type { PickAtCounterSettingForm } from '@/modules/order-setting/kiosk/interface'
12
18
  import { useI18n } from '@feedmepos/mf-common'
19
+ import { computed } from 'vue'
20
+ import KioskInstructionSection from './KioskInstructionSection.vue'
13
21
 
14
22
  const { t } = useI18n()
15
23
 
16
24
  interface Props {
17
- enabled: boolean
25
+ form: PickAtCounterSettingForm
18
26
  }
19
27
 
20
28
  interface Emits {
21
- (e: 'update-pick-up', enabled: boolean): void
29
+ (e: 'update-pick-up', form: PickAtCounterSettingForm): void
22
30
  }
23
31
 
24
- defineProps<Props>()
32
+ const props = defineProps<Props>()
25
33
  const emits = defineEmits<Emits>()
26
34
 
27
- function updatePickUp(enabled: boolean) {
28
- emits('update-pick-up', enabled)
35
+ const instructionFields = computed(() => {
36
+ return [
37
+ {
38
+ id: 'payAtCounter',
39
+ value: props.form.submitOrderInstruction.payAtCounter ?? undefined,
40
+ title: t('order.payAtCounter'),
41
+ defaultValue: 'Collect your transaction slip below and present it to the cashier'
42
+ },
43
+ {
44
+ id: 'paid',
45
+ value: props.form.submitOrderInstruction.paid ?? undefined,
46
+ title: t('order.paid'),
47
+ defaultValue: "Please wait as we prepare your food. We'll call your number when it's ready."
48
+ }
49
+ ]
50
+ })
51
+
52
+ function updatePickUpEnabled(enabled: boolean) {
53
+ emits('update-pick-up', {
54
+ ...props.form,
55
+ enabled
56
+ })
57
+ }
58
+
59
+ function updatePickUpInstruction(id: string, instruction: string) {
60
+ emits('update-pick-up', {
61
+ ...props.form,
62
+ submitOrderInstruction: {
63
+ ...props.form.submitOrderInstruction,
64
+ [id]: instruction
65
+ }
66
+ })
29
67
  }
30
68
  </script>
@@ -106,7 +106,11 @@ const validKioskOrderSetting = computed<MfKioskOrderSetting | null>(() => {
106
106
  min: f.dineIn.displayStand.standSlotRange.min ?? 0,
107
107
  max: f.dineIn.displayStand.standSlotRange.max ?? 10
108
108
  },
109
- prefix: f.dineIn.displayStand.prefix ?? ''
109
+ prefix: f.dineIn.displayStand.prefix ?? '',
110
+ submitOrderInstruction: {
111
+ payAtCounter: f.dineIn.displayStand.submitOrderInstruction.payAtCounter ?? null,
112
+ paid: f.dineIn.displayStand.submitOrderInstruction.paid ?? null
113
+ }
110
114
  }
111
115
  }
112
116
  }
@@ -134,7 +138,11 @@ const validKioskOrderSetting = computed<MfKioskOrderSetting | null>(() => {
134
138
  min: displayStand.standSlotRange.min,
135
139
  max: displayStand.standSlotRange.max
136
140
  },
137
- prefix: displayStand.prefix ?? ''
141
+ prefix: displayStand.prefix ?? '',
142
+ submitOrderInstruction: {
143
+ payAtCounter: displayStand.submitOrderInstruction.payAtCounter ?? null,
144
+ paid: displayStand.submitOrderInstruction.paid ?? null
145
+ }
138
146
  }
139
147
  }
140
148
  }
@@ -154,7 +162,11 @@ const validKioskOrderSetting = computed<MfKioskOrderSetting | null>(() => {
154
162
  min: f.dineIn.displayStand.standSlotRange.min ?? 0,
155
163
  max: f.dineIn.displayStand.standSlotRange.max ?? 10
156
164
  },
157
- prefix: f.dineIn.displayStand.prefix ?? ''
165
+ prefix: f.dineIn.displayStand.prefix ?? '',
166
+ submitOrderInstruction: {
167
+ payAtCounter: f.dineIn.displayStand.submitOrderInstruction.payAtCounter ?? null,
168
+ paid: f.dineIn.displayStand.submitOrderInstruction.paid ?? null
169
+ }
158
170
  }
159
171
  }
160
172
  }
@@ -4,14 +4,21 @@
4
4
  :model-value="v.enabled"
5
5
  :label="t('order.takeaway')"
6
6
  label-placement="right"
7
- @update:model-value="updateTakeawaySetting"
7
+ @update:model-value="updateTakeawaySettingEnabled"
8
8
  class="mb-5"
9
9
  />
10
+ <kiosk-instruction-section
11
+ v-show="v.enabled"
12
+ :fields="instructionFields"
13
+ @update:field="updateTakeawaySettingInstructions"
14
+ />
10
15
  </div>
11
16
  </template>
12
17
  <script setup lang="ts">
13
18
  import type { KioskTakeawaySettingForm } from '@/modules/order-setting/kiosk/interface'
14
19
  import { useI18n } from '@feedmepos/mf-common'
20
+ import { computed } from 'vue'
21
+ import KioskInstructionSection from './KioskInstructionSection.vue'
15
22
 
16
23
  const { t } = useI18n()
17
24
 
@@ -23,10 +30,37 @@ interface Emits {
23
30
  (e: 'updateTakeaway', setting: KioskTakeawaySettingForm): void
24
31
  }
25
32
 
26
- defineProps<Props>()
33
+ const props = defineProps<Props>()
27
34
  const emits = defineEmits<Emits>()
28
35
 
29
- function updateTakeawaySetting(v: boolean) {
30
- emits('updateTakeaway', { enabled: v })
36
+ const instructionFields = computed(() => {
37
+ return [
38
+ {
39
+ id: 'payAtCounter',
40
+ value: props.v.submitOrderInstruction.payAtCounter ?? undefined,
41
+ title: t('order.payAtCounter'),
42
+ defaultValue: 'Collect your transaction slip below and present it to the cashier'
43
+ },
44
+ {
45
+ id: 'paid',
46
+ value: props.v.submitOrderInstruction.paid ?? undefined,
47
+ title: t('order.paid'),
48
+ defaultValue: "Please wait as we prepare your food. We'll call your number when it's ready."
49
+ }
50
+ ]
51
+ })
52
+
53
+ function updateTakeawaySettingEnabled(v: boolean) {
54
+ emits('updateTakeaway', { ...props.v, enabled: v })
55
+ }
56
+
57
+ function updateTakeawaySettingInstructions(id: string, instructions: string) {
58
+ emits('updateTakeaway', {
59
+ ...props.v,
60
+ submitOrderInstruction: {
61
+ ...props.v.submitOrderInstruction,
62
+ [id]: instructions
63
+ }
64
+ })
31
65
  }
32
66
  </script>
@@ -479,17 +479,12 @@ watch(
479
479
  class="ml-auto"
480
480
  />
481
481
  </div>
482
- <div class="fm-corner-radius-lg flex flex-col">
483
- <div
484
- v-for="(item, index) in filteredTable"
485
- :key="index"
486
- class="flex flex-col pl-6"
487
- v-if="showTable"
488
- >
482
+ <div class="fm-corner-radius-lg flex flex-col" v-if="showTable">
483
+ <div v-for="(item, index) in filteredTable" :key="index" class="flex flex-col pl-6">
489
484
  <FmCheckbox
485
+ :value="item.name"
490
486
  :model-value="selectedTables[item.name].isSelected"
491
487
  :label="item.name"
492
- value=""
493
488
  @update:model-value="(v: boolean) => handleChildUpdateTable(v, item.name)"
494
489
  />
495
490
  </div>