@feedmepos/mf-order-setting 0.0.26 → 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 (104) hide show
  1. package/dist/{KioskDevicesView-BiF6v7Zj.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-COhGcRtP.js → KioskSettingView-equ5EIvU.js} +3 -3
  4. package/dist/{KioskView-C1T-n1MY.js → KioskView-CsE7BGtA.js} +5 -5
  5. package/dist/OrderSettingsView-BpLXyk_0.js +49013 -0
  6. package/dist/{app-BfWp4ow3.js → app-D-zQN9_E.js} +293 -31
  7. package/dist/app.js +1 -1
  8. package/dist/{dayjs.min-BHDLv42p.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/views/all-orders/ActionMenuCell.vue.d.ts +2 -2
  19. package/dist/frontend/mf-order/src/views/all-orders/FilterRestaurant.vue.d.ts +1 -1
  20. package/dist/frontend/mf-order/src/views/all-orders/FilterStatus.vue.d.ts +2 -2
  21. package/dist/frontend/mf-order/src/views/all-orders/FilterStatusMenu.vue.d.ts +2 -2
  22. package/dist/frontend/mf-order/src/views/all-orders/ReflowOrder.vue.d.ts +2 -2
  23. package/dist/frontend/mf-order/src/views/all-orders/UpdateDeliveryOrderDialog.vue.d.ts +2 -2
  24. package/dist/frontend/mf-order/src/views/kiosk/KioskSummary.vue.d.ts +1 -1
  25. package/dist/frontend/mf-order/src/views/kiosk/KioskView.vue.d.ts +1 -1
  26. package/dist/frontend/mf-order/src/views/kiosk/devices/KioskDeviceCard.vue.d.ts +1 -1
  27. package/dist/frontend/mf-order/src/views/kiosk/devices/KioskDeviceDetail.vue.d.ts +1 -1
  28. package/dist/frontend/mf-order/src/views/kiosk/devices/KioskDevicesView.vue.d.ts +1 -1
  29. package/dist/frontend/mf-order/src/views/kiosk/devices/KioskOtpDialog.vue.d.ts +1 -1
  30. package/dist/frontend/mf-order/src/views/kiosk/devices/KioskUnbindConfirm.vue.d.ts +2 -2
  31. package/dist/frontend/mf-order/src/views/kiosk/settings/KioskDineInSection.vue.d.ts +2 -2
  32. package/dist/frontend/mf-order/src/views/kiosk/settings/KioskDisplayStandSection.vue.d.ts +2 -2
  33. package/dist/frontend/mf-order/src/views/kiosk/settings/KioskEnablePaxDialogSection.vue.d.ts +2 -2
  34. package/dist/frontend/mf-order/src/views/kiosk/settings/KioskInstructionSection.vue.d.ts +2 -2
  35. package/dist/frontend/mf-order/src/views/kiosk/settings/KioskMenuItemSection.vue.d.ts +1 -1
  36. package/dist/frontend/mf-order/src/views/kiosk/settings/KioskPaymentTypeSection.vue.d.ts +1 -1
  37. package/dist/frontend/mf-order/src/views/kiosk/settings/KioskPickAtCounterSection.vue.d.ts +2 -2
  38. package/dist/frontend/mf-order/src/views/kiosk/settings/KioskSettingView.vue.d.ts +1 -1
  39. package/dist/frontend/mf-order/src/views/kiosk/settings/KioskTakeawaySection.vue.d.ts +2 -2
  40. package/dist/frontend/mf-order/src/views/order-settings/delivery/DeliveryList.vue.d.ts +2 -2
  41. package/dist/frontend/mf-order/src/views/order-settings/delivery/components/ManualIntegratedDeliverySetting.vue.d.ts +1 -1
  42. package/dist/frontend/mf-order/src/views/order-settings/delivery/components/TaxInput.vue.d.ts +2 -2
  43. package/dist/frontend/mf-order/src/views/order-settings/delivery/inhouse/CurrencyInput.vue.d.ts +1 -1
  44. package/dist/frontend/mf-order/src/views/order-settings/delivery/inhouse/DeliveryCustomTime.vue.d.ts +1 -1
  45. package/dist/frontend/mf-order/src/views/order-settings/delivery/inhouse/DeliveryOrder.vue.d.ts +6 -141
  46. package/dist/frontend/mf-order/src/views/order-settings/delivery/inhouse/DeliveryTime.vue.d.ts +1 -1
  47. package/dist/frontend/mf-order/src/views/order-settings/delivery/inhouse/InHouseDelivery.vue.d.ts +1 -1
  48. package/dist/frontend/mf-order/src/views/order-settings/delivery/inhouse/TimePicker.vue.d.ts +1 -1
  49. package/dist/frontend/mf-order/src/views/order-settings/delivery/inhouse/ZoneDialog.vue.d.ts +1 -1
  50. package/dist/frontend/mf-order/src/views/order-settings/delivery/integrated-delivery/ExternalSetting.vue.d.ts +2 -2
  51. package/dist/frontend/mf-order/src/views/order-settings/delivery/integrated-delivery/FeedmeDelivery.vue.d.ts +1 -1
  52. package/dist/frontend/mf-order/src/views/order-settings/delivery/integrated-delivery/FoodpandaCampaignDialog.vue.d.ts +1 -1
  53. package/dist/frontend/mf-order/src/views/order-settings/delivery/integrated-delivery/FoodpandaSetting.vue.d.ts +1 -1
  54. package/dist/frontend/mf-order/src/views/order-settings/delivery/integrated-delivery/GrabfoodSetting.vue.d.ts +1 -1
  55. package/dist/frontend/mf-order/src/views/order-settings/delivery/integrated-delivery/IntegratedDelivery.vue.d.ts +5 -5
  56. package/dist/frontend/mf-order/src/views/order-settings/delivery/integrated-delivery/ShopeefoodSetting.vue.d.ts +1 -1
  57. package/dist/frontend/mf-order/src/views/order-settings/dine-in/OfflinePaymentTypeDialog.vue.d.ts +1 -1
  58. package/dist/frontend/mf-order/src/views/order-settings/dine-in/OfflinePaymentTypeDialogContent.vue.d.ts +2 -2
  59. package/dist/frontend/mf-order/src/views/order-settings/dine-in/PaymentType.vue.d.ts +1 -1
  60. package/dist/frontend/mf-order/src/views/order-settings/pickup/AddressInput.vue.d.ts +1 -1
  61. package/dist/frontend/mf-order/src/views/order-settings/pickup/CustomPayment.vue.d.ts +1 -1
  62. package/dist/frontend/mf-order/src/views/order-settings/pickup/PaymentSidesheet.vue.d.ts +2 -2
  63. package/dist/frontend/mf-order/src/views/order-settings/pickup/PickUpPointDialog.vue.d.ts +1 -1
  64. package/dist/frontend/mf-order/src/views/order-settings/pickup/PickUpPointDialogContent.vue.d.ts +2 -137
  65. package/dist/frontend/mf-order/src/views/order-settings/pickup/PickUpSettingDialog.vue.d.ts +1 -1
  66. package/dist/frontend/mf-order/src/views/order-settings/pickup/PickUpSettingDialogContent.vue.d.ts +1 -1
  67. package/dist/frontend/mf-order/src/views/order-settings/pickup/PickupList.vue.d.ts +2 -2
  68. package/dist/frontend/mf-order/src/views/order-settings/pickup/Preorder.vue.d.ts +1 -1
  69. package/dist/frontend/mf-order/src/views/order-settings/servicecharge/RateInput.vue.d.ts +1 -1
  70. package/dist/frontend/mf-order/src/views/order-settings/servicecharge/ServiceChargeRule.vue.d.ts +1 -1
  71. package/dist/frontend/mf-order/tsconfig.app.tsbuildinfo +1 -1
  72. package/dist/{index-DSCb3ndM.js → index-BXsnV_eO.js} +5 -5
  73. package/dist/{index-B5kfsi9C.js → index-BwrMcIf2.js} +2 -2
  74. package/dist/package/entity/cursor/cursor.dto.d.ts +2 -2
  75. package/dist/package/entity/incoming-order/incoming-order-to-bill.dto.d.ts +7 -7
  76. package/dist/package/entity/incoming-order/incoming-order.do.d.ts +22 -9
  77. package/dist/package/entity/incoming-order/incoming-order.dto.d.ts +18 -18
  78. package/dist/package/entity/kiosk/kiosk.do.d.ts +32 -0
  79. package/dist/package/entity/kiosk/kiosk.dto.d.ts +79 -0
  80. package/dist/package/entity/order/dine-in/dine-in.do.d.ts +8 -8
  81. package/dist/package/entity/order/dine-in/dine-in.dto.d.ts +4 -4
  82. package/dist/package/entity/order/menu/menu.dto.d.ts +12 -12
  83. package/dist/package/entity/order/order-item/order-item.dto.d.ts +14 -8
  84. package/dist/package/entity/order/order.do.d.ts +19 -19
  85. package/dist/package/entity/order/order.dto.d.ts +134 -128
  86. package/dist/package/entity/order/order.enum.d.ts +2 -2
  87. package/dist/package/entity/order-platform/menu.dto.d.ts +31 -0
  88. package/dist/queue.do-F110q0_J.js +100389 -0
  89. package/package.json +3 -3
  90. package/src/api/kiosk/index.ts +9 -4
  91. package/src/app.ts +4 -1
  92. package/src/locales/th-TH.json +8 -1
  93. package/src/modules/kiosk/interface.ts +5 -1
  94. package/src/stores/kiosk/index.ts +9 -4
  95. package/src/stores/kiosk/mapper.ts +5 -1
  96. package/src/views/kiosk/devices/KioskDeviceCard.vue +202 -80
  97. package/src/views/order-settings/delivery/DeliverySetting.vue +1 -1
  98. package/src/views/order-settings/delivery/delivery.data.ts +2 -2
  99. package/src/views/order-settings/delivery/integrated-delivery/ExternalSetting.vue +14 -2
  100. package/src/views/order-settings/delivery/integrated-delivery/FoodpandaSetting.vue +2 -34
  101. package/src/views/order-settings/delivery/integrated-delivery/IntegratedDelivery.vue +15 -12
  102. package/dist/KioskDevicesView.vue_vue_type_script_setup_true_lang-1r_DBAc-.js +0 -207
  103. package/dist/OrderSettingsView-CI5bdVXr.js +0 -72108
  104. package/dist/queue.do-y-ubeoKZ.js +0 -122897
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@feedmepos/mf-order-setting",
3
- "version": "0.0.26",
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
 
@@ -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>
@@ -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: {
@@ -49,11 +49,11 @@ const modelValue = computed<IntegratedDeliverySettingData>(() => {
49
49
  catalogId: auto?.catalogId ?? null,
50
50
  commissionRate: auto.reportConfig?.commissionRate ?? 0,
51
51
  lastSynchronize: auto.lastSynchronize ?? '',
52
- autoAccept: auto.autoAccept ?? false,
52
+ autoAccept: true,
53
53
  ignoreDiscount: auto.ignoreDiscount ?? false,
54
54
  status: auto.status,
55
55
  updatedAt: auto.updatedAt,
56
- sstInclusive: auto.sstInclusive,
56
+ sstInclusive: auto.sstInclusive ?? false,
57
57
  menuSyncError: auto.menuSyncError
58
58
  }
59
59
  }
@@ -232,37 +232,5 @@ async function cancelTestOrder() {
232
232
  @flow-test-order="flowTestOrder"
233
233
  @cancel-test-order="cancelTestOrder"
234
234
  >
235
- <template #default="{ editable }">
236
- <div class="flex-grow fm-typo-en-title-sm-600 mb-3 mt-10">
237
- {{ t('order.discountCampaign') }}
238
- </div>
239
- <FmButton
240
- :label="t('order.addNewCampaign')"
241
- icon="add"
242
- variant="plain"
243
- @click="addCampaign"
244
- class="mb-3"
245
- />
246
-
247
- <div v-if="campaigns.length > 0">
248
- <div v-for="(campaign, index) in campaigns" :key="index">
249
- <FmCard variant="outlined" class="p-5 flex justify-between items-center mb-5">
250
- <div>
251
- <span class="font-bold"
252
- >{{ campaign.name }} ({{ campaign.vendorBearPercentage }}%)</span
253
- >
254
- <br />
255
- {{ formatCampaignDate(campaign.date) }}
256
- </div>
257
- <div>
258
- <div class="flex flex-row">
259
- <FmButton append-icon="edit" variant="tertiary" @click="updateCampaign(index)" />
260
- <FmButton append-icon="delete" variant="tertiary" @click="deleteCampaign(index)" />
261
- </div>
262
- </div>
263
- </FmCard>
264
- </div>
265
- </div>
266
- </template>
267
235
  </IntegratedDelivery>
268
236
  </template>