@pisell/pisellos 2.1.158 → 2.1.159
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/solution/BookingByStep/index.d.ts +1 -1
- package/dist/solution/ScanOrder/index.d.ts +8 -3
- package/dist/solution/ScanOrder/index.js +354 -141
- package/dist/solution/ScanOrder/types.d.ts +20 -1
- package/dist/solution/ScanOrder/utils.d.ts +5 -0
- package/dist/solution/ScanOrder/utils.js +55 -23
- package/lib/solution/BookingByStep/index.d.ts +1 -1
- package/lib/solution/ScanOrder/index.d.ts +8 -3
- package/lib/solution/ScanOrder/index.js +235 -59
- package/lib/solution/ScanOrder/types.d.ts +20 -1
- package/lib/solution/ScanOrder/utils.d.ts +5 -0
- package/lib/solution/ScanOrder/utils.js +23 -0
- package/package.json +1 -1
|
@@ -186,7 +186,7 @@ export interface ScanOrderSubmitPayload extends Omit<ScanOrderTempOrder, 'platfo
|
|
|
186
186
|
}>;
|
|
187
187
|
products: ScanOrderSubmitProduct[];
|
|
188
188
|
}
|
|
189
|
-
export type ScanOrderAvailabilityMode = 'idle' | 'shop_closed' | 'submit_disabled' | 'resource_busy' | 'additional_order_with_code' | 'additional_order';
|
|
189
|
+
export type ScanOrderAvailabilityMode = 'idle' | 'shop_closed' | 'submit_disabled' | 'resource_busy' | 'multiple_orders' | 'additional_order_with_code' | 'additional_order';
|
|
190
190
|
export interface ScanOrderTableFormRecord {
|
|
191
191
|
policy?: string | null;
|
|
192
192
|
partyroom_booking?: string | null;
|
|
@@ -229,6 +229,10 @@ export interface ScanOrderResourceOccupyDetail {
|
|
|
229
229
|
form_id?: number | string | null;
|
|
230
230
|
order_id?: number | string | null;
|
|
231
231
|
last_order_id?: number | string | null;
|
|
232
|
+
order_list?: Array<{
|
|
233
|
+
id?: number | string | null;
|
|
234
|
+
[key: string]: any;
|
|
235
|
+
}> | null;
|
|
232
236
|
resource_capacity?: ScanOrderResourceCapacity[] | null;
|
|
233
237
|
form_record?: ScanOrderTableFormRecord | null;
|
|
234
238
|
[key: string]: any;
|
|
@@ -242,6 +246,21 @@ export interface ScanOrderResourceOccupyDetailApiResponse {
|
|
|
242
246
|
} | null;
|
|
243
247
|
}
|
|
244
248
|
export type ScanOrderResourceSelectType = 'single' | 'multiple' | 'capacity';
|
|
249
|
+
export interface ScanOrderReservationResourceSelectInfo {
|
|
250
|
+
resourceSelectType?: ScanOrderResourceSelectType;
|
|
251
|
+
isSingleReservation: boolean;
|
|
252
|
+
isMultipleReservation: boolean;
|
|
253
|
+
isCapacityReservation: boolean;
|
|
254
|
+
}
|
|
255
|
+
export interface ScanOrderAllowAddItemsInfo {
|
|
256
|
+
enabled: boolean;
|
|
257
|
+
}
|
|
258
|
+
export type ScanOrderSyncAdditionalOrderReason = 'missing_resource_id' | 'no_order' | 'multiple_orders' | 'add_items_disabled' | 'invalid_order_id';
|
|
259
|
+
export interface ScanOrderSyncAdditionalOrderResult {
|
|
260
|
+
matched: boolean;
|
|
261
|
+
order_id?: string;
|
|
262
|
+
reason?: ScanOrderSyncAdditionalOrderReason;
|
|
263
|
+
}
|
|
245
264
|
export interface ScanOrderResourceState extends ScanOrderAvailabilityInfo {
|
|
246
265
|
relationId?: string;
|
|
247
266
|
tableFormId?: string;
|
|
@@ -134,6 +134,11 @@ export declare function normalizeOrderProduct(product: Partial<ScanOrderOrderPro
|
|
|
134
134
|
* 从 reservation.enabled_reservation_rules 中收集 type=link 的商品 id。
|
|
135
135
|
*/
|
|
136
136
|
export declare function collectLinkProductIdsFromReservationRules(rules: unknown): number[];
|
|
137
|
+
/**
|
|
138
|
+
* 找到第一个归属指定桌台的预约规则商品。
|
|
139
|
+
* 归属判断基于商品资源中的 default_resource / optional_resource。
|
|
140
|
+
*/
|
|
141
|
+
export declare function findReservationRuleProductByResourceId(products: ProductData[], resourceId: string | number | null | undefined): ProductData | undefined;
|
|
137
142
|
/**
|
|
138
143
|
* 返回列表中第一个带有效 duration.value(分钟)的商品时长。
|
|
139
144
|
*/
|
|
@@ -629,23 +629,55 @@ export function collectLinkProductIdsFromReservationRules(rules) {
|
|
|
629
629
|
}
|
|
630
630
|
|
|
631
631
|
/**
|
|
632
|
-
*
|
|
632
|
+
* 找到第一个归属指定桌台的预约规则商品。
|
|
633
|
+
* 归属判断基于商品资源中的 default_resource / optional_resource。
|
|
633
634
|
*/
|
|
634
|
-
export function
|
|
635
|
+
export function findReservationRuleProductByResourceId(products, resourceId) {
|
|
636
|
+
var numericResourceId = Number(resourceId);
|
|
637
|
+
if (!Number.isFinite(numericResourceId) || numericResourceId <= 0) return undefined;
|
|
635
638
|
var _iterator7 = _createForOfIteratorHelper(products),
|
|
636
639
|
_step7;
|
|
637
640
|
try {
|
|
638
641
|
for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
|
|
639
|
-
var _product$
|
|
642
|
+
var _product$product_reso;
|
|
640
643
|
var product = _step7.value;
|
|
644
|
+
var resources = product === null || product === void 0 || (_product$product_reso = product.product_resource) === null || _product$product_reso === void 0 ? void 0 : _product$product_reso.resources;
|
|
645
|
+
if (!Array.isArray(resources)) continue;
|
|
646
|
+
var hasMatchedResource = resources.some(function (resource) {
|
|
647
|
+
var defaultResources = Array.isArray(resource === null || resource === void 0 ? void 0 : resource.default_resource) ? resource.default_resource : [];
|
|
648
|
+
var optionalResources = Array.isArray(resource === null || resource === void 0 ? void 0 : resource.optional_resource) ? resource.optional_resource : [];
|
|
649
|
+
return [].concat(_toConsumableArray(defaultResources), _toConsumableArray(optionalResources)).some(function (id) {
|
|
650
|
+
return Number(id) === numericResourceId;
|
|
651
|
+
});
|
|
652
|
+
});
|
|
653
|
+
if (hasMatchedResource) return product;
|
|
654
|
+
}
|
|
655
|
+
} catch (err) {
|
|
656
|
+
_iterator7.e(err);
|
|
657
|
+
} finally {
|
|
658
|
+
_iterator7.f();
|
|
659
|
+
}
|
|
660
|
+
return undefined;
|
|
661
|
+
}
|
|
662
|
+
|
|
663
|
+
/**
|
|
664
|
+
* 返回列表中第一个带有效 duration.value(分钟)的商品时长。
|
|
665
|
+
*/
|
|
666
|
+
export function pickFirstDurationMinutesFromProducts(products) {
|
|
667
|
+
var _iterator8 = _createForOfIteratorHelper(products),
|
|
668
|
+
_step8;
|
|
669
|
+
try {
|
|
670
|
+
for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {
|
|
671
|
+
var _product$duration;
|
|
672
|
+
var product = _step8.value;
|
|
641
673
|
var value = product === null || product === void 0 || (_product$duration = product.duration) === null || _product$duration === void 0 ? void 0 : _product$duration.value;
|
|
642
674
|
var n = Number(value);
|
|
643
675
|
if (Number.isFinite(n) && n > 0) return Math.floor(n);
|
|
644
676
|
}
|
|
645
677
|
} catch (err) {
|
|
646
|
-
|
|
678
|
+
_iterator8.e(err);
|
|
647
679
|
} finally {
|
|
648
|
-
|
|
680
|
+
_iterator8.f();
|
|
649
681
|
}
|
|
650
682
|
return undefined;
|
|
651
683
|
}
|
|
@@ -675,11 +707,11 @@ export function computeResourceIsFull(params) {
|
|
|
675
707
|
if (!Number.isFinite(totalCapacity) || totalCapacity <= 0) return false;
|
|
676
708
|
var now = dayjs();
|
|
677
709
|
var occupied = 0;
|
|
678
|
-
var
|
|
679
|
-
|
|
710
|
+
var _iterator9 = _createForOfIteratorHelper(capacityList || []),
|
|
711
|
+
_step9;
|
|
680
712
|
try {
|
|
681
|
-
for (
|
|
682
|
-
var slot =
|
|
713
|
+
for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {
|
|
714
|
+
var slot = _step9.value;
|
|
683
715
|
var start = dayjs(slot === null || slot === void 0 ? void 0 : slot.start_at);
|
|
684
716
|
var end = dayjs(slot === null || slot === void 0 ? void 0 : slot.end_at);
|
|
685
717
|
if (!start.isValid() || !end.isValid()) continue;
|
|
@@ -689,9 +721,9 @@ export function computeResourceIsFull(params) {
|
|
|
689
721
|
}
|
|
690
722
|
}
|
|
691
723
|
} catch (err) {
|
|
692
|
-
|
|
724
|
+
_iterator9.e(err);
|
|
693
725
|
} finally {
|
|
694
|
-
|
|
726
|
+
_iterator9.f();
|
|
695
727
|
}
|
|
696
728
|
return occupied >= totalCapacity;
|
|
697
729
|
}
|
|
@@ -701,11 +733,11 @@ export function computeResourceIsFull(params) {
|
|
|
701
733
|
* 仅返回有限数字字段;若均无法解析则返回 `undefined`。
|
|
702
734
|
*/
|
|
703
735
|
export function pickFirstCustomCapacityPaxBounds(products) {
|
|
704
|
-
var
|
|
705
|
-
|
|
736
|
+
var _iterator10 = _createForOfIteratorHelper(products),
|
|
737
|
+
_step10;
|
|
706
738
|
try {
|
|
707
|
-
for (
|
|
708
|
-
var p =
|
|
739
|
+
for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {
|
|
740
|
+
var p = _step10.value;
|
|
709
741
|
var cap = p === null || p === void 0 ? void 0 : p.capacity;
|
|
710
742
|
if (!cap || cap.type !== 'custom') continue;
|
|
711
743
|
if (!Array.isArray(cap.custom) || cap.custom.length === 0) continue;
|
|
@@ -724,9 +756,9 @@ export function pickFirstCustomCapacityPaxBounds(products) {
|
|
|
724
756
|
if (out.min !== undefined || out.max !== undefined) return out;
|
|
725
757
|
}
|
|
726
758
|
} catch (err) {
|
|
727
|
-
|
|
759
|
+
_iterator10.e(err);
|
|
728
760
|
} finally {
|
|
729
|
-
|
|
761
|
+
_iterator10.f();
|
|
730
762
|
}
|
|
731
763
|
return undefined;
|
|
732
764
|
}
|
|
@@ -736,11 +768,11 @@ export function pickFirstCustomCapacityPaxBounds(products) {
|
|
|
736
768
|
* 无匹配时返回 `undefined`,调用方应回退为 `0`。
|
|
737
769
|
*/
|
|
738
770
|
export function pickFirstCustomCapacityDimensionId(products) {
|
|
739
|
-
var
|
|
740
|
-
|
|
771
|
+
var _iterator11 = _createForOfIteratorHelper(products),
|
|
772
|
+
_step11;
|
|
741
773
|
try {
|
|
742
|
-
for (
|
|
743
|
-
var p =
|
|
774
|
+
for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {
|
|
775
|
+
var p = _step11.value;
|
|
744
776
|
var cap = p === null || p === void 0 ? void 0 : p.capacity;
|
|
745
777
|
if (!cap || cap.type !== 'custom') continue;
|
|
746
778
|
if (!Array.isArray(cap.custom) || cap.custom.length === 0) continue;
|
|
@@ -756,9 +788,9 @@ export function pickFirstCustomCapacityDimensionId(products) {
|
|
|
756
788
|
}
|
|
757
789
|
}
|
|
758
790
|
} catch (err) {
|
|
759
|
-
|
|
791
|
+
_iterator11.e(err);
|
|
760
792
|
} finally {
|
|
761
|
-
|
|
793
|
+
_iterator11.f();
|
|
762
794
|
}
|
|
763
795
|
return undefined;
|
|
764
796
|
}
|
|
@@ -325,7 +325,7 @@ export declare class BookingByStepImpl extends BaseModule implements Module {
|
|
|
325
325
|
date: string;
|
|
326
326
|
status: string;
|
|
327
327
|
week: string;
|
|
328
|
-
weekNum: 0 | 2 | 1 | 5 |
|
|
328
|
+
weekNum: 0 | 2 | 1 | 5 | 4 | 3 | 6;
|
|
329
329
|
}[]>;
|
|
330
330
|
submitTimeSlot(timeSlots: TimeSliceItem): void;
|
|
331
331
|
private getScheduleDataByIds;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Module, ModuleOptions, PisellCore } from '../../types';
|
|
2
2
|
import { BaseModule } from '../../modules/BaseModule';
|
|
3
|
-
import { ScanOrderAddLogParams, ScanOrderAvailabilityInfo, ScanOrderOrderProduct, ScanOrderOrderProductIdentity, ScanOrderScanCodeResult, ScanOrderTempOrder } from './types';
|
|
3
|
+
import { ScanOrderAddLogParams, ScanOrderAvailabilityInfo, ScanOrderAllowAddItemsInfo, ScanOrderOrderProduct, ScanOrderOrderProductIdentity, ScanOrderReservationResourceSelectInfo, ScanOrderScanCodeResult, ScanOrderSyncAdditionalOrderResult, ScanOrderTempOrder } from './types';
|
|
4
4
|
import type { UpdateProductInOrderParams } from '../../modules/Order/types';
|
|
5
5
|
import type { Discount } from '../../modules/Discount/types';
|
|
6
6
|
import { type CartItemSummary, type PaxInfo, type QuantityCheckResult, type QuantityLimitResult } from '../../model/strategy/adapter/itemRule';
|
|
@@ -72,7 +72,7 @@ export declare class ScanOrderImpl extends BaseModule implements Module {
|
|
|
72
72
|
getTempOrder(): ScanOrderTempOrder | null;
|
|
73
73
|
updateTempOrderNote(note: string): string;
|
|
74
74
|
setPickupReferenceMode(mode: 'counter_pickup' | 'table_service'): {
|
|
75
|
-
service_type: 'dine_in';
|
|
75
|
+
service_type: 'dine_in' | '';
|
|
76
76
|
pickup_reference_mode: 'counter_pickup' | 'table_service';
|
|
77
77
|
};
|
|
78
78
|
setPickupRef(buzzer: string): string;
|
|
@@ -118,8 +118,10 @@ export declare class ScanOrderImpl extends BaseModule implements Module {
|
|
|
118
118
|
setItemRuleRuntimeConfig(config?: ScanOrderItemRuleRuntimeConfig): Promise<void>;
|
|
119
119
|
private normalizeResourceState;
|
|
120
120
|
private resolveResourceSelectType;
|
|
121
|
-
private
|
|
121
|
+
private fetchResourceOccupyDetailsByResourceId;
|
|
122
|
+
private resolveAdditionalOrderFromOccupyDetail;
|
|
122
123
|
checkResourceAvailable(resourceId?: string | null, hasOrderId?: boolean): Promise<ScanOrderAvailabilityInfo>;
|
|
124
|
+
restorePreviousOrderData(): Promise<void>;
|
|
123
125
|
getAdditionalOrderInfo(): Promise<{
|
|
124
126
|
orderId: string;
|
|
125
127
|
orderStatus: 'pending' | 'processing' | 'completed' | 'cancelled';
|
|
@@ -142,6 +144,9 @@ export declare class ScanOrderImpl extends BaseModule implements Module {
|
|
|
142
144
|
clearUIState(): void;
|
|
143
145
|
setEntryPaxNumber(number: number): Promise<void>;
|
|
144
146
|
getEntryPaxNumber(): number | null;
|
|
147
|
+
syncAdditionalOrderFromResource(resourceId?: string | null): Promise<ScanOrderSyncAdditionalOrderResult>;
|
|
148
|
+
getReservationResourceSelectType(): ScanOrderReservationResourceSelectInfo;
|
|
149
|
+
checkAllowAddItems(): ScanOrderAllowAddItemsInfo;
|
|
145
150
|
getFulfillmentModes(): {
|
|
146
151
|
enablePickup: boolean;
|
|
147
152
|
enableTableService: boolean;
|