@feedmepos/mf-order-setting 0.0.2 → 0.0.6

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 (372) hide show
  1. package/.env.dev +13 -0
  2. package/.env.example +11 -0
  3. package/.env.prod +12 -0
  4. package/.eslintrc.cjs +15 -0
  5. package/.nvmrc +1 -0
  6. package/.prettierrc.json +8 -0
  7. package/.vscode/extensions.json +8 -0
  8. package/README.md +31 -0
  9. package/dist/KioskSettingView-BTDNtWJ1.js +4 -0
  10. package/{app-gcisgtft.js → dist/app-XcwzVa60.js} +7363 -7390
  11. package/dist/app.js +6 -0
  12. package/dist/frontend/mf-order/src/app.d.ts +4 -0
  13. package/dist/frontend/mf-order/src/router/routes.d.ts +3 -0
  14. package/dist/frontend/mf-order/src/views/order-settings/sms/SmsSetting.vue.d.ts +2 -0
  15. package/dist/frontend/mf-order/tsconfig.app.tsbuildinfo +1 -0
  16. package/env.d.ts +95 -0
  17. package/index.html +16 -0
  18. package/package.json +5 -4
  19. package/postcss.config.js +6 -0
  20. package/public/favicon.ico +0 -0
  21. package/src/App.vue +19 -0
  22. package/src/Entry.vue +42 -0
  23. package/src/api/auth/index.ts +20 -0
  24. package/src/api/delivery/index.ts +15 -0
  25. package/src/api/index.ts +171 -0
  26. package/src/api/kiosk/index.ts +22 -0
  27. package/src/api/menu/index.ts +13 -0
  28. package/src/api/order/index.ts +15 -0
  29. package/src/api/order-setting/index.ts +25 -0
  30. package/src/api/public-setting/index.ts +11 -0
  31. package/src/api/remoteOrder/index.ts +142 -0
  32. package/src/api/restaurant-setting/index.ts +55 -0
  33. package/src/api/table-setting/index.ts +30 -0
  34. package/src/app.ts +7 -0
  35. package/src/assets/base.css +6 -0
  36. package/src/assets/images/no-data.svg +35 -0
  37. package/src/assets/logo.svg +1 -0
  38. package/src/assets/main.css +1 -0
  39. package/src/components/GoogleMap.vue +216 -0
  40. package/src/components/RestaurantSelection.vue +34 -0
  41. package/src/components/index.ts +7 -0
  42. package/src/components/snackbar.ts +44 -0
  43. package/src/components/type.ts +103 -0
  44. package/src/composables/index.ts +7 -0
  45. package/src/composables/loading/index.ts +51 -0
  46. package/src/composables/search.ts +18 -0
  47. package/src/helpers/currency.ts +6 -0
  48. package/src/helpers/date.ts +29 -0
  49. package/src/helpers/iteration.ts +87 -0
  50. package/src/helpers/map.ts +92 -0
  51. package/src/helpers/menu.ts +166 -0
  52. package/src/helpers/number.ts +25 -0
  53. package/src/helpers/object.ts +12 -0
  54. package/src/helpers/profile.ts +52 -0
  55. package/src/i18n.ts +43 -0
  56. package/src/index.d.ts +3 -0
  57. package/src/main.ts +77 -0
  58. package/src/modules/kiosk/interface.ts +16 -0
  59. package/src/modules/order-setting/interface.ts +4 -0
  60. package/src/modules/order-setting/kiosk/interface.ts +52 -0
  61. package/src/plugins/google-maps.ts +28 -0
  62. package/src/router/index.ts +10 -0
  63. package/src/router/routes.ts +43 -0
  64. package/src/stores/app/index.ts +58 -0
  65. package/src/stores/iframe/index.ts +23 -0
  66. package/src/stores/kiosk/index.ts +40 -0
  67. package/src/stores/kiosk/mapper.ts +25 -0
  68. package/src/stores/menu/menu.ts +258 -0
  69. package/src/stores/order-setting/index.ts +61 -0
  70. package/src/stores/order-setting/mapper.ts +104 -0
  71. package/src/stores/restaurant/index.ts +138 -0
  72. package/src/stores/table-settings.ts +160 -0
  73. package/src/stores/type.ts +65 -0
  74. package/src/utils/constants/route.ts +15 -0
  75. package/src/utils/number.ts +16 -0
  76. package/src/utils/object.ts +15 -0
  77. package/src/views/all-orders/ActionMenuCell.vue +92 -0
  78. package/src/views/all-orders/FilterRestaurant.vue +71 -0
  79. package/src/views/all-orders/FilterStatus.vue +121 -0
  80. package/src/views/all-orders/FilterStatusMenu.vue +44 -0
  81. package/src/views/all-orders/Orders.vue +524 -0
  82. package/src/views/all-orders/ReflowOrder.vue +105 -0
  83. package/src/views/all-orders/UpdateDeliveryOrderDialog.vue +313 -0
  84. package/src/views/all-orders/order.ts +584 -0
  85. package/src/views/feedme-express/FeedMeExpress.vue +139 -0
  86. package/src/views/feedme-express/FeedMeExpressSummary.vue +62 -0
  87. package/src/views/kiosk/KioskSummary.vue +74 -0
  88. package/src/views/kiosk/KioskView.vue +140 -0
  89. package/src/views/kiosk/devices/KioskDeviceCard.vue +105 -0
  90. package/src/views/kiosk/devices/KioskDeviceDetail.vue +28 -0
  91. package/src/views/kiosk/devices/KioskDevicesView.vue +27 -0
  92. package/src/views/kiosk/devices/KioskOtpDialog.vue +15 -0
  93. package/src/views/kiosk/devices/KioskUnbindConfirm.vue +28 -0
  94. package/src/views/kiosk/settings/KioskDineInSection.vue +86 -0
  95. package/src/views/kiosk/settings/KioskDisplayStandSection.vue +98 -0
  96. package/src/views/kiosk/settings/KioskPickAtCounterSection.vue +25 -0
  97. package/src/views/kiosk/settings/KioskSettingView.vue +61 -0
  98. package/src/views/kiosk/settings/KioskTakeawaySection.vue +39 -0
  99. package/src/views/order-settings/OrderSettingsView.vue +52 -0
  100. package/src/views/order-settings/components/RestaurantSelector.vue +77 -0
  101. package/src/views/order-settings/delivery/DeliverySetting.vue +799 -0
  102. package/src/views/order-settings/delivery/LocalDelivery.vue +0 -0
  103. package/src/views/order-settings/delivery/components/ManualIntegratedDeliverySetting.vue +167 -0
  104. package/src/views/order-settings/delivery/delivery.data.ts +75 -0
  105. package/src/views/order-settings/delivery/delivery.ts +41 -0
  106. package/src/views/order-settings/delivery/inhouse/CurrencyInput.vue +47 -0
  107. package/src/views/order-settings/delivery/inhouse/DeliveryCustomTime.vue +235 -0
  108. package/src/views/order-settings/delivery/inhouse/DeliveryOrder.vue +236 -0
  109. package/src/views/order-settings/delivery/inhouse/DeliveryTime.vue +143 -0
  110. package/src/views/order-settings/delivery/inhouse/InHouseDelivery.vue +186 -0
  111. package/src/views/order-settings/delivery/inhouse/TimePicker.vue +76 -0
  112. package/src/views/order-settings/delivery/inhouse/ZoneDialog.vue +143 -0
  113. package/src/views/order-settings/delivery/integrated-delivery/FeedmeDelivery.vue +244 -0
  114. package/src/views/order-settings/delivery/integrated-delivery/FoodpandaCampaignDialog.vue +110 -0
  115. package/src/views/order-settings/delivery/integrated-delivery/FoodpandaSetting.vue +261 -0
  116. package/src/views/order-settings/delivery/integrated-delivery/GrabfoodSetting.vue +128 -0
  117. package/src/views/order-settings/delivery/integrated-delivery/IntegratedDelivery.vue +272 -0
  118. package/src/views/order-settings/delivery/integrated-delivery/ShopeefoodSetting.vue +135 -0
  119. package/src/views/order-settings/delivery/integrated.data.interface.ts +0 -0
  120. package/src/views/order-settings/dinein/DineInSetting.vue +128 -0
  121. package/src/views/order-settings/dinein/OfflinePaymentTypeDialog.vue +51 -0
  122. package/src/views/order-settings/dinein/OfflinePaymentTypeDialogContent.vue +44 -0
  123. package/src/views/order-settings/dinein/PaymentType.vue +172 -0
  124. package/src/views/order-settings/pickup/AddressInput.vue +48 -0
  125. package/src/views/order-settings/pickup/CustomPayment.vue +84 -0
  126. package/src/views/order-settings/pickup/PaymentSidesheet.vue +167 -0
  127. package/src/views/order-settings/pickup/PickUpPointDialog.vue +125 -0
  128. package/src/views/order-settings/pickup/PickUpPointDialogContent.vue +95 -0
  129. package/src/views/order-settings/pickup/PickUpSetting.vue +233 -0
  130. package/src/views/order-settings/pickup/PickUpSettingDialog.vue +148 -0
  131. package/src/views/order-settings/pickup/PickUpSideSheet.vue +15 -0
  132. package/src/views/order-settings/pickup/Preorder.vue +139 -0
  133. package/src/views/order-settings/servicecharge/RateInput.vue +34 -0
  134. package/src/views/order-settings/servicecharge/ServiceChargeRule.vue +453 -0
  135. package/src/views/order-settings/servicecharge/ServiceChargeSetting.vue +233 -0
  136. package/src/views/order-settings/sms/SmsSetting.vue +162 -0
  137. package/tailwind.config.js +20 -0
  138. package/tsconfig.app.json +25 -0
  139. package/tsconfig.json +18 -0
  140. package/tsconfig.node.json +16 -0
  141. package/vite.config.ts +60 -0
  142. package/KioskSettingView-BRJpaAwI.js +0 -4
  143. package/app.js +0 -5
  144. package/frontend/mf-order/src/app.d.ts +0 -2
  145. package/frontend/mf-order/tsconfig.app.tsbuildinfo +0 -1
  146. package/style.css +0 -1
  147. package/{common → dist/common}/booking/index.d.ts +0 -0
  148. package/{common → dist/common}/config/bank/index.d.ts +0 -0
  149. package/{common → dist/common}/config/bank/malaysia.d.ts +0 -0
  150. package/{common → dist/common}/config/bank/singapore.d.ts +0 -0
  151. package/{common → dist/common}/config/index.d.ts +0 -0
  152. package/{common → dist/common}/convertor/index.d.ts +0 -0
  153. package/{common → dist/common}/index.d.ts +0 -0
  154. package/{common → dist/common}/number/index.d.ts +0 -0
  155. package/{common → dist/common}/sms/index.d.ts +0 -0
  156. package/{common → dist/common}/util/index.d.ts +0 -0
  157. package/{favicon.ico → dist/favicon.ico} +0 -0
  158. package/{frontend → dist/frontend}/mf-order/src/App.vue.d.ts +0 -0
  159. package/{frontend/mf-order/src/views/all-orders/Orders.vue.d.ts → dist/frontend/mf-order/src/Entry.vue.d.ts} +0 -0
  160. package/{frontend → dist/frontend}/mf-order/src/api/auth/index.d.ts +0 -0
  161. package/{frontend → dist/frontend}/mf-order/src/api/delivery/index.d.ts +0 -0
  162. package/{frontend → dist/frontend}/mf-order/src/api/index.d.ts +0 -0
  163. package/{frontend → dist/frontend}/mf-order/src/api/kiosk/index.d.ts +0 -0
  164. package/{frontend → dist/frontend}/mf-order/src/api/menu/index.d.ts +0 -0
  165. package/{frontend → dist/frontend}/mf-order/src/api/order/index.d.ts +0 -0
  166. package/{frontend → dist/frontend}/mf-order/src/api/order-setting/index.d.ts +0 -0
  167. package/{frontend → dist/frontend}/mf-order/src/api/public-setting/index.d.ts +0 -0
  168. package/{frontend → dist/frontend}/mf-order/src/api/remoteOrder/index.d.ts +0 -0
  169. package/{frontend → dist/frontend}/mf-order/src/api/restaurant-setting/index.d.ts +0 -0
  170. package/{frontend → dist/frontend}/mf-order/src/api/table-setting/index.d.ts +0 -0
  171. package/{frontend → dist/frontend}/mf-order/src/components/GoogleMap.vue.d.ts +0 -0
  172. package/{frontend → dist/frontend}/mf-order/src/components/RestaurantSelection.vue.d.ts +0 -0
  173. package/{frontend → dist/frontend}/mf-order/src/components/index.d.ts +0 -0
  174. package/{frontend → dist/frontend}/mf-order/src/components/snackbar.d.ts +0 -0
  175. package/{frontend → dist/frontend}/mf-order/src/components/type.d.ts +0 -0
  176. package/{frontend → dist/frontend}/mf-order/src/composables/index.d.ts +0 -0
  177. package/{frontend → dist/frontend}/mf-order/src/composables/loading/index.d.ts +0 -0
  178. package/{frontend → dist/frontend}/mf-order/src/composables/search.d.ts +0 -0
  179. package/{frontend → dist/frontend}/mf-order/src/helpers/currency.d.ts +0 -0
  180. package/{frontend → dist/frontend}/mf-order/src/helpers/date.d.ts +0 -0
  181. package/{frontend → dist/frontend}/mf-order/src/helpers/iteration.d.ts +0 -0
  182. package/{frontend → dist/frontend}/mf-order/src/helpers/map.d.ts +0 -0
  183. package/{frontend → dist/frontend}/mf-order/src/helpers/menu.d.ts +0 -0
  184. package/{frontend → dist/frontend}/mf-order/src/helpers/number.d.ts +0 -0
  185. package/{frontend → dist/frontend}/mf-order/src/helpers/object.d.ts +0 -0
  186. package/{frontend → dist/frontend}/mf-order/src/helpers/profile.d.ts +0 -0
  187. package/{frontend → dist/frontend}/mf-order/src/i18n.d.ts +0 -0
  188. package/{frontend → dist/frontend}/mf-order/src/main.d.ts +0 -0
  189. package/{frontend → dist/frontend}/mf-order/src/modules/kiosk/interface.d.ts +0 -0
  190. package/{frontend → dist/frontend}/mf-order/src/modules/order-setting/interface.d.ts +0 -0
  191. package/{frontend → dist/frontend}/mf-order/src/modules/order-setting/kiosk/interface.d.ts +0 -0
  192. package/{frontend → dist/frontend}/mf-order/src/plugins/google-maps.d.ts +0 -0
  193. package/{frontend → dist/frontend}/mf-order/src/router/index.d.ts +0 -0
  194. package/{frontend → dist/frontend}/mf-order/src/stores/app/index.d.ts +0 -0
  195. package/{frontend → dist/frontend}/mf-order/src/stores/iframe/index.d.ts +0 -0
  196. package/{frontend → dist/frontend}/mf-order/src/stores/kiosk/index.d.ts +0 -0
  197. package/{frontend → dist/frontend}/mf-order/src/stores/kiosk/mapper.d.ts +0 -0
  198. package/{frontend → dist/frontend}/mf-order/src/stores/menu/menu.d.ts +0 -0
  199. package/{frontend → dist/frontend}/mf-order/src/stores/order-setting/index.d.ts +0 -0
  200. package/{frontend → dist/frontend}/mf-order/src/stores/order-setting/mapper.d.ts +0 -0
  201. package/{frontend → dist/frontend}/mf-order/src/stores/restaurant/index.d.ts +0 -0
  202. package/{frontend → dist/frontend}/mf-order/src/stores/table-settings.d.ts +0 -0
  203. package/{frontend → dist/frontend}/mf-order/src/stores/type.d.ts +0 -0
  204. package/{frontend → dist/frontend}/mf-order/src/utils/constants/route.d.ts +0 -0
  205. package/{frontend → dist/frontend}/mf-order/src/utils/number.d.ts +0 -0
  206. package/{frontend → dist/frontend}/mf-order/src/utils/object.d.ts +0 -0
  207. package/{frontend → dist/frontend}/mf-order/src/views/all-orders/ActionMenuCell.vue.d.ts +0 -0
  208. package/{frontend → dist/frontend}/mf-order/src/views/all-orders/FilterRestaurant.vue.d.ts +0 -0
  209. package/{frontend → dist/frontend}/mf-order/src/views/all-orders/FilterStatus.vue.d.ts +0 -0
  210. package/{frontend → dist/frontend}/mf-order/src/views/all-orders/FilterStatusMenu.vue.d.ts +0 -0
  211. package/{frontend/mf-order/src/views/feedme-express/FeedMeExpress.vue.d.ts → dist/frontend/mf-order/src/views/all-orders/Orders.vue.d.ts} +0 -0
  212. package/{frontend → dist/frontend}/mf-order/src/views/all-orders/ReflowOrder.vue.d.ts +0 -0
  213. package/{frontend → dist/frontend}/mf-order/src/views/all-orders/UpdateDeliveryOrderDialog.vue.d.ts +0 -0
  214. package/{frontend → dist/frontend}/mf-order/src/views/all-orders/order.d.ts +2 -2
  215. package/{frontend/mf-order/src/views/kiosk/KioskView.vue.d.ts → dist/frontend/mf-order/src/views/feedme-express/FeedMeExpress.vue.d.ts} +0 -0
  216. package/{frontend → dist/frontend}/mf-order/src/views/feedme-express/FeedMeExpressSummary.vue.d.ts +0 -0
  217. package/{frontend → dist/frontend}/mf-order/src/views/kiosk/KioskSummary.vue.d.ts +0 -0
  218. package/{frontend/mf-order/src/views/order-settings/OrderSettingsView.vue.d.ts → dist/frontend/mf-order/src/views/kiosk/KioskView.vue.d.ts} +0 -0
  219. package/{frontend → dist/frontend}/mf-order/src/views/kiosk/devices/KioskDeviceCard.vue.d.ts +0 -0
  220. package/{frontend → dist/frontend}/mf-order/src/views/kiosk/devices/KioskDeviceDetail.vue.d.ts +0 -0
  221. package/{frontend → dist/frontend}/mf-order/src/views/kiosk/devices/KioskDevicesView.vue.d.ts +0 -0
  222. package/{frontend → dist/frontend}/mf-order/src/views/kiosk/devices/KioskOtpDialog.vue.d.ts +0 -0
  223. package/{frontend → dist/frontend}/mf-order/src/views/kiosk/devices/KioskUnbindConfirm.vue.d.ts +0 -0
  224. package/{frontend → dist/frontend}/mf-order/src/views/kiosk/settings/KioskDineInSection.vue.d.ts +0 -0
  225. package/{frontend → dist/frontend}/mf-order/src/views/kiosk/settings/KioskDisplayStandSection.vue.d.ts +0 -0
  226. package/{frontend → dist/frontend}/mf-order/src/views/kiosk/settings/KioskPickAtCounterSection.vue.d.ts +0 -0
  227. package/{frontend → dist/frontend}/mf-order/src/views/kiosk/settings/KioskSettingView.vue.d.ts +0 -0
  228. package/{frontend → dist/frontend}/mf-order/src/views/kiosk/settings/KioskTakeawaySection.vue.d.ts +0 -0
  229. package/{frontend/mf-order/src/views/order-settings/delivery/LocalDelivery.vue.d.ts → dist/frontend/mf-order/src/views/order-settings/OrderSettingsView.vue.d.ts} +0 -0
  230. package/{frontend → dist/frontend}/mf-order/src/views/order-settings/components/RestaurantSelector.vue.d.ts +0 -0
  231. package/{frontend → dist/frontend}/mf-order/src/views/order-settings/delivery/DeliverySetting.vue.d.ts +0 -0
  232. package/{frontend/mf-order/src/views/order-settings/dinein/DineInSetting.vue.d.ts → dist/frontend/mf-order/src/views/order-settings/delivery/LocalDelivery.vue.d.ts} +0 -0
  233. package/{frontend → dist/frontend}/mf-order/src/views/order-settings/delivery/components/ManualIntegratedDeliverySetting.vue.d.ts +0 -0
  234. package/{frontend → dist/frontend}/mf-order/src/views/order-settings/delivery/delivery.d.ts +0 -0
  235. package/{frontend → dist/frontend}/mf-order/src/views/order-settings/delivery/delivery.data.d.ts +0 -0
  236. package/{frontend → dist/frontend}/mf-order/src/views/order-settings/delivery/inhouse/CurrencyInput.vue.d.ts +0 -0
  237. package/{frontend → dist/frontend}/mf-order/src/views/order-settings/delivery/inhouse/DeliveryCustomTime.vue.d.ts +0 -0
  238. package/{frontend → dist/frontend}/mf-order/src/views/order-settings/delivery/inhouse/DeliveryOrder.vue.d.ts +0 -0
  239. package/{frontend → dist/frontend}/mf-order/src/views/order-settings/delivery/inhouse/DeliveryTime.vue.d.ts +0 -0
  240. package/{frontend → dist/frontend}/mf-order/src/views/order-settings/delivery/inhouse/InHouseDelivery.vue.d.ts +0 -0
  241. package/{frontend → dist/frontend}/mf-order/src/views/order-settings/delivery/inhouse/TimePicker.vue.d.ts +0 -0
  242. package/{frontend → dist/frontend}/mf-order/src/views/order-settings/delivery/inhouse/ZoneDialog.vue.d.ts +0 -0
  243. package/{frontend → dist/frontend}/mf-order/src/views/order-settings/delivery/integrated-delivery/FeedmeDelivery.vue.d.ts +0 -0
  244. package/{frontend → dist/frontend}/mf-order/src/views/order-settings/delivery/integrated-delivery/FoodpandaCampaignDialog.vue.d.ts +0 -0
  245. package/{frontend → dist/frontend}/mf-order/src/views/order-settings/delivery/integrated-delivery/FoodpandaSetting.vue.d.ts +0 -0
  246. package/{frontend → dist/frontend}/mf-order/src/views/order-settings/delivery/integrated-delivery/GrabfoodSetting.vue.d.ts +0 -0
  247. package/{frontend → dist/frontend}/mf-order/src/views/order-settings/delivery/integrated-delivery/IntegratedDelivery.vue.d.ts +0 -0
  248. package/{frontend → dist/frontend}/mf-order/src/views/order-settings/delivery/integrated-delivery/ShopeefoodSetting.vue.d.ts +0 -0
  249. package/{frontend → dist/frontend}/mf-order/src/views/order-settings/delivery/integrated.data.interface.d.ts +0 -0
  250. package/{frontend/mf-order/src/views/order-settings/pickup/PickUpSideSheet.vue.d.ts → dist/frontend/mf-order/src/views/order-settings/dinein/DineInSetting.vue.d.ts} +0 -0
  251. package/{frontend → dist/frontend}/mf-order/src/views/order-settings/dinein/OfflinePaymentTypeDialog.vue.d.ts +0 -0
  252. package/{frontend → dist/frontend}/mf-order/src/views/order-settings/dinein/OfflinePaymentTypeDialogContent.vue.d.ts +0 -0
  253. package/{frontend → dist/frontend}/mf-order/src/views/order-settings/dinein/PaymentType.vue.d.ts +0 -0
  254. package/{frontend → dist/frontend}/mf-order/src/views/order-settings/pickup/AddressInput.vue.d.ts +0 -0
  255. package/{frontend → dist/frontend}/mf-order/src/views/order-settings/pickup/CustomPayment.vue.d.ts +0 -0
  256. package/{frontend → dist/frontend}/mf-order/src/views/order-settings/pickup/PaymentSidesheet.vue.d.ts +0 -0
  257. package/{frontend → dist/frontend}/mf-order/src/views/order-settings/pickup/PickUpPointDialog.vue.d.ts +0 -0
  258. package/{frontend → dist/frontend}/mf-order/src/views/order-settings/pickup/PickUpPointDialogContent.vue.d.ts +0 -0
  259. package/{frontend → dist/frontend}/mf-order/src/views/order-settings/pickup/PickUpSetting.vue.d.ts +0 -0
  260. package/{frontend → dist/frontend}/mf-order/src/views/order-settings/pickup/PickUpSettingDialog.vue.d.ts +0 -0
  261. package/{frontend/mf-order/src/views/order-settings/servicecharge/ServiceChargeSetting.vue.d.ts → dist/frontend/mf-order/src/views/order-settings/pickup/PickUpSideSheet.vue.d.ts} +0 -0
  262. package/{frontend → dist/frontend}/mf-order/src/views/order-settings/pickup/Preorder.vue.d.ts +0 -0
  263. package/{frontend → dist/frontend}/mf-order/src/views/order-settings/servicecharge/RateInput.vue.d.ts +0 -0
  264. package/{frontend → dist/frontend}/mf-order/src/views/order-settings/servicecharge/ServiceChargeRule.vue.d.ts +0 -0
  265. package/{frontend/mf-order/src/views/order-settings/sms/SmsSetting.vue.d.ts → dist/frontend/mf-order/src/views/order-settings/servicecharge/ServiceChargeSetting.vue.d.ts} +0 -0
  266. package/{package → dist/package}/entity/booking/booking.do.d.ts +0 -0
  267. package/{package → dist/package}/entity/booking/booking.dto.d.ts +0 -0
  268. package/{package → dist/package}/entity/booking/booking.enum.d.ts +0 -0
  269. package/{package → dist/package}/entity/business/business.dto.d.ts +0 -0
  270. package/{package → dist/package}/entity/clickup/clickup.dto.d.ts +0 -0
  271. package/{package → dist/package}/entity/cursor/cursor.dto.d.ts +0 -0
  272. package/{package → dist/package}/entity/delivery/delivery.do.d.ts +0 -0
  273. package/{package → dist/package}/entity/delivery/delivery.dto.d.ts +28 -28
  274. package/{package → dist/package}/entity/delivery/delivery.enum.d.ts +0 -0
  275. package/{package → dist/package}/entity/delivery/gateway/grab.dto.d.ts +0 -0
  276. package/{package → dist/package}/entity/delivery/gateway/grab.enum.d.ts +0 -0
  277. package/{package → dist/package}/entity/delivery/gateway/kosmo.dto.d.ts +0 -0
  278. package/{package → dist/package}/entity/delivery/gateway/kosmo.enum.d.ts +0 -0
  279. package/{package → dist/package}/entity/delivery/gateway/manual.dto.d.ts +0 -0
  280. package/{package → dist/package}/entity/delivery/gateway/manual.enum.d.ts +0 -0
  281. package/{package → dist/package}/entity/delivery/gateway/pandago.dto.d.ts +2 -2
  282. package/{package → dist/package}/entity/delivery/gateway/pandago.enum.d.ts +0 -0
  283. package/{package → dist/package}/entity/delivery/linked-delivery.do.d.ts +0 -0
  284. package/{package → dist/package}/entity/food-court/food-court.do.d.ts +0 -0
  285. package/{package → dist/package}/entity/food-court/food-court.dto.d.ts +0 -0
  286. package/{package → dist/package}/entity/food-court/food-court.enum.d.ts +0 -0
  287. package/{package → dist/package}/entity/food-court/order.do.d.ts +0 -0
  288. package/{package → dist/package}/entity/food-court/order.dto.d.ts +0 -0
  289. package/{package → dist/package}/entity/general/dateTime.dto.d.ts +0 -0
  290. package/{package → dist/package}/entity/general/number.dto.d.ts +0 -0
  291. package/{package → dist/package}/entity/general/search.dto.d.ts +0 -0
  292. package/{package → dist/package}/entity/incoming-order/incoming-order-to-bill.dto.d.ts +0 -0
  293. package/{package → dist/package}/entity/incoming-order/incoming-order.do.d.ts +0 -0
  294. package/{package → dist/package}/entity/incoming-order/incoming-order.dto.d.ts +0 -0
  295. package/{package → dist/package}/entity/incoming-order/incoming-order.enum.d.ts +0 -0
  296. package/{package → dist/package}/entity/index.d.ts +0 -0
  297. package/{package → dist/package}/entity/kiosk/kiosk.do.d.ts +0 -0
  298. package/{package → dist/package}/entity/kiosk/kiosk.dto.d.ts +0 -0
  299. package/{package → dist/package}/entity/kiosk/marketing/marketing.dto.d.ts +0 -0
  300. package/{package → dist/package}/entity/kiosk/scanner/scanner.do.d.ts +0 -0
  301. package/{package → dist/package}/entity/kiosk/scanner/scanner.dto.d.ts +0 -0
  302. package/{package → dist/package}/entity/kiosk/scanner/scanner.enum.d.ts +0 -0
  303. package/{package → dist/package}/entity/marketing/marketing.dto.d.ts +0 -0
  304. package/{package → dist/package}/entity/member/member.dto.d.ts +0 -0
  305. package/{package → dist/package}/entity/money/money.enum.d.ts +0 -0
  306. package/{package → dist/package}/entity/order/dine-in/dine-in.do.d.ts +0 -0
  307. package/{package → dist/package}/entity/order/dine-in/dine-in.dto.d.ts +0 -0
  308. package/{package → dist/package}/entity/order/dine-in/qr.do.d.ts +0 -0
  309. package/{package → dist/package}/entity/order/dine-in/reservation.do.d.ts +0 -0
  310. package/{package → dist/package}/entity/order/dine-in/reservation.dto.d.ts +0 -0
  311. package/{package → dist/package}/entity/order/effects/effect.dto.d.ts +0 -0
  312. package/{package → dist/package}/entity/order/effects/effect.enum.d.ts +0 -0
  313. package/{package → dist/package}/entity/order/menu/menu.dto.d.ts +0 -0
  314. package/{package → dist/package}/entity/order/order-item/order-item.dto.d.ts +0 -0
  315. package/{package → dist/package}/entity/order/order.do.d.ts +0 -0
  316. package/{package → dist/package}/entity/order/order.dto.d.ts +4 -4
  317. package/{package → dist/package}/entity/order/order.enum.d.ts +0 -0
  318. package/{package → dist/package}/entity/order/payment/payment.dto.d.ts +0 -0
  319. package/{package → dist/package}/entity/order/pickup/pickup.do.d.ts +0 -0
  320. package/{package → dist/package}/entity/order/pickup/pickup.dto.d.ts +0 -0
  321. package/{package → dist/package}/entity/order/timeslot/timeslot.dto.d.ts +0 -0
  322. package/{package → dist/package}/entity/order/timeslot/timeslot.enum.d.ts +0 -0
  323. package/{package → dist/package}/entity/order-platform/base-integration.do.d.ts +0 -0
  324. package/{package → dist/package}/entity/order-platform/foodpanda/foodpanda-menu.dto.d.ts +48 -48
  325. package/{package → dist/package}/entity/order-platform/foodpanda/foodpanda-order.do.d.ts +16 -16
  326. package/{package → dist/package}/entity/order-platform/foodpanda/foodpanda-order.dto.d.ts +6 -6
  327. package/{package → dist/package}/entity/order-platform/foodpanda/foodpanda-settings.do.d.ts +0 -0
  328. package/{package → dist/package}/entity/order-platform/foodpanda/foodpanda-settings.dto.d.ts +0 -0
  329. package/{package → dist/package}/entity/order-platform/foodpanda/foodpanda.enum.d.ts +0 -0
  330. package/{package → dist/package}/entity/order-platform/grabfood/grabfood-menu.do.d.ts +0 -0
  331. package/{package → dist/package}/entity/order-platform/grabfood/grabfood-order.do.d.ts +0 -0
  332. package/{package → dist/package}/entity/order-platform/grabfood/grabfood-settings.do.d.ts +0 -0
  333. package/{package → dist/package}/entity/order-platform/grabfood/grabfood.dto.d.ts +0 -0
  334. package/{package → dist/package}/entity/order-platform/grabfood/grabfood.enum.d.ts +0 -0
  335. package/{package → dist/package}/entity/order-platform/menu.dto.d.ts +0 -0
  336. package/{package → dist/package}/entity/order-platform/order-platform.dto.d.ts +0 -0
  337. package/{package → dist/package}/entity/order-platform/order-platform.enum.d.ts +0 -0
  338. package/{package → dist/package}/entity/order-platform/shopeefood/shopeefood-menu.do.d.ts +0 -0
  339. package/{package → dist/package}/entity/order-platform/shopeefood/shopeefood-order.do.d.ts +20 -20
  340. /package/{package → dist/package}/entity/order-platform/shopeefood/shopeefood-order.dto.d.ts +0 -0
  341. /package/{package → dist/package}/entity/order-platform/shopeefood/shopeefood-settings.do.d.ts +0 -0
  342. /package/{package → dist/package}/entity/order-platform/shopeefood/shopeefood-settings.dto.d.ts +0 -0
  343. /package/{package → dist/package}/entity/order-platform/shopeefood/shopeefood.enum.d.ts +0 -0
  344. /package/{package → dist/package}/entity/order-setting/customization/color.do.d.ts +0 -0
  345. /package/{package → dist/package}/entity/order-setting/customization/color.dto.d.ts +0 -0
  346. /package/{package → dist/package}/entity/order-setting/kiosk/kiosk.do.d.ts +0 -0
  347. /package/{package → dist/package}/entity/order-setting/kiosk/kiosk.dto.d.ts +0 -0
  348. /package/{package → dist/package}/entity/order-setting/order-setting.do.d.ts +0 -0
  349. /package/{package → dist/package}/entity/order-setting/order-setting.dto.d.ts +0 -0
  350. /package/{package → dist/package}/entity/order-setting/queue/queue.do.d.ts +0 -0
  351. /package/{package → dist/package}/entity/order-setting/queue/queue.dto.d.ts +0 -0
  352. /package/{package → dist/package}/entity/order-setting/reservation/reservation.do.d.ts +0 -0
  353. /package/{package → dist/package}/entity/order-setting/reservation/reservation.dto.d.ts +0 -0
  354. /package/{package → dist/package}/entity/order-setting/sequence/sequence.do.d.ts +0 -0
  355. /package/{package → dist/package}/entity/order-setting/sequence/sequence.dto.d.ts +0 -0
  356. /package/{package → dist/package}/entity/order-setting/sms/sms.do.d.ts +0 -0
  357. /package/{package → dist/package}/entity/order-setting/sms/sms.dto.d.ts +0 -0
  358. /package/{package → dist/package}/entity/order-setting/sms/sms.enum.d.ts +0 -0
  359. /package/{package → dist/package}/entity/order-setting/upselling/upselling.do.d.ts +0 -0
  360. /package/{package → dist/package}/entity/order-setting/upselling/upselling.dto.d.ts +0 -0
  361. /package/{package → dist/package}/entity/order-setting/v3/v3.do.d.ts +0 -0
  362. /package/{package → dist/package}/entity/order-setting/v3/v3.dto.d.ts +0 -0
  363. /package/{package → dist/package}/entity/pagination/pagination.dto.d.ts +0 -0
  364. /package/{package → dist/package}/entity/payment/payment.enum.d.ts +0 -0
  365. /package/{package → dist/package}/entity/printer/printer.do.d.ts +0 -0
  366. /package/{package → dist/package}/entity/queue/queue.do.d.ts +0 -0
  367. /package/{package → dist/package}/entity/queue/queue.dto.d.ts +0 -0
  368. /package/{package → dist/package}/entity/queue/queue.enum.d.ts +0 -0
  369. /package/{package → dist/package}/entity/restaurant/restaurant.dto.d.ts +0 -0
  370. /package/{package → dist/package}/entity/user/user.do.d.ts +0 -0
  371. /package/{package → dist/package}/entity/websocket/websocket.dto.d.ts +0 -0
  372. /package/{package → dist/package}/entity/websocket/websocket.enum.d.ts +0 -0
@@ -0,0 +1,62 @@
1
+ <template>
2
+ <FmCard variant="outlined" class="p-5">
3
+ <span class="fm-typo-en-title-sm-800">FeedMe express summary</span>
4
+ <hr class="my-[0.25rem]" />
5
+ <div class="flex flex-col gap-1">
6
+ <div class="flex flex-col gap-1">
7
+ <span class="fm-typo-en-body-lg-400 text-fm-color-typo-secondary mt-5">Status</span>
8
+ <div class="fm-typo-en-body-lg-600 block">{{ status }}</div>
9
+
10
+ <span class="fm-typo-en-body-lg-400 text-fm-color-typo-secondary">Max delivery distance</span>
11
+ <div class="fm-typo-en-body-lg-600 block">{{ props.setting.feedMe.maxDistance }}km</div>
12
+
13
+ <span class="fm-typo-en-body-lg-400 text-fm-color-typo-secondary">Operation hour</span>
14
+ <div class="fm-typo-en-body-lg-600 block mb-2">
15
+ <div v-for="(hours, index) in formattedOperatingHours" :key="index">{{ hours }}</div>
16
+ </div>
17
+ </div>
18
+ </div>
19
+ </FmCard>
20
+ </template>
21
+
22
+ <script lang="ts" setup>
23
+ import type { FdoDeliverySetting } from '@feedmepos/core/entity'
24
+ import { computed } from 'vue'
25
+
26
+ interface Props {
27
+ setting: FdoDeliverySetting
28
+ }
29
+ const props = defineProps<Props>()
30
+
31
+ const dayMap = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']
32
+
33
+ const formatTime = (time: string): string => {
34
+ const [hour, minute] = time.split(':').map(Number)
35
+ const suffix = hour >= 12 ? 'PM' : 'AM'
36
+ const formattedHour = hour % 12 || 12
37
+ return `${formattedHour}:${minute.toString().padStart(2, '0')}${suffix}`
38
+ }
39
+
40
+ const formattedOperatingHours = computed(() => {
41
+ const sortDays = (a: [string, any], b: [string, any]) => {
42
+ const dayIndexA = Number(a[0])
43
+ const dayIndexB = Number(b[0])
44
+ if (dayIndexA === 0) return 1
45
+ if (dayIndexB === 0) return -1
46
+ return dayIndexA - dayIndexB
47
+ }
48
+
49
+ return Object.entries(props.setting.feedMe.operatingHours || {})
50
+ .filter(([_, day]) => day.enable)
51
+ .sort(sortDays)
52
+ .map(([dayIndex, day]) => {
53
+ const dayName = dayMap[Number(dayIndex)]
54
+ const timeSlots = day.hours.map((hour) => `${formatTime(hour.start)} - ${formatTime(hour.end)}`)
55
+ return `${dayName}, ${timeSlots.join(', ')}`
56
+ })
57
+ })
58
+
59
+ const status = computed<string>(() => {
60
+ return props.setting.feedMe.enable ? 'Active' : 'Inactive'
61
+ })
62
+ </script>
@@ -0,0 +1,74 @@
1
+ <template>
2
+ <div class="p-[1.5rem] border fm-corner-radius-lg flex flex-col gap-5">
3
+ <span class="fm-typo-en-title-sm-800">Kiosk Summary</span>
4
+ <hr class="my-[0.25rem]" />
5
+ <div class="flex flex-col gap-1">
6
+ <div class="flex flex-col gap-1">
7
+ <span class="fm-typo-en-body-lg-400 text-fm-color-typo-secondary">Kiosk Display</span>
8
+
9
+ <div class="fm-typo-en-body-lg-600">
10
+ <div v-if="devices.length > 0">
11
+ <li class="block" v-for="device in devices" :key="device.machineId">{{ device.name }}</li>
12
+ </div>
13
+ <div v-else>-</div>
14
+ </div>
15
+
16
+ <div v-if="dineInStatus === 'Activated'">
17
+ <span class="fm-typo-en-body-lg-400 text-fm-color-typo-secondary">Dine In</span>
18
+ <div class="fm-typo-en-body-lg-600 block">
19
+ <div>{{ dineInStatus }}</div>
20
+ </div>
21
+ </div>
22
+
23
+ <div v-if=" dineInStatus === 'Activated' && dineInType !== 'Unknown'">
24
+ <span class="fm-typo-en-body-lg-400 text-fm-color-typo-secondary">Dine In Type</span>
25
+ <div class="fm-typo-en-body-lg-600 block">
26
+ <div>{{ dineInType }}</div>
27
+ </div>
28
+ </div>
29
+
30
+ <div v-if="takeAwayStatus === 'Activated'">
31
+ <span class="fm-typo-en-body-lg-400 text-fm-color-typo-secondary">Take Away</span>
32
+ <div class="fm-typo-en-body-lg-600 block">
33
+ <div>{{ takeAwayStatus }}</div>
34
+ </div>
35
+ </div>
36
+
37
+
38
+ </div>
39
+ </div>
40
+ </div>
41
+ </template>
42
+
43
+ <script lang="ts" setup>
44
+ import type { MfKioskDevice } from '@/modules/kiosk/interface';
45
+ import type { MfKioskOrderSetting } from '@/modules/order-setting/kiosk/interface';
46
+ import { computed } from 'vue'
47
+
48
+ interface Props {
49
+ restaurantId: string,
50
+ devices : MfKioskDevice[],
51
+ kioskOrderSetting: MfKioskOrderSetting | undefined,
52
+ // getOrderSetting : () => MfKioskOrderSetting | undefined,
53
+ }
54
+ const props = defineProps<Props>();
55
+
56
+ const dineInStatus = computed<string>(() => {
57
+ return props.kioskOrderSetting?.dineIn.enabled ? 'Activated' : 'Deactivated';
58
+ });
59
+
60
+ const takeAwayStatus = computed<string>(() => {
61
+ return props.kioskOrderSetting?.takeaway.enabled ? 'Activated' : 'Deactivated';
62
+ });
63
+
64
+ const dineInType = computed<string>(() => {
65
+ if (props.kioskOrderSetting?.dineIn.displayStand){
66
+ return 'Table Service'
67
+ } else if (props.kioskOrderSetting?.dineIn && !props.kioskOrderSetting.dineIn.displayStand){
68
+ return 'Pick at counter'
69
+ } else {
70
+ return 'Unknown'
71
+ }
72
+ });
73
+
74
+ </script>
@@ -0,0 +1,140 @@
1
+ <template>
2
+ <div class="py-[1.5rem]">
3
+ <FmPageHead title="Kiosk" />
4
+ <div class="flex px-[1.5rem]">
5
+ <div class="flex-[2_2_0%]">
6
+ <FmTabs v-model:model-value="selectedMenuItem" :items="menuItems"></FmTabs>
7
+ <div class="pt-[1.5rem]">
8
+ <div class="flex flex-col gap-10">
9
+ <div class="flex flex-col gap-2">
10
+ <span class="fm-typo-en-title-sm-800"> Activate location </span>
11
+ <span class="fm-typo-en-title-sm-400"> Select Restaurant: </span>
12
+ <FmSelect class="w-1/2" v-model="currentSelect" :items="restaurantItems"
13
+ @update:model-value="selectRestaurant" />
14
+ </div>
15
+ <KioskDevicesView v-if="selectedMenuItem == 'device'" :devices="devices"
16
+ :request-otp="requestOtp" />
17
+ <KioskSettingView v-if="selectedMenuItem == 'setting'" :restaurant-id="currentRestaurantId"
18
+ @update-dine-in="updateDineInSetting" @update-takeaway="updateTakeawaySetting"
19
+ :get-order-setting="() => OrderSettingStore.state.kiosk" />
20
+ </div>
21
+ </div>
22
+ </div>
23
+ <div class="flex-[1_1_0%]">
24
+ <KioskSummary :restaurant-id="currentRestaurantId" :devices="devices"
25
+ :kiosk-order-setting="OrderSettingStore.state.kiosk" />
26
+ </div>
27
+ </div>
28
+ </div>
29
+ </template>
30
+ <script setup lang="ts">
31
+ import KioskDevicesView from '@/views/kiosk/devices/KioskDevicesView.vue';
32
+ import KioskSummary from '@/views/kiosk/KioskSummary.vue';
33
+ import { useDialog, useSnackbar, type FmTabProps, type ISelectItem } from '@feedmepos/ui-library';
34
+ import { ref, computed, defineAsyncComponent } from 'vue';
35
+ import { useKioskStore } from '@/stores/kiosk';
36
+ import type { MfKioskDevice } from "@/modules/kiosk/interface";
37
+ import KioskOtpDialog from "@/views/kiosk/devices/KioskOtpDialog.vue";
38
+ import { useCoreStore } from "@feedmepos/mf-common";
39
+ import { useOrderSettings } from '@/stores/order-setting';
40
+ import type { MfKioskDineInSetting, MfKioskTakeawaySetting } from '@/modules/order-setting/kiosk/interface';
41
+
42
+ type KioskMenuItemValue = "device" | "setting";
43
+
44
+ const KioskSettingView = defineAsyncComponent(() => import('@/views/kiosk/settings/KioskSettingView.vue'));
45
+
46
+ const selectedMenuItem = ref<KioskMenuItemValue>('device');
47
+ const KioskStore = useKioskStore();
48
+ const OrderSettingStore = useOrderSettings();
49
+ const Dialog = useDialog();
50
+ const { currentRestaurant, restaurants, changeRestaurant } = useCoreStore();
51
+ const SnackBar = useSnackbar();
52
+ const currentSelect = ref<string>(currentRestaurant.value?.profile.name ?? 'select');
53
+
54
+ const restaurantItems = computed<ISelectItem[]>(() => {
55
+ const pv: ISelectItem[] = [{
56
+ label: 'Please select...',
57
+ value: 'select',
58
+ }];
59
+ pv.push(...restaurants.value.map((r) => {
60
+ return {
61
+ label: r.profile.name,
62
+ value: r._id,
63
+ }
64
+ }));
65
+ return pv;
66
+ });
67
+
68
+ const currentRestaurantId = ref<string>(currentRestaurant.value?._id ?? '');
69
+
70
+ async function selectRestaurant(v: string) {
71
+ if (v == 'select') {
72
+ changeRestaurant(undefined);
73
+ } else {
74
+ const restaurant = restaurants.value.find((r) => r._id == v);
75
+ changeRestaurant(restaurant);
76
+ await OrderSettingStore.getSetting();
77
+ await KioskStore.getDevices();
78
+ currentRestaurantId.value = v;
79
+ }
80
+ }
81
+
82
+ const menuItems = computed<FmTabProps[]>(() => [
83
+ {
84
+ label: 'Device Binding',
85
+ value: 'device',
86
+ },
87
+ {
88
+ label: 'Settings',
89
+ value: 'setting',
90
+ }
91
+ ]);
92
+
93
+ const devices = computed<MfKioskDevice[]>(() => {
94
+ return KioskStore.state.devices;
95
+ });
96
+
97
+ async function requestOtp() {
98
+ await KioskStore.requestOtp();
99
+ Dialog.open({
100
+ title: "Bind Device",
101
+ contentComponent: KioskOtpDialog,
102
+ contentComponentProps: {
103
+ otp: KioskStore.state.otp,
104
+ }
105
+ });
106
+ }
107
+
108
+ async function updateDineInSetting(form: MfKioskDineInSetting) {
109
+ try{
110
+ OrderSettingStore.setKioskDineInSetting(form);
111
+ await OrderSettingStore.updateKioskSetting();
112
+ SnackBar.open({
113
+ title: 'Dine-in setting updated',
114
+ type: 'success',
115
+ });
116
+ }catch(e){
117
+ SnackBar.open({
118
+ title: 'Failed to update dine-in setting',
119
+ type: 'error',
120
+ });
121
+ }
122
+ }
123
+
124
+ async function updateTakeawaySetting(form: MfKioskTakeawaySetting) {
125
+ try{
126
+ OrderSettingStore.setKioskTakeawaySetting(form);
127
+ await OrderSettingStore.updateKioskSetting();
128
+ SnackBar.open({
129
+ title: 'Takeaway setting updated',
130
+ type: 'success',
131
+ });
132
+ } catch (e) {
133
+ SnackBar.open({
134
+ title: 'Failed to update takeaway setting',
135
+ type: 'error',
136
+ });
137
+ }
138
+ }
139
+
140
+ </script>
@@ -0,0 +1,105 @@
1
+ <template>
2
+
3
+ <div class="border fm-corner-radius-lg flex justify-between pr-[1rem] w-11/12">
4
+ <FmSideSheet header="Device Details" dismiss-away class="w-full" :maxWidth="700">
5
+ <template #side-sheet-button>
6
+ <FmListItem class="flex-1" :label="device.name"
7
+ :sublabel="`Activated date: ${dayjs(device.activatedAt).format('DD MMM YYYY HH:mm')}`">
8
+ </FmListItem>
9
+ </template>
10
+ <div class="py-[1rem] flex flex-col gap-6">
11
+ <span class="fm-typo-en-title-sm-800">{{ device.name }}</span>
12
+ <div v-for="config in configs.filter(c => c[1])"
13
+ class="w-full border p-[1.5rem] fm-corner-radius-lg flex flex-col gap-2">
14
+ <span class="fm-typo-en-title-sm-800" v-if="config[1]">{{ config[0] }}</span>
15
+ <div class="flex flex-col gap-1" v-if="config[1]" v-for="configEntry in Object.entries(config[1])">
16
+ <span class="fm-typo-en-body-lg-400 text-fm-color-typo-secondary">{{ configEntry[0]
17
+ }}</span>
18
+ <span class="fm-typo-en-body-lg-600 block">{{ configEntry[1] == '' ? '-' : configEntry[1] }}</span>
19
+ </div>
20
+ </div>
21
+ </div>
22
+ </FmSideSheet>
23
+ <FmButton variant="plain" append-icon="link_off" class=" text-fm-color-system-error-300 align-middle my-auto"
24
+ @click="openUnbindDialog" />
25
+ </div>
26
+ </template>
27
+ <script setup lang="ts">
28
+ import type { MfKioskDevice } from '@/modules/kiosk/interface';
29
+ import { type SnackbarPosition, useDialog, useSnackbar } from '@feedmepos/ui-library';
30
+ import KioskUnbindConfirm from './KioskUnbindConfirm.vue';
31
+ import { computed, ref } from 'vue';
32
+ import { useKioskStore } from '@/stores/kiosk';
33
+ import dayjs from 'dayjs';
34
+
35
+ const Dialog = useDialog();
36
+ const Snackbar = useSnackbar();
37
+ const Kiosk = useKioskStore();
38
+
39
+ interface Props {
40
+ device: MfKioskDevice,
41
+ }
42
+ const props = defineProps<Props>();
43
+ const unBindTextFieldValue = ref<string>('');
44
+
45
+ const configs = computed(() => {
46
+ return Object.entries(props.device.config);
47
+ })
48
+
49
+ // function showDeviceDetails() {
50
+ // Dialog.open({
51
+ // title: props.device.name,
52
+ // contentComponent: KioskDeviceDetail,
53
+ // contentComponentProps: {
54
+ // device: props.device,
55
+ // },
56
+ // });
57
+ // }
58
+
59
+ function openUnbindDialog() {
60
+ unBindTextFieldValue.value = '';
61
+ Dialog.open({
62
+ title: "Unbind Kiosk Device",
63
+ contentComponent: KioskUnbindConfirm,
64
+ contentComponentProps: {
65
+ machineId: props.device.machineId,
66
+ 'onUpdate:modelValue': (v: string) => {
67
+ unBindTextFieldValue.value = v;
68
+ }
69
+ },
70
+ dismissAway: false,
71
+ primaryActions: {
72
+ text: 'Unbind',
73
+ variant: 'destructive',
74
+ close: false,
75
+ },
76
+ secondaryActions: {
77
+ text: 'Cancel',
78
+ variant: 'tertiary',
79
+ close: true,
80
+ }
81
+ }).onPrimary(async () => {
82
+ if (unBindTextFieldValue.value == props.device.machineId) {
83
+ await unbind();
84
+ Snackbar.open({
85
+ type: 'success',
86
+ message: 'Kiosk display successfully unbinded.',
87
+ position: 'bottom' as SnackbarPosition,
88
+ });
89
+ Dialog.close();
90
+ } else {
91
+ Snackbar.open({
92
+ type: 'warning',
93
+ message: 'Please enter the machine ID to confirm unbind.',
94
+ position: 'bottom' as SnackbarPosition,
95
+
96
+ });
97
+ }
98
+ });
99
+ }
100
+
101
+ async function unbind() {
102
+ await Kiosk.unbind(props.device.machineId);
103
+ }
104
+
105
+ </script>
@@ -0,0 +1,28 @@
1
+ <template>
2
+ <div>
3
+ <div v-for="config in configs" >
4
+ <span class="fm-typo-en-title-sm-800" v-if="config[1]">{{ config[0] }}</span>
5
+ <div class="flex" v-if="config[1]" v-for="configEntry in Object.entries(config[1])">
6
+ <span class="font-bold">{{ configEntry[0] }}</span>
7
+ <span>{{ configEntry[1] }}</span>
8
+ </div>
9
+ </div>
10
+ </div>
11
+ </template>
12
+ <script setup lang="ts">
13
+ import type { MfKioskDevice } from '@/modules/kiosk/interface';
14
+ import { computed } from 'vue';
15
+
16
+ interface Props{
17
+ device: MfKioskDevice
18
+ }
19
+
20
+ const props = defineProps<Props>();
21
+
22
+ const configs = computed(() => {
23
+ return Object.entries(props.device.config);
24
+ });
25
+
26
+
27
+
28
+ </script>
@@ -0,0 +1,27 @@
1
+ <template>
2
+ <div>
3
+ <div class="flex flex-col gap-2">
4
+ <div class="flex flex-col gap-2">
5
+ <span class="fm-typo-en-title-sm-800 block"> Kiosk Display </span>
6
+ <span class="fm-typo-en-body-md-400 block">Click "Bind device" to receive a special code for device
7
+ binding.</span>
8
+ </div>
9
+ <div class="flex flex-col gap-6">
10
+ <KioskDeviceCard v-for="device in devices" :key="device.machineId" :device="device"></KioskDeviceCard>
11
+ <FmButton variant="plain" class="w-[10rem] border border-fm-color-primary fm-corner-radius-lg"
12
+ label="Bind device" size="md" prepend-icon="link" @click="requestOtp" />
13
+ </div>
14
+ </div>
15
+ </div>
16
+ </template>
17
+ <script setup lang="ts">
18
+ import KioskDeviceCard from "./KioskDeviceCard.vue";
19
+ import type { MfKioskDevice } from "@/modules/kiosk/interface";
20
+
21
+ interface Props{
22
+ devices : MfKioskDevice[],
23
+ requestOtp: () => Promise<void>;
24
+ }
25
+
26
+ const props = defineProps<Props>();
27
+ </script>
@@ -0,0 +1,15 @@
1
+ <template>
2
+ <div class="flex flex-col gap-5">
3
+ <!--Show otp here-->
4
+ <span class="fm-typo-en-body-md-400 block">Enter this code to your kiosk device to bind.</span>
5
+ <div class="fm-typo-en-title-md-800">{{ otp }}</div>
6
+ </div>
7
+ </template>
8
+ <script setup lang="ts">
9
+
10
+ interface Props{
11
+ otp: string
12
+ }
13
+
14
+ const props = defineProps<Props>();
15
+ </script>
@@ -0,0 +1,28 @@
1
+ <template>
2
+ <div>
3
+ <span>Are you sure want to unbind device? If yes, please enter {{ machineId }} inside the textfield</span>
4
+ <FmTextField :model-value="modelValue" @update:model-value="updateModelValue" :placeholder="machineId"></FmTextField>
5
+ </div>
6
+ </template>
7
+ <script setup lang="ts">
8
+ import { ref } from 'vue';
9
+
10
+
11
+ interface Props{
12
+ machineId: string,
13
+ }
14
+
15
+ interface Emits{
16
+ (e: 'update:modelValue', v: string) : void,
17
+ }
18
+
19
+ const props = defineProps<Props>();
20
+ const emits = defineEmits<Emits>();
21
+
22
+ const modelValue = ref<string>('');
23
+
24
+ function updateModelValue(v : string){
25
+ emits('update:modelValue', v);
26
+ }
27
+
28
+ </script>
@@ -0,0 +1,86 @@
1
+ <template>
2
+ <div class="flex flex-col gap-5">
3
+ <FmSwitch v-model="enableDineIn" label="Dine In" label-placement="right"/>
4
+ <div v-show="enableDineIn" class="flex flex-col gap-2">
5
+ <KioskPickAtCounterSection v-if="form.pickUp" :enabled="form.pickUp.enabled" @update-pick-up="updatePickUp"/>
6
+ <KioskDisplayStandSection v-if="form.displayStand" :display-stand="form.displayStand" @update-display-stand="updateDisplayStand"/>
7
+ </div>
8
+ <FmButton class="w-1/4 mb-10" variant="primary" label="Apply Dine In" :disabled="!canSubmitForm || isApplyLoading"
9
+ :loading="isApplyLoading" @click="applyDineIn" />
10
+ </div>
11
+ </template>
12
+ <script lang="ts" setup>
13
+ import type { DisplayStandSettingForm, KioskDineInSettingForm, MfDisplayStandSetting, MfKioskDineInSetting } from '@/modules/order-setting/kiosk/interface';
14
+ import KioskDisplayStandSection from './KioskDisplayStandSection.vue';
15
+ import KioskPickAtCounterSection from './KioskPickAtCounterSection.vue';
16
+ import { computed, ref, watch } from 'vue';
17
+ import { ObjectUtil } from '@/utils/object';
18
+ import { defaultDisplayStand, defaultPickUp } from '@/stores/order-setting/mapper';
19
+
20
+ interface Props {
21
+ getSetting: () => KioskDineInSettingForm,
22
+ isApplyLoading: boolean,
23
+ restaurantId: string
24
+ }
25
+
26
+ interface Emits {
27
+ (e: 'updateDineIn', setting: MfKioskDineInSetting): void
28
+ }
29
+
30
+ function updatePickUp(v: boolean){
31
+ form.value.pickUp = {
32
+ enabled: v,
33
+ };
34
+ }
35
+
36
+ function updateDisplayStand(v: DisplayStandSettingForm){
37
+ form.value.displayStand = v;
38
+ }
39
+
40
+ const canSubmitForm = computed<boolean>(() => {
41
+ const f = form.value;
42
+ if(!enableDineIn.value) {
43
+ return true;
44
+ }
45
+ if (f.enabled && f.displayStand) {
46
+ const displayStand = f.displayStand;
47
+ return !!displayStand.padDigit
48
+ && !!displayStand.standSlotRange.min
49
+ && !!displayStand.standSlotRange.max
50
+ && displayStand.standSlotRange.min <= displayStand.standSlotRange.max;
51
+ }
52
+ return true;
53
+ });
54
+
55
+ function applyDineIn() {
56
+ const appliedSetting = form.value;
57
+
58
+ if (!enableDineIn.value) {
59
+ const emitObject = {
60
+ ...appliedSetting,
61
+ enabled: false,
62
+ displayStand: defaultDisplayStand,
63
+ pickUp: defaultPickUp,
64
+ };
65
+ emits('updateDineIn', emitObject);
66
+ } else if (canSubmitForm.value && !props.isApplyLoading) {
67
+ const emitObject = {
68
+ ...appliedSetting,
69
+ enabled: true,
70
+ displayStand: appliedSetting.enabled ? appliedSetting.displayStand as MfDisplayStandSetting : defaultDisplayStand,
71
+ pickUp: appliedSetting.enabled ? appliedSetting.pickUp : defaultPickUp,
72
+ };
73
+ emits('updateDineIn', emitObject);
74
+ }
75
+ }
76
+
77
+ const props = defineProps<Props>();
78
+ const emits = defineEmits<Emits>();
79
+ const form = ref<KioskDineInSettingForm>(ObjectUtil.clone<KioskDineInSettingForm>(props.getSetting()));
80
+ const enableDineIn = ref<boolean>(ObjectUtil.clone(form.value.enabled));
81
+
82
+ watch(() => props.restaurantId, () => {
83
+ form.value = props.getSetting();
84
+ })
85
+
86
+ </script>
@@ -0,0 +1,98 @@
1
+ <template>
2
+ <div>
3
+ <FmSwitch v-model="form.enabled" label="Display Stand" label-placement="right" @update:modelValue="updateEnabled"/>
4
+ <div class="border p-[1.5rem] fm-corner-radius-lg flex flex-col gap-2 my-5 w-11/12" v-show="form.enabled">
5
+ <span class="fm-typo-en-title-sm-800">Table service setting</span>
6
+ <div class="flex flex-col gap-10">
7
+ <!-- prefix -->
8
+ <!-- TODO: How to let user know this field is do for what-->
9
+ <FmTextField v-model="form.prefix" label="Prefix" placeholder="Prefix" @update:modelValue="updatePrefix"/>
10
+ </div>
11
+ <div class="flex flex-row gap-2">
12
+ <!-- <span class="fm-typo-en-title-sm-800">Table Stand Number Range</span> -->
13
+ <FmStepperField class="w-1/2" v-model="form.standSlotRange.min" label="Start" labelMark="required" :rules="minRules" placeholder="Enter a number" @update:modelValue="updateMin"/>
14
+ <FmStepperField class="w-1/2" v-model="form.standSlotRange.max" label="End" labelMark="required" :rules="maxRules" placeholder="Enter a number" @update:modelValue="updateMax"/>
15
+ </div>
16
+ <div>
17
+ <!-- pad digit -->
18
+ <!-- TODO: How to let user know this field is do for what-->
19
+ <FmStepperField v-model="form.padDigit" label="Pad Digit" labelMark="required" :rules="padDigitRules" placeholder="Pad Digit" @update:modelValue="updatePadDigit"/>
20
+ </div>
21
+ </div>
22
+ </div>
23
+ </template>
24
+ <script lang="ts" setup>
25
+ import { computed, ref } from 'vue';
26
+ import { NumberUtil } from '@/utils/number';
27
+ import { ObjectUtil } from '@/utils/object';
28
+ import type { DisplayStandSettingForm } from '@/modules/order-setting/kiosk/interface';
29
+
30
+ interface Props{
31
+ displayStand: DisplayStandSettingForm;
32
+ }
33
+
34
+ interface Emits{
35
+ (e: 'updateDisplayStand', displayStand: DisplayStandSettingForm): void
36
+ }
37
+
38
+ const props = defineProps<Props>();
39
+ const emits = defineEmits<Emits>();
40
+ const form = ref<DisplayStandSettingForm>(ObjectUtil.clone<DisplayStandSettingForm>(props.displayStand));
41
+
42
+ const nonNegativeRule = (val : any) => {
43
+ if (val < 0) {
44
+ return 'Value should be positive value';
45
+ }
46
+ return true;
47
+ }
48
+ const greaterThanMinRule = (val: any) => {
49
+ if (val <= (form.value.standSlotRange.min ?? 0)){
50
+ return 'Max should be exceed to Min';
51
+ }
52
+ return true;
53
+ }
54
+ type ErrMsg = string;
55
+ type ValidateCallback = (val: any) => true | ErrMsg;
56
+
57
+ const padDigitRules = computed<(ValidateCallback[])>(() => {
58
+ return [nonNegativeRule];
59
+ });
60
+ const minRules = computed<ValidateCallback[]>(() => {
61
+ return [nonNegativeRule];
62
+ });
63
+ const maxRules = computed<ValidateCallback[]>(() => {
64
+ return [nonNegativeRule, greaterThanMinRule];
65
+ });
66
+
67
+ const previewResult = computed<string>(() => {
68
+ const exampleValue = 5;
69
+ const padDigitResult = NumberUtil.applyPadDigits(exampleValue, form.value.padDigit ?? 0);
70
+ return `Preview: ${form.value.prefix ?? ''}${padDigitResult}`;
71
+ });
72
+
73
+ function updateEnabled(v: boolean){
74
+ form.value.enabled = v;
75
+ emits('updateDisplayStand', form.value);
76
+ }
77
+
78
+ function updateMin(v: number | null){
79
+ if(!v) return;
80
+ emits('updateDisplayStand', form.value);
81
+ }
82
+
83
+ function updateMax(v: number | null){
84
+ if(!v) return;
85
+ emits('updateDisplayStand', form.value);
86
+ }
87
+
88
+ function updatePrefix(v: string){
89
+ emits('updateDisplayStand', form.value);
90
+ }
91
+
92
+ function updatePadDigit(v: number | null){
93
+ if(!v) return;
94
+ emits('updateDisplayStand', form.value);
95
+ }
96
+
97
+
98
+ </script>