@pisell/pisellos 2.0.69 → 2.0.71

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.
@@ -12,6 +12,7 @@ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol"
12
12
  function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
13
13
  import Decimal from 'decimal.js';
14
14
  import { isNormalProduct } from "../../Product/utils";
15
+ import { getDiscountAmount } from "../../../solution/ShopDiscount/utils";
15
16
 
16
17
  /**
17
18
  * @title 处理组合商品
@@ -192,8 +193,14 @@ export var getProductTotalPrice = function getProductTotalPrice(params) {
192
193
  // 不是商品券则代表折扣卡,计算打折后的价格
193
194
  // 一个商品折扣卡只能存在于一张
194
195
  if (currentValue.type !== 'good_pass') {
195
- var discountPrice = new Decimal(100).minus(currentValue.discount.percent || 0).div(100).mul(new Decimal(price || 0)).toFixed(2);
196
- price = Number(discountPrice);
196
+ var _currentValue$discoun;
197
+ price = getDiscountAmount({
198
+ tag: currentValue.type,
199
+ par_value: currentValue.discount.percent,
200
+ metadata: {
201
+ discount_card_type: currentValue === null || currentValue === void 0 || (_currentValue$discoun = currentValue.discount) === null || _currentValue$discoun === void 0 ? void 0 : _currentValue$discoun.discount_card_type
202
+ }
203
+ }, price, price);
197
204
  }
198
205
  });
199
206
  }
@@ -70,6 +70,9 @@ export interface Discount {
70
70
  limited_relation_product_data: Limitedrelationproductdata;
71
71
  balance: string;
72
72
  format_title: Formattitle;
73
+ metadata?: {
74
+ discount_card_type?: 'fixed_amount' | 'percent';
75
+ };
73
76
  product: Product;
74
77
  type: "product" | 'good_pass';
75
78
  resource_id?: number;
@@ -25,7 +25,7 @@ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol"
25
25
  function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
26
26
  import { BaseModule } from "../BaseModule";
27
27
  import { RulesHooks } from "./types";
28
- import { uniqueById } from "../../solution/ShopDiscount/utils";
28
+ import { uniqueById, getDiscountAmount } from "../../solution/ShopDiscount/utils";
29
29
  import { getProductOriginTotalPrice, getProductTotalPrice } from "../Cart/utils";
30
30
  import Decimal from 'decimal.js';
31
31
  import { isBoolean } from 'lodash-es';
@@ -189,8 +189,12 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
189
189
  });
190
190
 
191
191
  // 优惠力度排序,传进来的数据里可能有商品券,也可能有优惠券
192
- // 商品券(n.tag=good_pass)视为最优惠(免费),折扣券(n.tag=product_discount_card)按照n.par_value排序
193
- // 如果最后拍出来商品券有多个,或者说没有商品券,但是有多个相同折扣的折扣券(比如 6 折券有 3张),则按照过期时间(n.expire_time)排序
192
+ // 1. 商品券(n.tag=good_pass)视为最优惠(免费)
193
+ // 2. 折扣券(n.tag=product_discount_card)按照新的优先级排序:
194
+ // - 固定金额优先于百分比(固定金额 > 百分比)
195
+ // - 固定金额内部:金额越大越优先
196
+ // - 百分比内部:折扣越大越优先(par_value越小越优先)
197
+ // 3. 相同类型和金额的情况下,按照过期时间(n.expire_time)排序
194
198
  var sortedDiscountList = _toConsumableArray(filteredDiscountList).sort(function (a, b) {
195
199
  // 1. 商品券优先级最高
196
200
  if (a.tag === 'good_pass' && b.tag !== 'good_pass') return -1;
@@ -201,13 +205,34 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
201
205
  // 都是商品券,按照过期时间排序
202
206
  return compareByExpireTime(a, b);
203
207
  } else if (a.tag === 'product_discount_card' && b.tag === 'product_discount_card') {
204
- // 都是折扣券,按照par_value排序(折扣越大越优先,即par_value越小越优先)
205
- if (a.par_value !== b.par_value) {
206
- var valueA = new Decimal(100).minus(a.par_value || 0);
207
- var valueB = new Decimal(100).minus(b.par_value || 0);
208
- return valueA.minus(valueB).toNumber();
208
+ var _a$metadata, _b$metadata;
209
+ // 都是折扣券,按照新的优先级排序:固定金额优先于百分比
210
+ var typeA = ((_a$metadata = a.metadata) === null || _a$metadata === void 0 ? void 0 : _a$metadata.discount_card_type) || 'percent'; // 默认为百分比
211
+ var typeB = ((_b$metadata = b.metadata) === null || _b$metadata === void 0 ? void 0 : _b$metadata.discount_card_type) || 'percent'; // 默认为百分比
212
+
213
+ // 1. 固定金额优先于百分比
214
+ if (typeA === 'fixed_amount' && typeB === 'percent') return -1;
215
+ if (typeA === 'percent' && typeB === 'fixed_amount') return 1;
216
+
217
+ // 2. 都是固定金额时,金额越大越优先
218
+ if (typeA === 'fixed_amount' && typeB === 'fixed_amount') {
219
+ if (a.par_value !== b.par_value) {
220
+ var valueA = new Decimal(a.par_value || 0);
221
+ var valueB = new Decimal(b.par_value || 0);
222
+ return valueB.minus(valueA).toNumber(); // 金额大的在前
223
+ }
209
224
  }
210
- // 相同折扣的情况下,按照过期时间排序
225
+
226
+ // 3. 都是百分比时,折扣越大越优先(par_value越小越优先)
227
+ if (typeA === 'percent' && typeB === 'percent') {
228
+ if (a.par_value !== b.par_value) {
229
+ var _valueA = new Decimal(100).minus(a.par_value || 0);
230
+ var _valueB = new Decimal(100).minus(b.par_value || 0);
231
+ return _valueB.minus(_valueA).toNumber(); // 折扣大的在前
232
+ }
233
+ }
234
+
235
+ // 相同类型和金额的情况下,按照过期时间排序
211
236
  return compareByExpireTime(a, b);
212
237
  }
213
238
 
@@ -291,7 +316,7 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
291
316
 
292
317
  // 判断优惠券是否适用于该商品
293
318
  if (isAvailableProduct && isLimitedProduct) {
294
- var _discountApplicabilit;
319
+ var _discountApplicabilit, _discount$metadata;
295
320
  // 记录此优惠券适用的商品
296
321
  (_discountApplicabilit = discountApplicability.get(discount.id)) === null || _discountApplicabilit === void 0 || _discountApplicabilit.push(product.id);
297
322
 
@@ -303,6 +328,8 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
303
328
  type: discountType,
304
329
  tag: discountType,
305
330
  discount: {
331
+ discount_card_type: discount === null || discount === void 0 || (_discount$metadata = discount.metadata) === null || _discount$metadata === void 0 ? void 0 : _discount$metadata.discount_card_type,
332
+ fixed_amount: product.price,
306
333
  resource_id: discount.id,
307
334
  title: discount.format_title,
308
335
  original_amount: product.origin_total,
@@ -323,7 +350,7 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
323
350
  console.log(sortedProductList, 'sortedProductListsortedProductList');
324
351
 
325
352
  // 然后再处理应用哪些优惠券,此时只考虑filteredDiscountList中的优惠券
326
- sortedProductList.forEach(function (originProduct, i) {
353
+ sortedProductList.forEach(function (originProduct, index) {
327
354
  var _product$discount_lis4, _product$discount_lis5, _product$discount_lis7, _product$discount_lis8, _product$discount_lis9, _product$discount_lis10;
328
355
  var product = _this3.hooks.getProduct(originProduct);
329
356
  if (product !== null && product !== void 0 && product.booking_id && (_product$discount_lis4 = product.discount_list) !== null && _product$discount_lis4 !== void 0 && _product$discount_lis4.length && product !== null && product !== void 0 && (_product$discount_lis5 = product.discount_list) !== null && _product$discount_lis5 !== void 0 && _product$discount_lis5.every(function (discount) {
@@ -406,7 +433,7 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
406
433
  }))]);
407
434
  } else {
408
435
  processedProductsMap.set(product._id, [_this3.hooks.setProduct(originProduct, _objectSpread(_objectSpread({}, isManualDiscount ? {} : {
409
- _id: product._id.split('___')[0] + '___' + i,
436
+ _id: product._id.split('___')[0] + '___' + index,
410
437
  total: product.origin_total || product.total,
411
438
  price: product.price
412
439
  }), {}, {
@@ -434,10 +461,10 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
434
461
  _id: product._id.split('___')[0]
435
462
  }));
436
463
  }
437
- for (var _i = 0; _i < splitCount; _i++) {
438
- var _product$discount_lis11, _originProduct$_produ;
464
+ for (var i = 0; i < splitCount; i++) {
465
+ var _product$discount_lis11, _originProduct$_produ, _selectedDiscount$met;
439
466
  // 如果用过折扣卡,也就不存在拆分的情况了,这里直接使用上面计算出来的折扣卡
440
- var _selectedDiscount = selectedDiscountCard || applicableDiscounts[_i];
467
+ var _selectedDiscount = selectedDiscountCard || applicableDiscounts[i];
441
468
  // 标记优惠券为已使用
442
469
  usedDiscounts.set(_selectedDiscount.id, true);
443
470
 
@@ -456,12 +483,14 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
456
483
  }
457
484
 
458
485
  // 计算使用折扣卡/商品券以后,单个商品的总 total
459
- var targetProductTotal = _selectedDiscount.tag === 'good_pass' ? new Decimal(productOriginTotal).minus(new Decimal(product.price || 0)).toNumber() : new Decimal(100).minus(_selectedDiscount.par_value || 0).div(100).mul(new Decimal(productOriginTotal)).toNumber();
486
+ var targetProductTotal = getDiscountAmount(_selectedDiscount, productOriginTotal, product.price);
460
487
  var discountType = _selectedDiscount.tag === 'product_discount_card' ? 'discount_card' : _selectedDiscount.tag;
461
488
  var discountDetail = {
462
489
  amount: new Decimal(productOriginTotal).minus(new Decimal(targetProductTotal)).toNumber(),
463
490
  type: discountType,
464
491
  discount: {
492
+ discount_card_type: _selectedDiscount === null || _selectedDiscount === void 0 || (_selectedDiscount$met = _selectedDiscount.metadata) === null || _selectedDiscount$met === void 0 ? void 0 : _selectedDiscount$met.discount_card_type,
493
+ fixed_amount: new Decimal(productOriginTotal).minus(new Decimal(targetProductTotal)).toNumber(),
465
494
  resource_id: _selectedDiscount.id,
466
495
  title: _selectedDiscount.format_title,
467
496
  original_amount: productOriginTotal,
@@ -498,7 +527,7 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
498
527
  } else {
499
528
  arr.push(_this3.hooks.setProduct(originProduct, {
500
529
  discount_list: [discountDetail],
501
- _id: product._id.split('___')[0] + "___" + _selectedDiscount.id,
530
+ _id: product._id.split('___')[0] + "___" + _selectedDiscount.id + index,
502
531
  price: _selectedDiscount.tag === 'good_pass' ? 0 : product.price,
503
532
  quantity: isNeedSplit ? 1 : product.quantity,
504
533
  total: targetProductTotal,
@@ -111,7 +111,7 @@ export declare class BookingTicketImpl extends BaseModule implements Module {
111
111
  * 获取当前的客户搜索条件
112
112
  * @returns 当前搜索条件
113
113
  */
114
- getCurrentCustomerSearchParams(): Omit<import("../../modules").ShopGetCustomerListParams, "skip" | "num">;
114
+ getCurrentCustomerSearchParams(): Omit<import("../../modules").ShopGetCustomerListParams, "num" | "skip">;
115
115
  /**
116
116
  * 获取客户列表状态(包含滚动加载相关状态)
117
117
  * @returns 客户状态
@@ -1 +1,12 @@
1
+ import { Discount } from "../../modules/Discount/types";
1
2
  export declare const uniqueById: <T>(arr: T[], key?: string) => T[];
3
+ /**
4
+ * 获取折扣金额 基于折扣卡类型计算
5
+ * 商品券:直接返回商品价格
6
+ * 折扣卡:根据折扣卡类型计算 固定金额:直接返回折扣卡金额 百分比:根据折扣卡金额计算
7
+ * @param discount
8
+ * @param total
9
+ * @param price
10
+ * @returns
11
+ */
12
+ export declare const getDiscountAmount: (discount: Discount, total: number, price: number) => number;
@@ -1,7 +1,36 @@
1
+ import Decimal from "decimal.js";
1
2
  export var uniqueById = function uniqueById(arr) {
2
3
  var key = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'id';
3
4
  var seen = new Set();
4
5
  return arr.filter(function (item) {
5
6
  return !seen.has(item[key]) && seen.add(item[key]);
6
7
  });
8
+ };
9
+
10
+ /**
11
+ * 获取折扣金额 基于折扣卡类型计算
12
+ * 商品券:直接返回商品价格
13
+ * 折扣卡:根据折扣卡类型计算 固定金额:直接返回折扣卡金额 百分比:根据折扣卡金额计算
14
+ * @param discount
15
+ * @param total
16
+ * @param price
17
+ * @returns
18
+ */
19
+ export var getDiscountAmount = function getDiscountAmount(discount, total, price) {
20
+ var _discount$metadata;
21
+ // 商品券
22
+ if (discount.tag === 'good_pass') {
23
+ return new Decimal(total).minus(new Decimal(price || 0)).toNumber();
24
+ }
25
+
26
+ // 判断是否是固定金额
27
+ var isFixedAmount = (discount === null || discount === void 0 || (_discount$metadata = discount.metadata) === null || _discount$metadata === void 0 ? void 0 : _discount$metadata.discount_card_type) === 'fixed_amount';
28
+
29
+ // 固定金额 小于0时返回0
30
+ if (isFixedAmount) {
31
+ return Math.max(new Decimal(total).minus(new Decimal(discount.par_value || 0)).toNumber(), 0);
32
+ }
33
+
34
+ // 百分比:根据折扣卡金额计算
35
+ return new Decimal(100).minus(discount.par_value || 0).div(100).mul(new Decimal(total)).toNumber();
7
36
  };
@@ -44,6 +44,7 @@ __export(cartProduct_exports, {
44
44
  module.exports = __toCommonJS(cartProduct_exports);
45
45
  var import_decimal = __toESM(require("decimal.js"));
46
46
  var import_utils = require("../../Product/utils");
47
+ var import_utils2 = require("../../../solution/ShopDiscount/utils");
47
48
  var handleVariantProduct = (product) => {
48
49
  var _a;
49
50
  if (product == null ? void 0 : product.product_variant_id) {
@@ -183,9 +184,15 @@ var getProductTotalPrice = (params) => {
183
184
  }
184
185
  if (discounts == null ? void 0 : discounts.length) {
185
186
  discounts.forEach((currentValue) => {
187
+ var _a;
186
188
  if (currentValue.type !== "good_pass") {
187
- const discountPrice = new import_decimal.default(100).minus(currentValue.discount.percent || 0).div(100).mul(new import_decimal.default(price || 0)).toFixed(2);
188
- price = Number(discountPrice);
189
+ price = (0, import_utils2.getDiscountAmount)({
190
+ tag: currentValue.type,
191
+ par_value: currentValue.discount.percent,
192
+ metadata: {
193
+ discount_card_type: (_a = currentValue == null ? void 0 : currentValue.discount) == null ? void 0 : _a.discount_card_type
194
+ }
195
+ }, price, price);
189
196
  }
190
197
  });
191
198
  }
@@ -70,6 +70,9 @@ export interface Discount {
70
70
  limited_relation_product_data: Limitedrelationproductdata;
71
71
  balance: string;
72
72
  format_title: Formattitle;
73
+ metadata?: {
74
+ discount_card_type?: 'fixed_amount' | 'percent';
75
+ };
73
76
  product: Product;
74
77
  type: "product" | 'good_pass';
75
78
  resource_id?: number;
@@ -132,6 +132,7 @@ var RulesModule = class extends import_BaseModule.BaseModule {
132
132
  return !discount.isManualSelect;
133
133
  });
134
134
  const sortedDiscountList = [...filteredDiscountList].sort((a, b) => {
135
+ var _a, _b;
135
136
  if (a.tag === "good_pass" && b.tag !== "good_pass")
136
137
  return -1;
137
138
  if (b.tag === "good_pass" && a.tag !== "good_pass")
@@ -139,10 +140,25 @@ var RulesModule = class extends import_BaseModule.BaseModule {
139
140
  if (a.tag === "good_pass" && b.tag === "good_pass") {
140
141
  return compareByExpireTime(a, b);
141
142
  } else if (a.tag === "product_discount_card" && b.tag === "product_discount_card") {
142
- if (a.par_value !== b.par_value) {
143
- const valueA = new import_decimal.default(100).minus(a.par_value || 0);
144
- const valueB = new import_decimal.default(100).minus(b.par_value || 0);
145
- return valueA.minus(valueB).toNumber();
143
+ const typeA = ((_a = a.metadata) == null ? void 0 : _a.discount_card_type) || "percent";
144
+ const typeB = ((_b = b.metadata) == null ? void 0 : _b.discount_card_type) || "percent";
145
+ if (typeA === "fixed_amount" && typeB === "percent")
146
+ return -1;
147
+ if (typeA === "percent" && typeB === "fixed_amount")
148
+ return 1;
149
+ if (typeA === "fixed_amount" && typeB === "fixed_amount") {
150
+ if (a.par_value !== b.par_value) {
151
+ const valueA = new import_decimal.default(a.par_value || 0);
152
+ const valueB = new import_decimal.default(b.par_value || 0);
153
+ return valueB.minus(valueA).toNumber();
154
+ }
155
+ }
156
+ if (typeA === "percent" && typeB === "percent") {
157
+ if (a.par_value !== b.par_value) {
158
+ const valueA = new import_decimal.default(100).minus(a.par_value || 0);
159
+ const valueB = new import_decimal.default(100).minus(b.par_value || 0);
160
+ return valueB.minus(valueA).toNumber();
161
+ }
146
162
  }
147
163
  return compareByExpireTime(a, b);
148
164
  }
@@ -182,7 +198,7 @@ var RulesModule = class extends import_BaseModule.BaseModule {
182
198
  sortedProductList.forEach((originProduct) => {
183
199
  const product = this.hooks.getProduct(originProduct);
184
200
  addModeDiscount.forEach((discount) => {
185
- var _a, _b, _c;
201
+ var _a, _b, _c, _d;
186
202
  const limitedData = discount == null ? void 0 : discount.limited_relation_product_data;
187
203
  const isLimitedProduct = limitedData.type === "product_all" || limitedData.product_ids && limitedData.product_ids.includes(product.id);
188
204
  const isAvailableProduct = !((product == null ? void 0 : product.booking_id) && ((_a = product == null ? void 0 : product.discount_list) == null ? void 0 : _a.length) && ((_b = product == null ? void 0 : product.discount_list) == null ? void 0 : _b.every((discount2) => discount2.id && ["good_pass", "discount_card", "product_discount_card"].includes(discount2.tag || discount2.type))));
@@ -195,6 +211,8 @@ var RulesModule = class extends import_BaseModule.BaseModule {
195
211
  type: discountType,
196
212
  tag: discountType,
197
213
  discount: {
214
+ discount_card_type: (_d = discount == null ? void 0 : discount.metadata) == null ? void 0 : _d.discount_card_type,
215
+ fixed_amount: product.price,
198
216
  resource_id: discount.id,
199
217
  title: discount.format_title,
200
218
  original_amount: product.origin_total,
@@ -211,8 +229,8 @@ var RulesModule = class extends import_BaseModule.BaseModule {
211
229
  });
212
230
  });
213
231
  console.log(sortedProductList, "sortedProductListsortedProductList");
214
- sortedProductList.forEach((originProduct, i) => {
215
- var _a, _b, _c, _d, _e, _f, _g, _h;
232
+ sortedProductList.forEach((originProduct, index) => {
233
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i;
216
234
  const product = this.hooks.getProduct(originProduct);
217
235
  if ((product == null ? void 0 : product.booking_id) && ((_a = product.discount_list) == null ? void 0 : _a.length) && ((_b = product == null ? void 0 : product.discount_list) == null ? void 0 : _b.every((discount) => discount.id && ["good_pass", "discount_card", "product_discount_card"].includes(discount.tag || discount.type)))) {
218
236
  processedProductsMap.set(product._id, [originProduct]);
@@ -279,7 +297,7 @@ var RulesModule = class extends import_BaseModule.BaseModule {
279
297
  product._id,
280
298
  [this.hooks.setProduct(originProduct, {
281
299
  ...isManualDiscount ? {} : {
282
- _id: product._id.split("___")[0] + "___" + i,
300
+ _id: product._id.split("___")[0] + "___" + index,
283
301
  total: product.origin_total || product.total,
284
302
  price: product.price
285
303
  },
@@ -302,8 +320,8 @@ var RulesModule = class extends import_BaseModule.BaseModule {
302
320
  _id: product._id.split("___")[0]
303
321
  }));
304
322
  }
305
- for (let i2 = 0; i2 < splitCount; i2++) {
306
- const selectedDiscount2 = selectedDiscountCard || applicableDiscounts[i2];
323
+ for (let i = 0; i < splitCount; i++) {
324
+ const selectedDiscount2 = selectedDiscountCard || applicableDiscounts[i];
307
325
  usedDiscounts.set(selectedDiscount2.id, true);
308
326
  const appliedProducts = appliedDiscountProducts.get(selectedDiscount2.id) || [];
309
327
  let productOriginTotal = product.origin_total || product.total || 0;
@@ -313,12 +331,14 @@ var RulesModule = class extends import_BaseModule.BaseModule {
313
331
  if (Number(((_h = originProduct == null ? void 0 : originProduct._productInit) == null ? void 0 : _h.original_price) || 0) > 0 && product.origin_total && product.total && product.origin_total !== product.total) {
314
332
  productOriginTotal = product.total;
315
333
  }
316
- const targetProductTotal = selectedDiscount2.tag === "good_pass" ? new import_decimal.default(productOriginTotal).minus(new import_decimal.default(product.price || 0)).toNumber() : new import_decimal.default(100).minus(selectedDiscount2.par_value || 0).div(100).mul(new import_decimal.default(productOriginTotal)).toNumber();
334
+ const targetProductTotal = (0, import_utils.getDiscountAmount)(selectedDiscount2, productOriginTotal, product.price);
317
335
  const discountType = selectedDiscount2.tag === "product_discount_card" ? "discount_card" : selectedDiscount2.tag;
318
336
  const discountDetail = {
319
337
  amount: new import_decimal.default(productOriginTotal).minus(new import_decimal.default(targetProductTotal)).toNumber(),
320
338
  type: discountType,
321
339
  discount: {
340
+ discount_card_type: (_i = selectedDiscount2 == null ? void 0 : selectedDiscount2.metadata) == null ? void 0 : _i.discount_card_type,
341
+ fixed_amount: new import_decimal.default(productOriginTotal).minus(new import_decimal.default(targetProductTotal)).toNumber(),
322
342
  resource_id: selectedDiscount2.id,
323
343
  title: selectedDiscount2.format_title,
324
344
  original_amount: productOriginTotal,
@@ -350,7 +370,7 @@ var RulesModule = class extends import_BaseModule.BaseModule {
350
370
  } else {
351
371
  arr.push(this.hooks.setProduct(originProduct, {
352
372
  discount_list: [discountDetail],
353
- _id: product._id.split("___")[0] + "___" + selectedDiscount2.id,
373
+ _id: product._id.split("___")[0] + "___" + selectedDiscount2.id + index,
354
374
  price: selectedDiscount2.tag === "good_pass" ? 0 : product.price,
355
375
  quantity: isNeedSplit ? 1 : product.quantity,
356
376
  total: targetProductTotal,
@@ -111,7 +111,7 @@ export declare class BookingTicketImpl extends BaseModule implements Module {
111
111
  * 获取当前的客户搜索条件
112
112
  * @returns 当前搜索条件
113
113
  */
114
- getCurrentCustomerSearchParams(): Omit<import("../../modules").ShopGetCustomerListParams, "skip" | "num">;
114
+ getCurrentCustomerSearchParams(): Omit<import("../../modules").ShopGetCustomerListParams, "num" | "skip">;
115
115
  /**
116
116
  * 获取客户列表状态(包含滚动加载相关状态)
117
117
  * @returns 客户状态
@@ -1 +1,12 @@
1
+ import { Discount } from "../../modules/Discount/types";
1
2
  export declare const uniqueById: <T>(arr: T[], key?: string) => T[];
3
+ /**
4
+ * 获取折扣金额 基于折扣卡类型计算
5
+ * 商品券:直接返回商品价格
6
+ * 折扣卡:根据折扣卡类型计算 固定金额:直接返回折扣卡金额 百分比:根据折扣卡金额计算
7
+ * @param discount
8
+ * @param total
9
+ * @param price
10
+ * @returns
11
+ */
12
+ export declare const getDiscountAmount: (discount: Discount, total: number, price: number) => number;
@@ -1,6 +1,8 @@
1
+ var __create = Object.create;
1
2
  var __defProp = Object.defineProperty;
2
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
4
6
  var __hasOwnProp = Object.prototype.hasOwnProperty;
5
7
  var __export = (target, all) => {
6
8
  for (var name in all)
@@ -14,19 +16,41 @@ var __copyProps = (to, from, except, desc) => {
14
16
  }
15
17
  return to;
16
18
  };
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
+ // If the importer is in node compatibility mode or this is not an ESM
21
+ // file that has been converted to a CommonJS file using a Babel-
22
+ // compatible transform (i.e. "__esModule" has not been set), then set
23
+ // "default" to the CommonJS "module.exports" for node compatibility.
24
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
+ mod
26
+ ));
17
27
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
28
 
19
29
  // src/solution/ShopDiscount/utils.ts
20
30
  var utils_exports = {};
21
31
  __export(utils_exports, {
32
+ getDiscountAmount: () => getDiscountAmount,
22
33
  uniqueById: () => uniqueById
23
34
  });
24
35
  module.exports = __toCommonJS(utils_exports);
36
+ var import_decimal = __toESM(require("decimal.js"));
25
37
  var uniqueById = (arr, key = "id") => {
26
38
  const seen = /* @__PURE__ */ new Set();
27
39
  return arr.filter((item) => !seen.has(item[key]) && seen.add(item[key]));
28
40
  };
41
+ var getDiscountAmount = (discount, total, price) => {
42
+ var _a;
43
+ if (discount.tag === "good_pass") {
44
+ return new import_decimal.default(total).minus(new import_decimal.default(price || 0)).toNumber();
45
+ }
46
+ const isFixedAmount = ((_a = discount == null ? void 0 : discount.metadata) == null ? void 0 : _a.discount_card_type) === "fixed_amount";
47
+ if (isFixedAmount) {
48
+ return Math.max(new import_decimal.default(total).minus(new import_decimal.default(discount.par_value || 0)).toNumber(), 0);
49
+ }
50
+ return new import_decimal.default(100).minus(discount.par_value || 0).div(100).mul(new import_decimal.default(total)).toNumber();
51
+ };
29
52
  // Annotate the CommonJS export names for ESM import in node:
30
53
  0 && (module.exports = {
54
+ getDiscountAmount,
31
55
  uniqueById
32
56
  });
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "private": false,
3
3
  "name": "@pisell/pisellos",
4
- "version": "2.0.69",
4
+ "version": "2.0.71",
5
5
  "description": "一个可扩展的前端模块化SDK框架,支持插件系统",
6
6
  "main": "dist/index.js",
7
7
  "types": "dist/index.d.ts",