@feedmepos/mf-order-setting 0.0.21-beta.1 → 0.0.21-beta.3

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 (135) hide show
  1. package/dist/{KioskDevicesView-snR43qzG.js → KioskDevicesView-Cb7Rw7t8.js} +1 -1
  2. package/dist/{KioskDevicesView.vue_vue_type_script_setup_true_lang-DkpYway-.js → KioskDevicesView.vue_vue_type_script_setup_true_lang-raPhhBpi.js} +45 -44
  3. package/dist/KioskSettingView-BQgyeWbo.js +649 -0
  4. package/dist/KioskView-BLkuqfZ_.js +371 -0
  5. package/dist/OrderSettingsView-BJ1b1Qjg.js +70873 -0
  6. package/dist/app-BY258ajB.js +644 -0
  7. package/dist/app.js +4 -505
  8. package/dist/auth.dto-BOoRSQkS.js +121725 -0
  9. package/dist/dayjs.min-4COVK72W.js +2110 -0
  10. package/dist/frontend/mf-order/src/app.d.ts +440 -410
  11. package/dist/frontend/mf-order/src/components/GoogleMap.vue.d.ts +1 -1
  12. package/dist/frontend/mf-order/src/modules/order-setting/kiosk/interface.d.ts +18 -0
  13. package/dist/frontend/mf-order/src/stores/app/index.d.ts +4 -14
  14. package/dist/frontend/mf-order/src/stores/iframe/index.d.ts +2 -2
  15. package/dist/frontend/mf-order/src/stores/kiosk/index.d.ts +2 -2
  16. package/dist/frontend/mf-order/src/stores/menu/menu.d.ts +35 -30
  17. package/dist/frontend/mf-order/src/stores/order-setting/index.d.ts +242 -2
  18. package/dist/frontend/mf-order/src/stores/order-setting/mapper.d.ts +2 -1
  19. package/dist/frontend/mf-order/src/stores/restaurant/index.d.ts +750 -614
  20. package/dist/frontend/mf-order/src/views/all-orders/ActionMenuCell.vue.d.ts +1 -1
  21. package/dist/frontend/mf-order/src/views/all-orders/FilterStatus.vue.d.ts +1 -1
  22. package/dist/frontend/mf-order/src/views/all-orders/FilterStatusMenu.vue.d.ts +1 -1
  23. package/dist/frontend/mf-order/src/views/all-orders/ReflowOrder.vue.d.ts +175 -141
  24. package/dist/frontend/mf-order/src/views/all-orders/UpdateDeliveryOrderDialog.vue.d.ts +1 -1
  25. package/dist/frontend/mf-order/src/views/kiosk/KioskSummary.vue.d.ts +1 -0
  26. package/dist/frontend/mf-order/src/views/kiosk/devices/KioskUnbindConfirm.vue.d.ts +1 -1
  27. package/dist/frontend/mf-order/src/views/kiosk/settings/KioskDineInSection.vue.d.ts +2 -4
  28. package/dist/frontend/mf-order/src/views/kiosk/settings/KioskDisplayStandSection.vue.d.ts +1 -1
  29. package/dist/frontend/mf-order/src/views/kiosk/settings/KioskMenuItemSection.vue.d.ts +9 -0
  30. package/dist/frontend/mf-order/src/views/kiosk/settings/KioskPaymentTypeSection.vue.d.ts +93 -0
  31. package/dist/frontend/mf-order/src/views/kiosk/settings/KioskPickAtCounterSection.vue.d.ts +1 -1
  32. package/dist/frontend/mf-order/src/views/kiosk/settings/KioskSettingView.vue.d.ts +1 -1
  33. package/dist/frontend/mf-order/src/views/kiosk/settings/KioskTakeawaySection.vue.d.ts +2 -4
  34. package/dist/frontend/mf-order/src/views/order-settings/delivery/DeliveryList.vue.d.ts +1 -1
  35. package/dist/frontend/mf-order/src/views/order-settings/delivery/components/ManualIntegratedDeliverySetting.vue.d.ts +1 -1
  36. package/dist/frontend/mf-order/src/views/order-settings/delivery/components/TaxInput.vue.d.ts +1 -1
  37. package/dist/frontend/mf-order/src/views/order-settings/delivery/inhouse/CurrencyInput.vue.d.ts +1 -1
  38. package/dist/frontend/mf-order/src/views/order-settings/delivery/inhouse/DeliveryCustomTime.vue.d.ts +1 -1
  39. package/dist/frontend/mf-order/src/views/order-settings/delivery/inhouse/DeliveryOrder.vue.d.ts +35 -3
  40. package/dist/frontend/mf-order/src/views/order-settings/delivery/inhouse/DeliveryTime.vue.d.ts +1 -1
  41. package/dist/frontend/mf-order/src/views/order-settings/delivery/inhouse/InHouseDelivery.vue.d.ts +1 -1
  42. package/dist/frontend/mf-order/src/views/order-settings/delivery/inhouse/TimePicker.vue.d.ts +1 -1
  43. package/dist/frontend/mf-order/src/views/order-settings/delivery/inhouse/ZoneDialog.vue.d.ts +1 -1
  44. package/dist/frontend/mf-order/src/views/order-settings/delivery/integrated-delivery/FeedmeDelivery.vue.d.ts +1 -1
  45. package/dist/frontend/mf-order/src/views/order-settings/delivery/integrated-delivery/FoodpandaCampaignDialog.vue.d.ts +1 -1
  46. package/dist/frontend/mf-order/src/views/order-settings/delivery/integrated-delivery/FoodpandaSetting.vue.d.ts +1 -1
  47. package/dist/frontend/mf-order/src/views/order-settings/delivery/integrated-delivery/GrabfoodSetting.vue.d.ts +1 -1
  48. package/dist/frontend/mf-order/src/views/order-settings/delivery/integrated-delivery/IntegratedDelivery.vue.d.ts +1 -1
  49. package/dist/frontend/mf-order/src/views/order-settings/delivery/integrated-delivery/ShopeefoodSetting.vue.d.ts +1 -1
  50. package/dist/frontend/mf-order/src/views/order-settings/{dinein → dine-in}/OfflinePaymentTypeDialog.vue.d.ts +1 -1
  51. package/dist/frontend/mf-order/src/views/order-settings/{dinein → dine-in}/OfflinePaymentTypeDialogContent.vue.d.ts +1 -1
  52. package/dist/frontend/mf-order/src/views/order-settings/{dinein → dine-in}/PaymentType.vue.d.ts +1 -1
  53. package/dist/frontend/mf-order/src/views/order-settings/pickup/AddressInput.vue.d.ts +1 -1
  54. package/dist/frontend/mf-order/src/views/order-settings/pickup/CustomPayment.vue.d.ts +1 -1
  55. package/dist/frontend/mf-order/src/views/order-settings/pickup/PaymentSidesheet.vue.d.ts +1 -1
  56. package/dist/frontend/mf-order/src/views/order-settings/pickup/PickUpPointDialog.vue.d.ts +1 -1
  57. package/dist/frontend/mf-order/src/views/order-settings/pickup/PickUpPointDialogContent.vue.d.ts +35 -3
  58. package/dist/frontend/mf-order/src/views/order-settings/pickup/PickUpSettingDialog.vue.d.ts +1 -1
  59. package/dist/frontend/mf-order/src/views/order-settings/pickup/PickUpSettingDialogContent.vue.d.ts +1 -1
  60. package/dist/frontend/mf-order/src/views/order-settings/pickup/PickupList.vue.d.ts +1 -1
  61. package/dist/frontend/mf-order/src/views/order-settings/pickup/Preorder.vue.d.ts +1 -1
  62. package/dist/frontend/mf-order/src/views/order-settings/servicecharge/RateInput.vue.d.ts +1 -1
  63. package/dist/frontend/mf-order/src/views/order-settings/servicecharge/ServiceChargeRule.vue.d.ts +1 -1
  64. package/dist/frontend/mf-order/tsconfig.app.tsbuildinfo +1 -1
  65. package/dist/index-DSCb3ndM.js +150 -0
  66. package/dist/{index-BghBxhGG.js → index-t_7ThPjm.js} +25 -24
  67. package/dist/package/entity/booking/booking.do.d.ts +95 -1025
  68. package/dist/package/entity/delivery/delivery.dto.d.ts +78 -264
  69. package/dist/package/entity/delivery/gateway/kosmo.dto.d.ts +2 -2
  70. package/dist/package/entity/food-court/food-court.dto.d.ts +51 -0
  71. package/dist/package/entity/food-court/order.dto.d.ts +2528 -6
  72. package/dist/package/entity/incoming-order/incoming-order-to-bill.dto.d.ts +1377 -255
  73. package/dist/package/entity/incoming-order/incoming-order.do.d.ts +632 -129
  74. package/dist/package/entity/incoming-order/incoming-order.dto.d.ts +1275 -244
  75. package/dist/package/entity/kiosk/kiosk.do.d.ts +14 -14
  76. package/dist/package/entity/kiosk/kiosk.dto.d.ts +17 -17
  77. package/dist/package/entity/kiosk/marketing/marketing.dto.d.ts +105 -883
  78. package/dist/package/entity/kiosk/scanner/scanner.do.d.ts +9 -9
  79. package/dist/package/entity/kiosk/scanner/scanner.dto.d.ts +9 -9
  80. package/dist/package/entity/kiosk/scanner/scanner.enum.d.ts +1 -1
  81. package/dist/package/entity/member/member.dto.d.ts +2 -2
  82. package/dist/package/entity/order/effects/effect.dto.d.ts +6 -6
  83. package/dist/package/entity/order/manager/manager.dto.d.ts +8 -8
  84. package/dist/package/entity/order/order-item/order-item.dto.d.ts +3986 -0
  85. package/dist/package/entity/order/order.do.d.ts +951 -5
  86. package/dist/package/entity/order/order.dto.d.ts +63375 -23687
  87. package/dist/package/entity/order/order.enum.d.ts +5 -1
  88. package/dist/package/entity/order/payment/payment.dto.d.ts +9631 -138
  89. package/dist/package/entity/order-platform/foodpanda/foodpanda-menu.dto.d.ts +54 -54
  90. package/dist/package/entity/order-platform/foodpanda/foodpanda-order.do.d.ts +165 -72
  91. package/dist/package/entity/order-platform/foodpanda/foodpanda-order.dto.d.ts +88 -241
  92. package/dist/package/entity/order-platform/grabfood/grabfood-menu.do.d.ts +1 -0
  93. package/dist/package/entity/order-platform/grabfood/grabfood-order.do.d.ts +153 -215
  94. package/dist/package/entity/order-platform/grabfood/grabfood.dto.d.ts +80 -40
  95. package/dist/package/entity/order-platform/menu.dto.d.ts +88 -88
  96. package/dist/package/entity/order-platform/shopeefood/shopeefood-order.do.d.ts +19 -205
  97. package/dist/package/entity/order-setting/kiosk/kiosk.do.d.ts +259 -0
  98. package/dist/package/entity/order-setting/kiosk/kiosk.dto.d.ts +266 -0
  99. package/dist/package/entity/order-setting/order-setting.do.d.ts +172 -0
  100. package/dist/package/entity/order-setting/order-setting.dto.d.ts +344 -0
  101. package/dist/package/entity/payment/payment.dto.d.ts +13 -13
  102. package/dist/package/entity/queue/queue.do.d.ts +80 -80
  103. package/dist/package/entity/queue/queue.dto.d.ts +7 -0
  104. package/dist/package/entity/restaurant/restaurant.dto.d.ts +226 -113
  105. package/dist/package/entity/websocket/websocket.dto.d.ts +384 -0
  106. package/package.json +17 -17
  107. package/src/app.ts +2 -3
  108. package/src/locales/en-US.json +218 -203
  109. package/src/locales/zh-CN.json +218 -203
  110. package/src/modules/order-setting/kiosk/interface.ts +25 -0
  111. package/src/stores/order-setting/mapper.ts +73 -51
  112. package/src/views/kiosk/KioskSummary.vue +40 -5
  113. package/src/views/kiosk/KioskView.vue +153 -101
  114. package/src/views/kiosk/settings/KioskDineInSection.vue +48 -33
  115. package/src/views/kiosk/settings/KioskDisplayStandSection.vue +114 -67
  116. package/src/views/kiosk/settings/KioskMenuItemSection.vue +27 -0
  117. package/src/views/kiosk/settings/KioskPaymentTypeSection.vue +339 -0
  118. package/src/views/kiosk/settings/KioskPickAtCounterSection.vue +15 -14
  119. package/src/views/kiosk/settings/KioskSettingView.vue +169 -108
  120. package/src/views/kiosk/settings/KioskTakeawaySection.vue +16 -22
  121. package/src/views/order-settings/OrderSettingsView.vue +1 -1
  122. package/src/views/order-settings/delivery/DeliverySetting.vue +9 -10
  123. package/src/views/order-settings/pickup/CustomPayment.vue +1 -1
  124. package/dist/App-Dd-xqK-8.js +0 -60
  125. package/dist/KioskSettingView-6Q0qwSTl.js +0 -345
  126. package/dist/KioskView-5I0PelUy.js +0 -289
  127. package/dist/OrderSettingsView-CXZq8QAV.js +0 -51594
  128. package/dist/dayjs.min-DMfenXNY.js +0 -121871
  129. package/dist/index-B9mJLWE5.js +0 -70
  130. package/dist/map-UJBUHidz.js +0 -57
  131. /package/dist/frontend/mf-order/src/views/order-settings/{dinein → dine-in}/DineInSetting.vue.d.ts +0 -0
  132. /package/src/views/order-settings/{dinein → dine-in}/DineInSetting.vue +0 -0
  133. /package/src/views/order-settings/{dinein → dine-in}/OfflinePaymentTypeDialog.vue +0 -0
  134. /package/src/views/order-settings/{dinein → dine-in}/OfflinePaymentTypeDialogContent.vue +0 -0
  135. /package/src/views/order-settings/{dinein → dine-in}/PaymentType.vue +0 -0
@@ -1,106 +1,153 @@
1
1
  <template>
2
- <div>
3
- <FmSwitch v-model="form.enabled" :label="t('order.displayStand')" label-placement="right"
4
- @update:modelValue="updateEnabled" />
5
- <div class="border p-[1.5rem] fm-corner-radius-lg flex flex-col gap-2 my-5 w-11/12" v-show="form.enabled">
6
- <span class="fm-typo-en-title-sm-600">{{ t('order.tableServiceSetting') }}</span>
7
- <div class="flex flex-col gap-10">
8
- <!-- prefix -->
9
- <!-- TODO: How to let user know this field is do for what-->
10
- <FmTextField v-model="form.prefix" :label="t('order.prefix')" :placeholder="t('order.prefix')"
11
- @update:modelValue="updatePrefix" />
12
- </div>
13
- <div class="flex flex-row gap-2">
14
- <!-- <span class="fm-typo-en-title-sm-600">Table Stand Number Range</span> -->
15
- <FmStepperField class="w-1/2" v-model="form.standSlotRange.min" :label="t('order.start')" labelMark="required"
16
- :rules="minRules" :placeholder="t('order.enterANumber')" @update:modelValue="updateMin" />
17
- <FmStepperField class="w-1/2" v-model="form.standSlotRange.max" :label="t('order.end')" labelMark="required"
18
- :rules="maxRules" :placeholder="t('order.enterANumber')" @update:modelValue="updateMax" />
19
- </div>
20
- <div>
21
- <!-- pad digit -->
22
- <!-- TODO: How to let user know this field is do for what-->
23
- <FmStepperField v-model="form.padDigit" :label="t('order.padDigit')" labelMark="required" :rules="padDigitRules"
24
- :placeholder="t('order.padDigit')" @update:modelValue="updatePadDigit" />
25
- </div>
26
- </div>
2
+ <div>
3
+ <FmSwitch
4
+ :model-value="displayStand.enabled"
5
+ :label="t('order.displayStand')"
6
+ label-placement="right"
7
+ @update:model-value="updateEnabled"
8
+ />
9
+ <div
10
+ class="border p-[1.5rem] fm-corner-radius-lg flex flex-col gap-2 my-5 w-11/12"
11
+ v-show="displayStand.enabled"
12
+ >
13
+ <span class="fm-typo-en-title-sm-600">{{ t('order.tableServiceSetting') }}</span>
14
+ <div class="flex flex-col gap-10">
15
+ <!-- prefix -->
16
+ <!-- TODO: How to let user know this field is do for what-->
17
+ <FmTextField
18
+ :model-value="displayStand.prefix"
19
+ :label="t('order.prefix')"
20
+ :placeholder="t('order.prefix')"
21
+ @update:model-value="updatePrefix"
22
+ />
23
+ </div>
24
+ <div class="flex flex-row gap-2">
25
+ <!-- <span class="fm-typo-en-title-sm-600">Table Stand Number Range</span> -->
26
+ <FmStepperField
27
+ class="w-1/2"
28
+ :model-value="displayStand.standSlotRange.min"
29
+ :label="t('order.start')"
30
+ labelMark="required"
31
+ :rules="minRules"
32
+ :placeholder="t('order.enterANumber')"
33
+ @update:modelValue="updateMin"
34
+ />
35
+ <FmStepperField
36
+ class="w-1/2"
37
+ :model-value="displayStand.standSlotRange.max"
38
+ :label="t('order.end')"
39
+ labelMark="required"
40
+ :rules="maxRules"
41
+ :placeholder="t('order.enterANumber')"
42
+ @update:modelValue="updateMax"
43
+ />
44
+ </div>
45
+ <div>
46
+ <!-- pad digit -->
47
+ <!-- TODO: How to let user know this field is do for what-->
48
+ <FmStepperField
49
+ :model-value="displayStand.padDigit"
50
+ :label="t('order.padDigit')"
51
+ labelMark="required"
52
+ :rules="padDigitRules"
53
+ :placeholder="t('order.padDigit')"
54
+ @update:modelValue="updatePadDigit"
55
+ />
56
+ </div>
27
57
  </div>
58
+ </div>
28
59
  </template>
29
60
  <script lang="ts" setup>
30
- import { computed, ref } from 'vue';
31
- import { NumberUtil } from '@/utils/number';
32
- import { ObjectUtil } from '@/utils/object';
33
- import type { DisplayStandSettingForm } from '@/modules/order-setting/kiosk/interface';
61
+ import { computed } from 'vue'
62
+ import { NumberUtil } from '@/utils/number'
63
+ import type { DisplayStandSettingForm } from '@/modules/order-setting/kiosk/interface'
34
64
  import { useI18n } from '@feedmepos/mf-common'
35
65
 
36
66
  const { t } = useI18n()
37
67
 
38
68
  interface Props {
39
- displayStand: DisplayStandSettingForm;
69
+ displayStand: DisplayStandSettingForm
40
70
  }
41
71
 
42
72
  interface Emits {
43
- (e: 'updateDisplayStand', displayStand: DisplayStandSettingForm): void
73
+ (e: 'updateDisplayStand', displayStand: DisplayStandSettingForm): void
44
74
  }
45
75
 
46
- const props = defineProps<Props>();
47
- const emits = defineEmits<Emits>();
48
- const form = ref<DisplayStandSettingForm>(ObjectUtil.clone<DisplayStandSettingForm>(props.displayStand));
76
+ const props = defineProps<Props>()
77
+ const emits = defineEmits<Emits>()
49
78
 
50
79
  const nonNegativeRule = (val: any) => {
51
- if (val < 0) {
52
- return t('order.nonNegativeRule');
53
- }
54
- return true;
80
+ if (val < 0) {
81
+ return t('order.nonNegativeRule')
82
+ }
83
+ return true
55
84
  }
56
85
  const greaterThanMinRule = (val: any) => {
57
- if (val <= (form.value.standSlotRange.min ?? 0)) {
58
- return t('order.greaterThanMinRule');
59
- }
60
- return true;
86
+ if (val <= (props.displayStand.standSlotRange.min ?? 0)) {
87
+ return t('order.greaterThanMinRule')
88
+ }
89
+ return true
61
90
  }
62
- type ErrMsg = string;
63
- type ValidateCallback = (val: any) => true | ErrMsg;
91
+ type ErrMsg = string
92
+ type ValidateCallback = (val: any) => true | ErrMsg
64
93
 
65
- const padDigitRules = computed<(ValidateCallback[])>(() => {
66
- return [nonNegativeRule];
67
- });
94
+ const padDigitRules = computed<ValidateCallback[]>(() => {
95
+ return [nonNegativeRule]
96
+ })
68
97
  const minRules = computed<ValidateCallback[]>(() => {
69
- return [nonNegativeRule];
70
- });
98
+ return [nonNegativeRule]
99
+ })
71
100
  const maxRules = computed<ValidateCallback[]>(() => {
72
- return [nonNegativeRule, greaterThanMinRule];
73
- });
101
+ return [nonNegativeRule, greaterThanMinRule]
102
+ })
74
103
 
75
104
  const previewResult = computed<string>(() => {
76
- const exampleValue = 5;
77
- const padDigitResult = NumberUtil.applyPadDigits(exampleValue, form.value.padDigit ?? 0);
78
- return `Preview: ${form.value.prefix}${padDigitResult}`;
79
- });
105
+ const exampleValue = 5
106
+ const padDigitResult = NumberUtil.applyPadDigits(exampleValue, props.displayStand.padDigit ?? 0)
107
+ return `Preview: ${props.displayStand.prefix}${padDigitResult}`
108
+ })
80
109
 
81
110
  function updateEnabled(v: boolean) {
82
- form.value.enabled = v;
83
- emits('updateDisplayStand', form.value);
111
+ emits('updateDisplayStand', {
112
+ ...props.displayStand,
113
+ enabled: v
114
+ })
84
115
  }
85
116
 
86
117
  function updateMin(v: number | null) {
87
- if (!v) return;
88
- emits('updateDisplayStand', form.value);
118
+ if (!v) return
119
+ emits('updateDisplayStand', {
120
+ ...props.displayStand,
121
+ standSlotRange: {
122
+ ...props.displayStand.standSlotRange,
123
+ min: v
124
+ }
125
+ })
89
126
  }
90
127
 
91
128
  function updateMax(v: number | null) {
92
- if (!v) return;
93
- emits('updateDisplayStand', form.value);
129
+ if (!v) return
130
+ emits('updateDisplayStand', {
131
+ ...props.displayStand,
132
+ standSlotRange: {
133
+ ...props.displayStand.standSlotRange,
134
+ max: v
135
+ }
136
+ })
94
137
  }
95
138
 
96
139
  function updatePrefix(v: string) {
97
- emits('updateDisplayStand', form.value);
140
+ emits('updateDisplayStand', {
141
+ ...props.displayStand,
142
+ prefix: v
143
+ })
98
144
  }
99
145
 
100
146
  function updatePadDigit(v: number | null) {
101
- if (!v) return;
102
- emits('updateDisplayStand', form.value);
147
+ if (!v) return
148
+ emits('updateDisplayStand', {
149
+ ...props.displayStand,
150
+ padDigit: v
151
+ })
103
152
  }
104
-
105
-
106
- </script>
153
+ </script>
@@ -0,0 +1,27 @@
1
+ <template>
2
+ <FmSwitch
3
+ :model-value="v"
4
+ :label="`${t('order.hideNotAvailableMenuItem')}`"
5
+ label-placement="right"
6
+ @update:model-value="updateMenuItemField"
7
+ class="mb-5"
8
+ />
9
+ </template>
10
+ <script setup lang="ts">
11
+ import { useI18n } from '@feedmepos/mf-common'
12
+ const { t } = useI18n()
13
+
14
+ interface Props {
15
+ v: boolean
16
+ }
17
+
18
+ interface Emits {
19
+ (e: 'update:modelValue', v: boolean): void
20
+ }
21
+ defineProps<Props>()
22
+ const emit = defineEmits<Emits>()
23
+
24
+ const updateMenuItemField = (v: boolean) => {
25
+ emit('update:modelValue', v)
26
+ }
27
+ </script>
@@ -0,0 +1,339 @@
1
+ <script setup lang="ts">
2
+ import { FdoOfflinePaymentMethod } from '@feedmepos/core/entity'
3
+ import { F_ORDER_PAYMENT_TYPE, F_ORDER_E_PAYMENT_TYPE, FdoEPaymentMethod } from '@entity'
4
+ import { type PropType, computed, onMounted, ref } from 'vue'
5
+ import OfflinePaymentTypeDialog from '../../order-settings/dine-in/OfflinePaymentTypeDialog.vue'
6
+ import { useI18n } from '@feedmepos/mf-common'
7
+
8
+ const { t } = useI18n()
9
+
10
+ const props = defineProps({
11
+ paymentTypes: {
12
+ type: Array as PropType<F_ORDER_PAYMENT_TYPE[]>,
13
+ required: true
14
+ },
15
+ offlinePaymentTypes: {
16
+ type: Array as PropType<FdoOfflinePaymentMethod[]>,
17
+ required: true
18
+ },
19
+ allowEPayment: {
20
+ type: [Boolean, String],
21
+ required: true
22
+ },
23
+ ePaymentTypes: {
24
+ type: Object as PropType<FdoEPaymentMethod>,
25
+ required: true
26
+ }
27
+ })
28
+
29
+ const emits = defineEmits<{
30
+ (event: 'update:paymentTypes', v: F_ORDER_PAYMENT_TYPE[]): void
31
+ (event: 'update:offlinePaymentTypes', v: FdoOfflinePaymentMethod[]): void
32
+ (event: 'update:ePaymentTypes', v: FdoEPaymentMethod): void
33
+ }>()
34
+
35
+ async function deleteOfflinePayment(index: number) {
36
+ emits(
37
+ 'update:offlinePaymentTypes',
38
+ props.offlinePaymentTypes.filter((_, i) => i !== index)
39
+ )
40
+ }
41
+
42
+ const allowEPayment = computed(() => {
43
+ const paymentTypes = props.paymentTypes || []
44
+ return paymentTypes.includes(F_ORDER_PAYMENT_TYPE.enum.ePayment)
45
+ })
46
+
47
+ const allowOfflinePayment = computed(() => {
48
+ const paymentTypes = props.paymentTypes || []
49
+ const offlinePaymentTypes = props.offlinePaymentTypes || []
50
+
51
+ return paymentTypes.includes(F_ORDER_PAYMENT_TYPE.enum.cash) || offlinePaymentTypes.length > 0
52
+ })
53
+
54
+ const parentCheckbox = ref(false)
55
+ const paymentCheckboxVal = ref<string[]>([])
56
+ const cardPaymentRadioVal = ref<string>()
57
+ const eWalletPaymentRadioVal = ref<string>()
58
+ const useCard = ref(false)
59
+ const useEwallet = ref(false)
60
+
61
+ const checkboxChildren = [
62
+ { label: t('order.offlinePayment'), value: 'offline' },
63
+ { label: t('order.ePayment'), value: 'e-payment' }
64
+ ]
65
+
66
+ const initializeCheckboxes = () => {
67
+ const initialValues: string[] = []
68
+ if (allowOfflinePayment.value) initialValues.push('offline')
69
+ if (allowEPayment.value) initialValues.push('e-payment')
70
+ paymentCheckboxVal.value = initialValues
71
+ parentCheckbox.value = initialValues.length === checkboxChildren.length
72
+ if (!(Object.keys(props.ePaymentTypes).length === 0)) {
73
+ if (props.ePaymentTypes.card.terminal) {
74
+ cardPaymentRadioVal.value = F_ORDER_E_PAYMENT_TYPE.enum.TERMINAL
75
+ useCard.value = true
76
+ } else if (props.ePaymentTypes.card.nfc) {
77
+ cardPaymentRadioVal.value = F_ORDER_E_PAYMENT_TYPE.enum.NFC
78
+ useCard.value = true
79
+ }
80
+
81
+ if (props.ePaymentTypes.eWallet.qrPay) {
82
+ eWalletPaymentRadioVal.value = F_ORDER_E_PAYMENT_TYPE.enum.QRPAY
83
+ useEwallet.value = true
84
+ } else if (props.ePaymentTypes.eWallet.scanPay) {
85
+ eWalletPaymentRadioVal.value = F_ORDER_E_PAYMENT_TYPE.enum.SCANPAY
86
+ useEwallet.value = true
87
+ }
88
+ }
89
+ }
90
+
91
+ initializeCheckboxes()
92
+
93
+ const handleParentUpdate = (ev: boolean) => {
94
+ paymentCheckboxVal.value = ev ? checkboxChildren.map((item) => item.value) : []
95
+ parentCheckbox.value = ev
96
+
97
+ const updatedPaymentTypes: F_ORDER_PAYMENT_TYPE[] = []
98
+ const updatedOfflinePaymentTypes = ev ? props.offlinePaymentTypes || [] : []
99
+
100
+ if (paymentCheckboxVal.value.includes('e-payment')) {
101
+ updatedPaymentTypes.push(F_ORDER_PAYMENT_TYPE.enum.ePayment)
102
+ useCard.value = true
103
+ useEwallet.value = true
104
+ }
105
+ if (paymentCheckboxVal.value.includes('offline')) {
106
+ updatedPaymentTypes.push(F_ORDER_PAYMENT_TYPE.enum.cash)
107
+ }
108
+
109
+ emits('update:paymentTypes', updatedPaymentTypes)
110
+ emits('update:offlinePaymentTypes', updatedOfflinePaymentTypes)
111
+ updateCardSwitch(useCard.value)
112
+ updateECardSwitch(useEwallet.value)
113
+ }
114
+
115
+ const handleChildUpdate = (ev: string[]) => {
116
+ const currentPaymentCheckboxVal = paymentCheckboxVal.value
117
+ paymentCheckboxVal.value = ev
118
+ parentCheckbox.value = ev.length === checkboxChildren.length
119
+
120
+ const updatedPaymentTypes: F_ORDER_PAYMENT_TYPE[] = []
121
+ const updatedOfflinePaymentTypes = ev.includes('offline') ? props.offlinePaymentTypes || [] : []
122
+
123
+ if (ev.includes('e-payment')) {
124
+ updatedPaymentTypes.push(F_ORDER_PAYMENT_TYPE.enum.ePayment)
125
+ }
126
+ if (ev.includes('offline')) {
127
+ updatedPaymentTypes.push(F_ORDER_PAYMENT_TYPE.enum.cash)
128
+ }
129
+
130
+ if (!currentPaymentCheckboxVal.includes('e-payment')) {
131
+ useCard.value = true
132
+ useEwallet.value = true
133
+ updateCardSwitch(useCard.value)
134
+ updateECardSwitch(useEwallet.value)
135
+ }
136
+
137
+ emits('update:paymentTypes', updatedPaymentTypes)
138
+ emits('update:offlinePaymentTypes', updatedOfflinePaymentTypes)
139
+ }
140
+
141
+ const handleEPaymentCardUpdate = (ev: string) => {
142
+ const ePaymentObj = {
143
+ card: {
144
+ terminal: false,
145
+ nfc: false
146
+ },
147
+ eWallet: {
148
+ qrPay: false,
149
+ scanPay: false
150
+ }
151
+ } as FdoEPaymentMethod
152
+
153
+ if (paymentCheckboxVal.value.includes('e-payment')) {
154
+ if (ev == F_ORDER_E_PAYMENT_TYPE.enum.TERMINAL) {
155
+ ePaymentObj.card.terminal = true
156
+ }
157
+
158
+ if (ev == F_ORDER_E_PAYMENT_TYPE.enum.NFC) {
159
+ ePaymentObj.card.nfc = true
160
+ }
161
+
162
+ if (eWalletPaymentRadioVal.value) {
163
+ if (eWalletPaymentRadioVal.value === F_ORDER_E_PAYMENT_TYPE.enum.QRPAY) {
164
+ ePaymentObj.eWallet.qrPay = true
165
+ }
166
+
167
+ if (eWalletPaymentRadioVal.value === F_ORDER_E_PAYMENT_TYPE.enum.SCANPAY) {
168
+ ePaymentObj.eWallet.scanPay = true
169
+ }
170
+ }
171
+ }
172
+
173
+ emits('update:ePaymentTypes', ePaymentObj)
174
+ }
175
+
176
+ const handleEPaymentEWalletUpdate = () => {
177
+ const ePaymentObj = {
178
+ card: {
179
+ terminal: false,
180
+ nfc: false
181
+ },
182
+ eWallet: {
183
+ qrPay: false,
184
+ scanPay: false
185
+ }
186
+ } as FdoEPaymentMethod
187
+
188
+ if (paymentCheckboxVal.value.includes('e-payment')) {
189
+ if (cardPaymentRadioVal.value) {
190
+ if (cardPaymentRadioVal.value === F_ORDER_E_PAYMENT_TYPE.enum.TERMINAL) {
191
+ ePaymentObj.card.terminal = true
192
+ }
193
+
194
+ if (cardPaymentRadioVal.value === F_ORDER_E_PAYMENT_TYPE.enum.NFC) {
195
+ ePaymentObj.card.nfc = true
196
+ }
197
+ }
198
+
199
+ if (eWalletPaymentRadioVal.value === F_ORDER_E_PAYMENT_TYPE.enum.QRPAY) {
200
+ ePaymentObj.eWallet.qrPay = true
201
+ }
202
+
203
+ if (eWalletPaymentRadioVal.value === F_ORDER_E_PAYMENT_TYPE.enum.SCANPAY) {
204
+ ePaymentObj.eWallet.scanPay = true
205
+ }
206
+ }
207
+
208
+ emits('update:ePaymentTypes', ePaymentObj)
209
+ }
210
+
211
+ const updateCardSwitch = (enabled: boolean) => {
212
+ cardPaymentRadioVal.value = ''
213
+ if (enabled) {
214
+ cardPaymentRadioVal.value = F_ORDER_E_PAYMENT_TYPE.enum.TERMINAL
215
+ }
216
+ handleEPaymentEWalletUpdate()
217
+ }
218
+
219
+ const updateECardSwitch = (enabled: boolean) => {
220
+ eWalletPaymentRadioVal.value = ''
221
+ if (enabled) {
222
+ eWalletPaymentRadioVal.value = F_ORDER_E_PAYMENT_TYPE.enum.QRPAY
223
+ }
224
+ handleEPaymentEWalletUpdate()
225
+ }
226
+
227
+ onMounted(() => {
228
+ initializeCheckboxes()
229
+ })
230
+ </script>
231
+ <template>
232
+ <FmCheckbox
233
+ value=""
234
+ :model-value="parentCheckbox"
235
+ :label="t('order.all')"
236
+ :indeterminate="
237
+ paymentCheckboxVal.length > 0 && paymentCheckboxVal.length < checkboxChildren.length
238
+ "
239
+ @update:model-value="handleParentUpdate"
240
+ />
241
+
242
+ <div class="flex flex-row items-center">
243
+ <FmCheckbox
244
+ v-model="paymentCheckboxVal"
245
+ :label="checkboxChildren[0].label"
246
+ :value="checkboxChildren[0].value"
247
+ @update:model-value="handleChildUpdate"
248
+ />
249
+ </div>
250
+ <div
251
+ v-if="
252
+ paymentCheckboxVal.includes(checkboxChildren[0].value) && offlinePaymentTypes?.length === 0
253
+ "
254
+ >
255
+ <OfflinePaymentTypeDialog
256
+ @update:offline-payment-types="
257
+ (v: FdoOfflinePaymentMethod[]) => emits('update:offlinePaymentTypes', v)
258
+ "
259
+ />
260
+ </div>
261
+
262
+ <div v-if="paymentCheckboxVal.includes('offline')" class="ml-7">
263
+ <div v-if="offlinePaymentTypes?.length === 0">
264
+ <FmCard variant="outlined">
265
+ <FmCardSection>{{ t('order.payAtCounter') }}</FmCardSection>
266
+ </FmCard>
267
+ </div>
268
+ <p v-for="(type, i) in offlinePaymentTypes" :key="i">
269
+ <FmCard variant="outlined">
270
+ <FmCardSection class="flex items-center justify-between">
271
+ <div>
272
+ <span class="font-bold">{{ type.name }}</span>
273
+ <br />
274
+ <span>{{ type.instruction }}</span>
275
+ </div>
276
+ <div v-for="(payment, index) in offlinePaymentTypes" :key="index">
277
+ <FmButton
278
+ append-icon="delete"
279
+ variant="tertiary"
280
+ @click="deleteOfflinePayment(index)"
281
+ />
282
+ </div>
283
+ </FmCardSection>
284
+ </FmCard>
285
+ </p>
286
+ </div>
287
+ <FmCheckbox
288
+ v-model="paymentCheckboxVal"
289
+ :label="checkboxChildren[1].label"
290
+ :value="checkboxChildren[1].value"
291
+ @update:model-value="handleChildUpdate"
292
+ />
293
+ <div v-if="paymentCheckboxVal.includes(checkboxChildren[1].value)" class="ml-7">
294
+ <FmCard variant="outlined">
295
+ <FmCardSection>
296
+ <FmSwitch
297
+ :label="t('order.bankCard')"
298
+ :sublabel="t('order.cardPaymentDescription')"
299
+ label-placement="right"
300
+ v-model="useCard"
301
+ @update:modelValue="updateCardSwitch"
302
+ />
303
+ <br />
304
+ <div v-show="useCard" class="ml-7">
305
+ <FmRadioGroup
306
+ v-model="cardPaymentRadioVal"
307
+ @update:model-value="handleEPaymentCardUpdate"
308
+ inline
309
+ >
310
+ <FmRadio :label="t('order.terminal')" :value="F_ORDER_E_PAYMENT_TYPE.enum.TERMINAL" />
311
+ <FmRadio :label="t('order.nfc')" :value="F_ORDER_E_PAYMENT_TYPE.enum.NFC" />
312
+ </FmRadioGroup>
313
+ </div>
314
+ </FmCardSection>
315
+ </FmCard>
316
+ <FmCard variant="outlined" class="mt-2">
317
+ <FmCardSection>
318
+ <FmSwitch
319
+ :label="t('order.eWallet')"
320
+ :sublabel="t('order.eWalletDescription')"
321
+ label-placement="right"
322
+ v-model="useEwallet"
323
+ @update:modelValue="updateECardSwitch"
324
+ />
325
+ <br />
326
+ <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>
335
+ </div>
336
+ </FmCardSection>
337
+ </FmCard>
338
+ </div>
339
+ </template>
@@ -1,29 +1,30 @@
1
1
  <template>
2
- <div>
3
- <FmSwitch v-model="pickUpEnabled" :label="t('order.pickAtCounter')" label-placement="right"
4
- @update:modelValue="updatePickUp" />
5
- </div>
2
+ <div>
3
+ <FmSwitch
4
+ :model-value="enabled"
5
+ :label="t('order.pickAtCounter')"
6
+ label-placement="right"
7
+ @update:model-value="updatePickUp"
8
+ />
9
+ </div>
6
10
  </template>
7
11
  <script lang="ts" setup>
8
- import { ref } from 'vue';
9
12
  import { useI18n } from '@feedmepos/mf-common'
10
13
 
11
14
  const { t } = useI18n()
12
15
 
13
16
  interface Props {
14
- enabled: boolean,
17
+ enabled: boolean
15
18
  }
16
19
 
17
20
  interface Emits {
18
- (e: 'update-pick-up', enabled: boolean): void
21
+ (e: 'update-pick-up', enabled: boolean): void
19
22
  }
20
23
 
21
- const props = defineProps<Props>();
22
- const emits = defineEmits<Emits>();
23
- const pickUpEnabled = ref<boolean>(props.enabled);
24
+ defineProps<Props>()
25
+ const emits = defineEmits<Emits>()
24
26
 
25
- const updatePickUp = (enabled: boolean) => {
26
- pickUpEnabled.value = enabled;
27
- emits('update-pick-up', enabled);
27
+ function updatePickUp(enabled: boolean) {
28
+ emits('update-pick-up', enabled)
28
29
  }
29
- </script>
30
+ </script>