@pisell/pisellos 0.0.23 → 0.0.25

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 @@ export declare class AccountListModule extends BaseModule implements Module {
12
12
  initialize(core: PisellCore, options?: ModuleOptions): Promise<void>;
13
13
  addAccount(account: Account): Promise<void>;
14
14
  updateAccount(id: string, updates: Account): Promise<void>;
15
+ updateAccountListById(id: string | number, updates: Account): Promise<void>;
15
16
  removeAccount(id: string): Promise<void>;
16
17
  getAccounts(): AccountModule[];
17
18
  getAccount(id: string): AccountModule | null;
@@ -200,21 +200,48 @@ export var AccountListModule = /*#__PURE__*/function (_BaseModule) {
200
200
  return updateAccount;
201
201
  }()
202
202
  }, {
203
- key: "removeAccount",
203
+ key: "updateAccountListById",
204
204
  value: function () {
205
- var _removeAccount = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee4(id) {
206
- var index;
205
+ var _updateAccountListById = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee4(id, updates) {
207
206
  return _regeneratorRuntime().wrap(function _callee4$(_context4) {
208
207
  while (1) switch (_context4.prev = _context4.next) {
209
208
  case 0:
210
- _context4.prev = 0;
209
+ this.store.accountList = this.store.accountList.map(function (account) {
210
+ if (account.id === id) {
211
+ return updates;
212
+ }
213
+ return account;
214
+ });
215
+ this.core.effects.emit("".concat(this.name, ":changed"), {
216
+ value: this.store.accountList
217
+ });
218
+ case 2:
219
+ case "end":
220
+ return _context4.stop();
221
+ }
222
+ }, _callee4, this);
223
+ }));
224
+ function updateAccountListById(_x6, _x7) {
225
+ return _updateAccountListById.apply(this, arguments);
226
+ }
227
+ return updateAccountListById;
228
+ }()
229
+ }, {
230
+ key: "removeAccount",
231
+ value: function () {
232
+ var _removeAccount = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee5(id) {
233
+ var index;
234
+ return _regeneratorRuntime().wrap(function _callee5$(_context5) {
235
+ while (1) switch (_context5.prev = _context5.next) {
236
+ case 0:
237
+ _context5.prev = 0;
211
238
  this.store.isLoading = true;
212
239
  this.store.error = null;
213
240
  index = this.store.accounts.findIndex(function (a) {
214
241
  return a.getId() === id;
215
242
  });
216
243
  if (!(index === -1)) {
217
- _context4.next = 6;
244
+ _context5.next = 6;
218
245
  break;
219
246
  }
220
247
  throw new Error("Account with id ".concat(id, " not found"));
@@ -224,28 +251,28 @@ export var AccountListModule = /*#__PURE__*/function (_BaseModule) {
224
251
  this.store.accountList = this.store.accountList.filter(function (account) {
225
252
  return account.id !== id;
226
253
  });
227
- _context4.next = 11;
254
+ _context5.next = 11;
228
255
  return this.core.effects.emit(AccountListHooks.OnAccountListUpdate, this.store);
229
256
  case 11:
230
- _context4.next = 18;
257
+ _context5.next = 18;
231
258
  break;
232
259
  case 13:
233
- _context4.prev = 13;
234
- _context4.t0 = _context4["catch"](0);
235
- this.store.error = _context4.t0 instanceof Error ? _context4.t0.message : 'Failed to remove account';
236
- _context4.next = 18;
260
+ _context5.prev = 13;
261
+ _context5.t0 = _context5["catch"](0);
262
+ this.store.error = _context5.t0 instanceof Error ? _context5.t0.message : 'Failed to remove account';
263
+ _context5.next = 18;
237
264
  return this.core.effects.emit(AccountListHooks.OnAccountListError, this.store.error);
238
265
  case 18:
239
- _context4.prev = 18;
266
+ _context5.prev = 18;
240
267
  this.store.isLoading = false;
241
- return _context4.finish(18);
268
+ return _context5.finish(18);
242
269
  case 21:
243
270
  case "end":
244
- return _context4.stop();
271
+ return _context5.stop();
245
272
  }
246
- }, _callee4, this, [[0, 13, 18, 21]]);
273
+ }, _callee5, this, [[0, 13, 18, 21]]);
247
274
  }));
248
- function removeAccount(_x6) {
275
+ function removeAccount(_x8) {
249
276
  return _removeAccount.apply(this, arguments);
250
277
  }
251
278
  return removeAccount;
@@ -265,34 +292,34 @@ export var AccountListModule = /*#__PURE__*/function (_BaseModule) {
265
292
  }, {
266
293
  key: "clearAccounts",
267
294
  value: function () {
268
- var _clearAccounts = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee5() {
269
- return _regeneratorRuntime().wrap(function _callee5$(_context5) {
270
- while (1) switch (_context5.prev = _context5.next) {
295
+ var _clearAccounts = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee6() {
296
+ return _regeneratorRuntime().wrap(function _callee6$(_context6) {
297
+ while (1) switch (_context6.prev = _context6.next) {
271
298
  case 0:
272
- _context5.prev = 0;
299
+ _context6.prev = 0;
273
300
  this.store.isLoading = true;
274
301
  this.store.error = null;
275
302
  this.store.accounts = [];
276
- _context5.next = 6;
303
+ _context6.next = 6;
277
304
  return this.core.effects.emit(AccountListHooks.OnAccountListUpdate, this.store);
278
305
  case 6:
279
- _context5.next = 13;
306
+ _context6.next = 13;
280
307
  break;
281
308
  case 8:
282
- _context5.prev = 8;
283
- _context5.t0 = _context5["catch"](0);
284
- this.store.error = _context5.t0 instanceof Error ? _context5.t0.message : 'Failed to clear accounts';
285
- _context5.next = 13;
309
+ _context6.prev = 8;
310
+ _context6.t0 = _context6["catch"](0);
311
+ this.store.error = _context6.t0 instanceof Error ? _context6.t0.message : 'Failed to clear accounts';
312
+ _context6.next = 13;
286
313
  return this.core.effects.emit(AccountListHooks.OnAccountListError, this.store.error);
287
314
  case 13:
288
- _context5.prev = 13;
315
+ _context6.prev = 13;
289
316
  this.store.isLoading = false;
290
- return _context5.finish(13);
317
+ return _context6.finish(13);
291
318
  case 16:
292
319
  case "end":
293
- return _context5.stop();
320
+ return _context6.stop();
294
321
  }
295
- }, _callee5, this, [[0, 8, 13, 16]]);
322
+ }, _callee6, this, [[0, 8, 13, 16]]);
296
323
  }));
297
324
  function clearAccounts() {
298
325
  return _clearAccounts.apply(this, arguments);
@@ -23,7 +23,7 @@ export declare class DiscountModule extends BaseModule implements Module, Discou
23
23
  filterEnabledDiscountList(discountList: Discount[]): Discount[];
24
24
  uniqueByProductId(discountList: Discount[]): Discount[];
25
25
  filterDiscountListByProductIds(discountList: Discount[], productIds: number[]): Discount[];
26
- calcDiscountApplicableProductTotalPrice(discount: Discount): number;
26
+ calcDiscountApplicableProductTotalPrice(discount: Discount): number | undefined;
27
27
  destroy(): Promise<void>;
28
28
  clear(): Promise<void>;
29
29
  storeChange(): void;
@@ -193,13 +193,15 @@ export var DiscountModule = /*#__PURE__*/function (_BaseModule) {
193
193
  }, {
194
194
  key: "calcDiscountApplicableProductTotalPrice",
195
195
  value: function calcDiscountApplicableProductTotalPrice(discount) {
196
+ if (discount !== null && discount !== void 0 && discount.savedAmount) {
197
+ return (discount === null || discount === void 0 ? void 0 : discount.savedAmount) || 0;
198
+ }
196
199
  if (discount.appliedProductDetails) {
197
200
  return discount.appliedProductDetails.reduce(function (total, product) {
198
201
  var price = Number(product === null || product === void 0 ? void 0 : product.amount) || 0;
199
202
  return total + price;
200
203
  }, 0);
201
204
  }
202
- return (discount === null || discount === void 0 ? void 0 : discount.savedAmount) || 0;
203
205
  }
204
206
  }, {
205
207
  key: "destroy",
@@ -205,10 +205,19 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
205
205
  sortedProductList.forEach(function (originProduct) {
206
206
  var product = _this3.hooks.getProduct(originProduct);
207
207
  addModeDiscount.forEach(function (discount) {
208
+ var _product$discount_lis, _product$discount_lis2;
208
209
  var limitedData = discount === null || discount === void 0 ? void 0 : discount.limited_relation_product_data;
209
210
 
211
+ // 是符合折扣的商品
212
+ var isLimitedProduct = limitedData.type === "product_all" || limitedData.product_ids && limitedData.product_ids.includes(product.id);
213
+
214
+ // 编辑的商品 使用了优惠券不可用
215
+ var isAvailableProduct = !(product !== null && product !== void 0 && product.booking_id && product !== null && product !== void 0 && (_product$discount_lis = product.discount_list) !== null && _product$discount_lis !== void 0 && _product$discount_lis.length && product !== null && product !== void 0 && (_product$discount_lis2 = product.discount_list) !== null && _product$discount_lis2 !== void 0 && _product$discount_lis2.every(function (discount) {
216
+ return discount.id;
217
+ }));
218
+
210
219
  // 判断优惠券是否适用于该商品
211
- if (!(product !== null && product !== void 0 && product.booking_id) && (limitedData.type === "product_all" || limitedData.product_ids && limitedData.product_ids.includes(product.id))) {
220
+ if (isAvailableProduct && isLimitedProduct) {
212
221
  var _discountApplicabilit;
213
222
  // 记录此优惠券适用的商品
214
223
  (_discountApplicabilit = discountApplicability.get(discount.id)) === null || _discountApplicabilit === void 0 || _discountApplicabilit.push(product.id);
@@ -231,9 +240,11 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
231
240
 
232
241
  // 然后再处理应用哪些优惠券,此时只考虑filteredDiscountList中的优惠券
233
242
  sortedProductList.forEach(function (originProduct) {
234
- var _product$discount_lis;
243
+ var _product$discount_lis3, _product$discount_lis4, _product$discount_lis5;
235
244
  var product = _this3.hooks.getProduct(originProduct);
236
- if (product !== null && product !== void 0 && product.booking_id) {
245
+ if (product !== null && product !== void 0 && product.booking_id && (_product$discount_lis3 = product.discount_list) !== null && _product$discount_lis3 !== void 0 && _product$discount_lis3.length && product !== null && product !== void 0 && (_product$discount_lis4 = product.discount_list) !== null && _product$discount_lis4 !== void 0 && _product$discount_lis4.every(function (discount) {
246
+ return discount.id;
247
+ })) {
237
248
  processedProductsMap.set(product._id, originProduct);
238
249
  return;
239
250
  }
@@ -257,7 +268,7 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
257
268
  var selectedDiscount = applicableDiscounts[0];
258
269
 
259
270
  // 如果是手动折扣,则不适用优惠券
260
- var isManualDiscount = typeof product.isManualDiscount === "boolean" ? product.isManualDiscount : product.total != product.origin_total && !((_product$discount_lis = product.discount_list) !== null && _product$discount_lis !== void 0 && _product$discount_lis.length);
271
+ var isManualDiscount = typeof product.isManualDiscount === "boolean" ? product.isManualDiscount : product.total != product.origin_total && !((_product$discount_lis5 = product.discount_list) !== null && _product$discount_lis5 !== void 0 && _product$discount_lis5.length);
261
272
 
262
273
  // 勾选时覆盖手动折扣
263
274
  if (options !== null && options !== void 0 && options.discountId && (options === null || options === void 0 ? void 0 : options.discountId) === (selectedDiscount === null || selectedDiscount === void 0 ? void 0 : selectedDiscount.id)) {
@@ -274,6 +285,9 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
274
285
  })));
275
286
  return;
276
287
  }
288
+ if (applicableDiscounts.length && product.booking_id && typeof selectedDiscount.isManualSelect === 'undefined') {
289
+ return;
290
+ }
277
291
 
278
292
  // 标记优惠券为已使用
279
293
  usedDiscounts.set(selectedDiscount.id, true);
@@ -331,7 +345,6 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
331
345
  // 如果此优惠券被明确设置为不选中,保持其状态,但正确设置isAvailable
332
346
  if (typeof discount.isSelected === "boolean" && discount.isSelected === false && discount.isManualSelect) {
333
347
  return _objectSpread(_objectSpread({}, discount), {}, {
334
- isUsed: false,
335
348
  isSelected: false,
336
349
  isAvailable: isAvailable,
337
350
  // 正确设置可用性
@@ -344,7 +357,6 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
344
357
  }
345
358
  if (usedDiscounts.get(discount.id)) {
346
359
  return _objectSpread(_objectSpread({}, discount), {}, {
347
- isUsed: true,
348
360
  isSelected: true,
349
361
  // 标记为可用,因为它已被应用
350
362
  isAvailable: true,
@@ -359,7 +371,7 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
359
371
  var isSelected = typeof discount.isSelected === "boolean" ? discount.isSelected : undefined;
360
372
 
361
373
  // 如果是可用的 并且没有手动标记 则设置为选中
362
- if (isAvailable && !discount.isManualSelect) {
374
+ if (isAvailable && appliedProductDetails.length && !discount.isManualSelect) {
363
375
  isSelected = true;
364
376
  } else if (!appliedProductDetails.length) {
365
377
  isSelected = false;
@@ -485,9 +485,10 @@ export var BookingByStepImpl = /*#__PURE__*/function (_BaseModule) {
485
485
  case 0:
486
486
  account = this.store.accountList.getAccount(accountId);
487
487
  if (!account) {
488
- _context11.next = 7;
488
+ _context11.next = 8;
489
489
  break;
490
490
  }
491
+ this.store.accountList.updateAccountListById(account.getId(), accountInfo);
491
492
  account.setAccountInfo(accountInfo);
492
493
  // 然后去购物车,把原先关联了 holder_id 为 accountId 的商品,替换为 holder_id = accountInfo.id
493
494
  cartItems = this.store.cart.getItems();
@@ -499,11 +500,11 @@ export var BookingByStepImpl = /*#__PURE__*/function (_BaseModule) {
499
500
  });
500
501
  }
501
502
  });
502
- _context11.next = 8;
503
+ _context11.next = 9;
503
504
  break;
504
- case 7:
505
- throw new Error("\u6CA1\u6709\u627E\u5230".concat(accountId, "\u8D26\u6237"));
506
505
  case 8:
506
+ throw new Error("\u6CA1\u6709\u627E\u5230".concat(accountId, "\u8D26\u6237"));
507
+ case 9:
507
508
  case "end":
508
509
  return _context11.stop();
509
510
  }
@@ -235,6 +235,7 @@ export var ShopDiscountImpl = /*#__PURE__*/function (_BaseModule) {
235
235
  }, {
236
236
  key: "calcDiscount",
237
237
  value: function calcDiscount(productList, options) {
238
+ this.store.productList = productList;
238
239
  var rulesModule = this.core.getModule("".concat(this.name, "_rules"));
239
240
  if (!rulesModule) {
240
241
  return {
@@ -252,7 +253,7 @@ export var ShopDiscountImpl = /*#__PURE__*/function (_BaseModule) {
252
253
  newProductList = _ref.productList,
253
254
  newDiscountList = _ref.discountList;
254
255
  if (newDiscountList) {
255
- this.setDiscountList(newDiscountList);
256
+ newDiscountList = this.setDiscountList(newDiscountList);
256
257
  }
257
258
  return {
258
259
  productList: newProductList || productList,
@@ -275,8 +276,7 @@ export var ShopDiscountImpl = /*#__PURE__*/function (_BaseModule) {
275
276
  return _objectSpread(_objectSpread({}, discount), {}, {
276
277
  isSelected: isSelected,
277
278
  // 手动设置不使用
278
- isManualSelect: !isSelected,
279
- isUsed: isSelected
279
+ isManualSelect: !isSelected
280
280
  });
281
281
  }
282
282
  return discount;
@@ -423,47 +423,39 @@ export var ShopDiscountImpl = /*#__PURE__*/function (_BaseModule) {
423
423
  }() // 设置优惠券列表
424
424
  }, {
425
425
  key: "setDiscountList",
426
- value: function () {
427
- var _setDiscountList = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee7(discountList) {
428
- var _this$store$discount5;
429
- var productList, editModeDiscountList, newDiscountList;
430
- return _regeneratorRuntime().wrap(function _callee7$(_context7) {
431
- while (1) switch (_context7.prev = _context7.next) {
432
- case 0:
433
- productList = this.store.productList || [];
434
- editModeDiscountList = [];
435
- productList.forEach(function (item) {
436
- if (item.booking_id) {
437
- editModeDiscountList.push.apply(editModeDiscountList, _toConsumableArray((item.discount_list || []).map(function (item) {
438
- return _objectSpread(_objectSpread({}, item), {}, {
439
- isEditMode: true,
440
- limited_relation_product_data: {},
441
- savedAmount: item.amount,
442
- isAvailable: true,
443
- id: item.discount.resource_id,
444
- format_title: item.discount.title,
445
- isDisabled: true,
446
- isSelected: true,
447
- product_id: item.discount.product_id
448
- });
449
- })));
450
- }
451
- });
452
- newDiscountList = uniqueById([].concat(editModeDiscountList, _toConsumableArray(discountList)), "product_id");
453
- (_this$store$discount5 = this.store.discount) === null || _this$store$discount5 === void 0 || _this$store$discount5.setDiscountList(newDiscountList);
454
- _context7.next = 7;
455
- return this.emitDiscountListChange(newDiscountList);
456
- case 7:
457
- case "end":
458
- return _context7.stop();
459
- }
460
- }, _callee7, this);
461
- }));
462
- function setDiscountList(_x6) {
463
- return _setDiscountList.apply(this, arguments);
464
- }
465
- return setDiscountList;
466
- }() // 获取优惠券列表
426
+ value: function setDiscountList(discountList) {
427
+ var _this$store$discount5;
428
+ var productList = this.store.productList || [];
429
+ var editModeDiscountList = [];
430
+ productList.forEach(function (item) {
431
+ if (item.booking_id) {
432
+ (item.discount_list || []).forEach(function (discount) {
433
+ if (discount.id) {
434
+ var _discount$discount, _discount$discount2, _discount$discount3;
435
+ editModeDiscountList.push(_objectSpread(_objectSpread({}, discount), {}, {
436
+ isEditMode: true,
437
+ limited_relation_product_data: {},
438
+ savedAmount: discount.amount,
439
+ isAvailable: true,
440
+ id: ((_discount$discount = discount.discount) === null || _discount$discount === void 0 ? void 0 : _discount$discount.resource_id) || discount.id,
441
+ format_title: ((_discount$discount2 = discount.discount) === null || _discount$discount2 === void 0 ? void 0 : _discount$discount2.title) || discount.format_title,
442
+ isDisabled: true,
443
+ isSelected: true,
444
+ product_id: ((_discount$discount3 = discount.discount) === null || _discount$discount3 === void 0 ? void 0 : _discount$discount3.product_id) || discount.product_id
445
+ }));
446
+ }
447
+ });
448
+ }
449
+ });
450
+ var newDiscountList = uniqueById([].concat(editModeDiscountList, _toConsumableArray(discountList.filter(function (item) {
451
+ return !item.isDisabled;
452
+ }))), "product_id");
453
+ (_this$store$discount5 = this.store.discount) === null || _this$store$discount5 === void 0 || _this$store$discount5.setDiscountList(newDiscountList);
454
+ this.emitDiscountListChange(newDiscountList);
455
+ return newDiscountList;
456
+ }
457
+
458
+ // 获取优惠券列表
467
459
  }, {
468
460
  key: "getDiscountList",
469
461
  value: function getDiscountList() {
@@ -475,35 +467,35 @@ export var ShopDiscountImpl = /*#__PURE__*/function (_BaseModule) {
475
467
  }, {
476
468
  key: "getCustomerWallet",
477
469
  value: function () {
478
- var _getCustomerWallet = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee8(id) {
470
+ var _getCustomerWallet = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee7(id) {
479
471
  var result, _result$data, wallet_pass_list, customer;
480
- return _regeneratorRuntime().wrap(function _callee8$(_context8) {
481
- while (1) switch (_context8.prev = _context8.next) {
472
+ return _regeneratorRuntime().wrap(function _callee7$(_context7) {
473
+ while (1) switch (_context7.prev = _context7.next) {
482
474
  case 0:
483
- _context8.prev = 0;
484
- _context8.next = 3;
475
+ _context7.prev = 0;
476
+ _context7.next = 3;
485
477
  return this.request.get("/customer/info/wallet/".concat(id), {
486
478
  wallet_pass_tags: ["good_pass"]
487
479
  });
488
480
  case 3:
489
- result = _context8.sent;
481
+ result = _context7.sent;
490
482
  if (result !== null && result !== void 0 && result.data) {
491
483
  _result$data = result.data, wallet_pass_list = _result$data.wallet_pass_list, customer = _objectWithoutProperties(_result$data, _excluded);
492
484
  this.setCustomer(customer);
493
485
  }
494
- _context8.next = 10;
486
+ _context7.next = 10;
495
487
  break;
496
488
  case 7:
497
- _context8.prev = 7;
498
- _context8.t0 = _context8["catch"](0);
499
- console.error("[ShopDiscount] 获取客户钱包信息出错:", _context8.t0);
489
+ _context7.prev = 7;
490
+ _context7.t0 = _context7["catch"](0);
491
+ console.error("[ShopDiscount] 获取客户钱包信息出错:", _context7.t0);
500
492
  case 10:
501
493
  case "end":
502
- return _context8.stop();
494
+ return _context7.stop();
503
495
  }
504
- }, _callee8, this, [[0, 7]]);
496
+ }, _callee7, this, [[0, 7]]);
505
497
  }));
506
- function getCustomerWallet(_x7) {
498
+ function getCustomerWallet(_x6) {
507
499
  return _getCustomerWallet.apply(this, arguments);
508
500
  }
509
501
  return getCustomerWallet;
@@ -511,48 +503,48 @@ export var ShopDiscountImpl = /*#__PURE__*/function (_BaseModule) {
511
503
  }, {
512
504
  key: "loadPrepareConfig",
513
505
  value: function () {
514
- var _loadPrepareConfig = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee9(params) {
506
+ var _loadPrepareConfig = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee8(params) {
515
507
  var _this$getCustomer2, _this$store$discount7, _this$store$productLi, customerId, goodPassList, result;
516
- return _regeneratorRuntime().wrap(function _callee9$(_context9) {
517
- while (1) switch (_context9.prev = _context9.next) {
508
+ return _regeneratorRuntime().wrap(function _callee8$(_context8) {
509
+ while (1) switch (_context8.prev = _context8.next) {
518
510
  case 0:
519
- _context9.prev = 0;
511
+ _context8.prev = 0;
520
512
  customerId = params.customerId || ((_this$getCustomer2 = this.getCustomer()) === null || _this$getCustomer2 === void 0 ? void 0 : _this$getCustomer2.id); // if (customerId === 1 || !customerId) {
521
513
  // return
522
514
  // }
523
- _context9.next = 4;
515
+ _context8.next = 4;
524
516
  return (_this$store$discount7 = this.store.discount) === null || _this$store$discount7 === void 0 ? void 0 : _this$store$discount7.loadPrepareConfig({
525
517
  customer_id: customerId,
526
518
  action: "create",
527
519
  with_good_pass: 1
528
520
  });
529
521
  case 4:
530
- goodPassList = _context9.sent;
522
+ goodPassList = _context8.sent;
531
523
  this.setDiscountList(goodPassList || []);
532
524
  if (!((_this$store$productLi = this.store.productList) !== null && _this$store$productLi !== void 0 && _this$store$productLi.length)) {
533
- _context9.next = 10;
525
+ _context8.next = 10;
534
526
  break;
535
527
  }
536
528
  result = this.calcDiscount(this.store.productList);
537
- _context9.next = 10;
529
+ _context8.next = 10;
538
530
  return this.core.effects.emit(ShopDiscountHooks.onLoadPrepareCalcResult, result);
539
531
  case 10:
540
- _context9.next = 12;
532
+ _context8.next = 12;
541
533
  return this.core.effects.emit(ShopDiscountHooks.onLoadDiscountList, goodPassList);
542
534
  case 12:
543
- _context9.next = 17;
535
+ _context8.next = 17;
544
536
  break;
545
537
  case 14:
546
- _context9.prev = 14;
547
- _context9.t0 = _context9["catch"](0);
548
- console.error("[ShopDiscount] 加载准备配置出错:", _context9.t0);
538
+ _context8.prev = 14;
539
+ _context8.t0 = _context8["catch"](0);
540
+ console.error("[ShopDiscount] 加载准备配置出错:", _context8.t0);
549
541
  case 17:
550
542
  case "end":
551
- return _context9.stop();
543
+ return _context8.stop();
552
544
  }
553
- }, _callee9, this, [[0, 14]]);
545
+ }, _callee8, this, [[0, 14]]);
554
546
  }));
555
- function loadPrepareConfig(_x8) {
547
+ function loadPrepareConfig(_x7) {
556
548
  return _loadPrepareConfig.apply(this, arguments);
557
549
  }
558
550
  return loadPrepareConfig;
@@ -12,6 +12,7 @@ export declare class AccountListModule extends BaseModule implements Module {
12
12
  initialize(core: PisellCore, options?: ModuleOptions): Promise<void>;
13
13
  addAccount(account: Account): Promise<void>;
14
14
  updateAccount(id: string, updates: Account): Promise<void>;
15
+ updateAccountListById(id: string | number, updates: Account): Promise<void>;
15
16
  removeAccount(id: string): Promise<void>;
16
17
  getAccounts(): AccountModule[];
17
18
  getAccount(id: string): AccountModule | null;
@@ -109,6 +109,15 @@ var AccountListModule = class extends import_BaseModule.BaseModule {
109
109
  this.store.isLoading = false;
110
110
  }
111
111
  }
112
+ async updateAccountListById(id, updates) {
113
+ this.store.accountList = this.store.accountList.map((account) => {
114
+ if (account.id === id) {
115
+ return updates;
116
+ }
117
+ return account;
118
+ });
119
+ this.core.effects.emit(`${this.name}:changed`, { value: this.store.accountList });
120
+ }
112
121
  async removeAccount(id) {
113
122
  try {
114
123
  this.store.isLoading = true;
@@ -23,7 +23,7 @@ export declare class DiscountModule extends BaseModule implements Module, Discou
23
23
  filterEnabledDiscountList(discountList: Discount[]): Discount[];
24
24
  uniqueByProductId(discountList: Discount[]): Discount[];
25
25
  filterDiscountListByProductIds(discountList: Discount[], productIds: number[]): Discount[];
26
- calcDiscountApplicableProductTotalPrice(discount: Discount): number;
26
+ calcDiscountApplicableProductTotalPrice(discount: Discount): number | undefined;
27
27
  destroy(): Promise<void>;
28
28
  clear(): Promise<void>;
29
29
  storeChange(): void;
@@ -107,13 +107,15 @@ var DiscountModule = class extends import_BaseModule.BaseModule {
107
107
  });
108
108
  }
109
109
  calcDiscountApplicableProductTotalPrice(discount) {
110
+ if (discount == null ? void 0 : discount.savedAmount) {
111
+ return (discount == null ? void 0 : discount.savedAmount) || 0;
112
+ }
110
113
  if (discount.appliedProductDetails) {
111
114
  return discount.appliedProductDetails.reduce((total, product) => {
112
115
  const price = Number(product == null ? void 0 : product.amount) || 0;
113
116
  return total + price;
114
117
  }, 0);
115
118
  }
116
- return (discount == null ? void 0 : discount.savedAmount) || 0;
117
119
  }
118
120
  async destroy() {
119
121
  this.store.discountList = [];
@@ -130,10 +130,12 @@ var RulesModule = class extends import_BaseModule.BaseModule {
130
130
  sortedProductList.forEach((originProduct) => {
131
131
  const product = this.hooks.getProduct(originProduct);
132
132
  addModeDiscount.forEach((discount) => {
133
- var _a;
133
+ var _a, _b, _c;
134
134
  const limitedData = discount == null ? void 0 : discount.limited_relation_product_data;
135
- if (!(product == null ? void 0 : product.booking_id) && (limitedData.type === "product_all" || limitedData.product_ids && limitedData.product_ids.includes(product.id))) {
136
- (_a = discountApplicability.get(discount.id)) == null ? void 0 : _a.push(product.id);
135
+ const isLimitedProduct = limitedData.type === "product_all" || limitedData.product_ids && limitedData.product_ids.includes(product.id);
136
+ 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)));
137
+ if (isAvailableProduct && isLimitedProduct) {
138
+ (_c = discountApplicability.get(discount.id)) == null ? void 0 : _c.push(product.id);
137
139
  const applicableProducts = discountApplicableProducts.get(discount.id) || [];
138
140
  applicableProducts.push({
139
141
  amount: product.price,
@@ -149,9 +151,9 @@ var RulesModule = class extends import_BaseModule.BaseModule {
149
151
  });
150
152
  });
151
153
  sortedProductList.forEach((originProduct) => {
152
- var _a;
154
+ var _a, _b, _c;
153
155
  const product = this.hooks.getProduct(originProduct);
154
- if (product == null ? void 0 : product.booking_id) {
156
+ 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))) {
155
157
  processedProductsMap.set(product._id, originProduct);
156
158
  return;
157
159
  }
@@ -167,7 +169,7 @@ var RulesModule = class extends import_BaseModule.BaseModule {
167
169
  return false;
168
170
  });
169
171
  const selectedDiscount = applicableDiscounts[0];
170
- let isManualDiscount = typeof product.isManualDiscount === "boolean" ? product.isManualDiscount : product.total != product.origin_total && !((_a = product.discount_list) == null ? void 0 : _a.length);
172
+ let isManualDiscount = typeof product.isManualDiscount === "boolean" ? product.isManualDiscount : product.total != product.origin_total && !((_c = product.discount_list) == null ? void 0 : _c.length);
171
173
  if ((options == null ? void 0 : options.discountId) && (options == null ? void 0 : options.discountId) === (selectedDiscount == null ? void 0 : selectedDiscount.id)) {
172
174
  isManualDiscount = false;
173
175
  }
@@ -184,6 +186,9 @@ var RulesModule = class extends import_BaseModule.BaseModule {
184
186
  );
185
187
  return;
186
188
  }
189
+ if (applicableDiscounts.length && product.booking_id && typeof selectedDiscount.isManualSelect === "undefined") {
190
+ return;
191
+ }
187
192
  usedDiscounts.set(selectedDiscount.id, true);
188
193
  const appliedProducts = appliedDiscountProducts.get(selectedDiscount.id) || [];
189
194
  const discountDetail = {
@@ -225,7 +230,6 @@ var RulesModule = class extends import_BaseModule.BaseModule {
225
230
  if (typeof discount.isSelected === "boolean" && discount.isSelected === false && discount.isManualSelect) {
226
231
  return {
227
232
  ...discount,
228
- isUsed: false,
229
233
  isSelected: false,
230
234
  isAvailable,
231
235
  // 正确设置可用性
@@ -239,7 +243,6 @@ var RulesModule = class extends import_BaseModule.BaseModule {
239
243
  if (usedDiscounts.get(discount.id)) {
240
244
  return {
241
245
  ...discount,
242
- isUsed: true,
243
246
  isSelected: true,
244
247
  // 标记为可用,因为它已被应用
245
248
  isAvailable: true,
@@ -252,7 +255,7 @@ var RulesModule = class extends import_BaseModule.BaseModule {
252
255
  };
253
256
  }
254
257
  let isSelected = typeof discount.isSelected === "boolean" ? discount.isSelected : void 0;
255
- if (isAvailable && !discount.isManualSelect) {
258
+ if (isAvailable && appliedProductDetails.length && !discount.isManualSelect) {
256
259
  isSelected = true;
257
260
  } else if (!appliedProductDetails.length) {
258
261
  isSelected = false;
@@ -238,6 +238,7 @@ var BookingByStepImpl = class extends import_BaseModule.BaseModule {
238
238
  async setLoginAccount(accountId, accountInfo) {
239
239
  const account = this.store.accountList.getAccount(accountId);
240
240
  if (account) {
241
+ this.store.accountList.updateAccountListById(account.getId(), accountInfo);
241
242
  account.setAccountInfo(accountInfo);
242
243
  const cartItems = this.store.cart.getItems();
243
244
  cartItems.forEach((item) => {
@@ -138,11 +138,12 @@ var ShopDiscountImpl = class extends import_BaseModule.BaseModule {
138
138
  }
139
139
  // 计算优惠券
140
140
  calcDiscount(productList, options) {
141
+ this.store.productList = productList;
141
142
  const rulesModule = this.core.getModule(`${this.name}_rules`);
142
143
  if (!rulesModule) {
143
144
  return { productList, discountList: this.getDiscountList() };
144
145
  }
145
- const { productList: newProductList, discountList: newDiscountList } = rulesModule.calcDiscount(
146
+ let { productList: newProductList, discountList: newDiscountList } = rulesModule.calcDiscount(
146
147
  {
147
148
  productList,
148
149
  discountList: this.getDiscountList()
@@ -150,7 +151,7 @@ var ShopDiscountImpl = class extends import_BaseModule.BaseModule {
150
151
  options
151
152
  ) || { productList, discountList: this.getDiscountList() };
152
153
  if (newDiscountList) {
153
- this.setDiscountList(newDiscountList);
154
+ newDiscountList = this.setDiscountList(newDiscountList);
154
155
  }
155
156
  return {
156
157
  productList: newProductList || productList,
@@ -169,8 +170,7 @@ var ShopDiscountImpl = class extends import_BaseModule.BaseModule {
169
170
  ...discount,
170
171
  isSelected,
171
172
  // 手动设置不使用
172
- isManualSelect: !isSelected,
173
- isUsed: isSelected
173
+ isManualSelect: !isSelected
174
174
  };
175
175
  }
176
176
  return discount;
@@ -257,31 +257,35 @@ var ShopDiscountImpl = class extends import_BaseModule.BaseModule {
257
257
  );
258
258
  }
259
259
  // 设置优惠券列表
260
- async setDiscountList(discountList) {
260
+ setDiscountList(discountList) {
261
261
  var _a;
262
262
  const productList = this.store.productList || [];
263
263
  const editModeDiscountList = [];
264
264
  productList.forEach((item) => {
265
265
  if (item.booking_id) {
266
- editModeDiscountList.push(...(item.discount_list || []).map((item2) => {
267
- return {
268
- ...item2,
269
- isEditMode: true,
270
- limited_relation_product_data: {},
271
- savedAmount: item2.amount,
272
- isAvailable: true,
273
- id: item2.discount.resource_id,
274
- format_title: item2.discount.title,
275
- isDisabled: true,
276
- isSelected: true,
277
- product_id: item2.discount.product_id
278
- };
279
- }));
266
+ (item.discount_list || []).forEach((discount) => {
267
+ var _a2, _b, _c;
268
+ if (discount.id) {
269
+ editModeDiscountList.push({
270
+ ...discount,
271
+ isEditMode: true,
272
+ limited_relation_product_data: {},
273
+ savedAmount: discount.amount,
274
+ isAvailable: true,
275
+ id: ((_a2 = discount.discount) == null ? void 0 : _a2.resource_id) || discount.id,
276
+ format_title: ((_b = discount.discount) == null ? void 0 : _b.title) || discount.format_title,
277
+ isDisabled: true,
278
+ isSelected: true,
279
+ product_id: ((_c = discount.discount) == null ? void 0 : _c.product_id) || discount.product_id
280
+ });
281
+ }
282
+ });
280
283
  }
281
284
  });
282
- const newDiscountList = (0, import_utils.uniqueById)([...editModeDiscountList, ...discountList], "product_id");
285
+ const newDiscountList = (0, import_utils.uniqueById)([...editModeDiscountList, ...discountList.filter((item) => !item.isDisabled)], "product_id");
283
286
  (_a = this.store.discount) == null ? void 0 : _a.setDiscountList(newDiscountList);
284
- await this.emitDiscountListChange(newDiscountList);
287
+ this.emitDiscountListChange(newDiscountList);
288
+ return newDiscountList;
285
289
  }
286
290
  // 获取优惠券列表
287
291
  getDiscountList() {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "private": false,
3
3
  "name": "@pisell/pisellos",
4
- "version": "0.0.23",
4
+ "version": "0.0.25",
5
5
  "description": "一个可扩展的前端模块化SDK框架,支持插件系统",
6
6
  "main": "dist/index.js",
7
7
  "types": "dist/index.d.ts",