@pisell/pisellos 2.1.127 → 2.1.129
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/model/strategy/adapter/promotion/index.js +0 -9
- package/dist/modules/Order/index.js +5 -2
- package/dist/modules/Order/utils.d.ts +1 -1
- package/dist/modules/Order/utils.js +1 -1
- package/dist/solution/ScanOrder/index.js +11 -9
- package/dist/solution/VenueBooking/index.js +45 -42
- package/lib/modules/Order/index.js +6 -6
- package/lib/modules/Order/utils.d.ts +1 -1
- package/lib/modules/Order/utils.js +1 -1
- package/lib/solution/ScanOrder/index.js +2 -0
- package/lib/solution/VenueBooking/index.js +11 -13
- package/package.json +1 -1
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
// 导出评估器
|
|
2
|
-
export { PromotionEvaluator } from "./evaluator";
|
|
3
|
-
|
|
4
|
-
// 导出适配器
|
|
5
|
-
export { PromotionAdapter } from "./adapter";
|
|
6
|
-
export { default } from "./adapter";
|
|
7
|
-
|
|
8
|
-
// 导出策略配置示例常量
|
|
9
|
-
export { X_ITEMS_FOR_Y_PRICE_STRATEGY, BUY_X_GET_Y_FREE_STRATEGY } from "./examples";
|
|
@@ -325,9 +325,12 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
|
|
|
325
325
|
}, {
|
|
326
326
|
key: "applyDiscount",
|
|
327
327
|
value: function applyDiscount() {
|
|
328
|
-
var
|
|
328
|
+
var _this$store$discount6, _tempOrder$holder3, _tempOrder$holder4;
|
|
329
329
|
var tempOrder = this.store.tempOrder;
|
|
330
|
-
|
|
330
|
+
// 任意 products CRUD 后都应当重算 discount 状态;即使 products 为空,
|
|
331
|
+
// 也需要让 Rules.calcDiscount 把 DiscountModule 的 isSelected / isAvailable /
|
|
332
|
+
// appliedProductDetails / savedAmount 以及 tempOrder.discount_list 复位。
|
|
333
|
+
if (!tempOrder) return;
|
|
331
334
|
var rulesModule = this.store.rules;
|
|
332
335
|
if (!rulesModule) return;
|
|
333
336
|
var discountList = ((_this$store$discount6 = this.store.discount) === null || _this$store$discount6 === void 0 ? void 0 : _this$store$discount6.getDiscountList()) || [];
|
|
@@ -382,7 +382,7 @@ export function formatV1Product(products) {
|
|
|
382
382
|
option: product.product_option_item,
|
|
383
383
|
product_id: product.product_id,
|
|
384
384
|
product_variant_id: product.product_variant_id,
|
|
385
|
-
|
|
385
|
+
num: product.num,
|
|
386
386
|
rowKey: product.product_id,
|
|
387
387
|
session: null,
|
|
388
388
|
unique: createUuidV4()
|
|
@@ -1248,7 +1248,7 @@ export var ScanOrderImpl = /*#__PURE__*/function (_BaseModule) {
|
|
|
1248
1248
|
break;
|
|
1249
1249
|
}
|
|
1250
1250
|
sellingPrice = toPriceString((_sourceItem$price = sourceItem === null || sourceItem === void 0 ? void 0 : sourceItem.price) !== null && _sourceItem$price !== void 0 ? _sourceItem$price : sourceItem === null || sourceItem === void 0 ? void 0 : sourceItem.selling_price, '0.00');
|
|
1251
|
-
tempOrder.products.push(normalizeOrderProduct({
|
|
1251
|
+
tempOrder.products.push(normalizeOrderProduct(_objectSpread(_objectSpread({}, sourceItem), {}, {
|
|
1252
1252
|
product_id: productId,
|
|
1253
1253
|
product_variant_id: productVariantId,
|
|
1254
1254
|
num: targetQuantity,
|
|
@@ -1262,7 +1262,7 @@ export var ScanOrderImpl = /*#__PURE__*/function (_BaseModule) {
|
|
|
1262
1262
|
item_rule_prefill: true,
|
|
1263
1263
|
item_rule_id: prefillItem.ruleId
|
|
1264
1264
|
})
|
|
1265
|
-
}));
|
|
1265
|
+
})));
|
|
1266
1266
|
hasChanges = true;
|
|
1267
1267
|
return _context20.abrupt("continue", 45);
|
|
1268
1268
|
case 38:
|
|
@@ -1300,25 +1300,27 @@ export var ScanOrderImpl = /*#__PURE__*/function (_BaseModule) {
|
|
|
1300
1300
|
return _context20.finish(52);
|
|
1301
1301
|
case 55:
|
|
1302
1302
|
if (!hasChanges) {
|
|
1303
|
-
_context20.next =
|
|
1303
|
+
_context20.next = 60;
|
|
1304
1304
|
break;
|
|
1305
1305
|
}
|
|
1306
|
-
|
|
1306
|
+
// Prefill 属于 products CRUD 的一种形式:新增后让 Rules 重算,以支持自动应用可用优惠券。
|
|
1307
|
+
this.store.order.applyDiscount();
|
|
1308
|
+
_context20.next = 59;
|
|
1307
1309
|
return this.store.order.recalculateSummary({
|
|
1308
1310
|
createIfMissing: true
|
|
1309
1311
|
});
|
|
1310
|
-
case 58:
|
|
1311
|
-
this.store.order.persistTempOrder();
|
|
1312
1312
|
case 59:
|
|
1313
|
-
|
|
1313
|
+
this.store.order.persistTempOrder();
|
|
1314
|
+
case 60:
|
|
1315
|
+
_context20.next = 62;
|
|
1314
1316
|
return this.refreshItemRuleQuantityLimits();
|
|
1315
|
-
case
|
|
1317
|
+
case 62:
|
|
1316
1318
|
this.itemRulePrefillApplied = true;
|
|
1317
1319
|
this.logMethodSuccess('applyPrefillByItemRule', {
|
|
1318
1320
|
prefillCount: prefillItems.length,
|
|
1319
1321
|
hasChanges: hasChanges
|
|
1320
1322
|
});
|
|
1321
|
-
case
|
|
1323
|
+
case 64:
|
|
1322
1324
|
case "end":
|
|
1323
1325
|
return _context20.stop();
|
|
1324
1326
|
}
|
|
@@ -1792,7 +1792,7 @@ export var VenueBookingImpl = /*#__PURE__*/function (_BaseModule) {
|
|
|
1792
1792
|
key: "setDiscountSelected",
|
|
1793
1793
|
value: (function () {
|
|
1794
1794
|
var _setDiscountSelected = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee21(params) {
|
|
1795
|
-
var _tempOrder$holder, _this$store$order$get, _this$store$order$get2, list, beforeTarget, updated, updatedTarget, tempOrder, orderStore, discountModule, rulesModule, holders, nextDiscountList, _tempOrder$holder2, result, beforeSelectedIds, _iterator9, _step9, d, selectedResourceIds, _iterator10, _step10, _product$
|
|
1795
|
+
var _tempOrder$holder, _this$store$order$get, _this$store$order$get2, list, beforeTarget, updated, updatedTarget, tempOrder, orderStore, discountModule, rulesModule, holders, nextDiscountList, _tempOrder$holder2, result, beforeSelectedIds, _iterator9, _step9, d, selectedResourceIds, _iterator10, _step10, _product$_origin, product, totalPerUnitDiscount, newSellingPrice, afterApplyTarget, finalSummary, finalProduct, finalTarget;
|
|
1796
1796
|
return _regeneratorRuntime().wrap(function _callee21$(_context21) {
|
|
1797
1797
|
while (1) switch (_context21.prev = _context21.next) {
|
|
1798
1798
|
case 0:
|
|
@@ -1872,70 +1872,71 @@ export var VenueBookingImpl = /*#__PURE__*/function (_BaseModule) {
|
|
|
1872
1872
|
return d.isSelected;
|
|
1873
1873
|
}).map(function (d) {
|
|
1874
1874
|
return d.id;
|
|
1875
|
-
}));
|
|
1875
|
+
})); // 无条件归一化:不论 Rules 是否清空 discount_list、长度是否变化,
|
|
1876
|
+
// 都以 original_price - Σ (当前选中 discount_list.amount) 重算 selling_price。
|
|
1877
|
+
// 目的:避免 unselect 后 selling_price 残留、reselect 时把残留价带进下一轮 Rules 造成双折扣。
|
|
1878
|
+
// 手动改价商品(_origin.isManualDiscount=true)不参与券流程归一化,保留手工价。
|
|
1876
1879
|
_iterator10 = _createForOfIteratorHelper(tempOrder.products);
|
|
1877
1880
|
_context21.prev = 19;
|
|
1878
1881
|
_iterator10.s();
|
|
1879
1882
|
case 21:
|
|
1880
1883
|
if ((_step10 = _iterator10.n()).done) {
|
|
1881
|
-
_context21.next =
|
|
1884
|
+
_context21.next = 32;
|
|
1882
1885
|
break;
|
|
1883
1886
|
}
|
|
1884
1887
|
product = _step10.value;
|
|
1885
|
-
if ((_product$
|
|
1888
|
+
if (!((_product$_origin = product._origin) !== null && _product$_origin !== void 0 && _product$_origin.isManualDiscount)) {
|
|
1886
1889
|
_context21.next = 25;
|
|
1887
1890
|
break;
|
|
1888
1891
|
}
|
|
1889
|
-
return _context21.abrupt("continue",
|
|
1892
|
+
return _context21.abrupt("continue", 30);
|
|
1890
1893
|
case 25:
|
|
1891
|
-
|
|
1892
|
-
product.discount_list = product.discount_list.filter(function (pd) {
|
|
1894
|
+
// 1. 把 product.discount_list 和当前选中的 discount 对齐(剔除已取消的券)
|
|
1895
|
+
product.discount_list = (product.discount_list || []).filter(function (pd) {
|
|
1893
1896
|
var _pd$discount$resource, _pd$discount;
|
|
1894
1897
|
var rid = (_pd$discount$resource = (_pd$discount = pd.discount) === null || _pd$discount === void 0 ? void 0 : _pd$discount.resource_id) !== null && _pd$discount$resource !== void 0 ? _pd$discount$resource : pd.id;
|
|
1895
1898
|
return rid != null && selectedResourceIds.has(rid);
|
|
1896
1899
|
});
|
|
1897
|
-
|
|
1898
|
-
|
|
1899
|
-
|
|
1900
|
-
|
|
1901
|
-
|
|
1902
|
-
|
|
1903
|
-
|
|
1904
|
-
|
|
1905
|
-
|
|
1906
|
-
product.metadata.main_product_selling_price = newSellingPrice;
|
|
1907
|
-
}
|
|
1900
|
+
|
|
1901
|
+
// 2. 以 original_price 为基准重算 selling_price
|
|
1902
|
+
totalPerUnitDiscount = (product.discount_list || []).reduce(function (sum, pd) {
|
|
1903
|
+
return sum + (pd.amount || 0);
|
|
1904
|
+
}, 0);
|
|
1905
|
+
newSellingPrice = new Decimal(product.original_price || 0).minus(totalPerUnitDiscount).toDecimalPlaces(2).toString();
|
|
1906
|
+
product.selling_price = newSellingPrice;
|
|
1907
|
+
if (product.metadata) {
|
|
1908
|
+
product.metadata.main_product_selling_price = newSellingPrice;
|
|
1908
1909
|
}
|
|
1909
|
-
case 28:
|
|
1910
|
-
_context21.next = 21;
|
|
1911
|
-
break;
|
|
1912
1910
|
case 30:
|
|
1913
|
-
_context21.next =
|
|
1911
|
+
_context21.next = 21;
|
|
1914
1912
|
break;
|
|
1915
1913
|
case 32:
|
|
1916
|
-
_context21.
|
|
1914
|
+
_context21.next = 37;
|
|
1915
|
+
break;
|
|
1916
|
+
case 34:
|
|
1917
|
+
_context21.prev = 34;
|
|
1917
1918
|
_context21.t0 = _context21["catch"](19);
|
|
1918
1919
|
_iterator10.e(_context21.t0);
|
|
1919
|
-
case
|
|
1920
|
-
_context21.prev =
|
|
1920
|
+
case 37:
|
|
1921
|
+
_context21.prev = 37;
|
|
1921
1922
|
_iterator10.f();
|
|
1922
|
-
return _context21.finish(
|
|
1923
|
-
case
|
|
1923
|
+
return _context21.finish(37);
|
|
1924
|
+
case 40:
|
|
1924
1925
|
OrderModule.populateSavedAmounts(tempOrder.products, nextDiscountList);
|
|
1925
|
-
_context21.next =
|
|
1926
|
+
_context21.next = 43;
|
|
1926
1927
|
return discountModule === null || discountModule === void 0 ? void 0 : discountModule.setDiscountList(nextDiscountList);
|
|
1927
|
-
case
|
|
1928
|
+
case 43:
|
|
1928
1929
|
tempOrder.discount_list = (nextDiscountList || []).filter(function (d) {
|
|
1929
1930
|
return d.isSelected;
|
|
1930
1931
|
});
|
|
1931
1932
|
afterApplyTarget = this.store.order.getDiscountList().find(function (d) {
|
|
1932
1933
|
return d.id === params.discountId;
|
|
1933
1934
|
}) || null;
|
|
1934
|
-
_context21.next =
|
|
1935
|
+
_context21.next = 47;
|
|
1935
1936
|
return this.store.order.recalculateSummary({
|
|
1936
1937
|
createIfMissing: true
|
|
1937
1938
|
});
|
|
1938
|
-
case
|
|
1939
|
+
case 47:
|
|
1939
1940
|
this.store.order.persistTempOrder();
|
|
1940
1941
|
finalSummary = ((_this$store$order$get = this.store.order.getTempOrder()) === null || _this$store$order$get === void 0 ? void 0 : _this$store$order$get.summary) || null;
|
|
1941
1942
|
finalProduct = ((_this$store$order$get2 = this.store.order.getTempOrder()) === null || _this$store$order$get2 === void 0 || (_this$store$order$get2 = _this$store$order$get2.products) === null || _this$store$order$get2 === void 0 ? void 0 : _this$store$order$get2[0]) || null;
|
|
@@ -1944,16 +1945,16 @@ export var VenueBookingImpl = /*#__PURE__*/function (_BaseModule) {
|
|
|
1944
1945
|
return d.id === params.discountId;
|
|
1945
1946
|
}) || null;
|
|
1946
1947
|
return _context21.abrupt("return", this.store.order.getDiscountList());
|
|
1947
|
-
case
|
|
1948
|
-
_context21.prev =
|
|
1948
|
+
case 55:
|
|
1949
|
+
_context21.prev = 55;
|
|
1949
1950
|
_context21.t1 = _context21["catch"](1);
|
|
1950
1951
|
this.logMethodError('setDiscountSelected', _context21.t1);
|
|
1951
1952
|
throw _context21.t1;
|
|
1952
|
-
case
|
|
1953
|
+
case 59:
|
|
1953
1954
|
case "end":
|
|
1954
1955
|
return _context21.stop();
|
|
1955
1956
|
}
|
|
1956
|
-
}, _callee21, this, [[1,
|
|
1957
|
+
}, _callee21, this, [[1, 55], [19, 34, 37, 40]]);
|
|
1957
1958
|
}));
|
|
1958
1959
|
function setDiscountSelected(_x14) {
|
|
1959
1960
|
return _setDiscountSelected.apply(this, arguments);
|
|
@@ -2747,25 +2748,27 @@ export var VenueBookingImpl = /*#__PURE__*/function (_BaseModule) {
|
|
|
2747
2748
|
return _context36.finish(50);
|
|
2748
2749
|
case 53:
|
|
2749
2750
|
if (!hasChanges) {
|
|
2750
|
-
_context36.next =
|
|
2751
|
+
_context36.next = 58;
|
|
2751
2752
|
break;
|
|
2752
2753
|
}
|
|
2753
|
-
|
|
2754
|
+
// Prefill 属于 products CRUD 的一种形式:新增后让 Rules 重算,以支持自动应用可用优惠券。
|
|
2755
|
+
this.store.order.applyDiscount();
|
|
2756
|
+
_context36.next = 57;
|
|
2754
2757
|
return this.store.order.recalculateSummary({
|
|
2755
2758
|
createIfMissing: true
|
|
2756
2759
|
});
|
|
2757
|
-
case 56:
|
|
2758
|
-
this.store.order.persistTempOrder();
|
|
2759
2760
|
case 57:
|
|
2760
|
-
|
|
2761
|
+
this.store.order.persistTempOrder();
|
|
2762
|
+
case 58:
|
|
2763
|
+
_context36.next = 60;
|
|
2761
2764
|
return this.refreshItemRuleQuantityLimits();
|
|
2762
|
-
case
|
|
2765
|
+
case 60:
|
|
2763
2766
|
this.itemRulePrefillApplied = true;
|
|
2764
2767
|
this.logMethodSuccess('applyPrefillByItemRule', {
|
|
2765
2768
|
prefillCount: prefillItems.length,
|
|
2766
2769
|
hasChanges: hasChanges
|
|
2767
2770
|
});
|
|
2768
|
-
case
|
|
2771
|
+
case 62:
|
|
2769
2772
|
case "end":
|
|
2770
2773
|
return _context36.stop();
|
|
2771
2774
|
}
|
|
@@ -231,27 +231,27 @@ var OrderModule = class extends import_BaseModule.BaseModule {
|
|
|
231
231
|
};
|
|
232
232
|
}
|
|
233
233
|
applyDiscount() {
|
|
234
|
-
var _a, _b, _c, _d
|
|
234
|
+
var _a, _b, _c, _d;
|
|
235
235
|
const tempOrder = this.store.tempOrder;
|
|
236
|
-
if (!
|
|
236
|
+
if (!tempOrder)
|
|
237
237
|
return;
|
|
238
238
|
const rulesModule = this.store.rules;
|
|
239
239
|
if (!rulesModule)
|
|
240
240
|
return;
|
|
241
|
-
const discountList = ((
|
|
242
|
-
const holders = ((
|
|
241
|
+
const discountList = ((_a = this.store.discount) == null ? void 0 : _a.getDiscountList()) || [];
|
|
242
|
+
const holders = ((_b = tempOrder.holder) == null ? void 0 : _b.form_record_id) ? [{ form_record_id: tempOrder.holder.form_record_id }] : [];
|
|
243
243
|
const result = rulesModule.calcDiscount({
|
|
244
244
|
productList: tempOrder.products,
|
|
245
245
|
discountList,
|
|
246
246
|
holders,
|
|
247
|
-
isFormSubject: !!((
|
|
247
|
+
isFormSubject: !!((_c = tempOrder.holder) == null ? void 0 : _c.type) && tempOrder.holder.type === "form"
|
|
248
248
|
});
|
|
249
249
|
if (result == null ? void 0 : result.productList) {
|
|
250
250
|
tempOrder.products = result.productList;
|
|
251
251
|
}
|
|
252
252
|
if (result == null ? void 0 : result.discountList) {
|
|
253
253
|
OrderModule.populateSavedAmounts(result.productList || tempOrder.products, result.discountList);
|
|
254
|
-
(
|
|
254
|
+
(_d = this.store.discount) == null ? void 0 : _d.setDiscountList(result.discountList);
|
|
255
255
|
tempOrder.discount_list = result.discountList.filter((d) => d.isSelected);
|
|
256
256
|
}
|
|
257
257
|
}
|
|
@@ -364,7 +364,7 @@ function formatV1Product(products) {
|
|
|
364
364
|
option: product.product_option_item,
|
|
365
365
|
product_id: product.product_id,
|
|
366
366
|
product_variant_id: product.product_variant_id,
|
|
367
|
-
|
|
367
|
+
num: product.num,
|
|
368
368
|
rowKey: product.product_id,
|
|
369
369
|
session: null,
|
|
370
370
|
unique: createUuidV4()
|
|
@@ -707,6 +707,7 @@ var ScanOrderImpl = class extends import_BaseModule.BaseModule {
|
|
|
707
707
|
);
|
|
708
708
|
tempOrder.products.push(
|
|
709
709
|
(0, import_utils.normalizeOrderProduct)({
|
|
710
|
+
...sourceItem,
|
|
710
711
|
product_id: productId,
|
|
711
712
|
product_variant_id: productVariantId,
|
|
712
713
|
num: targetQuantity,
|
|
@@ -752,6 +753,7 @@ var ScanOrderImpl = class extends import_BaseModule.BaseModule {
|
|
|
752
753
|
}
|
|
753
754
|
}
|
|
754
755
|
if (hasChanges) {
|
|
756
|
+
this.store.order.applyDiscount();
|
|
755
757
|
await this.store.order.recalculateSummary({ createIfMissing: true });
|
|
756
758
|
this.store.order.persistTempOrder();
|
|
757
759
|
}
|
|
@@ -1152,24 +1152,21 @@ var _VenueBookingImpl = class extends import_BaseModule.BaseModule {
|
|
|
1152
1152
|
nextDiscountList.filter((d) => d.isSelected).map((d) => d.id)
|
|
1153
1153
|
);
|
|
1154
1154
|
for (const product of tempOrder.products) {
|
|
1155
|
-
if (
|
|
1155
|
+
if ((_c = product._origin) == null ? void 0 : _c.isManualDiscount)
|
|
1156
1156
|
continue;
|
|
1157
|
-
|
|
1158
|
-
product.discount_list = product.discount_list.filter((pd) => {
|
|
1157
|
+
product.discount_list = (product.discount_list || []).filter((pd) => {
|
|
1159
1158
|
var _a2;
|
|
1160
1159
|
const rid = ((_a2 = pd.discount) == null ? void 0 : _a2.resource_id) ?? pd.id;
|
|
1161
1160
|
return rid != null && selectedResourceIds.has(rid);
|
|
1162
1161
|
});
|
|
1163
|
-
|
|
1164
|
-
|
|
1165
|
-
|
|
1166
|
-
|
|
1167
|
-
|
|
1168
|
-
|
|
1169
|
-
|
|
1170
|
-
|
|
1171
|
-
product.metadata.main_product_selling_price = newSellingPrice;
|
|
1172
|
-
}
|
|
1162
|
+
const totalPerUnitDiscount = (product.discount_list || []).reduce(
|
|
1163
|
+
(sum, pd) => sum + (pd.amount || 0),
|
|
1164
|
+
0
|
|
1165
|
+
);
|
|
1166
|
+
const newSellingPrice = new import_decimal.default(product.original_price || 0).minus(totalPerUnitDiscount).toDecimalPlaces(2).toString();
|
|
1167
|
+
product.selling_price = newSellingPrice;
|
|
1168
|
+
if (product.metadata) {
|
|
1169
|
+
product.metadata.main_product_selling_price = newSellingPrice;
|
|
1173
1170
|
}
|
|
1174
1171
|
}
|
|
1175
1172
|
import_Order.OrderModule.populateSavedAmounts(tempOrder.products, nextDiscountList);
|
|
@@ -1541,6 +1538,7 @@ var _VenueBookingImpl = class extends import_BaseModule.BaseModule {
|
|
|
1541
1538
|
}
|
|
1542
1539
|
}
|
|
1543
1540
|
if (hasChanges) {
|
|
1541
|
+
this.store.order.applyDiscount();
|
|
1544
1542
|
await this.store.order.recalculateSummary({ createIfMissing: true });
|
|
1545
1543
|
this.store.order.persistTempOrder();
|
|
1546
1544
|
}
|