@pisell/pisellos 2.1.11 → 2.1.13

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;
@@ -49,5 +49,5 @@ export declare class Product extends BaseModule implements Module {
49
49
  getCategories(): ProductCategory[];
50
50
  setOtherParams(key: string, value: any): void;
51
51
  getOtherParams(): any;
52
- getProductType(): "duration" | "session" | "normal";
52
+ getProductType(): "normal" | "duration" | "session";
53
53
  }
@@ -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,7 @@ 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,
306
332
  resource_id: discount.id,
307
333
  title: discount.format_title,
308
334
  original_amount: product.origin_total,
@@ -444,7 +470,7 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
444
470
  }));
445
471
  }
446
472
  for (var _i = 0; _i < splitCount; _i++) {
447
- var _product$discount_lis12, _originProduct$_produ;
473
+ var _product$discount_lis12, _originProduct$_produ, _selectedDiscount$met;
448
474
  // 如果用过折扣卡,也就不存在拆分的情况了,这里直接使用上面计算出来的折扣卡
449
475
  var _selectedDiscount = selectedDiscountCard || applicableDiscounts[_i];
450
476
  // 标记优惠券为已使用
@@ -465,12 +491,13 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
465
491
  }
466
492
 
467
493
  // 计算使用折扣卡/商品券以后,单个商品的总 total
468
- 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();
494
+ var targetProductTotal = getDiscountAmount(_selectedDiscount, productOriginTotal, product.price);
469
495
  var discountType = _selectedDiscount.tag === 'product_discount_card' ? 'discount_card' : _selectedDiscount.tag;
470
496
  var discountDetail = {
471
497
  amount: new Decimal(productOriginTotal).minus(new Decimal(targetProductTotal)).toNumber(),
472
498
  type: discountType,
473
499
  discount: {
500
+ discount_card_type: _selectedDiscount === null || _selectedDiscount === void 0 || (_selectedDiscount$met = _selectedDiscount.metadata) === null || _selectedDiscount$met === void 0 ? void 0 : _selectedDiscount$met.discount_card_type,
474
501
  resource_id: _selectedDiscount.id,
475
502
  title: _selectedDiscount.format_title,
476
503
  original_amount: productOriginTotal,
@@ -314,7 +314,7 @@ export declare class BookingByStepImpl extends BaseModule implements Module {
314
314
  }[];
315
315
  setOtherData(key: string, value: any): void;
316
316
  getOtherData(key: string): any;
317
- getProductTypeById(id: number): Promise<"normal" | "duration" | "session">;
317
+ getProductTypeById(id: number): Promise<"duration" | "session" | "normal">;
318
318
  /**
319
319
  * 提供给 UI 的方法,减轻 UI 层的计算压力,UI 层只需要传递 cartItemId 和 resourceCode 即返回对应的 renderList
320
320
  *
@@ -182,6 +182,16 @@ export declare class CheckoutImpl extends BaseModule implements Module, Checkout
182
182
  * @throws 当前没有活跃订单时抛出错误
183
183
  */
184
184
  updateOrderDepositStatusAsync(isDeposit: number): Promise<void>;
185
+ /**
186
+ * 手动设置当前订单的定金金额
187
+ *
188
+ * 允许手动设置订单的定金金额,通常用于用户自定义定金支付场景
189
+ *
190
+ * @param depositAmount 定金金额,必须是有效的数字字符串,且不能超过订单总额
191
+ * @throws 当前没有活跃订单时抛出错误
192
+ * @throws 定金金额格式无效或超过订单总额时抛出错误
193
+ */
194
+ setDepositAmountAsync(depositAmount: string): Promise<void>;
185
195
  /**
186
196
  * 手动同步订单到后端
187
197
  *