@pisell/pisellos 2.1.173 → 2.1.175

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.
Files changed (60) hide show
  1. package/dist/modules/Holder/index.d.ts +48 -0
  2. package/dist/modules/Holder/index.js +640 -0
  3. package/dist/modules/Holder/types.d.ts +123 -0
  4. package/dist/modules/Holder/types.js +1 -0
  5. package/dist/modules/Holder/utils.d.ts +13 -0
  6. package/dist/modules/Holder/utils.js +34 -0
  7. package/dist/modules/OpenData/types.d.ts +1 -0
  8. package/dist/modules/Order/index.d.ts +1 -0
  9. package/dist/modules/Order/index.js +18 -1
  10. package/dist/modules/Order/types.d.ts +2 -0
  11. package/dist/modules/Order/utils.d.ts +10 -0
  12. package/dist/modules/Order/utils.js +35 -3
  13. package/dist/modules/Product/types.d.ts +7 -0
  14. package/dist/modules/ProductList/index.js +13 -6
  15. package/dist/modules/Rules/index.js +2 -1
  16. package/dist/modules/index.d.ts +1 -0
  17. package/dist/modules/index.js +2 -1
  18. package/dist/plugins/window.d.ts +1 -0
  19. package/dist/solution/BookingByStep/index.d.ts +17 -2
  20. package/dist/solution/BookingByStep/index.js +276 -204
  21. package/dist/solution/BookingByStep/types.d.ts +2 -1
  22. package/dist/solution/BookingByStep/types.js +3 -1
  23. package/dist/solution/ScanOrder/index.d.ts +5 -5
  24. package/dist/solution/ScanOrder/index.js +59 -6
  25. package/dist/solution/ScanOrder/types.d.ts +7 -0
  26. package/dist/solution/VenueBooking/index.d.ts +19 -0
  27. package/dist/solution/VenueBooking/index.js +978 -748
  28. package/dist/solution/VenueBooking/types.d.ts +2 -0
  29. package/dist/types/index.d.ts +1 -0
  30. package/lib/model/strategy/adapter/promotion/index.js +49 -0
  31. package/lib/modules/Holder/index.d.ts +48 -0
  32. package/lib/modules/Holder/index.js +402 -0
  33. package/lib/modules/Holder/types.d.ts +123 -0
  34. package/lib/modules/Holder/types.js +17 -0
  35. package/lib/modules/Holder/utils.d.ts +13 -0
  36. package/lib/modules/Holder/utils.js +71 -0
  37. package/lib/modules/OpenData/types.d.ts +1 -0
  38. package/lib/modules/Order/index.d.ts +1 -0
  39. package/lib/modules/Order/index.js +14 -0
  40. package/lib/modules/Order/types.d.ts +2 -0
  41. package/lib/modules/Order/utils.d.ts +10 -0
  42. package/lib/modules/Order/utils.js +36 -5
  43. package/lib/modules/Product/types.d.ts +7 -0
  44. package/lib/modules/ProductList/index.js +8 -1
  45. package/lib/modules/Rules/index.js +1 -1
  46. package/lib/modules/index.d.ts +1 -0
  47. package/lib/modules/index.js +3 -1
  48. package/lib/plugins/window.d.ts +1 -0
  49. package/lib/solution/BookingByStep/index.d.ts +17 -2
  50. package/lib/solution/BookingByStep/index.js +39 -0
  51. package/lib/solution/BookingByStep/types.d.ts +2 -1
  52. package/lib/solution/BookingByStep/types.js +5 -0
  53. package/lib/solution/ScanOrder/index.d.ts +5 -5
  54. package/lib/solution/ScanOrder/index.js +56 -6
  55. package/lib/solution/ScanOrder/types.d.ts +7 -0
  56. package/lib/solution/VenueBooking/index.d.ts +19 -0
  57. package/lib/solution/VenueBooking/index.js +134 -16
  58. package/lib/solution/VenueBooking/types.d.ts +2 -0
  59. package/lib/types/index.d.ts +1 -0
  60. package/package.json +1 -1
@@ -1,4 +1,4 @@
1
- import { ProductList, CartModule, ProductData, AccountModule, AccountListModule, DateModule, GuestListModule, OrderModule, PaymentModule, ResourceListModule, StepModule, SummaryModule, SalesSummaryModule, ScheduleModule, ScanOrderLoggerModule } from '../../modules';
1
+ import { ProductList, CartModule, ProductData, AccountModule, AccountListModule, DateModule, GuestListModule, OrderModule, PaymentModule, ResourceListModule, StepModule, SummaryModule, SalesSummaryModule, ScheduleModule, ScanOrderLoggerModule, HolderModule } from '../../modules';
2
2
  export interface BookingByStepState {
3
3
  cart: CartModule;
4
4
  summary: SummaryModule;
@@ -16,6 +16,7 @@ export interface BookingByStepState {
16
16
  schedule: ScheduleModule;
17
17
  salesSummary?: SalesSummaryModule;
18
18
  scanOrderLogger?: ScanOrderLoggerModule;
19
+ holder: HolderModule;
19
20
  }
20
21
  export declare function createModule<T extends keyof BookingByStepState>(moduleName: T, solutionName: string, name?: string, version?: string): BookingByStepState[T];
21
22
  export declare enum BookingByStepHooks {
@@ -1,4 +1,4 @@
1
- import { ProductList, CartModule, AccountListModule, DateModule, OrderModule, PaymentModule, StepModule, SummaryModule, SalesSummaryModule, ScheduleModule, ScanOrderLoggerModule } from "../../modules";
1
+ import { ProductList, CartModule, AccountListModule, DateModule, OrderModule, PaymentModule, StepModule, SummaryModule, SalesSummaryModule, ScheduleModule, ScanOrderLoggerModule, HolderModule } from "../../modules";
2
2
  export function createModule(moduleName, solutionName, name, version) {
3
3
  switch (moduleName) {
4
4
  case 'cart':
@@ -23,6 +23,8 @@ export function createModule(moduleName, solutionName, name, version) {
23
23
  return new ScheduleModule("".concat(solutionName, "_").concat(name || moduleName), version);
24
24
  case 'scanOrderLogger':
25
25
  return new ScanOrderLoggerModule("".concat(solutionName, "_").concat(name || moduleName), version);
26
+ case 'holder':
27
+ return new HolderModule("".concat(solutionName, "_").concat(name || moduleName), version);
26
28
  default:
27
29
  throw new Error("Unknown module type: ".concat(moduleName));
28
30
  }
@@ -1,6 +1,6 @@
1
1
  import { Module, ModuleOptions, PisellCore } from '../../types';
2
2
  import { BaseModule } from '../../modules/BaseModule';
3
- import { ScanOrderAddLogParams, ScanOrderAvailabilityInfo, ScanOrderAllowAddItemsInfo, ScanOrderOrderProduct, ScanOrderOrderProductIdentity, ScanOrderReservationResourceSelectInfo, ScanOrderScanCodeResult, ScanOrderSyncAdditionalOrderResult, ScanOrderTempOrder } from './types';
3
+ import { ScanOrderAddLogParams, ScanOrderAvailabilityInfo, ScanOrderFulfillmentModes, ScanOrderAllowAddItemsInfo, ScanOrderOrderProduct, ScanOrderOrderProductIdentity, ScanOrderReservationResourceSelectInfo, ScanOrderScanCodeResult, ScanOrderSyncAdditionalOrderResult, ScanOrderTempOrder } from './types';
4
4
  import type { UpdateProductInOrderParams } from '../../modules/Order/types';
5
5
  import type { Discount } from '../../modules/Discount/types';
6
6
  import { type CartItemSummary, type PaxInfo, type QuantityCheckResult, type QuantityLimitResult } from '../../model/strategy/adapter/itemRule';
@@ -75,6 +75,9 @@ export declare class ScanOrderImpl extends BaseModule implements Module {
75
75
  service_type: 'dine_in' | '';
76
76
  pickup_reference_mode: 'counter_pickup' | 'table_service';
77
77
  };
78
+ setFulfillmentMode(mode: string): Record<string, any> & {
79
+ service_type?: string | undefined;
80
+ };
78
81
  setPickupRef(buzzer: string): string;
79
82
  private ensureTempOrder;
80
83
  addNewOrder(): Promise<ScanOrderTempOrder>;
@@ -147,10 +150,7 @@ export declare class ScanOrderImpl extends BaseModule implements Module {
147
150
  syncAdditionalOrderFromResource(resourceId?: string | null): Promise<ScanOrderSyncAdditionalOrderResult>;
148
151
  getReservationResourceSelectType(): ScanOrderReservationResourceSelectInfo;
149
152
  checkAllowAddItems(): ScanOrderAllowAddItemsInfo;
150
- getFulfillmentModes(): {
151
- enablePickup: boolean;
152
- enableTableService: boolean;
153
- };
153
+ getFulfillmentModes(): ScanOrderFulfillmentModes;
154
154
  checkManualPickupRef(): {
155
155
  enabled: boolean;
156
156
  manualInputType?: string;
@@ -857,7 +857,7 @@ export var ScanOrderImpl = /*#__PURE__*/function (_BaseModule) {
857
857
  var tempOrder = this.store.order.ensureTempOrder();
858
858
  tempOrder.metadata = _objectSpread(_objectSpread({}, tempOrder.metadata || {}), {}, {
859
859
  shop_service_data: _objectSpread(_objectSpread({}, (tempOrder.metadata || {}).shop_service_data || {}), {}, {
860
- service_type: ((_this$otherParams4 = this.otherParams) === null || _this$otherParams4 === void 0 ? void 0 : _this$otherParams4.businessCode) === 'dine_in' ? 'dine_in' : 'take_away',
860
+ service_type: ((_this$otherParams4 = this.otherParams) === null || _this$otherParams4 === void 0 ? void 0 : _this$otherParams4.businessCode) === 'dine_in' ? 'dine_in' : '',
861
861
  pickup_reference_mode: mode
862
862
  })
863
863
  });
@@ -874,6 +874,44 @@ export var ScanOrderImpl = /*#__PURE__*/function (_BaseModule) {
874
874
  }
875
875
  }
876
876
 
877
+ // 新版履约方式直接保存配置值;旧取餐标识方式继续由 setPickupReferenceMode 处理。
878
+ }, {
879
+ key: "setFulfillmentMode",
880
+ value: function setFulfillmentMode(mode) {
881
+ this.logMethodStart('setFulfillmentMode', {
882
+ mode: mode
883
+ });
884
+ try {
885
+ var _this$getFulfillmentM = this.getFulfillmentModes(),
886
+ handoverModes = _this$getFulfillmentM.handoverModes;
887
+ var clearMode = mode === '' && (handoverModes === null || handoverModes === void 0 ? void 0 : handoverModes.length) === 0;
888
+ if (!clearMode && !(handoverModes !== null && handoverModes !== void 0 && handoverModes.includes(mode))) {
889
+ throw new Error('Fulfillment mode is not enabled');
890
+ }
891
+ if (!this.store.order) throw new Error('order 模块未初始化');
892
+ var tempOrder = this.store.order.ensureTempOrder();
893
+ var serviceData = _objectSpread({}, (tempOrder.metadata || {}).shop_service_data || {});
894
+ if (clearMode) {
895
+ delete serviceData.service_type;
896
+ } else {
897
+ serviceData.service_type = mode;
898
+ }
899
+ tempOrder.metadata = _objectSpread(_objectSpread({}, tempOrder.metadata || {}), {}, {
900
+ shop_service_data: serviceData
901
+ });
902
+ this.store.order.persistTempOrder();
903
+ this.logMethodSuccess('setFulfillmentMode', {
904
+ mode: mode
905
+ });
906
+ return tempOrder.metadata.shop_service_data;
907
+ } catch (error) {
908
+ this.logMethodError('setFulfillmentMode', error, {
909
+ mode: mode
910
+ });
911
+ throw error;
912
+ }
913
+ }
914
+
877
915
  // 存储用户自定义取餐标识到 tempOrder.buzzer
878
916
  }, {
879
917
  key: "setPickupRef",
@@ -3428,7 +3466,7 @@ export var ScanOrderImpl = /*#__PURE__*/function (_BaseModule) {
3428
3466
  return result;
3429
3467
  }
3430
3468
 
3431
- // 读取取餐/送餐开关
3469
+ // 新版履约方式配置存在时优先使用,缺失时保留旧取餐/送餐开关语义。
3432
3470
  // 依赖 checkResourceAvailable 已缓存的 dineInConfig
3433
3471
  }, {
3434
3472
  key: "getFulfillmentModes",
@@ -3436,10 +3474,25 @@ export var ScanOrderImpl = /*#__PURE__*/function (_BaseModule) {
3436
3474
  var _this$otherParams20;
3437
3475
  this.logMethodStart('getFulfillmentModes');
3438
3476
  var dineInConfig = ((_this$otherParams20 = this.otherParams) === null || _this$otherParams20 === void 0 ? void 0 : _this$otherParams20.dineInConfig) || {};
3439
- var result = {
3440
- enablePickup: Boolean(dineInConfig['fulfillment.enable_pickup']),
3441
- enableTableService: Boolean(dineInConfig['fulfillment.enable_table_service'])
3442
- };
3477
+ var configuredModes = dineInConfig['fulfillment.handover_mode'];
3478
+ var result;
3479
+ if (Object.prototype.hasOwnProperty.call(dineInConfig, 'fulfillment.handover_mode')) {
3480
+ var handoverModes = Array.isArray(configuredModes) ? Array.from(new Set(configuredModes.filter(function (mode) {
3481
+ return typeof mode === 'string';
3482
+ }).map(function (mode) {
3483
+ return mode.trim();
3484
+ }).filter(Boolean))) : [];
3485
+ result = {
3486
+ enablePickup: handoverModes.includes('pick_up'),
3487
+ enableTableService: handoverModes.includes('table_service'),
3488
+ handoverModes: handoverModes
3489
+ };
3490
+ } else {
3491
+ result = {
3492
+ enablePickup: Boolean(dineInConfig['fulfillment.enable_pickup']),
3493
+ enableTableService: Boolean(dineInConfig['fulfillment.enable_table_service'])
3494
+ };
3495
+ }
3443
3496
  this.logMethodSuccess('getFulfillmentModes', result);
3444
3497
  return result;
3445
3498
  }
@@ -27,6 +27,12 @@ export interface ScanOrderConfig {
27
27
  verifyResource: boolean;
28
28
  };
29
29
  }
30
+ export interface ScanOrderFulfillmentModes {
31
+ enablePickup: boolean;
32
+ enableTableService: boolean;
33
+ /** Present only when fulfillment.handover_mode is configured, including an empty list. */
34
+ handoverModes?: string[];
35
+ }
30
36
  export interface ScanOrderOrderProductIdentity {
31
37
  product_id: number | null;
32
38
  product_variant_id: number;
@@ -34,6 +40,7 @@ export interface ScanOrderOrderProductIdentity {
34
40
  /** 参与合并/匹配;与 remove 通配语义见 isSkuOnlyDeleteIdentity */
35
41
  product_option_item?: any[];
36
42
  product_bundle?: any[];
43
+ shop_id?: number | string;
37
44
  }
38
45
  export interface ScanOrderOrderProduct extends ScanOrderOrderProductIdentity {
39
46
  order_detail_id: number | null;
@@ -7,6 +7,7 @@ import type { OpenDataAvailabilityResult } from '../../modules/OpenData';
7
7
  import type { ProductData } from '../../modules/Product/types';
8
8
  import { type CartItemSummary, type PaxInfo, type QuantityCheckResult, type QuantityLimitResult } from '../../model/strategy/adapter/itemRule';
9
9
  import type { StrategyConfig } from '../../model/strategy/type';
10
+ import type { IAppendFormRecordParams, IRefreshAllFormRecordsParams } from '../../modules/Holder/types';
10
11
  export * from './types';
11
12
  interface VenueBookingItemRuleRuntimeConfig {
12
13
  strategyConfigs?: StrategyConfig[];
@@ -52,6 +53,12 @@ export declare class VenueBookingImpl extends BaseModule implements Module {
52
53
  constructor(name?: string, version?: string);
53
54
  private normalizeCustomerId;
54
55
  private resolveCustomerIdFromLoginPayload;
56
+ private resolveHolderCustomerId;
57
+ /**
58
+ * 按商品 holder_config 预加载表单数据到 holderMap。
59
+ * appointment_booking 在加购时触发;venueBooking 在商品加载后预加载,避免 getHolderFormMap 为空。
60
+ */
61
+ private preloadHolderForms;
55
62
  private clearLoginEffectListeners;
56
63
  private registerLoginEffect;
57
64
  private registerCustomerLoginListeners;
@@ -199,6 +206,18 @@ export declare class VenueBookingImpl extends BaseModule implements Module {
199
206
  getUIState<T = any>(key: string): T | undefined;
200
207
  deleteUIState(key: string): void;
201
208
  setBookingHolder(bookingUid: string, holder: any): void;
209
+ /**
210
+ * 获取 holder 表单 map
211
+ */
212
+ getHolderFormMap(): import("../../modules/Holder").HolderFormMap;
213
+ /**
214
+ * UI 层触发:按当前 holderMap 批量刷新所有表单的 records
215
+ */
216
+ refreshAllHolderFormRecords(params?: Pick<IRefreshAllFormRecordsParams, 'customer_id' | 'useCache' | 'recordsUrl' | 'num' | 'skip'>): Promise<import("../../modules/Holder").HolderFormMap>;
217
+ /**
218
+ * 添加表单记录
219
+ */
220
+ appendFormRecord(params: IAppendFormRecordParams): import("../../modules/Holder").IFormRecord;
202
221
  checkOpenDataAvailability(): Promise<OpenDataAvailabilityResult>;
203
222
  setOtherParams(params: Record<string, any>, { cover }?: {
204
223
  cover?: boolean;