@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,236 @@
1
+ <script setup lang="ts">
2
+ import type { MapPolygon } from '@/components/type'
3
+ import { useLoading } from '@/composables/loading'
4
+ import { formatCurrency } from '@/helpers/currency'
5
+ import { arrayToCoordinate, getPolygonCenter, googleMap as gm } from '@/helpers/map'
6
+ import { clone } from '@/helpers/object'
7
+ import type { FdoAddress, FdoDeliveryArea } from '@feedmepos/core/entity'
8
+ import GoogleMap from '@/components/GoogleMap.vue'
9
+ import ZoneDialog from './ZoneDialog.vue'
10
+ import { type PropType, computed, onMounted, ref } from 'vue'
11
+ import { useSnackbar, SnackbarPosition } from '@feedmepos/ui-library'
12
+
13
+ export interface Address extends FdoAddress {
14
+ formatted: string
15
+ isValidPostcode: boolean
16
+ isValid: boolean
17
+ isValidCoordinate: boolean
18
+ }
19
+
20
+ const props = defineProps({
21
+ modelValue: {
22
+ type: Array as PropType<FdoDeliveryArea[]>,
23
+ required: true
24
+ },
25
+ address: {
26
+ type: Object as PropType<Address>,
27
+ required: true
28
+ }
29
+ })
30
+
31
+ const emits = defineEmits<{
32
+ (event: 'update:model-value', v: FdoDeliveryArea[]): void
33
+ }>()
34
+
35
+ const maxZone = 10
36
+ const colors = [
37
+ '#1F7735', //green-400
38
+ '#995900', //orange-400
39
+ '#99231D', //red-400
40
+ '#004999', //blue-400
41
+ '#8CE67D', //macaron
42
+ '#007BA7', //blueberry
43
+ '#FF5D53', //salmon
44
+ '#73C8E6', //tuna
45
+ '#FCA23E', //citrus
46
+ '#F09BBE', //halite
47
+ '#FFD232', //cheese
48
+ '#50BE9B', //mint
49
+ '#8358D4', //plum
50
+ '#9B5046', //cocoa
51
+ ]
52
+
53
+ const areas = computed(() =>
54
+ props.modelValue.map((area) => {
55
+ const { deliveryFee, minPurchase, freeAfterTotal } = area
56
+ return [
57
+ {
58
+ label: 'Delivery Fee',
59
+ value: formatCurrency(deliveryFee)
60
+ },
61
+ {
62
+ label: 'Min Purchase',
63
+ value: minPurchase ? formatCurrency(minPurchase) : 'Not Set'
64
+ },
65
+ {
66
+ label: 'Min spend for free Delivery',
67
+ value: freeAfterTotal ? formatCurrency(freeAfterTotal) : 'Not Set'
68
+ }
69
+ ]
70
+ })
71
+ )
72
+ const sideSheet = ref<boolean>(false)
73
+
74
+ const polygons = computed<MapPolygon[]>(() => {
75
+ return props.modelValue.map((area, index) => ({
76
+ paths: area.polygon.reduce<
77
+ {
78
+ lat: number
79
+ lng: number
80
+ }[]
81
+ >((pv, path) => [...pv, { lat: path[1], lng: path[0] }], []),
82
+ strokeColor: colors[index],
83
+ fillColor: colors[index]
84
+ }))
85
+ })
86
+
87
+ function deleteZone(index: number) {
88
+ const cloned = clone(props.modelValue)
89
+ cloned.splice(index, 1)
90
+ emits('update:model-value', cloned)
91
+ }
92
+
93
+ const currentIndex = ref<number | null>(null)
94
+ const deliveryArea = ref<FdoDeliveryArea>()
95
+ function editZone(index: number) {
96
+ currentIndex.value = index
97
+ deliveryArea.value = props.modelValue[index]
98
+ openSideSheet()
99
+ }
100
+
101
+ const Snackbar = useSnackbar()
102
+
103
+ function addZone() {
104
+ sideSheet.value = false
105
+ if (savedZone.value) {
106
+ emits('update:model-value', [...props.modelValue, savedZone.value])
107
+ Snackbar.open({
108
+ type: 'success',
109
+ message: 'Zone added successfully.',
110
+ position: 'bottom' as SnackbarPosition
111
+ })
112
+ }
113
+ }
114
+
115
+ const savedZone = ref<FdoDeliveryArea>()
116
+
117
+ function handleZoneUpdate(v: FdoDeliveryArea) {
118
+ savedZone.value = v
119
+ }
120
+
121
+ function updateZone(index: number) {
122
+ if (savedZone.value) {
123
+ emits(
124
+ 'update:model-value',
125
+ props.modelValue.map((v, i) => (index === i ? savedZone.value! : v))
126
+ )
127
+ Snackbar.open({
128
+ type: 'success',
129
+ message: 'Zone updated successfully.',
130
+ position: 'bottom' as SnackbarPosition
131
+ })
132
+ sideSheet.value = false
133
+ }
134
+ }
135
+
136
+ const center = ref<{
137
+ lat: number
138
+ lng: number
139
+ }>()
140
+ const { startAsyncCall } = useLoading()
141
+ const gmRef = ref<typeof GoogleMap>()
142
+ async function getCenter() {
143
+ const { formatted, coordinates } = props.address
144
+ try {
145
+ center.value = arrayToCoordinate(coordinates || [])
146
+ gmRef.value?.setCenter(center.value)
147
+ } catch (err) {
148
+ const geocoder = new gm.maps.Geocoder()
149
+ await startAsyncCall(async () => {
150
+ await new Promise((resolve) => {
151
+ geocoder.geocode({ address: formatted }, (res) => {
152
+ if (res?.[0]) {
153
+ center.value = {
154
+ lng: res[0].geometry.location.lng(),
155
+ lat: res[0].geometry.location.lat()
156
+ }
157
+ }
158
+ resolve(true)
159
+ })
160
+ })
161
+ })
162
+ } finally {
163
+ if (center.value) gmRef.value?.setCenter(center.value)
164
+ }
165
+ }
166
+
167
+ function openSideSheet() {
168
+ sideSheet.value = true
169
+ }
170
+
171
+ function closeSideSheet() {
172
+ sideSheet.value = false
173
+ currentIndex.value = null
174
+ }
175
+
176
+ onMounted(getCenter)
177
+ </script>
178
+
179
+ <template>
180
+ <GoogleMap
181
+ ref="gmRef"
182
+ class="full-width"
183
+ style="height: 500px"
184
+ :center="center"
185
+ :polygons="polygons"
186
+ :zoom="10"
187
+ />
188
+
189
+ <div class=" mt-5 mb-5">
190
+ <FmButton class="mt-3" @click="openSideSheet" icon="add" label="Add Delivery Zone" variant="plain" />
191
+ </div>
192
+
193
+ <FmSideSheet header="Add delivery zone" dismiss-away :maxWidth="600" v-model="sideSheet">
194
+ <div v-if="currentIndex !== null">
195
+ <ZoneDialog
196
+ :center="getPolygonCenter(deliveryArea?.polygon ?? [])"
197
+ :initial-value="deliveryArea"
198
+ @update:model-value="handleZoneUpdate"
199
+ />
200
+ </div>
201
+ <div v-else>
202
+ <ZoneDialog :center="center" @update:model-value="handleZoneUpdate" />
203
+ </div>
204
+
205
+ <template #side-sheet-footer>
206
+ <div class="flex gap-8 items-center justify-start">
207
+ <div v-if="currentIndex !== null">
208
+ <FmButton variant="primary" label="Save" size="lg" @click="updateZone(currentIndex)" close: true />
209
+ </div>
210
+ <div v-else>
211
+ <FmButton variant="primary" label="Save" size="lg" @click="addZone" close: true/>
212
+ </div>
213
+ <FmButton variant="secondary" label="Cancel" size="lg" @click="closeSideSheet" />
214
+ </div>
215
+ </template>
216
+ </FmSideSheet>
217
+
218
+ <div v-for="(info, index) in areas" :key="index">
219
+ <FmCard variant="outlined" class="p-5 mb-5">
220
+ <div class="flex flex-row">
221
+ <div class="fm-typo-en-body-lg-600 mb-3 mr-5" :style="{
222
+ color: colors[index]
223
+ }">Delivery Zone {{ index + 1 }}</div>
224
+
225
+ <div class="mr-auto"></div>
226
+ <FmButton append-icon="edit" variant="tertiary" @click="editZone(index)" />
227
+ <FmButton append-icon="delete" variant="tertiary" @click="deleteZone(index)" />
228
+ </div>
229
+
230
+ <div v-for="(row, i) in info" :key="i">
231
+ <div class="mb-1">{{ row.label }}</div>
232
+ <div class="fm-typo-en-body-lg-600 mb-2">{{ row.value }}</div>
233
+ </div>
234
+ </FmCard>
235
+ </div>
236
+ </template>
@@ -0,0 +1,143 @@
1
+ <script setup lang="ts">
2
+ import type { FdoDeliveryTime, FdoOperatingHour, FdoOperatingHours } from '@feedmepos/core/entity'
3
+ import Day from 'dayjs'
4
+ import { computed, ref, type PropType } from 'vue'
5
+ import TimePicker from './TimePicker.vue'
6
+ import DeliveryCustomTime from './DeliveryCustomTime.vue'
7
+
8
+ type DeliveryTimeType = 'operatingHour' | 'fixed' | 'custom'
9
+
10
+ const props = defineProps({
11
+ modelValue: {
12
+ type: Object as PropType<FdoDeliveryTime>,
13
+ required: true
14
+ }
15
+ })
16
+
17
+ const emits = defineEmits<{
18
+ (event: 'update:model-value', v: FdoDeliveryTime): void
19
+ }>()
20
+
21
+ const selectedDeliveryTime = computed<DeliveryTimeType>(() => {
22
+ if (props.modelValue?.time) return 'fixed'
23
+ if (props.modelValue?.custom) return 'custom'
24
+
25
+ return 'operatingHour'
26
+ })
27
+ const deliveryTimeOptions: {
28
+ label: string
29
+ value: DeliveryTimeType
30
+ }[] = [
31
+ {
32
+ label: 'Operating hour',
33
+ value: 'operatingHour'
34
+ },
35
+ {
36
+ label: 'Fixed time',
37
+ value: 'fixed'
38
+ },
39
+ {
40
+ label: 'Custom time',
41
+ value: 'custom'
42
+ }
43
+ ]
44
+
45
+ function initOperatingHour() {
46
+ return {
47
+ enable: false,
48
+ hours: []
49
+ }
50
+ }
51
+
52
+ function changeDeliveryTimeType(type: DeliveryTimeType) {
53
+ switch (type) {
54
+ case 'operatingHour':
55
+ emits('update:model-value', {
56
+ ...props.modelValue,
57
+ custom: null,
58
+ time: null
59
+ })
60
+ break
61
+ case 'fixed':
62
+ emits('update:model-value', {
63
+ ...props.modelValue,
64
+ custom: null,
65
+ time: []
66
+ })
67
+ break
68
+ case 'custom':
69
+ emits('update:model-value', {
70
+ ...props.modelValue,
71
+ custom: {
72
+ 0: initOperatingHour(),
73
+ 1: initOperatingHour(),
74
+ 2: initOperatingHour(),
75
+ 3: initOperatingHour(),
76
+ 4: initOperatingHour(),
77
+ 5: initOperatingHour(),
78
+ 6: initOperatingHour()
79
+ },
80
+ time: null
81
+ })
82
+ break
83
+ default:
84
+ throw Error(`Unimplement delivery time type ${type}`)
85
+ }
86
+ }
87
+
88
+ function updateCustomTime(time: FdoOperatingHours) {
89
+ emits('update:model-value', {
90
+ ...props.modelValue,
91
+ custom: time
92
+ })
93
+ }
94
+
95
+ function getCheckBoxState(v: DeliveryTimeType) {
96
+ return v === selectedDeliveryTime.value
97
+ }
98
+
99
+ function canToggle(value: DeliveryTimeType) {
100
+ return selectedDeliveryTime.value.length === 0 || getCheckBoxState(value)
101
+ }
102
+ </script>
103
+
104
+ <template>
105
+ <div v-for="option in deliveryTimeOptions" :key="option.value">
106
+ <FmCheckbox
107
+
108
+ :value="option.value"
109
+ :label="option.label"
110
+ :model-value="getCheckBoxState(option.value)"
111
+ @update:model-value="
112
+ () => {
113
+ changeDeliveryTimeType(option.value)
114
+ }
115
+ "
116
+ :disabled="canToggle(option.value)"
117
+ />
118
+ <div v-if="modelValue.custom && option.value === 'custom'">
119
+ <FmCard variant="outlined">
120
+ <FmCardSection>
121
+ <div class="flex-grow fm-typo-en-body-lg-600 mb-2">Time Slots</div>
122
+ <DeliveryCustomTime
123
+ title="Time slots"
124
+ :model-value="modelValue.custom"
125
+ @update:model-value="updateCustomTime"
126
+ />
127
+ </FmCardSection>
128
+ </FmCard>
129
+ </div>
130
+
131
+ <div v-if="modelValue.time && option.value === 'fixed'">
132
+ <FmCard variant="outlined">
133
+ <FmCardSection>
134
+ <div class="flex-grow fm-typo-en-body-lg-600 mb-2">Time Slots</div>
135
+ <TimePicker
136
+ :modelValue="props.modelValue"
137
+ @update:model-value="(v) => emits('update:model-value', v)"
138
+ />
139
+ </FmCardSection>
140
+ </FmCard>
141
+ </div>
142
+ </div>
143
+ </template>
@@ -0,0 +1,186 @@
1
+ <script setup lang="ts">
2
+ import { clone } from '@/helpers/object'
3
+ import { useMenuStore } from '@/stores/menu/menu'
4
+ import type {
5
+ F_ORDER_PAYMENT_TYPE,
6
+ FdoAddress,
7
+ FdoDeliveryArea,
8
+ FdoDeliveryTime,
9
+ FdoOfflinePaymentMethod,
10
+ FdoRestaurantInHouseDelivery
11
+ } from '@feedmepos/core/entity'
12
+ import { computed, reactive, watch, type PropType } from 'vue'
13
+ import PaymentType from '../../dinein/PaymentType.vue'
14
+ import Preorder from '../../pickup/Preorder.vue'
15
+ import DeliveryTime from './DeliveryTime.vue'
16
+ import DeliveryOrder, { type Address } from './DeliveryOrder.vue'
17
+ import PaymentSidesheet from '../../pickup/PaymentSidesheet.vue'
18
+
19
+ export interface InhouseDialogData {
20
+ enable: boolean
21
+ catalogId: string | null
22
+ term: string
23
+ areas: FdoDeliveryArea[]
24
+ paymentTypes: F_ORDER_PAYMENT_TYPE[]
25
+ offlinePaymentTypes: FdoOfflinePaymentMethod[] | undefined | null
26
+ ignoreStock: boolean
27
+ deliveryTime: FdoDeliveryTime | null
28
+ }
29
+
30
+ const props = defineProps({
31
+ initialValue: {
32
+ type: Object as PropType<InhouseDialogData>,
33
+ default: undefined
34
+ },
35
+ allowEPayment: {
36
+ type: [Boolean, String] as PropType<boolean | string>,
37
+ required: true
38
+ },
39
+ address: {
40
+ type: Object as PropType<Address | undefined>,
41
+ required: true
42
+ }
43
+ })
44
+
45
+ const inhouse = reactive<InhouseDialogData>(
46
+ props.initialValue
47
+ ? clone(props.initialValue)
48
+ : {
49
+ enable: false,
50
+ catalogId: null,
51
+ term: '',
52
+ areas: [],
53
+ ignoreStock: false,
54
+ paymentTypes: [],
55
+ offlinePaymentTypes: [],
56
+ deliveryTime: null
57
+ }
58
+ )
59
+
60
+ const emits = defineEmits<{
61
+ (event: 'update:model-value', v: FdoRestaurantInHouseDelivery): void
62
+ }>()
63
+
64
+ function emitUpdatedValue() {
65
+ emits('update:model-value', { ...inhouse })
66
+ }
67
+
68
+ function updateEnable(value: boolean) {
69
+ inhouse.enable = value
70
+ emitUpdatedValue()
71
+ }
72
+
73
+ function updateIgnoreStock(value: boolean) {
74
+ inhouse.ignoreStock = value
75
+ emitUpdatedValue()
76
+ }
77
+
78
+ function updateCatalogId(value: string | null) {
79
+ inhouse.catalogId = value
80
+ emitUpdatedValue()
81
+ }
82
+
83
+ function updateTerm(value: string) {
84
+ inhouse.term = value
85
+ emitUpdatedValue()
86
+ }
87
+
88
+ watch(
89
+ inhouse,
90
+ (newValue) => {
91
+ emits('update:model-value', clone(newValue))
92
+ },
93
+ { deep: true }
94
+ )
95
+
96
+ watch(
97
+ () => inhouse,
98
+ () => emitUpdatedValue(),
99
+ { deep: true }
100
+ )
101
+
102
+ const menuStore = useMenuStore()
103
+
104
+ const preorderDeliveryTime = computed({
105
+ get: () => inhouse.deliveryTime,
106
+ set: (value) => {
107
+ inhouse.deliveryTime = value
108
+ emitUpdatedValue()
109
+ }
110
+ })
111
+
112
+ const actualDeliveryTime = computed({
113
+ get: () => inhouse.deliveryTime,
114
+ set: (value) => {
115
+ inhouse.deliveryTime = value
116
+ emitUpdatedValue()
117
+ }
118
+ })
119
+ </script>
120
+
121
+ <template>
122
+ <FmSwitch
123
+ :model-value="inhouse.enable"
124
+ label="Activate In house Delivery"
125
+ label-placement="right"
126
+ sublabel="Accept In house Delivery with POS"
127
+ @update:model-value="updateEnable"
128
+ />
129
+ <div v-if="inhouse.enable">
130
+ <FmCard variant="outlined" class="p-5 mt-10">
131
+ <div class="flex-grow fm-typo-en-title-sm-800 mb-3">General setting</div>
132
+
133
+ <div class="mb-5">
134
+ <FmSwitch
135
+ :model-value="inhouse.ignoreStock || false"
136
+ value="ignoreStock"
137
+ label="Ignore stock"
138
+ sublabel="Customer can order even product out of stocks"
139
+ label-placement="right"
140
+ @update:model-value="updateIgnoreStock"
141
+ />
142
+ </div>
143
+
144
+ <div class="mb-5">
145
+ <FmSelect
146
+ :model-value="inhouse.catalogId"
147
+ label="Catalog"
148
+ :items="menuStore.catalogOptions"
149
+ @update:model-value="updateCatalogId"
150
+ />
151
+ </div>
152
+
153
+ <div class="mb-5">
154
+ <FmTextarea
155
+ :model-value="inhouse.term"
156
+ label="Delivery term"
157
+ @update:model-value="updateTerm"
158
+ />
159
+ </div>
160
+ </FmCard>
161
+
162
+ <FmCard variant="outlined" class="p-5 mt-10">
163
+ <PaymentSidesheet
164
+ :paymentTypes="inhouse.paymentTypes"
165
+ :offlinePaymentTypes="inhouse.offlinePaymentTypes"
166
+ @update:payment-types="(v: F_ORDER_PAYMENT_TYPE[]) => (inhouse.paymentTypes = v)"
167
+ @update:offline-payment-types="(v: FdoOfflinePaymentMethod[] | undefined | null) => (inhouse.offlinePaymentTypes = v)"
168
+ />
169
+ </FmCard>
170
+
171
+ <FmCard variant="outlined" class="p-5 mt-10">
172
+ <Preorder v-model="preorderDeliveryTime" />
173
+ </FmCard>
174
+
175
+ <div v-if="preorderDeliveryTime">
176
+ <FmCard variant="outlined" class="p-5 mt-10">
177
+ <div class="flex-grow fm-typo-en-title-sm-800">Delivery Time</div>
178
+ <DeliveryTime v-model="actualDeliveryTime as FdoDeliveryTime" />
179
+ </FmCard>
180
+ </div>
181
+ <FmCard variant="outlined" class="p-5 mt-10">
182
+ <div class="flex-grow fm-typo-en-title-sm-800 mb-3">Delivery order</div>
183
+ <DeliveryOrder v-model="inhouse.areas" :address="address as Address" />
184
+ </FmCard>
185
+ </div>
186
+ </template>
@@ -0,0 +1,76 @@
1
+ <template>
2
+ <div v-for="(time, index) in fixedTimeslots" :key="index">
3
+ <div class="flex flex-row" >
4
+ <div class="w-full">
5
+ <FmTimePicker
6
+ :model-value="formatTime(time)"
7
+ @update:model-value="
8
+ (v:any) => {
9
+ const date = parseTime(v)
10
+ updateTimeslot(index, date)
11
+ }
12
+ "
13
+ />
14
+ </div>
15
+ <FmButton class="mt-2 ml-4" append-icon="close" variant="tertiary" @click="removeTimeslot(index)" />
16
+ </div>
17
+ </div>
18
+ <FmButton class="mt-3" @click.stop="addTimeslot" icon="add" label="Add Time Slot" variant="plain"/>
19
+ </template>
20
+
21
+ <script setup lang="ts">
22
+ import { computed } from 'vue'
23
+ import Day from 'dayjs'
24
+ import type { FdoDeliveryTime } from '@feedmepos/core/entity'
25
+
26
+ const props = defineProps<{
27
+ modelValue: FdoDeliveryTime
28
+ }>()
29
+
30
+ const emits = defineEmits<{
31
+ (event: 'update:model-value', v: FdoDeliveryTime): void
32
+ }>()
33
+
34
+ function formatTime(date: Date): string {
35
+ return date.toLocaleTimeString('en-GB', { hour: '2-digit', minute: '2-digit' })
36
+ }
37
+
38
+ function parseTime(timeString: string): Date {
39
+ const [hour, minute] = timeString.split(':').map(Number)
40
+ return Day().set('hour', hour).set('minute', minute).toDate()
41
+ }
42
+
43
+ function updateTimeslot(index: number, v: Date) {
44
+ emits('update:model-value', {
45
+ ...props.modelValue,
46
+ time: (props.modelValue.time || []).map((slot: any, i: number) =>
47
+ i !== index ? slot : Day(v).format('HH:mm')
48
+ )
49
+ })
50
+ }
51
+
52
+ function removeTimeslot(index: number) {
53
+ emits('update:model-value', {
54
+ ...props.modelValue,
55
+ time: (props.modelValue.time || []).filter((_: any, i: number) => i !== index)
56
+ })
57
+ }
58
+
59
+ function addTimeslot() {
60
+ emits('update:model-value', {
61
+ ...props.modelValue,
62
+ time: [...(props.modelValue.time || []), '00:00']
63
+ })
64
+ }
65
+
66
+ const fixedTimeslots = computed(() => {
67
+ return (
68
+ props.modelValue.time?.map((time) => {
69
+ const [hour, minute] = time.split(':')
70
+ return Day().set('hour', parseInt(hour)).set('minute', parseInt(minute)).toDate()
71
+ }) || []
72
+ )
73
+ })
74
+
75
+
76
+ </script>