@feedmepos/mf-order-setting 0.0.25 → 0.0.27

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 (108) hide show
  1. package/dist/{KioskDevicesView-gzH9-zL_.js → KioskDevicesView-AKvyDF3w.js} +1 -1
  2. package/dist/KioskDevicesView.vue_vue_type_script_setup_true_lang-Cx8VMyNB.js +301 -0
  3. package/dist/{KioskSettingView-D1WdpaQN.js → KioskSettingView-equ5EIvU.js} +3 -3
  4. package/dist/{KioskView-D6-1bn1n.js → KioskView-CsE7BGtA.js} +5 -5
  5. package/dist/OrderSettingsView-BpLXyk_0.js +49013 -0
  6. package/dist/{app-i4N2c7ms.js → app-D-zQN9_E.js} +293 -31
  7. package/dist/app.js +1 -1
  8. package/dist/{dayjs.min-CA-XbgTY.js → dayjs.min-CWQSmujV.js} +600 -619
  9. package/dist/frontend/mf-order/src/App.vue.d.ts +1 -1
  10. package/dist/frontend/mf-order/src/Entry.vue.d.ts +1 -1
  11. package/dist/frontend/mf-order/src/api/kiosk/index.d.ts +2 -0
  12. package/dist/frontend/mf-order/src/app.d.ts +264 -0
  13. package/dist/frontend/mf-order/src/components/GoogleMap.vue.d.ts +3 -5
  14. package/dist/frontend/mf-order/src/main.d.ts +7 -0
  15. package/dist/frontend/mf-order/src/modules/kiosk/interface.d.ts +5 -1
  16. package/dist/frontend/mf-order/src/stores/kiosk/index.d.ts +16 -1
  17. package/dist/frontend/mf-order/src/stores/menu/menu.d.ts +82 -0
  18. package/dist/frontend/mf-order/src/stores/restaurant/index.d.ts +21 -1158
  19. package/dist/frontend/mf-order/src/views/all-orders/ActionMenuCell.vue.d.ts +2 -2
  20. package/dist/frontend/mf-order/src/views/all-orders/FilterRestaurant.vue.d.ts +1 -1
  21. package/dist/frontend/mf-order/src/views/all-orders/FilterStatus.vue.d.ts +2 -2
  22. package/dist/frontend/mf-order/src/views/all-orders/FilterStatusMenu.vue.d.ts +2 -2
  23. package/dist/frontend/mf-order/src/views/all-orders/ReflowOrder.vue.d.ts +2 -2
  24. package/dist/frontend/mf-order/src/views/all-orders/UpdateDeliveryOrderDialog.vue.d.ts +2 -2
  25. package/dist/frontend/mf-order/src/views/kiosk/KioskSummary.vue.d.ts +1 -1
  26. package/dist/frontend/mf-order/src/views/kiosk/KioskView.vue.d.ts +1 -1
  27. package/dist/frontend/mf-order/src/views/kiosk/devices/KioskDeviceCard.vue.d.ts +1 -1
  28. package/dist/frontend/mf-order/src/views/kiosk/devices/KioskDeviceDetail.vue.d.ts +1 -1
  29. package/dist/frontend/mf-order/src/views/kiosk/devices/KioskDevicesView.vue.d.ts +1 -1
  30. package/dist/frontend/mf-order/src/views/kiosk/devices/KioskOtpDialog.vue.d.ts +1 -1
  31. package/dist/frontend/mf-order/src/views/kiosk/devices/KioskUnbindConfirm.vue.d.ts +2 -2
  32. package/dist/frontend/mf-order/src/views/kiosk/settings/KioskDineInSection.vue.d.ts +2 -2
  33. package/dist/frontend/mf-order/src/views/kiosk/settings/KioskDisplayStandSection.vue.d.ts +2 -2
  34. package/dist/frontend/mf-order/src/views/kiosk/settings/KioskEnablePaxDialogSection.vue.d.ts +2 -2
  35. package/dist/frontend/mf-order/src/views/kiosk/settings/KioskInstructionSection.vue.d.ts +2 -2
  36. package/dist/frontend/mf-order/src/views/kiosk/settings/KioskMenuItemSection.vue.d.ts +1 -1
  37. package/dist/frontend/mf-order/src/views/kiosk/settings/KioskPaymentTypeSection.vue.d.ts +1 -1
  38. package/dist/frontend/mf-order/src/views/kiosk/settings/KioskPickAtCounterSection.vue.d.ts +2 -2
  39. package/dist/frontend/mf-order/src/views/kiosk/settings/KioskSettingView.vue.d.ts +1 -1
  40. package/dist/frontend/mf-order/src/views/kiosk/settings/KioskTakeawaySection.vue.d.ts +2 -2
  41. package/dist/frontend/mf-order/src/views/order-settings/delivery/DeliveryList.vue.d.ts +2 -2
  42. package/dist/frontend/mf-order/src/views/order-settings/delivery/components/ManualIntegratedDeliverySetting.vue.d.ts +1 -1
  43. package/dist/frontend/mf-order/src/views/order-settings/delivery/components/TaxInput.vue.d.ts +2 -2
  44. package/dist/frontend/mf-order/src/views/order-settings/delivery/inhouse/CurrencyInput.vue.d.ts +1 -1
  45. package/dist/frontend/mf-order/src/views/order-settings/delivery/inhouse/DeliveryCustomTime.vue.d.ts +1 -1
  46. package/dist/frontend/mf-order/src/views/order-settings/delivery/inhouse/DeliveryOrder.vue.d.ts +6 -141
  47. package/dist/frontend/mf-order/src/views/order-settings/delivery/inhouse/DeliveryTime.vue.d.ts +1 -1
  48. package/dist/frontend/mf-order/src/views/order-settings/delivery/inhouse/InHouseDelivery.vue.d.ts +1 -1
  49. package/dist/frontend/mf-order/src/views/order-settings/delivery/inhouse/TimePicker.vue.d.ts +1 -1
  50. package/dist/frontend/mf-order/src/views/order-settings/delivery/inhouse/ZoneDialog.vue.d.ts +1 -1
  51. package/dist/frontend/mf-order/src/views/order-settings/delivery/integrated-delivery/ExternalSetting.vue.d.ts +2 -2
  52. package/dist/frontend/mf-order/src/views/order-settings/delivery/integrated-delivery/FeedmeDelivery.vue.d.ts +1 -1
  53. package/dist/frontend/mf-order/src/views/order-settings/delivery/integrated-delivery/FoodpandaCampaignDialog.vue.d.ts +1 -1
  54. package/dist/frontend/mf-order/src/views/order-settings/delivery/integrated-delivery/FoodpandaSetting.vue.d.ts +1 -1
  55. package/dist/frontend/mf-order/src/views/order-settings/delivery/integrated-delivery/GrabfoodSetting.vue.d.ts +1 -1
  56. package/dist/frontend/mf-order/src/views/order-settings/delivery/integrated-delivery/IntegratedDelivery.vue.d.ts +5 -5
  57. package/dist/frontend/mf-order/src/views/order-settings/delivery/integrated-delivery/ShopeefoodSetting.vue.d.ts +1 -1
  58. package/dist/frontend/mf-order/src/views/order-settings/dine-in/OfflinePaymentTypeDialog.vue.d.ts +1 -1
  59. package/dist/frontend/mf-order/src/views/order-settings/dine-in/OfflinePaymentTypeDialogContent.vue.d.ts +2 -2
  60. package/dist/frontend/mf-order/src/views/order-settings/dine-in/PaymentType.vue.d.ts +1 -1
  61. package/dist/frontend/mf-order/src/views/order-settings/pickup/AddressInput.vue.d.ts +1 -1
  62. package/dist/frontend/mf-order/src/views/order-settings/pickup/CustomPayment.vue.d.ts +1 -1
  63. package/dist/frontend/mf-order/src/views/order-settings/pickup/PaymentSidesheet.vue.d.ts +2 -2
  64. package/dist/frontend/mf-order/src/views/order-settings/pickup/PickUpPointDialog.vue.d.ts +1 -1
  65. package/dist/frontend/mf-order/src/views/order-settings/pickup/PickUpPointDialogContent.vue.d.ts +2 -137
  66. package/dist/frontend/mf-order/src/views/order-settings/pickup/PickUpSettingDialog.vue.d.ts +1 -1
  67. package/dist/frontend/mf-order/src/views/order-settings/pickup/PickUpSettingDialogContent.vue.d.ts +1 -1
  68. package/dist/frontend/mf-order/src/views/order-settings/pickup/PickupList.vue.d.ts +2 -2
  69. package/dist/frontend/mf-order/src/views/order-settings/pickup/Preorder.vue.d.ts +1 -1
  70. package/dist/frontend/mf-order/src/views/order-settings/servicecharge/RateInput.vue.d.ts +1 -1
  71. package/dist/frontend/mf-order/src/views/order-settings/servicecharge/ServiceChargeRule.vue.d.ts +1 -1
  72. package/dist/frontend/mf-order/tsconfig.app.tsbuildinfo +1 -1
  73. package/dist/{index-DSCb3ndM.js → index-BXsnV_eO.js} +5 -5
  74. package/dist/{index-C4HI1NS4.js → index-BwrMcIf2.js} +2 -2
  75. package/dist/package/entity/cursor/cursor.dto.d.ts +2 -2
  76. package/dist/package/entity/incoming-order/incoming-order-to-bill.dto.d.ts +7 -7
  77. package/dist/package/entity/incoming-order/incoming-order.do.d.ts +22 -9
  78. package/dist/package/entity/incoming-order/incoming-order.dto.d.ts +18 -18
  79. package/dist/package/entity/kiosk/kiosk.do.d.ts +32 -0
  80. package/dist/package/entity/kiosk/kiosk.dto.d.ts +79 -0
  81. package/dist/package/entity/order/dine-in/dine-in.do.d.ts +8 -8
  82. package/dist/package/entity/order/dine-in/dine-in.dto.d.ts +4 -4
  83. package/dist/package/entity/order/menu/menu.dto.d.ts +12 -12
  84. package/dist/package/entity/order/order-item/order-item.dto.d.ts +14 -8
  85. package/dist/package/entity/order/order.do.d.ts +19 -19
  86. package/dist/package/entity/order/order.dto.d.ts +134 -128
  87. package/dist/package/entity/order/order.enum.d.ts +2 -2
  88. package/dist/package/entity/order-platform/menu.dto.d.ts +31 -0
  89. package/dist/queue.do-F110q0_J.js +100389 -0
  90. package/package.json +3 -3
  91. package/src/api/kiosk/index.ts +9 -4
  92. package/src/app.ts +4 -1
  93. package/src/locales/th-TH.json +8 -1
  94. package/src/modules/kiosk/interface.ts +5 -1
  95. package/src/stores/kiosk/index.ts +9 -4
  96. package/src/stores/kiosk/mapper.ts +5 -1
  97. package/src/stores/restaurant/index.ts +4 -17
  98. package/src/views/kiosk/devices/KioskDeviceCard.vue +202 -80
  99. package/src/views/order-settings/delivery/DeliverySetting.vue +4 -4
  100. package/src/views/order-settings/delivery/delivery.data.ts +2 -2
  101. package/src/views/order-settings/delivery/integrated-delivery/ExternalSetting.vue +14 -2
  102. package/src/views/order-settings/delivery/integrated-delivery/FoodpandaSetting.vue +2 -34
  103. package/src/views/order-settings/delivery/integrated-delivery/IntegratedDelivery.vue +15 -12
  104. package/src/views/order-settings/pickup/PickUpSettingDialogContent.vue +0 -2
  105. package/src/views/order-settings/servicecharge/ServiceChargeSetting.vue +5 -2
  106. package/dist/KioskDevicesView.vue_vue_type_script_setup_true_lang-CLpClo-r.js +0 -207
  107. package/dist/OrderSettingsView-CqZREmjo.js +0 -72121
  108. package/dist/queue.do-DcOVgeUq.js +0 -122897
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@feedmepos/mf-order-setting",
3
- "version": "0.0.25",
3
+ "version": "0.0.27",
4
4
  "type": "module",
5
5
  "module": "./dist/app.js",
6
6
  "license": "UNLICENSED",
@@ -25,8 +25,8 @@
25
25
  "format": "prettier --write src/"
26
26
  },
27
27
  "dependencies": {
28
- "@feedmepos/core": "^2.14.0",
29
- "@feedmepos/menu": "^1.5.6",
28
+ "@feedmepos/core": "^2.14.10",
29
+ "@feedmepos/menu": "^1.5.14",
30
30
  "@feedmepos/mf-common": "1.20.0-beta.2",
31
31
  "@feedmepos/ordering": "^0.0.3",
32
32
  "@feedmepos/ui-library": "1.5.2-beta.1",
@@ -1,22 +1,27 @@
1
1
  import { getData, restaurantClientInstance } from '@/api';
2
2
  import { KioskOtpDto, KioskDeviceDto } from '@entity';
3
3
 
4
- async function requestOtp() : Promise<KioskOtpDto>{
4
+ async function requestOtp(): Promise<KioskOtpDto> {
5
5
  const result = await restaurantClientInstance().get('/kiosk/otp');
6
6
  return getData<KioskOtpDto>(result);
7
7
  }
8
8
 
9
- async function getDevices(): Promise<KioskDeviceDto[]>{
9
+ async function getDevices(): Promise<KioskDeviceDto[]> {
10
10
  const result = await restaurantClientInstance().get('/kiosk/devices');
11
11
  return getData<KioskDeviceDto[]>(result);
12
12
  }
13
13
 
14
- async function unbind(machineId: string): Promise<void>{
14
+ async function unbind(machineId: string): Promise<void> {
15
15
  await restaurantClientInstance().delete(`/kiosk/unbind/${machineId}`);
16
16
  }
17
17
 
18
+ async function updateDevicePin(pinInfo: string, machineId: string): Promise<void> {
19
+ await restaurantClientInstance().put(`/kiosk/updateDevicePin/${machineId}`, { pinInfo });
20
+ }
21
+
18
22
  export const KioskApi = {
19
23
  requestOtp,
20
24
  getDevices,
21
- unbind
25
+ unbind,
26
+ updateDevicePin
22
27
  };
package/src/app.ts CHANGED
@@ -1,10 +1,13 @@
1
1
  import enUS from "./locales/en-US.json"
2
2
  import zhCN from "./locales/zh-CN.json"
3
+ import thTh from "./locales/th-TH.json"
4
+
3
5
  export type AppMessagesSchema = typeof enUS
4
6
 
5
7
  export const i18nMessages = {
6
8
  "en-US": enUS,
7
- "zh-CN": zhCN
9
+ "zh-CN": zhCN,
10
+ "th-TH": thTh,
8
11
  }
9
12
 
10
13
  export { default as FmApp } from './App.vue'
@@ -252,6 +252,13 @@
252
252
  "updatePickupSetting": "อัปเดตการตั้งค่าการรับสินค้า",
253
253
  "updateSetting": "อัปเดตการตั้งค่า",
254
254
  "vendorBearPercentage": "เปอร์เซ็นต์ที่ผู้ขายรับผิดชอบ",
255
- "wednesday": "วันพุธ"
255
+ "wednesday": "วันพุธ",
256
+ "externalDelivery": "จัดการการจัดส่ง External",
257
+ "manageExternalDelivery": "จัดการการจัดส่งภายนอก",
258
+ "deliveryCatalog": "แคตตาล็อกการจัดส่ง",
259
+ "pickupCatalog": "แคตตาล็อกการรับสินค้า",
260
+ "DeliverySettingUpdated": "อัปเดตการตั้งค่าการจัดส่งแล้ว",
261
+ "selectPlatform": "เลือกแพลตฟอร์ม",
262
+ "platform": "แพลตฟอร์ม"
256
263
  }
257
264
  }
@@ -1,4 +1,4 @@
1
- import { Printer, ScannerInfoDto, KioskTerminalInfoDto } from '@entity';
1
+ import { Printer, ScannerInfoDto, KioskTerminalInfoDto, F_ORDER_PLATFORM_TYPE } from '@entity';
2
2
  export interface MfKioskDeviceConfigs {
3
3
  printerInfo?: Printer,
4
4
  scannerInfo?: ScannerInfoDto,
@@ -10,6 +10,10 @@ export interface MfKioskDevice {
10
10
  machineId: string,
11
11
  config: MfKioskDeviceConfigs,
12
12
  activatedAt: Date,
13
+ deviceAppType?: F_ORDER_PLATFORM_TYPE,
14
+ slotInfo?: string,
15
+ pinInfo?: string,
16
+ deviceAppVersion?: string,
13
17
  }
14
18
 
15
19
 
@@ -5,7 +5,7 @@ import { type MfKioskDevice } from "../../modules/kiosk/interface";
5
5
  import { KioskMapper } from "./mapper";
6
6
 
7
7
  interface State {
8
- otp : string;
8
+ otp: string;
9
9
  devices: MfKioskDevice[];
10
10
  }
11
11
 
@@ -16,25 +16,30 @@ export const useKioskStore = defineStore('kiosk', () => {
16
16
  devices: [],
17
17
  });
18
18
 
19
- async function requestOtp(){
19
+ async function requestOtp() {
20
20
  const result = await KioskApi.requestOtp();
21
21
  state.value.otp = result.otp;
22
22
  }
23
23
 
24
- async function getDevices(){
24
+ async function getDevices() {
25
25
  const result = await KioskApi.getDevices();
26
26
  state.value.devices = result.map((r) => KioskMapper.toMfKioskDevice(r));
27
27
  }
28
28
 
29
- async function unbind(machineId: string){
29
+ async function unbind(machineId: string) {
30
30
  await KioskApi.unbind(machineId);
31
31
  await getDevices();
32
32
  }
33
33
 
34
+ async function updateDevicePin(pinInfo: string, machineId: string) {
35
+ await KioskApi.updateDevicePin(pinInfo, machineId);
36
+ }
37
+
34
38
  return {
35
39
  state: state.value,
36
40
  requestOtp,
37
41
  getDevices,
38
42
  unbind,
43
+ updateDevicePin
39
44
  }
40
45
  });
@@ -1,7 +1,7 @@
1
1
  import { type MfKioskDevice } from "@/modules/kiosk/interface";
2
2
  import type { KioskDeviceDto } from "@entity";
3
3
 
4
- const toMfKioskDevice = (dto : KioskDeviceDto) : MfKioskDevice => {
4
+ const toMfKioskDevice = (dto: KioskDeviceDto): MfKioskDevice => {
5
5
  return {
6
6
  name: dto.name ?? 'N/A',
7
7
  machineId: dto.machineId,
@@ -11,6 +11,10 @@ const toMfKioskDevice = (dto : KioskDeviceDto) : MfKioskDevice => {
11
11
  terminalInfo: dto.terminalInfo ?? undefined,
12
12
  },
13
13
  activatedAt: tokenToActivatedAt(dto.token),
14
+ deviceAppType: dto.deviceAppType ?? undefined,
15
+ slotInfo: dto.slotInfo ?? undefined,
16
+ pinInfo: dto.pinInfo ?? undefined,
17
+ deviceAppVersion: dto.deviceAppVersion ?? undefined,
14
18
  };
15
19
  };
16
20
 
@@ -56,20 +56,8 @@ function initRestaurantState(): RestaurantState {
56
56
 
57
57
  export const useRestaurantStore = defineStore('restaurant', () => {
58
58
  const CoreStore = useCoreStore()
59
-
60
59
  const state = ref(initRestaurantState())
61
- const currentRestaurant = ref<FdoRestaurant | undefined>(undefined)
62
-
63
- watch(
64
- () => CoreStore.currentRestaurant.value,
65
- async () => {
66
- if(CoreStore.currentRestaurant.value){
67
- currentRestaurant.value = FdoRestaurant.parse(CoreStore.currentRestaurant.value)
68
- }
69
- }
70
- )
71
-
72
- const currentRestaurantSetting = computed<RestaurantSettingDoc| undefined>(() => state.value.restaurantSettings[currentRestaurant.value?._id || ''])
60
+ const currentRestaurantSetting = computed<RestaurantSettingDoc| undefined>(() => state.value.restaurantSettings[CoreStore.currentRestaurant.value?._id || ''])
73
61
 
74
62
  async function readRestaurantSetting(restaurantId: string) {
75
63
  const restaurantSetting = await restaurantApi.readRestaurantSetting(restaurantId)
@@ -119,11 +107,11 @@ export const useRestaurantStore = defineStore('restaurant', () => {
119
107
 
120
108
  function getRestaurantEPayment(): true | string {
121
109
  const { t } = useI18n()
122
- if (!currentRestaurant.value) {
110
+ if (!CoreStore.currentRestaurant.value) {
123
111
  return 'getRestaurantEPayment - Invalid restaurant ';
124
112
  }
125
- const payoutAccount = currentRestaurant.value.payoutAccount;
126
- const posVersion = currentRestaurant.value.posVersion;
113
+ const payoutAccount = CoreStore.currentRestaurant.value.payoutAccount;
114
+ const posVersion = CoreStore.currentRestaurant.value.posVersion;
127
115
 
128
116
  const validPosVersion =
129
117
  !!posVersion &&
@@ -145,7 +133,6 @@ export const useRestaurantStore = defineStore('restaurant', () => {
145
133
 
146
134
  return {
147
135
  state: state.value,
148
- currentRestaurant: currentRestaurant.value,
149
136
  currentRestaurantSetting : currentRestaurantSetting.value,
150
137
  readRestaurantSetting,
151
138
  selectRestaurant,
@@ -1,53 +1,118 @@
1
1
  <template>
2
-
3
- <div class="border fm-corner-radius-lg flex justify-between pr-[1rem] w-11/12">
4
- <FmSideSheet :header="t('order.deviceDetails')" dismiss-away class="w-full" :maxWidth="700">
5
- <template #side-sheet-button>
6
- <FmListItem class="flex-1" :label="device.name"
7
- :sublabel="`${t('order.activatedDate')}: ${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-600">{{ 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-600" 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]
19
- }}</span>
20
- </div>
21
- </div>
22
- </div>
23
- </FmSideSheet>
24
- <FmButton variant="plain" append-icon="link_off" class=" text-fm-color-system-error-300 align-middle my-auto"
25
- @click="openUnbindDialog" />
26
- </div>
2
+ <div class="border fm-corner-radius-lg flex justify-between pr-[1rem] w-11/12">
3
+ <FmSideSheet
4
+ :header="t('order.deviceDetails')"
5
+ dismiss-away
6
+ class="w-full"
7
+ :maxWidth="700"
8
+ @on:clickedAway="closeUpdateDevicePin"
9
+ >
10
+ <template #side-sheet-button>
11
+ <FmListItem
12
+ class="flex-1"
13
+ :label="device.name"
14
+ :sublabel="`${t('order.activatedDate')}: ${dayjs(device.activatedAt).format('DD MMM YYYY HH:mm')}`"
15
+ >
16
+ </FmListItem>
17
+ </template>
18
+ <div v-if="!showPinSetting" class="py-[1rem] flex flex-col gap-6">
19
+ <span class="fm-typo-en-title-sm-600">{{ device.name }}</span>
20
+ <div class="w-full border p-[1.5rem] fm-corner-radius-lg flex flex-col gap-2">
21
+ <span class="fm-typo-en-title-sm-600 mb-3">App Info</span>
22
+ <div class="flex flex-col gap-1 mb-2">
23
+ <span class="fm-typo-en-body-lg-400 text-fm-color-typo-secondary">Type</span>
24
+ <span class="fm-typo-en-body-lg-600 block">{{ appType }}</span>
25
+ </div>
26
+ <div class="flex flex-col gap-1 mb-2">
27
+ <span class="fm-typo-en-body-lg-400 text-fm-color-typo-secondary">Version</span>
28
+ <span class="fm-typo-en-body-lg-600 block">{{
29
+ device.deviceAppVersion ?? 'Below 0.0.42'
30
+ }}</span>
31
+ </div>
32
+ <div class="flex flex-col gap-1 mb-2">
33
+ <span class="fm-typo-en-body-lg-400 text-fm-color-typo-secondary">PIN Code</span>
34
+ <span class="fm-typo-en-body-lg-600 block">{{ isPinUpdate ? 'Yes' : 'No' }}</span>
35
+ </div>
36
+ <FmButton
37
+ class="w-auto"
38
+ variant="primary"
39
+ :label="device?.pinInfo ? 'Reset Device PIN' : 'Set Device PIN'"
40
+ @click="showUpdateDevicePin"
41
+ />
42
+ </div>
43
+ <div
44
+ v-for="config in configs.filter((c) => c[1])"
45
+ class="w-full border p-[1.5rem] fm-corner-radius-lg flex flex-col gap-2"
46
+ >
47
+ <span class="fm-typo-en-title-sm-600" v-if="config[1]">{{ config[0] }}</span>
48
+ <div
49
+ class="flex flex-col gap-1"
50
+ v-if="config[1]"
51
+ v-for="configEntry in Object.entries(config[1])"
52
+ >
53
+ <span class="fm-typo-en-body-lg-400 text-fm-color-typo-secondary">{{
54
+ configEntry[0]
55
+ }}</span>
56
+ <span class="fm-typo-en-body-lg-600 block">{{
57
+ configEntry[1] == '' ? '-' : configEntry[1]
58
+ }}</span>
59
+ </div>
60
+ </div>
61
+ </div>
62
+ <div v-else>
63
+ <div class="py-[1rem] flex flex-col gap-6 text-center items-center">
64
+ <div class="flex flex-col gap-1 mb-2">
65
+ <span class="fm-typo-en-body-lg-400 text-fm-color-typo-secondary">{{ pinText }}</span>
66
+ <span class="mt-5 block">
67
+ <FmPinField v-if="!isPinEntered" :length="4" @complete="(val) => pinEntered(val)" />
68
+ <FmPinField v-if="isPinEntered" :length="4" @complete="(val) => pinEntered(val)" />
69
+ </span>
70
+ </div>
71
+ <FmButton
72
+ class="w-1/3"
73
+ variant="secondary"
74
+ label="Cancel reset PIN"
75
+ @click="closeUpdateDevicePin"
76
+ />
77
+ </div>
78
+ </div>
79
+ </FmSideSheet>
80
+ <FmButton
81
+ variant="plain"
82
+ append-icon="link_off"
83
+ class="text-fm-color-system-error-300 align-middle my-auto"
84
+ @click="openUnbindDialog"
85
+ />
86
+ </div>
27
87
  </template>
28
88
  <script setup lang="ts">
29
- import type { MfKioskDevice } from '@/modules/kiosk/interface';
30
- import { type SnackbarPosition, useDialog, useSnackbar } from '@feedmepos/ui-library';
31
- import KioskUnbindConfirm from './KioskUnbindConfirm.vue';
32
- import { computed, ref } from 'vue';
33
- import { useKioskStore } from '@/stores/kiosk';
34
- import dayjs from 'dayjs';
89
+ import type { MfKioskDevice } from '@/modules/kiosk/interface'
90
+ import { type SnackbarPosition, useDialog, useSnackbar } from '@feedmepos/ui-library'
91
+ import KioskUnbindConfirm from './KioskUnbindConfirm.vue'
92
+ import { computed, onUnmounted, ref } from 'vue'
93
+ import { useKioskStore } from '@/stores/kiosk'
94
+ import dayjs from 'dayjs'
35
95
  import { useI18n } from '@feedmepos/mf-common'
36
96
 
37
97
  const { t } = useI18n()
38
98
 
39
- const Dialog = useDialog();
40
- const Snackbar = useSnackbar();
41
- const Kiosk = useKioskStore();
99
+ const Dialog = useDialog()
100
+ const Snackbar = useSnackbar()
101
+ const Kiosk = useKioskStore()
102
+ const showPinSetting = ref(false)
42
103
 
43
104
  interface Props {
44
- device: MfKioskDevice,
105
+ device: MfKioskDevice
45
106
  }
46
- const props = defineProps<Props>();
47
- const unBindTextFieldValue = ref<string>('');
107
+ const props = defineProps<Props>()
108
+ const unBindTextFieldValue = ref<string>('')
48
109
 
49
110
  const configs = computed(() => {
50
- return Object.entries(props.device.config);
111
+ return Object.entries(props.device.config)
112
+ })
113
+
114
+ const appType = computed(() => {
115
+ return props.device?.deviceAppType === 'TABLET_APP' ? 'Tablet App' : 'Kiosk App'
51
116
  })
52
117
 
53
118
  // function showDeviceDetails() {
@@ -61,49 +126,106 @@ const configs = computed(() => {
61
126
  // }
62
127
 
63
128
  function openUnbindDialog() {
64
- unBindTextFieldValue.value = '';
65
- Dialog.open({
66
- title: t('order.unbindKioskDevice'),
67
- contentComponent: KioskUnbindConfirm,
68
- contentComponentProps: {
69
- machineId: props.device.machineId,
70
- 'onUpdate:modelValue': (v: string) => {
71
- unBindTextFieldValue.value = v;
72
- }
73
- },
74
- dismissAway: false,
75
- primaryActions: {
76
- text: t('order.unbind'),
77
- variant: 'destructive',
78
- close: false,
79
- },
80
- secondaryActions: {
81
- text: t('order.cancel'),
82
- variant: 'tertiary',
83
- close: true,
84
- }
85
- }).onPrimary(async () => {
86
- if (unBindTextFieldValue.value == props.device.machineId) {
87
- await unbind();
88
- Snackbar.open({
89
- type: 'success',
90
- message: t('order.unbindSuccess'),
91
- position: 'bottom' as SnackbarPosition,
92
- });
93
- Dialog.close();
94
- } else {
95
- Snackbar.open({
96
- type: 'warning',
97
- message: t('order.unbindWarning'),
98
- position: 'bottom' as SnackbarPosition,
99
-
100
- });
101
- }
102
- });
129
+ unBindTextFieldValue.value = ''
130
+ Dialog.open({
131
+ title: t('order.unbindKioskDevice'),
132
+ contentComponent: KioskUnbindConfirm,
133
+ contentComponentProps: {
134
+ machineId: props.device.machineId,
135
+ 'onUpdate:modelValue': (v: string) => {
136
+ unBindTextFieldValue.value = v
137
+ }
138
+ },
139
+ dismissAway: false,
140
+ primaryActions: {
141
+ text: t('order.unbind'),
142
+ variant: 'destructive',
143
+ close: false
144
+ },
145
+ secondaryActions: {
146
+ text: t('order.cancel'),
147
+ variant: 'tertiary',
148
+ close: true
149
+ }
150
+ }).onPrimary(async () => {
151
+ if (unBindTextFieldValue.value == props.device.machineId) {
152
+ await unbind()
153
+ Snackbar.open({
154
+ type: 'success',
155
+ message: t('order.unbindSuccess'),
156
+ position: 'bottom' as SnackbarPosition
157
+ })
158
+ Dialog.close()
159
+ } else {
160
+ Snackbar.open({
161
+ type: 'warning',
162
+ message: t('order.unbindWarning'),
163
+ position: 'bottom' as SnackbarPosition
164
+ })
165
+ }
166
+ })
103
167
  }
104
168
 
105
- async function unbind() {
106
- await Kiosk.unbind(props.device.machineId);
169
+ const isPinUpdate = computed(() => {
170
+ return props.device?.pinInfo
171
+ })
172
+
173
+ const pinText = computed(() => {
174
+ return isPinEntered.value ? 'Re-enter new PIN' : 'Enter new PIN'
175
+ })
176
+
177
+ const isPinEntered = ref(false)
178
+ const enteredPin = ref()
179
+ const reEnteredPin = ref()
180
+
181
+ function showUpdateDevicePin() {
182
+ showPinSetting.value = true
183
+ }
184
+
185
+ function closeUpdateDevicePin() {
186
+ isPinEntered.value = false
187
+ enteredPin.value = null
188
+ reEnteredPin.value = null
189
+ showPinSetting.value = false
107
190
  }
108
191
 
109
- </script>
192
+ function pinEntered(pinVal: string) {
193
+ if (isPinEntered.value) {
194
+ reEnteredPin.value = pinVal
195
+ validatePin()
196
+ } else {
197
+ enteredPin.value = pinVal
198
+ isPinEntered.value = true
199
+ }
200
+ }
201
+
202
+ function checkCurrentPin(pinVal: string) {
203
+ return isPinUpdate.value && pinVal !== props.device?.pinInfo
204
+ }
205
+
206
+ async function validatePin() {
207
+ if (enteredPin.value === reEnteredPin.value) {
208
+ await updateDevicePin()
209
+ Snackbar.open({
210
+ type: 'success',
211
+ message: 'Successfuly update device PIN',
212
+ position: 'top' as SnackbarPosition
213
+ })
214
+ } else {
215
+ Snackbar.open({
216
+ type: 'error',
217
+ message: 'Entered PIN not the same, please try again',
218
+ position: 'top' as SnackbarPosition
219
+ })
220
+ }
221
+ closeUpdateDevicePin()
222
+ }
223
+
224
+ async function updateDevicePin() {
225
+ await Kiosk.updateDevicePin(enteredPin.value, props.device.machineId)
226
+ }
227
+
228
+ async function unbind() {
229
+ await Kiosk.unbind(props.device.machineId)
230
+ }
231
+ </script>
@@ -72,7 +72,7 @@
72
72
  <InHouseDelivery
73
73
  v-if="inHouseComponentProps.key === F_ORDER_PLATFORM.enum.IN_HOUSE"
74
74
  :initial-value="inHouseComponentProps.initialValue"
75
- :address="formatAddress(currentRestaurant?.profile.address)"
75
+ :address="formatAddress((currentRestaurant as any).profile.address)"
76
76
  @update:model-value="handleModelValueUpdateInHouse"
77
77
  />
78
78
  <ExternalSetting
@@ -200,7 +200,8 @@ const { t } = useI18n()
200
200
  const { searchKey, filter } = useSearch()
201
201
  const { showSuccess } = useSnackbarFunctions()
202
202
  const restaurantStore = useRestaurantStore()
203
- const { currentBusiness, readRestaurants, changeRestaurant, sessionUser } = useCoreStore()
203
+ const { currentRestaurant, currentBusiness, readRestaurants, changeRestaurant, sessionUser } =
204
+ useCoreStore()
204
205
  const menuStore = useMenuStore()
205
206
  const linkedCompanies = ref<LinkedDeliveryDoc[]>([])
206
207
  const deliveryCompanies = ref<DeliveryCompany[]>([])
@@ -227,7 +228,6 @@ export interface IntegratedDeliveryRow extends DeliveryRow {
227
228
  }
228
229
 
229
230
  const sideSheet = ref<boolean>(false)
230
- const currentRestaurant = computed(() => restaurantStore.currentRestaurant)
231
231
  const loading = computed(() => {
232
232
  return !currentRestaurant.value || loadingDpi.value
233
233
  })
@@ -459,7 +459,7 @@ const foodpanda = computed<FdoFoodpandaSettings>(() => {
459
459
  return {
460
460
  ...deliveryData.initFoodpandaDelivery(),
461
461
  ...foodpandaSetting.value,
462
- autoAccept: foodpandaSetting?.value?.autoAccept ?? false,
462
+ autoAccept: foodpandaSetting?.value?.autoAccept ?? true,
463
463
  ignoreDiscount: foodpandaSetting?.value?.ignoreDiscount ?? false
464
464
  }
465
465
  })
@@ -39,7 +39,7 @@ export function initFoodpandaDelivery(): FdoFoodpandaSettings {
39
39
  discountCampaigns: [],
40
40
  commissionRate: 0
41
41
  },
42
- autoAccept: false
42
+ autoAccept: true
43
43
  };
44
44
  }
45
45
 
@@ -72,7 +72,7 @@ function initExternalDelivery(): FdoExternalSetting {
72
72
  _id: '',
73
73
  enable: false,
74
74
  config: {
75
- autoAccept: false,
75
+ autoAccept: true,
76
76
  autoSend: false,
77
77
  autoCloseBill: false,
78
78
  },
@@ -5,6 +5,7 @@
5
5
  :label="t('order.activateIntegration', { integrationType: t('order.auto') })"
6
6
  label-placement="right"
7
7
  @update:model-value="updateEnable"
8
+ :disabled="!canEdit"
8
9
  />
9
10
  <div v-if="data.enable">
10
11
  <FmCard variant="outlined" class="mt-10 p-5">
@@ -17,6 +18,7 @@
17
18
  :label="t('order.platform')"
18
19
  :items="platformOptions"
19
20
  @update:model-value="updatePlatform"
21
+ :disabled="!canEdit"
20
22
  />
21
23
 
22
24
  <FmSelect
@@ -26,6 +28,7 @@
26
28
  :label="t('order.deliveryCatalog')"
27
29
  :items="menuStore.catalogOptions"
28
30
  @update:model-value="updateDeliveryMenuCatalog"
31
+ :disabled="!canEdit"
29
32
  />
30
33
 
31
34
  <FmSelect
@@ -35,11 +38,17 @@
35
38
  :label="t('order.pickupCatalog')"
36
39
  :items="menuStore.catalogOptions"
37
40
  @update:model-value="updatePickupMenuCatalog"
41
+ :disabled="!canEdit"
38
42
  />
39
43
  </div>
40
44
 
41
45
  <div class="flex flex-row mt-5">
42
- <FmButton variant="primary" :label="t('order.syncMenu')" @click="syncMenu()" />
46
+ <FmButton
47
+ variant="primary"
48
+ :label="t('order.syncMenu')"
49
+ @click="syncMenu()"
50
+ :disabled="!canEdit"
51
+ />
43
52
  </div>
44
53
  </FmCard>
45
54
  </div>
@@ -49,7 +58,7 @@
49
58
  <script setup lang="ts">
50
59
  import { type PropType, computed, reactive, ref, watch } from 'vue'
51
60
  import { F_ORDER_PLATFORM, type FdoExternalSetting } from '@entity'
52
- import { useI18n } from '@feedmepos/mf-common'
61
+ import { useI18n, useCoreStore } from '@feedmepos/mf-common'
53
62
  import { clone } from '@/helpers/object'
54
63
  import { useMenuStore } from '@/stores/menu/menu'
55
64
  import { useLoading } from '@/composables/loading'
@@ -59,6 +68,9 @@ import { useSnackbarFunctions } from '@/components/snackbar'
59
68
  const { showSuccess } = useSnackbarFunctions()
60
69
  const { t } = useI18n()
61
70
  const menuStore = useMenuStore()
71
+ const CoreStore = useCoreStore()
72
+
73
+ const canEdit = computed(() => CoreStore.sessionUser.value?.role.isAdmin ?? false)
62
74
 
63
75
  const props = defineProps({
64
76
  initialValue: {