@pisell/pisellos 2.2.181 → 2.2.183
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/modules/BookingContext/index.d.ts +37 -0
- package/dist/modules/BookingContext/index.js +436 -0
- package/dist/modules/BookingContext/types.d.ts +102 -0
- package/dist/modules/BookingContext/types.js +51 -0
- package/dist/modules/BookingContext/utils/buildCacheItemFromOrderLine.d.ts +16 -0
- package/dist/modules/BookingContext/utils/buildCacheItemFromOrderLine.js +276 -0
- package/dist/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.d.ts +8 -0
- package/dist/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.js +137 -0
- package/dist/modules/BookingContext/utils/cacheItemToBookingInput.d.ts +75 -0
- package/dist/modules/BookingContext/utils/cacheItemToBookingInput.js +215 -0
- package/dist/modules/BookingContext/utils/flexible.d.ts +28 -0
- package/dist/modules/BookingContext/utils/flexible.js +56 -0
- package/dist/modules/BookingContext/utils/formatResourceList.d.ts +8 -0
- package/dist/modules/BookingContext/utils/formatResourceList.js +38 -0
- package/dist/modules/BookingContext/utils/index.d.ts +11 -0
- package/dist/modules/BookingContext/utils/index.js +11 -0
- package/dist/modules/BookingContext/utils/noResource.d.ts +13 -0
- package/dist/modules/BookingContext/utils/noResource.js +77 -0
- package/dist/modules/BookingContext/utils/productExtend.d.ts +72 -0
- package/dist/modules/BookingContext/utils/productExtend.js +339 -0
- package/dist/modules/BookingContext/utils/resourceErrors.d.ts +41 -0
- package/dist/modules/BookingContext/utils/resourceErrors.js +74 -0
- package/dist/modules/BookingContext/utils/resourceSelection.d.ts +7 -0
- package/dist/modules/BookingContext/utils/resourceSelection.js +24 -0
- package/dist/modules/BookingContext/utils/resources.d.ts +80 -0
- package/dist/modules/BookingContext/utils/resources.js +486 -0
- package/dist/modules/BookingContext/utils/serviceTimes.d.ts +55 -0
- package/dist/modules/BookingContext/utils/serviceTimes.js +151 -0
- package/dist/modules/BookingContext/utils/timeSlices.d.ts +42 -0
- package/dist/modules/BookingContext/utils/timeSlices.js +100 -0
- package/dist/modules/Customer/index.d.ts +6 -0
- package/dist/modules/Customer/index.js +129 -83
- package/dist/modules/Customer/types.d.ts +2 -0
- package/dist/modules/Discount/index.js +4 -3
- package/dist/modules/Discount/types.d.ts +1 -0
- package/dist/modules/Order/index.d.ts +100 -9
- package/dist/modules/Order/index.js +1447 -499
- package/dist/modules/Order/types.d.ts +201 -18
- package/dist/modules/Order/types.js +31 -0
- package/dist/modules/Order/utils/manualProductDiscount.d.ts +106 -0
- package/dist/modules/Order/utils/manualProductDiscount.js +210 -0
- package/dist/modules/Order/utils.d.ts +83 -1
- package/dist/modules/Order/utils.js +405 -61
- package/dist/modules/Product/index.d.ts +1 -1
- package/dist/modules/Quotation/index.d.ts +0 -1
- package/dist/modules/Quotation/index.js +23 -21
- package/dist/modules/Rules/index.d.ts +4 -0
- package/dist/modules/Rules/index.js +43 -39
- package/dist/modules/Rules/types.d.ts +1 -0
- package/dist/modules/SalesSummary/index.js +4 -2
- package/dist/modules/SalesSummary/utils.js +21 -7
- package/dist/modules/Schedule/index.js +6 -2
- package/dist/modules/index.d.ts +1 -0
- package/dist/modules/index.js +2 -1
- package/dist/server/index.js +87 -29
- package/dist/server/modules/order/index.d.ts +23 -0
- package/dist/server/modules/order/index.js +123 -46
- package/dist/server/modules/order/utils/filterOrders.js +20 -6
- package/dist/server/modules/products/index.d.ts +1 -1
- package/dist/server/modules/products/index.js +130 -113
- package/dist/server/modules/schedule/index.js +13 -6
- package/dist/solution/BaseSales/index.d.ts +89 -7
- package/dist/solution/BaseSales/index.js +1504 -380
- package/dist/solution/BaseSales/types.d.ts +67 -1
- package/dist/solution/BaseSales/types.js +3 -1
- package/dist/solution/BaseSales/utils/cartPromotion.d.ts +275 -0
- package/dist/solution/BaseSales/utils/cartPromotion.js +1258 -0
- package/dist/solution/BaseSales/utils/quotationPrice.d.ts +7 -0
- package/dist/solution/BaseSales/utils/quotationPrice.js +237 -0
- package/dist/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +68 -16
- package/dist/solution/BaseSales/utils.js +46 -8
- package/dist/solution/BookingByStep/index.d.ts +1 -1
- package/dist/solution/BookingTicket/index.d.ts +151 -1
- package/dist/solution/BookingTicket/index.js +848 -184
- package/dist/solution/BookingTicket/types.d.ts +2 -0
- package/dist/solution/BookingTicket/types.js +3 -0
- package/dist/solution/BookingTicket/utils/addProductDecision.d.ts +113 -0
- package/dist/solution/BookingTicket/utils/addProductDecision.js +346 -0
- package/dist/solution/BookingTicket/utils/cartView.js +4 -2
- package/dist/solution/ScanOrder/index.d.ts +9 -3
- package/dist/solution/ScanOrder/index.js +231 -128
- package/dist/solution/ScanOrder/utils.js +46 -8
- package/dist/solution/VenueBooking/index.d.ts +5 -2
- package/dist/solution/VenueBooking/index.js +103 -55
- package/dist/solution/VenueBooking/utils/slotMerge.d.ts +4 -0
- package/dist/solution/VenueBooking/utils/slotMerge.js +10 -0
- package/lib/modules/BookingContext/index.d.ts +37 -0
- package/lib/modules/BookingContext/index.js +297 -0
- package/lib/modules/BookingContext/types.d.ts +102 -0
- package/lib/modules/BookingContext/types.js +34 -0
- package/lib/modules/BookingContext/utils/buildCacheItemFromOrderLine.d.ts +16 -0
- package/lib/modules/BookingContext/utils/buildCacheItemFromOrderLine.js +271 -0
- package/lib/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.d.ts +8 -0
- package/lib/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.js +141 -0
- package/lib/modules/BookingContext/utils/cacheItemToBookingInput.d.ts +75 -0
- package/lib/modules/BookingContext/utils/cacheItemToBookingInput.js +198 -0
- package/lib/modules/BookingContext/utils/flexible.d.ts +28 -0
- package/lib/modules/BookingContext/utils/flexible.js +80 -0
- package/lib/modules/BookingContext/utils/formatResourceList.d.ts +8 -0
- package/lib/modules/BookingContext/utils/formatResourceList.js +50 -0
- package/lib/modules/BookingContext/utils/index.d.ts +11 -0
- package/lib/modules/BookingContext/utils/index.js +43 -0
- package/lib/modules/BookingContext/utils/noResource.d.ts +13 -0
- package/lib/modules/BookingContext/utils/noResource.js +90 -0
- package/lib/modules/BookingContext/utils/productExtend.d.ts +72 -0
- package/lib/modules/BookingContext/utils/productExtend.js +283 -0
- package/lib/modules/BookingContext/utils/resourceErrors.d.ts +41 -0
- package/lib/modules/BookingContext/utils/resourceErrors.js +80 -0
- package/lib/modules/BookingContext/utils/resourceSelection.d.ts +7 -0
- package/lib/modules/BookingContext/utils/resourceSelection.js +46 -0
- package/lib/modules/BookingContext/utils/resources.d.ts +80 -0
- package/lib/modules/BookingContext/utils/resources.js +377 -0
- package/lib/modules/BookingContext/utils/serviceTimes.d.ts +55 -0
- package/lib/modules/BookingContext/utils/serviceTimes.js +162 -0
- package/lib/modules/BookingContext/utils/timeSlices.d.ts +42 -0
- package/lib/modules/BookingContext/utils/timeSlices.js +124 -0
- package/lib/modules/Customer/index.d.ts +6 -0
- package/lib/modules/Customer/index.js +26 -11
- package/lib/modules/Customer/types.d.ts +2 -0
- package/lib/modules/Discount/index.js +5 -1
- package/lib/modules/Discount/types.d.ts +1 -0
- package/lib/modules/Order/index.d.ts +100 -9
- package/lib/modules/Order/index.js +751 -160
- package/lib/modules/Order/types.d.ts +201 -18
- package/lib/modules/Order/types.js +1 -0
- package/lib/modules/Order/utils/manualProductDiscount.d.ts +106 -0
- package/lib/modules/Order/utils/manualProductDiscount.js +206 -0
- package/lib/modules/Order/utils.d.ts +83 -1
- package/lib/modules/Order/utils.js +340 -22
- package/lib/modules/Product/index.d.ts +1 -1
- package/lib/modules/Quotation/index.d.ts +0 -1
- package/lib/modules/Quotation/index.js +18 -15
- package/lib/modules/Rules/index.d.ts +4 -0
- package/lib/modules/Rules/index.js +26 -27
- package/lib/modules/Rules/types.d.ts +1 -0
- package/lib/modules/SalesSummary/index.js +4 -2
- package/lib/modules/SalesSummary/utils.js +21 -7
- package/lib/modules/Schedule/index.js +3 -1
- package/lib/modules/index.d.ts +1 -0
- package/lib/modules/index.js +3 -1
- package/lib/server/index.js +41 -4
- package/lib/server/modules/order/index.d.ts +23 -0
- package/lib/server/modules/order/index.js +46 -14
- package/lib/server/modules/order/utils/filterOrders.js +12 -4
- package/lib/server/modules/products/index.d.ts +1 -1
- package/lib/server/modules/products/index.js +30 -20
- package/lib/server/modules/schedule/index.js +2 -1
- package/lib/solution/BaseSales/index.d.ts +89 -7
- package/lib/solution/BaseSales/index.js +743 -23
- package/lib/solution/BaseSales/types.d.ts +67 -1
- package/lib/solution/BaseSales/types.js +3 -1
- package/lib/solution/BaseSales/utils/cartPromotion.d.ts +275 -0
- package/lib/solution/BaseSales/utils/cartPromotion.js +836 -0
- package/lib/solution/BaseSales/utils/quotationPrice.d.ts +7 -0
- package/lib/solution/BaseSales/utils/quotationPrice.js +277 -0
- package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +71 -12
- package/lib/solution/BaseSales/utils.js +46 -6
- package/lib/solution/BookingByStep/index.d.ts +1 -1
- package/lib/solution/BookingTicket/index.d.ts +151 -1
- package/lib/solution/BookingTicket/index.js +389 -9
- package/lib/solution/BookingTicket/types.d.ts +2 -0
- package/lib/solution/BookingTicket/types.js +6 -0
- package/lib/solution/BookingTicket/utils/addProductDecision.d.ts +113 -0
- package/lib/solution/BookingTicket/utils/addProductDecision.js +318 -0
- package/lib/solution/BookingTicket/utils/cartView.js +4 -2
- package/lib/solution/ScanOrder/index.d.ts +9 -3
- package/lib/solution/ScanOrder/index.js +147 -66
- package/lib/solution/ScanOrder/utils.js +46 -6
- package/lib/solution/VenueBooking/index.d.ts +5 -2
- package/lib/solution/VenueBooking/index.js +50 -14
- package/lib/solution/VenueBooking/utils/slotMerge.d.ts +4 -0
- package/lib/solution/VenueBooking/utils/slotMerge.js +10 -0
- package/package.json +1 -1
|
@@ -89,13 +89,45 @@ var _ScanOrderImpl = class extends import_BaseModule.BaseModule {
|
|
|
89
89
|
moduleName: "scanOrder"
|
|
90
90
|
};
|
|
91
91
|
}
|
|
92
|
+
safeStringify(value) {
|
|
93
|
+
try {
|
|
94
|
+
return JSON.stringify(value);
|
|
95
|
+
} catch {
|
|
96
|
+
return void 0;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
pickErrorMessage(error) {
|
|
100
|
+
var _a, _b, _c, _d;
|
|
101
|
+
const candidates = [
|
|
102
|
+
error.message,
|
|
103
|
+
(_a = error.data) == null ? void 0 : _a.message,
|
|
104
|
+
(_c = (_b = error.response) == null ? void 0 : _b.data) == null ? void 0 : _c.message,
|
|
105
|
+
(_d = error.error) == null ? void 0 : _d.message
|
|
106
|
+
];
|
|
107
|
+
for (const candidate of candidates) {
|
|
108
|
+
if (typeof candidate === "string" && candidate.trim())
|
|
109
|
+
return candidate;
|
|
110
|
+
}
|
|
111
|
+
return void 0;
|
|
112
|
+
}
|
|
92
113
|
serializeError(error) {
|
|
93
114
|
if (error instanceof Error) {
|
|
94
|
-
return
|
|
115
|
+
return {
|
|
95
116
|
name: error.name,
|
|
96
117
|
message: error.message,
|
|
97
118
|
stack: error.stack
|
|
98
|
-
}
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
if (error && typeof error === "object") {
|
|
122
|
+
const raw = error;
|
|
123
|
+
const message = this.pickErrorMessage(raw) || this.safeStringify(raw) || String(error);
|
|
124
|
+
return {
|
|
125
|
+
...typeof raw.name === "string" ? { name: raw.name } : {},
|
|
126
|
+
message,
|
|
127
|
+
..."code" in raw ? { code: raw.code } : {},
|
|
128
|
+
..."status" in raw ? { status: raw.status } : {},
|
|
129
|
+
...this.safeStringify(raw) ? { raw: this.safeStringify(raw) } : {}
|
|
130
|
+
};
|
|
99
131
|
}
|
|
100
132
|
return {
|
|
101
133
|
message: String(error)
|
|
@@ -155,6 +187,14 @@ var _ScanOrderImpl = class extends import_BaseModule.BaseModule {
|
|
|
155
187
|
}
|
|
156
188
|
});
|
|
157
189
|
}
|
|
190
|
+
assertProductListLoaded(method, result, payload = {}) {
|
|
191
|
+
if (Array.isArray(result))
|
|
192
|
+
return result;
|
|
193
|
+
const error = result instanceof Error ? result : new Error("商品列表接口返回异常");
|
|
194
|
+
this.logMethodError(method, error, payload);
|
|
195
|
+
error.__scanOrderLogged = true;
|
|
196
|
+
throw error;
|
|
197
|
+
}
|
|
158
198
|
async addLog(params) {
|
|
159
199
|
await this.addScanOrderLog({
|
|
160
200
|
...params,
|
|
@@ -319,13 +359,13 @@ var _ScanOrderImpl = class extends import_BaseModule.BaseModule {
|
|
|
319
359
|
if (targetModule) {
|
|
320
360
|
this.store[step] = targetModule;
|
|
321
361
|
const initialState = step === "salesSummary" ? {
|
|
322
|
-
// TODO(Order types): ScanOrder runtime should read OrderState.summary instead of tempOrder.summary.
|
|
323
362
|
summary: ((_b2 = (_a2 = this.store.order) == null ? void 0 : _a2.getTempOrder()) == null ? void 0 : _b2.summary) || (0, import_utils.createEmptySummary)()
|
|
324
363
|
} : {};
|
|
325
364
|
const loggerProvider = ((_c2 = this.otherParams) == null ? void 0 : _c2.scanOrderLoggerProvider) || "feishu";
|
|
326
365
|
const loggerConfig = ((_d2 = this.otherParams) == null ? void 0 : _d2.scanOrderLoggerConfig) || {
|
|
327
366
|
feishu: {
|
|
328
|
-
webhook: "https://open.feishu.cn/open-apis/bot/v2/hook/216b3fe6-af98-424e-8706-f0471241a7ed"
|
|
367
|
+
webhook: "https://open.feishu.cn/open-apis/bot/v2/hook/216b3fe6-af98-424e-8706-f0471241a7ed",
|
|
368
|
+
errorHook: "https://open.feishu.cn/open-apis/bot/v2/hook/015b7c2a-dd3c-4c30-9898-ef0f5253111f"
|
|
329
369
|
}
|
|
330
370
|
};
|
|
331
371
|
this.core.registerModule(targetModule, {
|
|
@@ -747,6 +787,34 @@ var _ScanOrderImpl = class extends import_BaseModule.BaseModule {
|
|
|
747
787
|
throw error;
|
|
748
788
|
}
|
|
749
789
|
}
|
|
790
|
+
findReservationRuleResource(formId) {
|
|
791
|
+
var _a;
|
|
792
|
+
if (formId == null)
|
|
793
|
+
return void 0;
|
|
794
|
+
const numericFormId = Number(formId);
|
|
795
|
+
if (!Number.isFinite(numericFormId) || numericFormId <= 0)
|
|
796
|
+
return void 0;
|
|
797
|
+
for (const product of this.enabledReservationRuleProducts) {
|
|
798
|
+
const resources = (_a = product == null ? void 0 : product.product_resource) == null ? void 0 : _a.resources;
|
|
799
|
+
if (!Array.isArray(resources))
|
|
800
|
+
continue;
|
|
801
|
+
const matched = resources.find((resource) => Number(resource == null ? void 0 : resource.id) === numericFormId);
|
|
802
|
+
if (matched)
|
|
803
|
+
return matched;
|
|
804
|
+
}
|
|
805
|
+
return void 0;
|
|
806
|
+
}
|
|
807
|
+
buildScanOrderResourceMetadata(params) {
|
|
808
|
+
const { resourceState, resourceName } = params;
|
|
809
|
+
const ruleResource = this.findReservationRuleResource(resourceState.tableFormId);
|
|
810
|
+
const combined = ruleResource == null ? void 0 : ruleResource.combined_resource;
|
|
811
|
+
const isCombined = !!(combined && combined.status === 1 && Array.isArray(combined.resource_ids));
|
|
812
|
+
return {
|
|
813
|
+
form_name: (ruleResource == null ? void 0 : ruleResource.title) ?? "",
|
|
814
|
+
resource_name: resourceName,
|
|
815
|
+
combined_resource: isCombined ? combined : null
|
|
816
|
+
};
|
|
817
|
+
}
|
|
750
818
|
// ScanOrder 提交 payload enhancer:
|
|
751
819
|
// - 给所有 booking 注入 appointment_status: 'started'(扫码点餐语义)
|
|
752
820
|
// - 给所有 booking 的 metadata 注入 resource_select_type(来自预约规则商品的 resource.type)
|
|
@@ -770,6 +838,9 @@ var _ScanOrderImpl = class extends import_BaseModule.BaseModule {
|
|
|
770
838
|
return (payload, { bookingUuid, tempOrder }) => {
|
|
771
839
|
var _a, _b;
|
|
772
840
|
const resourceId = tempOrder.resource_id ?? (resourceState == null ? void 0 : resourceState.relationId);
|
|
841
|
+
const rawCollectPax = (_a = tempOrder.metadata) == null ? void 0 : _a.collect_pax;
|
|
842
|
+
const hasCollectPaxForCapacity = rawCollectPax !== null && rawCollectPax !== void 0 && rawCollectPax !== "";
|
|
843
|
+
const resourceCapacityValue = hasCollectPaxForCapacity ? (0, import_utils2.normalizeSubmitCollectPaxValue)(rawCollectPax) : resolveResourceCapacity();
|
|
773
844
|
const pickOriginal = (value) => {
|
|
774
845
|
if (value && typeof value === "object" && !Array.isArray(value)) {
|
|
775
846
|
const original = value.original;
|
|
@@ -777,7 +848,7 @@ var _ScanOrderImpl = class extends import_BaseModule.BaseModule {
|
|
|
777
848
|
}
|
|
778
849
|
return void 0;
|
|
779
850
|
};
|
|
780
|
-
const mainField = pickOriginal(tempOrder.table_number) ?? pickOriginal((
|
|
851
|
+
const mainField = pickOriginal(tempOrder.table_number) ?? pickOriginal((_b = resourceState == null ? void 0 : resourceState.table_form_record) == null ? void 0 : _b.name) ?? "";
|
|
781
852
|
const resourceEntry = resourceState && resourceId ? {
|
|
782
853
|
relation_type: "form",
|
|
783
854
|
like_status: "common",
|
|
@@ -785,37 +856,35 @@ var _ScanOrderImpl = class extends import_BaseModule.BaseModule {
|
|
|
785
856
|
main_field: mainField,
|
|
786
857
|
form_id: resourceState.tableFormId,
|
|
787
858
|
relation_id: resourceState.relationId ?? resourceId,
|
|
788
|
-
capacity:
|
|
789
|
-
metadata: {
|
|
859
|
+
capacity: resourceCapacityValue,
|
|
860
|
+
metadata: this.buildScanOrderResourceMetadata({
|
|
861
|
+
resourceState,
|
|
862
|
+
resourceName: mainField
|
|
863
|
+
})
|
|
790
864
|
} : void 0;
|
|
791
865
|
const ruleProductUid = ruleProduct ? (0, import_utils2.createUuidV4)() : void 0;
|
|
792
|
-
const
|
|
793
|
-
const hasCollectPaxForCapacity = rawCollectPax !== null && rawCollectPax !== void 0 && rawCollectPax !== "";
|
|
794
|
-
const bookingCapacityValue = hasCollectPaxForCapacity ? (0, import_utils2.normalizeSubmitCollectPaxValue)(rawCollectPax) : resolveResourceCapacity();
|
|
866
|
+
const bookingCapacityValue = resourceCapacityValue;
|
|
795
867
|
const bookingCapacityDimensionId = (0, import_utils.pickFirstCustomCapacityDimensionId)(this.enabledReservationRuleProducts) ?? 0;
|
|
796
|
-
const nextBookings = (payload.bookings || []).map((booking, idx) => {
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
metadata
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
...idx === 0 && ruleProductUid ? { product_uid: ruleProductUid } : {}
|
|
817
|
-
};
|
|
818
|
-
});
|
|
868
|
+
const nextBookings = (payload.bookings || []).map((booking, idx) => ({
|
|
869
|
+
...booking,
|
|
870
|
+
number: bookingCapacityValue,
|
|
871
|
+
appointment_status: "started",
|
|
872
|
+
metadata: {
|
|
873
|
+
...booking.metadata || {},
|
|
874
|
+
...resourceSelectType ? { resource_select_type: resourceSelectType } : {},
|
|
875
|
+
...resourceSelectType ? {
|
|
876
|
+
capacity: [
|
|
877
|
+
{
|
|
878
|
+
id: bookingCapacityDimensionId,
|
|
879
|
+
value: bookingCapacityValue,
|
|
880
|
+
name: ""
|
|
881
|
+
}
|
|
882
|
+
]
|
|
883
|
+
} : {}
|
|
884
|
+
},
|
|
885
|
+
...idx === 0 && resourceEntry ? { resources: [resourceEntry] } : {},
|
|
886
|
+
...idx === 0 && ruleProductUid ? { product_uid: ruleProductUid } : {}
|
|
887
|
+
}));
|
|
819
888
|
const nextProducts = [...payload.products || []];
|
|
820
889
|
if (ruleProduct && ruleProductUid && !tempOrder.order_id) {
|
|
821
890
|
const sellingPrice = String(ruleProduct.price ?? "0.00");
|
|
@@ -903,23 +972,23 @@ var _ScanOrderImpl = class extends import_BaseModule.BaseModule {
|
|
|
903
972
|
throw error;
|
|
904
973
|
}
|
|
905
974
|
}
|
|
906
|
-
async
|
|
907
|
-
this.logMethodStart("
|
|
975
|
+
async updateOrderProduct(params) {
|
|
976
|
+
this.logMethodStart("updateOrderProduct", {
|
|
908
977
|
product_id: params.product_id,
|
|
909
978
|
product_variant_id: params.product_variant_id
|
|
910
979
|
});
|
|
911
980
|
try {
|
|
912
981
|
if (!this.store.order)
|
|
913
982
|
throw new Error("order 模块未初始化");
|
|
914
|
-
const products = await this.store.order.
|
|
983
|
+
const products = await this.store.order.updateOrderProduct(params);
|
|
915
984
|
await this.refreshItemRuleQuantityLimits();
|
|
916
985
|
await this.refreshCartValidationPassed();
|
|
917
|
-
this.logMethodSuccess("
|
|
986
|
+
this.logMethodSuccess("updateOrderProduct", {
|
|
918
987
|
productCount: products.length
|
|
919
988
|
});
|
|
920
989
|
return products;
|
|
921
990
|
} catch (error) {
|
|
922
|
-
this.logMethodError("
|
|
991
|
+
this.logMethodError("updateOrderProduct", error);
|
|
923
992
|
throw error;
|
|
924
993
|
}
|
|
925
994
|
}
|
|
@@ -938,15 +1007,14 @@ var _ScanOrderImpl = class extends import_BaseModule.BaseModule {
|
|
|
938
1007
|
product_variant_id: identity.product_variant_id,
|
|
939
1008
|
updates: { note: String(note || "") }
|
|
940
1009
|
};
|
|
941
|
-
if (identity.identity_key !== void 0)
|
|
1010
|
+
if (identity.identity_key !== void 0)
|
|
942
1011
|
params.identity_key = identity.identity_key;
|
|
943
|
-
}
|
|
944
1012
|
if (identity.product_option_item !== void 0) {
|
|
945
1013
|
params.product_option_item = identity.product_option_item;
|
|
946
1014
|
}
|
|
947
1015
|
if (identity.product_bundle !== void 0)
|
|
948
1016
|
params.product_bundle = identity.product_bundle;
|
|
949
|
-
const products = await this.
|
|
1017
|
+
const products = await this.updateOrderProduct(params);
|
|
950
1018
|
this.logMethodSuccess("setOrderProductLineNote", { productCount: products.length });
|
|
951
1019
|
return products;
|
|
952
1020
|
} catch (error) {
|
|
@@ -1208,7 +1276,6 @@ var _ScanOrderImpl = class extends import_BaseModule.BaseModule {
|
|
|
1208
1276
|
item_rule_prefill: true,
|
|
1209
1277
|
item_rule_id: prefillItem.ruleId
|
|
1210
1278
|
},
|
|
1211
|
-
// TODO(Order types): migrate ScanOrder prefill origin runtime into tempOrder._extend.
|
|
1212
1279
|
_origin: sourceItem ? {
|
|
1213
1280
|
...targetProduct._origin || {},
|
|
1214
1281
|
...sourceItem
|
|
@@ -1433,14 +1500,17 @@ var _ScanOrderImpl = class extends import_BaseModule.BaseModule {
|
|
|
1433
1500
|
// 通过 resource_id + 店铺配置
|
|
1434
1501
|
// hasOrderId 表示 url 上是否有 orderid,如果是的话,后续的流程会走加单
|
|
1435
1502
|
async checkResourceAvailable(resourceId, hasOrderId) {
|
|
1436
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n;
|
|
1503
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p;
|
|
1437
1504
|
this.logMethodStart("checkResourceAvailable", {
|
|
1438
1505
|
resourceId
|
|
1439
1506
|
});
|
|
1440
1507
|
try {
|
|
1441
|
-
const
|
|
1508
|
+
const businessCode = String(((_a = this.otherParams) == null ? void 0 : _a.businessCode) ?? "").trim();
|
|
1509
|
+
const channel = String(((_b = this.otherParams) == null ? void 0 : _b.channel) ?? "").trim();
|
|
1510
|
+
const openDataTarget = businessCode && channel ? `${businessCode}+${channel}` : "dine_in+scan_to_order";
|
|
1511
|
+
const openData = await ((_d = (_c = this.otherParams) == null ? void 0 : _c.getOpenData) == null ? void 0 : _d.call(_c, {
|
|
1442
1512
|
scope: "board",
|
|
1443
|
-
target:
|
|
1513
|
+
target: openDataTarget,
|
|
1444
1514
|
section_code: ["basic", "fulfillment", "reservation", "sale", "menu", "availability", "workflow"]
|
|
1445
1515
|
}));
|
|
1446
1516
|
if ((openData == null ? void 0 : openData.status) === false) {
|
|
@@ -1531,13 +1601,13 @@ var _ScanOrderImpl = class extends import_BaseModule.BaseModule {
|
|
|
1531
1601
|
}
|
|
1532
1602
|
} else {
|
|
1533
1603
|
this.enabledReservationRuleProducts = [];
|
|
1534
|
-
|
|
1535
|
-
|
|
1536
|
-
|
|
1537
|
-
|
|
1538
|
-
|
|
1539
|
-
|
|
1540
|
-
|
|
1604
|
+
const error = loaded instanceof Error ? loaded : new Error("预约规则商品列表接口返回异常");
|
|
1605
|
+
this.logMethodError("loadReservationRuleProducts", error, {
|
|
1606
|
+
resourceId,
|
|
1607
|
+
reservationLinkIds,
|
|
1608
|
+
scheduleDate,
|
|
1609
|
+
scheduleDatetime,
|
|
1610
|
+
cacheId: this.cacheId
|
|
1541
1611
|
});
|
|
1542
1612
|
}
|
|
1543
1613
|
}
|
|
@@ -1567,16 +1637,16 @@ var _ScanOrderImpl = class extends import_BaseModule.BaseModule {
|
|
|
1567
1637
|
table_form_id: resourceState.tableFormId,
|
|
1568
1638
|
deskmate_valid: resourceState.deskmate_valid,
|
|
1569
1639
|
table_form_record: resourceState.table_form_record,
|
|
1570
|
-
policy: (
|
|
1571
|
-
partyroom_booking: (
|
|
1640
|
+
policy: (_e = occupyDetail == null ? void 0 : occupyDetail.form_record) == null ? void 0 : _e.policy,
|
|
1641
|
+
partyroom_booking: (_f = occupyDetail == null ? void 0 : occupyDetail.form_record) == null ? void 0 : _f.partyroom_booking,
|
|
1572
1642
|
...this.store.resource.requestEntryPax !== void 0 ? { requestEntryPax: this.store.resource.requestEntryPax } : {},
|
|
1573
1643
|
...this.store.resource.requestPaxMin !== void 0 ? { requestPaxMin: this.store.resource.requestPaxMin } : {},
|
|
1574
1644
|
...this.store.resource.requestPaxMax !== void 0 ? { requestPaxMax: this.store.resource.requestPaxMax } : {}
|
|
1575
1645
|
};
|
|
1576
|
-
tempOrder.relation_id = resourceId || ((
|
|
1646
|
+
tempOrder.relation_id = resourceId || ((_g = this.otherParams) == null ? void 0 : _g.relation_id);
|
|
1577
1647
|
tempOrder.table_form_id = resourceState.tableFormId;
|
|
1578
1648
|
tempOrder.resource_id = resourceId;
|
|
1579
|
-
(
|
|
1649
|
+
(_h = this.store.order) == null ? void 0 : _h.persistTempOrder();
|
|
1580
1650
|
if (availabilityInfo.mode === "idle") {
|
|
1581
1651
|
await this.addNewOrder();
|
|
1582
1652
|
}
|
|
@@ -1584,16 +1654,16 @@ var _ScanOrderImpl = class extends import_BaseModule.BaseModule {
|
|
|
1584
1654
|
tempOrder.order_id = resourceState.lastOrderId;
|
|
1585
1655
|
}
|
|
1586
1656
|
if (tempOrder.order_id) {
|
|
1587
|
-
const res = await ((
|
|
1588
|
-
const entryPaxNumber = (
|
|
1657
|
+
const res = await ((_i = this.store.order) == null ? void 0 : _i.getOrderInfoByRemote(tempOrder.order_id));
|
|
1658
|
+
const entryPaxNumber = (_m = (_l = (_k = (_j = res == null ? void 0 : res.data) == null ? void 0 : _j.bookings) == null ? void 0 : _k.find((p) => {
|
|
1589
1659
|
var _a2;
|
|
1590
1660
|
return (_a2 = p.metadata) == null ? void 0 : _a2.collect_pax;
|
|
1591
|
-
})) == null ? void 0 :
|
|
1661
|
+
})) == null ? void 0 : _l.metadata) == null ? void 0 : _m.collect_pax;
|
|
1592
1662
|
if (entryPaxNumber) {
|
|
1593
1663
|
await this.setEntryPaxNumber(entryPaxNumber);
|
|
1594
1664
|
}
|
|
1595
1665
|
}
|
|
1596
|
-
const lastOrderInfo = (
|
|
1666
|
+
const lastOrderInfo = (_o = (_n = this.store.order) == null ? void 0 : _n.getLastOrderInfo) == null ? void 0 : _o.call(_n);
|
|
1597
1667
|
const historicalItems = hasOrderId && Array.isArray(lastOrderInfo == null ? void 0 : lastOrderInfo.products) ? lastOrderInfo.products.reduce((acc, p) => {
|
|
1598
1668
|
if (typeof (p == null ? void 0 : p.product_id) !== "number")
|
|
1599
1669
|
return acc;
|
|
@@ -1605,7 +1675,7 @@ var _ScanOrderImpl = class extends import_BaseModule.BaseModule {
|
|
|
1605
1675
|
return acc;
|
|
1606
1676
|
}, []) : [];
|
|
1607
1677
|
await this.setItemRuleRuntimeConfig({
|
|
1608
|
-
serviceType: (
|
|
1678
|
+
serviceType: (_p = this.otherParams) == null ? void 0 : _p.businessCode,
|
|
1609
1679
|
submissionIndex: hasOrderId ? 1 : 0,
|
|
1610
1680
|
historicalItems
|
|
1611
1681
|
});
|
|
@@ -1653,18 +1723,24 @@ var _ScanOrderImpl = class extends import_BaseModule.BaseModule {
|
|
|
1653
1723
|
}
|
|
1654
1724
|
// 获取商品列表
|
|
1655
1725
|
async getProductList() {
|
|
1656
|
-
var _a, _b
|
|
1726
|
+
var _a, _b;
|
|
1657
1727
|
this.logMethodStart("getProductList");
|
|
1658
1728
|
const menu_list_ids = ((_b = (_a = this.otherParams) == null ? void 0 : _a.dineInConfig) == null ? void 0 : _b["menu.associated_menus"].map((n) => Number(n.value))) || [];
|
|
1659
1729
|
try {
|
|
1660
|
-
|
|
1730
|
+
if (!this.store.products)
|
|
1731
|
+
throw new Error("products 模块未初始化");
|
|
1732
|
+
const res = await this.store.products.loadProducts({
|
|
1661
1733
|
menu_list_ids,
|
|
1662
1734
|
cacheId: this.cacheId,
|
|
1663
1735
|
schedule_date: (0, import_dayjs.default)().format("YYYY-MM-DD"),
|
|
1664
1736
|
schedule_datetime: (0, import_dayjs.default)().format("YYYY-MM-DD HH:mm:ss")
|
|
1665
|
-
})
|
|
1737
|
+
});
|
|
1738
|
+
const productList = this.assertProductListLoaded("getProductList", res, {
|
|
1739
|
+
menu_list_ids,
|
|
1740
|
+
cacheId: this.cacheId
|
|
1741
|
+
});
|
|
1666
1742
|
const formattedRes = (0, import_utils.attachItemRuleLimitsToTopLevelProducts)(
|
|
1667
|
-
|
|
1743
|
+
productList,
|
|
1668
1744
|
this.store.itemRuleQuantityLimits || []
|
|
1669
1745
|
);
|
|
1670
1746
|
this.logMethodSuccess("getProductList", {
|
|
@@ -1672,7 +1748,12 @@ var _ScanOrderImpl = class extends import_BaseModule.BaseModule {
|
|
|
1672
1748
|
});
|
|
1673
1749
|
return formattedRes;
|
|
1674
1750
|
} catch (error) {
|
|
1675
|
-
|
|
1751
|
+
if (!(error == null ? void 0 : error.__scanOrderLogged)) {
|
|
1752
|
+
this.logMethodError("getProductList", error, {
|
|
1753
|
+
menu_list_ids,
|
|
1754
|
+
cacheId: this.cacheId
|
|
1755
|
+
});
|
|
1756
|
+
}
|
|
1676
1757
|
throw error;
|
|
1677
1758
|
}
|
|
1678
1759
|
}
|
|
@@ -63,6 +63,7 @@ module.exports = __toCommonJS(utils_exports);
|
|
|
63
63
|
var import_dayjs = __toESM(require("dayjs"));
|
|
64
64
|
var import_decimal = __toESM(require("decimal.js"));
|
|
65
65
|
var import_utils = require("../../modules/Order/utils");
|
|
66
|
+
var import_manualProductDiscount = require("../../modules/Order/utils/manualProductDiscount");
|
|
66
67
|
function createEmptySummary() {
|
|
67
68
|
return {
|
|
68
69
|
product_quantity: 0,
|
|
@@ -406,12 +407,40 @@ function getProductIdentityIndex(products, identity) {
|
|
|
406
407
|
return products.findIndex((item) => isIdentityMatch(item, identity));
|
|
407
408
|
}
|
|
408
409
|
function normalizeOrderProduct(product) {
|
|
409
|
-
var _a, _b, _c;
|
|
410
|
+
var _a, _b, _c, _d, _e, _f;
|
|
410
411
|
const metadata = { ...product.metadata || {} };
|
|
411
412
|
const resolvedIdentityKey = ((_a = product.metadata) == null ? void 0 : _a.unique_identification_number) ? String(product.metadata.unique_identification_number) : product.unique_identification_number && String(product.unique_identification_number).length > 0 ? String(product.unique_identification_number) : product.identity_key && String(product.identity_key).length > 0 ? String(product.identity_key) : (0, import_utils.createUuidV4)();
|
|
412
413
|
metadata.unique_identification_number = resolvedIdentityKey;
|
|
413
|
-
const
|
|
414
|
+
const priceOverride = metadata.price_override;
|
|
415
|
+
const originOtherBundle = (_d = (_c = (_b = metadata.origin) == null ? void 0 : _b._extend) == null ? void 0 : _c.other) == null ? void 0 : _d.bundle;
|
|
416
|
+
let bundleInput = product.product_bundle || [];
|
|
417
|
+
if (priceOverride !== void 0 && priceOverride !== null && priceOverride !== "" && Array.isArray(originOtherBundle) && originOtherBundle.length > 0) {
|
|
418
|
+
const priceById = /* @__PURE__ */ new Map();
|
|
419
|
+
originOtherBundle.forEach((item) => {
|
|
420
|
+
if ((item == null ? void 0 : item.id) == null)
|
|
421
|
+
return;
|
|
422
|
+
const unit = item.price ?? item.bundle_selling_price;
|
|
423
|
+
if (unit === void 0 || unit === null)
|
|
424
|
+
return;
|
|
425
|
+
priceById.set(String(item.id), String(unit));
|
|
426
|
+
});
|
|
427
|
+
const base = Array.isArray(bundleInput) && bundleInput.length > 0 ? bundleInput : originOtherBundle;
|
|
428
|
+
bundleInput = base.map((item) => {
|
|
429
|
+
const unit = priceById.get(String(item == null ? void 0 : item.id));
|
|
430
|
+
if (unit === void 0)
|
|
431
|
+
return item;
|
|
432
|
+
return {
|
|
433
|
+
...item,
|
|
434
|
+
price: unit,
|
|
435
|
+
bundle_selling_price: unit
|
|
436
|
+
};
|
|
437
|
+
});
|
|
438
|
+
}
|
|
439
|
+
const normalizedBundle = bundleInput.map((item) => ({
|
|
414
440
|
...item,
|
|
441
|
+
bundle_id: item.bundle_id ?? item.id,
|
|
442
|
+
bundle_product_id: item.bundle_product_id ?? item._bundle_product_id,
|
|
443
|
+
bundle_group_id: item.bundle_group_id ?? item.group_id,
|
|
415
444
|
bundle_selling_price: item.bundle_selling_price ?? item.price ?? "0.00",
|
|
416
445
|
price: item.price ?? item.custom_price ?? item.bundle_selling_price ?? "0.00",
|
|
417
446
|
price_type: item.price_type ?? item.custom_price_type ?? "",
|
|
@@ -421,8 +450,8 @@ function normalizeOrderProduct(product) {
|
|
|
421
450
|
const optionSum = (0, import_utils.sumOptionUnitPrice)(normalizedOptions);
|
|
422
451
|
const isV2 = metadata.price_schema_version === 2 || metadata.price_schema_version === "2";
|
|
423
452
|
const variantId = Number(product.product_variant_id || 0);
|
|
424
|
-
const variantList = variantId ? (
|
|
425
|
-
const variantPrice = Array.isArray(variantList) ? (
|
|
453
|
+
const variantList = variantId ? (_e = metadata == null ? void 0 : metadata.origin) == null ? void 0 : _e.variant : null;
|
|
454
|
+
const variantPrice = Array.isArray(variantList) ? (_f = variantList.find((v) => Number(v == null ? void 0 : v.id) === variantId)) == null ? void 0 : _f.price : void 0;
|
|
426
455
|
const resolvedSource = (() => {
|
|
427
456
|
var _a2, _b2;
|
|
428
457
|
if (metadata.source_product_price !== void 0) {
|
|
@@ -478,6 +507,17 @@ function normalizeOrderProduct(product) {
|
|
|
478
507
|
bundle: normalizedBundle,
|
|
479
508
|
useOriginalBundle: true
|
|
480
509
|
});
|
|
510
|
+
const finalOriginalPrice = (0, import_utils.resolveManualOverrideLineOriginalPrice)(
|
|
511
|
+
{ num: product.num, metadata, lineOriginalPrice: product.original_price },
|
|
512
|
+
composedOriginalPrice
|
|
513
|
+
);
|
|
514
|
+
const discountList = (0, import_manualProductDiscount.ensureManualProductDiscountList)({
|
|
515
|
+
discountList: product.discount_list,
|
|
516
|
+
metadata,
|
|
517
|
+
originalPrice: finalOriginalPrice,
|
|
518
|
+
sellingPrice: composedSellingPrice,
|
|
519
|
+
quantity: getSafeProductNum(product.num)
|
|
520
|
+
});
|
|
481
521
|
return {
|
|
482
522
|
order_detail_id: product.order_detail_id || null,
|
|
483
523
|
product_id: product.product_id,
|
|
@@ -485,10 +525,10 @@ function normalizeOrderProduct(product) {
|
|
|
485
525
|
product_variant_id: product.product_variant_id,
|
|
486
526
|
product_option_item: normalizedOptions,
|
|
487
527
|
selling_price: composedSellingPrice,
|
|
488
|
-
original_price:
|
|
528
|
+
original_price: finalOriginalPrice,
|
|
489
529
|
tax_fee: product.tax_fee || "0.00",
|
|
490
530
|
is_charge_tax: product.is_charge_tax ?? 0,
|
|
491
|
-
discount_list:
|
|
531
|
+
discount_list: discountList,
|
|
492
532
|
product_bundle: normalizedBundle,
|
|
493
533
|
metadata,
|
|
494
534
|
note: product.note != null ? String(product.note) : ""
|
|
@@ -2,7 +2,7 @@ import { Module, ModuleOptions, PisellCore } from '../../types';
|
|
|
2
2
|
import { BaseModule } from '../../modules/BaseModule';
|
|
3
3
|
import { VenueBookingAddLogParams, VenueBookingSlotConfig, VenueDateSummaryItem, VenueSlotSelection, VenueTimeSlotGrid } from './types';
|
|
4
4
|
import type { ScanOrderOrderProduct, ScanOrderOrderProductIdentity } from '../ScanOrder/types';
|
|
5
|
-
import type {
|
|
5
|
+
import type { UpdateOrderProductParams } from '../../modules/Order/types';
|
|
6
6
|
import type { OpenDataAvailabilityResult } from '../../modules/OpenData';
|
|
7
7
|
import type { ProductData } from '../../modules/Product/types';
|
|
8
8
|
import { type CartItemSummary, type PaxInfo, type QuantityCheckResult, type QuantityLimitResult } from '../../model/strategy/adapter/itemRule';
|
|
@@ -41,6 +41,8 @@ export declare class VenueBookingImpl extends BaseModule implements Module {
|
|
|
41
41
|
private loadOpenDataConfigInFlight;
|
|
42
42
|
private static readonly OPEN_DATA_CACHE_TTL;
|
|
43
43
|
private getLoggerContext;
|
|
44
|
+
private safeStringify;
|
|
45
|
+
private pickErrorMessage;
|
|
44
46
|
private serializeError;
|
|
45
47
|
private addVenueBookingLog;
|
|
46
48
|
private logMethodStart;
|
|
@@ -154,6 +156,7 @@ export declare class VenueBookingImpl extends BaseModule implements Module {
|
|
|
154
156
|
type: "server" | "clientCalc";
|
|
155
157
|
unavailableReason?: import("../../modules/Rules/types").UnavailableReason | undefined;
|
|
156
158
|
unavailableReasonKey?: string | null | undefined;
|
|
159
|
+
scannedDiscountList?: import("../../modules/Discount").Discount[] | undefined;
|
|
157
160
|
}>;
|
|
158
161
|
/** 获取当前折扣列表(包装 order.getDiscountList) */
|
|
159
162
|
getDiscountList(): import("../../modules/Discount").Discount[];
|
|
@@ -167,7 +170,7 @@ export declare class VenueBookingImpl extends BaseModule implements Module {
|
|
|
167
170
|
getSummary(): Promise<import("../../modules/Order/types").OrderSummary>;
|
|
168
171
|
submitOrder<T = any>(): Promise<T>;
|
|
169
172
|
addProductToOrder(product: Partial<ScanOrderOrderProduct> & ScanOrderOrderProductIdentity): Promise<import("../../modules/Order/types").OrderProduct[]>;
|
|
170
|
-
|
|
173
|
+
updateOrderProduct(params: UpdateOrderProductParams): Promise<import("../../modules/Order/types").OrderProduct[]>;
|
|
171
174
|
removeProductFromOrder(identity: ScanOrderOrderProductIdentity): Promise<import("../../modules/Order/types").OrderProduct[]>;
|
|
172
175
|
getProductList(): Promise<ProductData[]>;
|
|
173
176
|
private loadOpenDataConfig;
|
|
@@ -118,6 +118,27 @@ var _VenueBookingImpl = class extends import_BaseModule.BaseModule {
|
|
|
118
118
|
moduleName: "venueBooking"
|
|
119
119
|
};
|
|
120
120
|
}
|
|
121
|
+
safeStringify(value) {
|
|
122
|
+
try {
|
|
123
|
+
return JSON.stringify(value);
|
|
124
|
+
} catch {
|
|
125
|
+
return void 0;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
pickErrorMessage(error) {
|
|
129
|
+
var _a, _b, _c, _d;
|
|
130
|
+
const candidates = [
|
|
131
|
+
error.message,
|
|
132
|
+
(_a = error.data) == null ? void 0 : _a.message,
|
|
133
|
+
(_c = (_b = error.response) == null ? void 0 : _b.data) == null ? void 0 : _c.message,
|
|
134
|
+
(_d = error.error) == null ? void 0 : _d.message
|
|
135
|
+
];
|
|
136
|
+
for (const candidate of candidates) {
|
|
137
|
+
if (typeof candidate === "string" && candidate.trim())
|
|
138
|
+
return candidate;
|
|
139
|
+
}
|
|
140
|
+
return void 0;
|
|
141
|
+
}
|
|
121
142
|
serializeError(error) {
|
|
122
143
|
if (error instanceof Error) {
|
|
123
144
|
return {
|
|
@@ -126,6 +147,17 @@ var _VenueBookingImpl = class extends import_BaseModule.BaseModule {
|
|
|
126
147
|
stack: error.stack
|
|
127
148
|
};
|
|
128
149
|
}
|
|
150
|
+
if (error && typeof error === "object") {
|
|
151
|
+
const raw = error;
|
|
152
|
+
const message = this.pickErrorMessage(raw) || this.safeStringify(raw) || String(error);
|
|
153
|
+
return {
|
|
154
|
+
...typeof raw.name === "string" ? { name: raw.name } : {},
|
|
155
|
+
message,
|
|
156
|
+
..."code" in raw ? { code: raw.code } : {},
|
|
157
|
+
..."status" in raw ? { status: raw.status } : {},
|
|
158
|
+
...this.safeStringify(raw) ? { raw: this.safeStringify(raw) } : {}
|
|
159
|
+
};
|
|
160
|
+
}
|
|
129
161
|
return {
|
|
130
162
|
message: String(error)
|
|
131
163
|
};
|
|
@@ -341,12 +373,14 @@ var _VenueBookingImpl = class extends import_BaseModule.BaseModule {
|
|
|
341
373
|
if (targetModule) {
|
|
342
374
|
this.store[step] = targetModule;
|
|
343
375
|
const initialState = step === "salesSummary" ? {
|
|
344
|
-
// TODO(Order types): VenueBooking should read OrderState.summary instead of tempOrder.summary.
|
|
345
376
|
summary: ((_b2 = (_a2 = this.store.order) == null ? void 0 : _a2.getTempOrder()) == null ? void 0 : _b2.summary) || (0, import_utils.createEmptySummary)()
|
|
346
377
|
} : {};
|
|
347
378
|
const loggerProvider = ((_c2 = this.otherParams) == null ? void 0 : _c2.loggerProvider) || "feishu";
|
|
348
379
|
const loggerConfig = ((_d2 = this.otherParams) == null ? void 0 : _d2.loggerConfig) || {
|
|
349
|
-
feishu: {
|
|
380
|
+
feishu: {
|
|
381
|
+
webhook: "https://open.feishu.cn/open-apis/bot/v2/hook/8f069b14-9d39-4728-8f78-b56f393bfde8",
|
|
382
|
+
errorHook: "https://open.feishu.cn/open-apis/bot/v2/hook/bdefae5e-f233-4705-8688-946887d9543d"
|
|
383
|
+
}
|
|
350
384
|
};
|
|
351
385
|
this.core.registerModule(targetModule, {
|
|
352
386
|
initialState,
|
|
@@ -524,8 +558,10 @@ var _VenueBookingImpl = class extends import_BaseModule.BaseModule {
|
|
|
524
558
|
throw new Error("venueProducts 模块未初始化");
|
|
525
559
|
if (!this.store.addonProducts)
|
|
526
560
|
throw new Error("addonProducts 模块未初始化");
|
|
561
|
+
await this.loadOpenDataConfig();
|
|
527
562
|
const associatedMenus = ((_b = (_a = this.otherParams) == null ? void 0 : _a.openData) == null ? void 0 : _b["menu.associated_menus"]) || [];
|
|
528
563
|
if (!associatedMenus.length) {
|
|
564
|
+
this.logMethodError("loadAllProducts", new Error("未获取到餐牌配置(menu.associated_menus),请检查 OpenData 配置"));
|
|
529
565
|
throw new Error("未获取到餐牌配置(menu.associated_menus),请检查 OpenData 配置");
|
|
530
566
|
}
|
|
531
567
|
const menuListIds = associatedMenus.map((n) => Number(n.value));
|
|
@@ -989,7 +1025,7 @@ var _VenueBookingImpl = class extends import_BaseModule.BaseModule {
|
|
|
989
1025
|
form_id: (rawResource == null ? void 0 : rawResource.form_id) ?? mapping.formId,
|
|
990
1026
|
relation_id: resourceId,
|
|
991
1027
|
capacity: 1,
|
|
992
|
-
metadata: {}
|
|
1028
|
+
metadata: (0, import_slotMerge.buildVenueResourceMetadata)({ mapping, rawResource })
|
|
993
1029
|
};
|
|
994
1030
|
if (childRawResources && childRawResources.length) {
|
|
995
1031
|
resourceEntry.children = childRawResources.map((child) => ({
|
|
@@ -1435,23 +1471,23 @@ var _VenueBookingImpl = class extends import_BaseModule.BaseModule {
|
|
|
1435
1471
|
throw error;
|
|
1436
1472
|
}
|
|
1437
1473
|
}
|
|
1438
|
-
async
|
|
1439
|
-
this.logMethodStart("
|
|
1474
|
+
async updateOrderProduct(params) {
|
|
1475
|
+
this.logMethodStart("updateOrderProduct", {
|
|
1440
1476
|
product_id: params.product_id,
|
|
1441
1477
|
product_variant_id: params.product_variant_id
|
|
1442
1478
|
});
|
|
1443
1479
|
try {
|
|
1444
1480
|
if (!this.store.order)
|
|
1445
1481
|
throw new Error("order 模块未初始化");
|
|
1446
|
-
const products = await this.store.order.
|
|
1482
|
+
const products = await this.store.order.updateOrderProduct(params);
|
|
1447
1483
|
await this.refreshItemRuleQuantityLimits();
|
|
1448
1484
|
await this.refreshCartValidationPassed();
|
|
1449
|
-
this.logMethodSuccess("
|
|
1485
|
+
this.logMethodSuccess("updateOrderProduct", {
|
|
1450
1486
|
productCount: products.length
|
|
1451
1487
|
});
|
|
1452
1488
|
return products;
|
|
1453
1489
|
} catch (error) {
|
|
1454
|
-
this.logMethodError("
|
|
1490
|
+
this.logMethodError("updateOrderProduct", error);
|
|
1455
1491
|
throw error;
|
|
1456
1492
|
}
|
|
1457
1493
|
}
|
|
@@ -1530,18 +1566,19 @@ var _VenueBookingImpl = class extends import_BaseModule.BaseModule {
|
|
|
1530
1566
|
return cachedData;
|
|
1531
1567
|
}
|
|
1532
1568
|
if (this.loadOpenDataConfigInFlight)
|
|
1533
|
-
return this.loadOpenDataConfigInFlight;
|
|
1569
|
+
return await this.loadOpenDataConfigInFlight;
|
|
1534
1570
|
this.loadOpenDataConfigInFlight = this.store.openData.fetchOpenData({
|
|
1535
1571
|
scope: "board",
|
|
1536
1572
|
target: "venue_booking+online_store",
|
|
1537
1573
|
section_code: [...OPEN_DATA_SECTION_CODES]
|
|
1538
|
-
})
|
|
1574
|
+
});
|
|
1575
|
+
try {
|
|
1576
|
+
const openDataConfig = await this.loadOpenDataConfigInFlight;
|
|
1539
1577
|
this.otherParams.openData = openDataConfig;
|
|
1540
1578
|
return openDataConfig;
|
|
1541
|
-
}
|
|
1579
|
+
} finally {
|
|
1542
1580
|
this.loadOpenDataConfigInFlight = null;
|
|
1543
|
-
}
|
|
1544
|
-
return this.loadOpenDataConfigInFlight;
|
|
1581
|
+
}
|
|
1545
1582
|
}
|
|
1546
1583
|
async loadRuntimeConfigs() {
|
|
1547
1584
|
await this.loadOpenDataConfig();
|
|
@@ -1717,7 +1754,6 @@ var _VenueBookingImpl = class extends import_BaseModule.BaseModule {
|
|
|
1717
1754
|
...targetProduct,
|
|
1718
1755
|
...delta > 0 ? { num: (0, import_utils.getSafeProductNum)(existedQuantity + delta) } : {},
|
|
1719
1756
|
metadata: { ...targetProduct.metadata || {}, item_rule_prefill: true, item_rule_id: prefillItem.ruleId },
|
|
1720
|
-
// TODO(Order types): migrate VenueBooking prefill origin runtime into tempOrder._extend.
|
|
1721
1757
|
_origin: sourceItem ? { ...targetProduct._origin || {}, ...sourceItem } : targetProduct._origin
|
|
1722
1758
|
};
|
|
1723
1759
|
if (delta > 0 || Boolean(
|