@pisell/pisellos 3.0.71 → 3.0.73
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/Cart/utils/cartProduct.js +41 -26
- package/dist/modules/Discount/index.d.ts +2 -0
- package/dist/modules/Discount/index.js +69 -36
- package/dist/modules/Discount/types.d.ts +16 -0
- package/dist/modules/Order/index.js +4 -1
- package/dist/modules/Order/utils.d.ts +1 -0
- package/dist/modules/Order/utils.js +9 -0
- package/dist/modules/Rules/index.d.ts +8 -0
- package/dist/modules/Rules/index.js +1033 -183
- package/dist/modules/Rules/types.d.ts +4 -1
- package/dist/solution/BookingByStep/index.js +1 -0
- package/dist/solution/ShopDiscount/index.d.ts +2 -0
- package/dist/solution/ShopDiscount/index.js +82 -19
- package/dist/solution/ShopDiscount/types.d.ts +4 -0
- package/dist/solution/ShopDiscount/utils.d.ts +55 -0
- package/dist/solution/ShopDiscount/utils.js +432 -3
- package/lib/modules/Cart/utils/cartProduct.js +35 -22
- package/lib/modules/Discount/index.d.ts +2 -0
- package/lib/modules/Discount/index.js +19 -4
- package/lib/modules/Discount/types.d.ts +16 -0
- package/lib/modules/Order/index.js +2 -0
- package/lib/modules/Order/utils.d.ts +1 -0
- package/lib/modules/Order/utils.js +11 -0
- package/lib/modules/Rules/index.d.ts +8 -0
- package/lib/modules/Rules/index.js +813 -172
- package/lib/modules/Rules/types.d.ts +4 -1
- package/lib/solution/BookingByStep/index.js +4 -0
- package/lib/solution/ShopDiscount/index.d.ts +2 -0
- package/lib/solution/ShopDiscount/index.js +58 -10
- package/lib/solution/ShopDiscount/types.d.ts +4 -0
- package/lib/solution/ShopDiscount/utils.d.ts +55 -0
- package/lib/solution/ShopDiscount/utils.js +266 -3
- package/package.json +1 -1
|
@@ -39,6 +39,7 @@ type ProductDetail = {
|
|
|
39
39
|
original_price?: number | string;
|
|
40
40
|
num?: number;
|
|
41
41
|
quantity: number;
|
|
42
|
+
startDate?: any;
|
|
42
43
|
};
|
|
43
44
|
export interface RulesParamsHooks {
|
|
44
45
|
getProduct: (product: Record<string, any>) => ProductDetail;
|
|
@@ -49,8 +50,10 @@ export interface RulesParamsHooks {
|
|
|
49
50
|
origin_total?: number;
|
|
50
51
|
price?: string | number;
|
|
51
52
|
variant?: any[];
|
|
52
|
-
original_price?: number;
|
|
53
|
+
original_price?: number | string;
|
|
53
54
|
quantity?: number;
|
|
55
|
+
bundle?: any[];
|
|
56
|
+
main_product_selling_price?: string | number;
|
|
54
57
|
}) => Record<string, any>;
|
|
55
58
|
}
|
|
56
59
|
export {};
|
|
@@ -18,6 +18,8 @@ export declare class ShopDiscountImpl extends BaseModule implements Module {
|
|
|
18
18
|
private initializePlugins;
|
|
19
19
|
private registerDependentModules;
|
|
20
20
|
private registerEventListeners;
|
|
21
|
+
getCurrentBookingTime(): string | null;
|
|
22
|
+
private filterDiscountListByBookingTime;
|
|
21
23
|
setCustomer(customer: Customer): Promise<void>;
|
|
22
24
|
calcDiscount(productList: Record<string, any>[], options?: {
|
|
23
25
|
discountId: number;
|
|
@@ -28,6 +28,7 @@ import { BaseModule } from "../../modules/BaseModule";
|
|
|
28
28
|
import { ShopDiscountHooks } from "./types";
|
|
29
29
|
import { DiscountModule } from "../../modules/Discount";
|
|
30
30
|
import { RulesModule } from "../../modules/Rules";
|
|
31
|
+
import { filterDiscountListByBookingTime as _filterDiscountListByBookingTime, isAllNormalProduct } from "./utils";
|
|
31
32
|
import Decimal from 'decimal.js';
|
|
32
33
|
export var ShopDiscountImpl = /*#__PURE__*/function (_BaseModule) {
|
|
33
34
|
_inherits(ShopDiscountImpl, _BaseModule);
|
|
@@ -49,7 +50,10 @@ export var ShopDiscountImpl = /*#__PURE__*/function (_BaseModule) {
|
|
|
49
50
|
customer: null,
|
|
50
51
|
productList: [],
|
|
51
52
|
discount: null,
|
|
52
|
-
rules: null
|
|
53
|
+
rules: null,
|
|
54
|
+
originalDiscountList: [],
|
|
55
|
+
currentBookingTime: "",
|
|
56
|
+
filteredDiscountList: []
|
|
53
57
|
};
|
|
54
58
|
return _this;
|
|
55
59
|
}
|
|
@@ -206,6 +210,55 @@ export var ShopDiscountImpl = /*#__PURE__*/function (_BaseModule) {
|
|
|
206
210
|
|
|
207
211
|
// =========== 公共 API ===========
|
|
208
212
|
|
|
213
|
+
// 设置预约时间
|
|
214
|
+
// public async setBookingTime(bookingTime: string | null): Promise<void> {
|
|
215
|
+
// if (this.store.currentBookingTime !== bookingTime) {
|
|
216
|
+
// this.store.currentBookingTime = bookingTime;
|
|
217
|
+
//
|
|
218
|
+
// // 更新过滤后的优惠券列表
|
|
219
|
+
// await this.updateFilteredDiscountList();
|
|
220
|
+
// }
|
|
221
|
+
// }
|
|
222
|
+
|
|
223
|
+
// 获取当前预约时间
|
|
224
|
+
}, {
|
|
225
|
+
key: "getCurrentBookingTime",
|
|
226
|
+
value: function getCurrentBookingTime() {
|
|
227
|
+
return this.store.currentBookingTime;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
// 根据预约时间过滤优惠券列表
|
|
231
|
+
}, {
|
|
232
|
+
key: "filterDiscountListByBookingTime",
|
|
233
|
+
value: function filterDiscountListByBookingTime(discountList, bookingTime) {
|
|
234
|
+
// 如果全部是普通商品,不需要过滤,直接返回当前数据
|
|
235
|
+
if (isAllNormalProduct(this.store.productList || [])) {
|
|
236
|
+
return discountList;
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
// 否则使用 bookingTime 进行过滤
|
|
240
|
+
return _filterDiscountListByBookingTime(discountList, bookingTime);
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
// 更新过滤后的优惠券列表
|
|
244
|
+
// private async updateFilteredDiscountList(): Promise<void> {
|
|
245
|
+
// const originalList = this.store.originalDiscountList;
|
|
246
|
+
// const filteredList = this.filterDiscountListByBookingTime(originalList, this.store.currentBookingTime);
|
|
247
|
+
//
|
|
248
|
+
// this.store.filteredDiscountList = filteredList;
|
|
249
|
+
//
|
|
250
|
+
// // 更新 DiscountModule 中的优惠券列表
|
|
251
|
+
// this.setDiscountList(filteredList);
|
|
252
|
+
//
|
|
253
|
+
// if (this.store.productList?.length) {
|
|
254
|
+
// const result = this.calcDiscount(this.store.productList);
|
|
255
|
+
// await this.core.effects.emit(
|
|
256
|
+
// ShopDiscountHooks.onLoadPrepareCalcResult,
|
|
257
|
+
// result,
|
|
258
|
+
// );
|
|
259
|
+
// }
|
|
260
|
+
// }
|
|
261
|
+
|
|
209
262
|
// 设置客户
|
|
210
263
|
}, {
|
|
211
264
|
key: "setCustomer",
|
|
@@ -481,7 +534,7 @@ export var ShopDiscountImpl = /*#__PURE__*/function (_BaseModule) {
|
|
|
481
534
|
if (index !== -1) {
|
|
482
535
|
editModeDiscountList[index] = _objectSpread(_objectSpread({}, editModeDiscountList[index]), {}, {
|
|
483
536
|
amount: new Decimal(discount.amount || 0).plus(new Decimal(editModeDiscountList[index].amount || 0)).toNumber(),
|
|
484
|
-
savedAmount: new Decimal(discount.amount || 0).times((product === null || product === void 0 ? void 0 : product.num) || 1).plus(new Decimal(editModeDiscountList[index].savedAmount || 0)).toNumber()
|
|
537
|
+
savedAmount: new Decimal(discount.amount || 0).times((product === null || product === void 0 ? void 0 : product.quantity) || (product === null || product === void 0 ? void 0 : product.num) || 1).plus(new Decimal(editModeDiscountList[index].savedAmount || 0)).toNumber()
|
|
485
538
|
});
|
|
486
539
|
} else {
|
|
487
540
|
var _discount$discount2, _discount$discount3, _discount$discount4;
|
|
@@ -491,7 +544,7 @@ export var ShopDiscountImpl = /*#__PURE__*/function (_BaseModule) {
|
|
|
491
544
|
editModeDiscountList.push(_objectSpread(_objectSpread({}, discount), {}, {
|
|
492
545
|
isEditMode: true,
|
|
493
546
|
limited_relation_product_data: {},
|
|
494
|
-
savedAmount: discount.amount * ((product === null || product === void 0 ? void 0 : product.num) || 1),
|
|
547
|
+
savedAmount: discount.amount * ((product === null || product === void 0 ? void 0 : product.quantity) || (product === null || product === void 0 ? void 0 : product.num) || 1),
|
|
495
548
|
isAvailable: true,
|
|
496
549
|
id: ((_discount$discount2 = discount.discount) === null || _discount$discount2 === void 0 ? void 0 : _discount$discount2.resource_id) || discount.id,
|
|
497
550
|
format_title: ((_discount$discount3 = discount.discount) === null || _discount$discount3 === void 0 ? void 0 : _discount$discount3.title) || discount.format_title,
|
|
@@ -512,16 +565,19 @@ export var ShopDiscountImpl = /*#__PURE__*/function (_BaseModule) {
|
|
|
512
565
|
var targetProduct = productList.find(function (n) {
|
|
513
566
|
return n.id === id;
|
|
514
567
|
});
|
|
568
|
+
if (!targetProduct) return false;
|
|
515
569
|
var product = (_this3$hooks2 = _this3.hooks) === null || _this3$hooks2 === void 0 ? void 0 : _this3$hooks2.getProduct(targetProduct);
|
|
516
570
|
// 如果 product.total 是 0有可能是她已经用过商品券或者折扣卡导致的 0,所以此时还需要判断 origin_total 是否为 0
|
|
517
571
|
return Number(product === null || product === void 0 ? void 0 : product.total) === 0 && (Number(product === null || product === void 0 ? void 0 : product.origin_total) === 0 || !(product !== null && product !== void 0 && product.origin_total));
|
|
518
572
|
};
|
|
519
|
-
var allUsedProductIds = newDiscountList.
|
|
573
|
+
var allUsedProductIds = newDiscountList.filter(function (item) {
|
|
574
|
+
return !(item !== null && item !== void 0 && item.isEditMode);
|
|
575
|
+
}).map(function (n) {
|
|
520
576
|
var _n$appliedProductDeta;
|
|
521
|
-
return n.isSelected ? (_n$appliedProductDeta = n.appliedProductDetails) === null || _n$appliedProductDeta === void 0 ? void 0 : _n$appliedProductDeta.map(function (n) {
|
|
577
|
+
return n.isSelected ? ((_n$appliedProductDeta = n.appliedProductDetails) === null || _n$appliedProductDeta === void 0 ? void 0 : _n$appliedProductDeta.map(function (n) {
|
|
522
578
|
var _n$discount;
|
|
523
579
|
return (_n$discount = n.discount) === null || _n$discount === void 0 ? void 0 : _n$discount.product_id;
|
|
524
|
-
}) : [];
|
|
580
|
+
})) || n.product_id : [];
|
|
525
581
|
}).flat();
|
|
526
582
|
newDiscountList.forEach(function (item) {
|
|
527
583
|
var _item$applicableProdu;
|
|
@@ -601,7 +657,7 @@ export var ShopDiscountImpl = /*#__PURE__*/function (_BaseModule) {
|
|
|
601
657
|
key: "loadPrepareConfig",
|
|
602
658
|
value: function () {
|
|
603
659
|
var _loadPrepareConfig = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee8(params) {
|
|
604
|
-
var _this$getCustomer2, _this$store$discount7, _this$getDiscountList, _this$store$productLi, customerId, goodPassList, scanDiscount, scanDiscountIds, newGoodPassList, newDiscountList, result;
|
|
660
|
+
var _this$getCustomer2, _this$store$discount7, _this$getDiscountList, _this$store$discount8, _this$store$productLi, customerId, goodPassList, scanDiscount, scanDiscountIds, newGoodPassList, newDiscountList, filteredDiscountList, result;
|
|
605
661
|
return _regeneratorRuntime().wrap(function _callee8$(_context8) {
|
|
606
662
|
while (1) switch (_context8.prev = _context8.next) {
|
|
607
663
|
case 0:
|
|
@@ -627,30 +683,37 @@ export var ShopDiscountImpl = /*#__PURE__*/function (_BaseModule) {
|
|
|
627
683
|
newGoodPassList = goodPassList === null || goodPassList === void 0 ? void 0 : goodPassList.filter(function (n) {
|
|
628
684
|
return !scanDiscountIds.includes(n.id);
|
|
629
685
|
});
|
|
630
|
-
newDiscountList = [].concat(_toConsumableArray(scanDiscount), _toConsumableArray(newGoodPassList || []));
|
|
631
|
-
this.
|
|
686
|
+
newDiscountList = [].concat(_toConsumableArray(scanDiscount), _toConsumableArray(newGoodPassList || [])); // 存储原始优惠券列表
|
|
687
|
+
this.store.originalDiscountList = newDiscountList;
|
|
688
|
+
_context8.next = 12;
|
|
689
|
+
return (_this$store$discount8 = this.store.discount) === null || _this$store$discount8 === void 0 ? void 0 : _this$store$discount8.setOriginalDiscountList(newDiscountList);
|
|
690
|
+
case 12:
|
|
691
|
+
// 根据当前预约时间过滤优惠券列表
|
|
692
|
+
filteredDiscountList = this.filterDiscountListByBookingTime(newDiscountList, this.store.currentBookingTime);
|
|
693
|
+
this.store.filteredDiscountList = filteredDiscountList;
|
|
694
|
+
this.setDiscountList(filteredDiscountList || []);
|
|
632
695
|
if (!((_this$store$productLi = this.store.productList) !== null && _this$store$productLi !== void 0 && _this$store$productLi.length)) {
|
|
633
|
-
_context8.next =
|
|
696
|
+
_context8.next = 19;
|
|
634
697
|
break;
|
|
635
698
|
}
|
|
636
699
|
result = this.calcDiscount(this.store.productList);
|
|
637
|
-
_context8.next =
|
|
700
|
+
_context8.next = 19;
|
|
638
701
|
return this.core.effects.emit(ShopDiscountHooks.onLoadPrepareCalcResult, result);
|
|
639
|
-
case
|
|
640
|
-
_context8.next = 16;
|
|
641
|
-
return this.core.effects.emit(ShopDiscountHooks.onLoadDiscountList, newDiscountList);
|
|
642
|
-
case 16:
|
|
702
|
+
case 19:
|
|
643
703
|
_context8.next = 21;
|
|
704
|
+
return this.core.effects.emit(ShopDiscountHooks.onLoadDiscountList, filteredDiscountList);
|
|
705
|
+
case 21:
|
|
706
|
+
_context8.next = 26;
|
|
644
707
|
break;
|
|
645
|
-
case
|
|
646
|
-
_context8.prev =
|
|
708
|
+
case 23:
|
|
709
|
+
_context8.prev = 23;
|
|
647
710
|
_context8.t0 = _context8["catch"](0);
|
|
648
711
|
console.error('[ShopDiscount] 加载准备配置出错:', _context8.t0);
|
|
649
|
-
case
|
|
712
|
+
case 26:
|
|
650
713
|
case "end":
|
|
651
714
|
return _context8.stop();
|
|
652
715
|
}
|
|
653
|
-
}, _callee8, this, [[0,
|
|
716
|
+
}, _callee8, this, [[0, 23]]);
|
|
654
717
|
}));
|
|
655
718
|
function loadPrepareConfig(_x8) {
|
|
656
719
|
return _loadPrepareConfig.apply(this, arguments);
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { DiscountModule } from '../../modules/Discount';
|
|
2
2
|
import { RulesModule } from '../../modules/Rules';
|
|
3
|
+
import { Discount } from "../../modules/Discount/types";
|
|
3
4
|
export declare enum ShopDiscountHooks {
|
|
4
5
|
onInited = "shopDiscount:onInited",
|
|
5
6
|
onDestroy = "shopDiscount:onDestroy",
|
|
@@ -22,4 +23,7 @@ export interface ShopDiscountState {
|
|
|
22
23
|
discount: DiscountModule | null;
|
|
23
24
|
rules: RulesModule | null;
|
|
24
25
|
productList: Record<string, any>[];
|
|
26
|
+
originalDiscountList: Discount[];
|
|
27
|
+
currentBookingTime: string | null;
|
|
28
|
+
filteredDiscountList: Discount[];
|
|
25
29
|
}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { Discount } from "../../modules/Discount/types";
|
|
2
2
|
export declare const uniqueById: <T>(arr: T[], key?: string) => T[];
|
|
3
|
+
export declare const isNormalProductByDurationSchedule: (item: any) => boolean;
|
|
4
|
+
export declare const isAllNormalProduct: (items: any[]) => boolean;
|
|
3
5
|
/**
|
|
4
6
|
* 获取折扣金额 基于折扣卡类型计算
|
|
5
7
|
* 商品券:直接返回商品价格
|
|
@@ -10,3 +12,56 @@ export declare const uniqueById: <T>(arr: T[], key?: string) => T[];
|
|
|
10
12
|
* @returns
|
|
11
13
|
*/
|
|
12
14
|
export declare const getDiscountAmount: (discount: Discount, total: number, price: number) => number;
|
|
15
|
+
export declare const getDiscountListAmountTotal: (discount: Discount[]) => any;
|
|
16
|
+
/**
|
|
17
|
+
* 获取折扣金额 计算每个折扣的金额
|
|
18
|
+
* @param discount
|
|
19
|
+
* @returns
|
|
20
|
+
*/
|
|
21
|
+
export declare const getDiscountListAmount: (discount: Discount[]) => any;
|
|
22
|
+
export interface ScheduleItem {
|
|
23
|
+
id: number;
|
|
24
|
+
name: string | {
|
|
25
|
+
[key: string]: string;
|
|
26
|
+
};
|
|
27
|
+
type: 'standard' | 'time-slots' | 'designation';
|
|
28
|
+
start_time: string | null;
|
|
29
|
+
end_time: string | null;
|
|
30
|
+
repeat_type: 'none' | 'daily' | 'weekly';
|
|
31
|
+
repeat_rule: {
|
|
32
|
+
end: {
|
|
33
|
+
type: 'never' | 'date' | 'occurrence';
|
|
34
|
+
end_date: string | null;
|
|
35
|
+
occurrence: number | null;
|
|
36
|
+
};
|
|
37
|
+
frequency: number;
|
|
38
|
+
excluded_date: Array<{
|
|
39
|
+
start: string;
|
|
40
|
+
end: string;
|
|
41
|
+
}>;
|
|
42
|
+
included_date: Array<{
|
|
43
|
+
start: string;
|
|
44
|
+
end: string;
|
|
45
|
+
}>;
|
|
46
|
+
frequency_date: number[];
|
|
47
|
+
} | null;
|
|
48
|
+
designation: Array<{
|
|
49
|
+
start_date: string;
|
|
50
|
+
start_time: string;
|
|
51
|
+
end_date: string;
|
|
52
|
+
end_time: string;
|
|
53
|
+
}> | null;
|
|
54
|
+
is_all: number;
|
|
55
|
+
time_slot: Array<{
|
|
56
|
+
start_time: string;
|
|
57
|
+
end_time: string;
|
|
58
|
+
}>;
|
|
59
|
+
}
|
|
60
|
+
export declare const getDateIsInSchedule: (dateTime: string, scheduleList: ScheduleItem[]) => boolean;
|
|
61
|
+
/**
|
|
62
|
+
* 根据预约时间过滤优惠券列表
|
|
63
|
+
* @param discountList 优惠券列表
|
|
64
|
+
* @param bookingTime 预约时间 (格式: YYYY-MM-DD HH:mm:ss)
|
|
65
|
+
* @returns 过滤后的优惠券列表
|
|
66
|
+
*/
|
|
67
|
+
export declare const filterDiscountListByBookingTime: (discountList: Discount[], bookingTime: string | null) => Discount[];
|