@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.
- package/dist/{KioskDevicesView-BiF6v7Zj.js → KioskDevicesView-AKvyDF3w.js} +1 -1
- package/dist/KioskDevicesView.vue_vue_type_script_setup_true_lang-Cx8VMyNB.js +301 -0
- package/dist/{KioskSettingView-COhGcRtP.js → KioskSettingView-equ5EIvU.js} +3 -3
- package/dist/{KioskView-C1T-n1MY.js → KioskView-CsE7BGtA.js} +5 -5
- package/dist/OrderSettingsView-BpLXyk_0.js +49013 -0
- package/dist/{app-BfWp4ow3.js → app-D-zQN9_E.js} +293 -31
- package/dist/app.js +1 -1
- package/dist/{dayjs.min-BHDLv42p.js → dayjs.min-CWQSmujV.js} +600 -619
- package/dist/frontend/mf-order/src/App.vue.d.ts +1 -1
- package/dist/frontend/mf-order/src/Entry.vue.d.ts +1 -1
- package/dist/frontend/mf-order/src/api/kiosk/index.d.ts +2 -0
- package/dist/frontend/mf-order/src/app.d.ts +264 -0
- package/dist/frontend/mf-order/src/components/GoogleMap.vue.d.ts +3 -5
- package/dist/frontend/mf-order/src/main.d.ts +7 -0
- package/dist/frontend/mf-order/src/modules/kiosk/interface.d.ts +5 -1
- package/dist/frontend/mf-order/src/stores/kiosk/index.d.ts +16 -1
- package/dist/frontend/mf-order/src/stores/menu/menu.d.ts +82 -0
- package/dist/frontend/mf-order/src/views/all-orders/ActionMenuCell.vue.d.ts +2 -2
- package/dist/frontend/mf-order/src/views/all-orders/FilterRestaurant.vue.d.ts +1 -1
- package/dist/frontend/mf-order/src/views/all-orders/FilterStatus.vue.d.ts +2 -2
- package/dist/frontend/mf-order/src/views/all-orders/FilterStatusMenu.vue.d.ts +2 -2
- package/dist/frontend/mf-order/src/views/all-orders/ReflowOrder.vue.d.ts +2 -2
- package/dist/frontend/mf-order/src/views/all-orders/UpdateDeliveryOrderDialog.vue.d.ts +2 -2
- package/dist/frontend/mf-order/src/views/kiosk/KioskSummary.vue.d.ts +1 -1
- package/dist/frontend/mf-order/src/views/kiosk/KioskView.vue.d.ts +1 -1
- package/dist/frontend/mf-order/src/views/kiosk/devices/KioskDeviceCard.vue.d.ts +1 -1
- package/dist/frontend/mf-order/src/views/kiosk/devices/KioskDeviceDetail.vue.d.ts +1 -1
- package/dist/frontend/mf-order/src/views/kiosk/devices/KioskDevicesView.vue.d.ts +1 -1
- package/dist/frontend/mf-order/src/views/kiosk/devices/KioskOtpDialog.vue.d.ts +1 -1
- package/dist/frontend/mf-order/src/views/kiosk/devices/KioskUnbindConfirm.vue.d.ts +2 -2
- package/dist/frontend/mf-order/src/views/kiosk/settings/KioskDineInSection.vue.d.ts +2 -2
- package/dist/frontend/mf-order/src/views/kiosk/settings/KioskDisplayStandSection.vue.d.ts +2 -2
- package/dist/frontend/mf-order/src/views/kiosk/settings/KioskEnablePaxDialogSection.vue.d.ts +2 -2
- package/dist/frontend/mf-order/src/views/kiosk/settings/KioskInstructionSection.vue.d.ts +2 -2
- package/dist/frontend/mf-order/src/views/kiosk/settings/KioskMenuItemSection.vue.d.ts +1 -1
- package/dist/frontend/mf-order/src/views/kiosk/settings/KioskPaymentTypeSection.vue.d.ts +1 -1
- package/dist/frontend/mf-order/src/views/kiosk/settings/KioskPickAtCounterSection.vue.d.ts +2 -2
- package/dist/frontend/mf-order/src/views/kiosk/settings/KioskSettingView.vue.d.ts +1 -1
- package/dist/frontend/mf-order/src/views/kiosk/settings/KioskTakeawaySection.vue.d.ts +2 -2
- package/dist/frontend/mf-order/src/views/order-settings/delivery/DeliveryList.vue.d.ts +2 -2
- package/dist/frontend/mf-order/src/views/order-settings/delivery/components/ManualIntegratedDeliverySetting.vue.d.ts +1 -1
- package/dist/frontend/mf-order/src/views/order-settings/delivery/components/TaxInput.vue.d.ts +2 -2
- package/dist/frontend/mf-order/src/views/order-settings/delivery/inhouse/CurrencyInput.vue.d.ts +1 -1
- package/dist/frontend/mf-order/src/views/order-settings/delivery/inhouse/DeliveryCustomTime.vue.d.ts +1 -1
- package/dist/frontend/mf-order/src/views/order-settings/delivery/inhouse/DeliveryOrder.vue.d.ts +6 -141
- package/dist/frontend/mf-order/src/views/order-settings/delivery/inhouse/DeliveryTime.vue.d.ts +1 -1
- package/dist/frontend/mf-order/src/views/order-settings/delivery/inhouse/InHouseDelivery.vue.d.ts +1 -1
- package/dist/frontend/mf-order/src/views/order-settings/delivery/inhouse/TimePicker.vue.d.ts +1 -1
- package/dist/frontend/mf-order/src/views/order-settings/delivery/inhouse/ZoneDialog.vue.d.ts +1 -1
- package/dist/frontend/mf-order/src/views/order-settings/delivery/integrated-delivery/ExternalSetting.vue.d.ts +2 -2
- package/dist/frontend/mf-order/src/views/order-settings/delivery/integrated-delivery/FeedmeDelivery.vue.d.ts +1 -1
- package/dist/frontend/mf-order/src/views/order-settings/delivery/integrated-delivery/FoodpandaCampaignDialog.vue.d.ts +1 -1
- package/dist/frontend/mf-order/src/views/order-settings/delivery/integrated-delivery/FoodpandaSetting.vue.d.ts +1 -1
- package/dist/frontend/mf-order/src/views/order-settings/delivery/integrated-delivery/GrabfoodSetting.vue.d.ts +1 -1
- package/dist/frontend/mf-order/src/views/order-settings/delivery/integrated-delivery/IntegratedDelivery.vue.d.ts +5 -5
- package/dist/frontend/mf-order/src/views/order-settings/delivery/integrated-delivery/ShopeefoodSetting.vue.d.ts +1 -1
- package/dist/frontend/mf-order/src/views/order-settings/dine-in/OfflinePaymentTypeDialog.vue.d.ts +1 -1
- package/dist/frontend/mf-order/src/views/order-settings/dine-in/OfflinePaymentTypeDialogContent.vue.d.ts +2 -2
- package/dist/frontend/mf-order/src/views/order-settings/dine-in/PaymentType.vue.d.ts +1 -1
- package/dist/frontend/mf-order/src/views/order-settings/pickup/AddressInput.vue.d.ts +1 -1
- package/dist/frontend/mf-order/src/views/order-settings/pickup/CustomPayment.vue.d.ts +1 -1
- package/dist/frontend/mf-order/src/views/order-settings/pickup/PaymentSidesheet.vue.d.ts +2 -2
- package/dist/frontend/mf-order/src/views/order-settings/pickup/PickUpPointDialog.vue.d.ts +1 -1
- package/dist/frontend/mf-order/src/views/order-settings/pickup/PickUpPointDialogContent.vue.d.ts +2 -137
- package/dist/frontend/mf-order/src/views/order-settings/pickup/PickUpSettingDialog.vue.d.ts +1 -1
- package/dist/frontend/mf-order/src/views/order-settings/pickup/PickUpSettingDialogContent.vue.d.ts +1 -1
- package/dist/frontend/mf-order/src/views/order-settings/pickup/PickupList.vue.d.ts +2 -2
- package/dist/frontend/mf-order/src/views/order-settings/pickup/Preorder.vue.d.ts +1 -1
- package/dist/frontend/mf-order/src/views/order-settings/servicecharge/RateInput.vue.d.ts +1 -1
- package/dist/frontend/mf-order/src/views/order-settings/servicecharge/ServiceChargeRule.vue.d.ts +1 -1
- package/dist/frontend/mf-order/tsconfig.app.tsbuildinfo +1 -1
- package/dist/{index-DSCb3ndM.js → index-BXsnV_eO.js} +5 -5
- package/dist/{index-B5kfsi9C.js → index-BwrMcIf2.js} +2 -2
- package/dist/package/entity/cursor/cursor.dto.d.ts +2 -2
- package/dist/package/entity/incoming-order/incoming-order-to-bill.dto.d.ts +7 -7
- package/dist/package/entity/incoming-order/incoming-order.do.d.ts +22 -9
- package/dist/package/entity/incoming-order/incoming-order.dto.d.ts +18 -18
- package/dist/package/entity/kiosk/kiosk.do.d.ts +32 -0
- package/dist/package/entity/kiosk/kiosk.dto.d.ts +79 -0
- package/dist/package/entity/order/dine-in/dine-in.do.d.ts +8 -8
- package/dist/package/entity/order/dine-in/dine-in.dto.d.ts +4 -4
- package/dist/package/entity/order/menu/menu.dto.d.ts +12 -12
- package/dist/package/entity/order/order-item/order-item.dto.d.ts +14 -8
- package/dist/package/entity/order/order.do.d.ts +19 -19
- package/dist/package/entity/order/order.dto.d.ts +134 -128
- package/dist/package/entity/order/order.enum.d.ts +2 -2
- package/dist/package/entity/order-platform/menu.dto.d.ts +31 -0
- package/dist/queue.do-F110q0_J.js +100389 -0
- package/package.json +3 -3
- package/src/api/kiosk/index.ts +9 -4
- package/src/app.ts +4 -1
- package/src/locales/th-TH.json +8 -1
- package/src/modules/kiosk/interface.ts +5 -1
- package/src/stores/kiosk/index.ts +9 -4
- package/src/stores/kiosk/mapper.ts +5 -1
- package/src/views/kiosk/devices/KioskDeviceCard.vue +202 -80
- package/src/views/order-settings/delivery/DeliverySetting.vue +1 -1
- package/src/views/order-settings/delivery/delivery.data.ts +2 -2
- package/src/views/order-settings/delivery/integrated-delivery/ExternalSetting.vue +14 -2
- package/src/views/order-settings/delivery/integrated-delivery/FoodpandaSetting.vue +2 -34
- package/src/views/order-settings/delivery/integrated-delivery/IntegratedDelivery.vue +15 -12
- package/dist/KioskDevicesView.vue_vue_type_script_setup_true_lang-1r_DBAc-.js +0 -207
- package/dist/OrderSettingsView-CI5bdVXr.js +0 -72108
- 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.
|
|
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.
|
|
29
|
-
"@feedmepos/menu": "^1.5.
|
|
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",
|
package/src/api/kiosk/index.ts
CHANGED
|
@@ -1,22 +1,27 @@
|
|
|
1
1
|
import { getData, restaurantClientInstance } from '@/api';
|
|
2
2
|
import { KioskOtpDto, KioskDeviceDto } from '@entity';
|
|
3
3
|
|
|
4
|
-
async function requestOtp()
|
|
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'
|
package/src/locales/th-TH.json
CHANGED
|
@@ -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
|
|
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
|
|
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
|
-
<
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
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
|
-
|
|
106
|
-
|
|
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
|
-
|
|
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 ??
|
|
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:
|
|
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:
|
|
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
|
|
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:
|
|
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>
|