@pisell/pisellos 2.1.38 → 2.2.1

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 (135) hide show
  1. package/dist/core/index.d.ts +8 -1
  2. package/dist/core/index.js +116 -42
  3. package/dist/effects/index.d.ts +1 -0
  4. package/dist/effects/index.js +29 -6
  5. package/dist/modules/Account/index.js +2 -3
  6. package/dist/modules/BaseModule.d.ts +3 -0
  7. package/dist/modules/BaseModule.js +15 -0
  8. package/dist/modules/Customer/index.js +9 -10
  9. package/dist/modules/Customer/types.d.ts +2 -2
  10. package/dist/modules/Customer/types.js +2 -2
  11. package/dist/modules/Discount/index.js +1 -1
  12. package/dist/modules/Guests/index.js +9 -9
  13. package/dist/modules/Order/index.js +1 -1
  14. package/dist/modules/Payment/index.js +63 -73
  15. package/dist/modules/Payment/walletpass.js +4 -1
  16. package/dist/modules/Product/index.d.ts +1 -1
  17. package/dist/modules/Product/types.d.ts +19 -0
  18. package/dist/modules/ProductList/index.js +5 -14
  19. package/dist/modules/Resource/index.js +1 -1
  20. package/dist/modules/Rules/index.js +2 -3
  21. package/dist/modules/Schedule/types.d.ts +2 -0
  22. package/dist/plugins/request.d.ts +1 -0
  23. package/dist/server/index.d.ts +152 -0
  24. package/dist/server/index.js +946 -0
  25. package/dist/server/modules/index.d.ts +16 -0
  26. package/dist/server/modules/index.js +21 -0
  27. package/dist/server/modules/menu/index.d.ts +63 -0
  28. package/dist/server/modules/menu/index.js +476 -0
  29. package/dist/server/modules/menu/types.d.ts +68 -0
  30. package/dist/server/modules/menu/types.js +16 -0
  31. package/dist/server/modules/products/index.d.ts +141 -0
  32. package/dist/server/modules/products/index.js +768 -0
  33. package/dist/server/modules/products/types.d.ts +94 -0
  34. package/dist/server/modules/products/types.js +43 -0
  35. package/dist/server/modules/quotation/index.d.ts +47 -0
  36. package/dist/server/modules/quotation/index.js +367 -0
  37. package/dist/server/modules/quotation/types.d.ts +50 -0
  38. package/dist/server/modules/quotation/types.js +20 -0
  39. package/dist/server/modules/schedule/index.d.ts +62 -0
  40. package/dist/server/modules/schedule/index.js +431 -0
  41. package/dist/server/modules/schedule/types.d.ts +1 -0
  42. package/dist/server/modules/schedule/types.js +2 -0
  43. package/dist/server/modules/schedule/utils.d.ts +32 -0
  44. package/dist/server/modules/schedule/utils.js +747 -0
  45. package/dist/server/types.d.ts +64 -0
  46. package/dist/server/types.js +1 -0
  47. package/dist/server/utils/index.d.ts +5 -0
  48. package/dist/server/utils/index.js +6 -0
  49. package/dist/server/utils/product.d.ts +18 -0
  50. package/dist/server/utils/product.js +339 -0
  51. package/dist/server/utils/schedule.d.ts +14 -0
  52. package/dist/server/utils/schedule.js +108 -0
  53. package/dist/server/utils/time.d.ts +18 -0
  54. package/dist/server/utils/time.js +53 -0
  55. package/dist/solution/BookingByStep/index.d.ts +1 -17
  56. package/dist/solution/BookingByStep/index.js +23 -468
  57. package/dist/solution/BookingByStep/utils/capacity.d.ts +2 -7
  58. package/dist/solution/BookingByStep/utils/capacity.js +8 -24
  59. package/dist/solution/BookingTicket/index.d.ts +12 -0
  60. package/dist/solution/BookingTicket/index.js +122 -79
  61. package/dist/solution/BookingTicket/utils/scan/index.d.ts +4 -0
  62. package/dist/solution/BookingTicket/utils/scan/index.js +25 -16
  63. package/dist/solution/BuyTickets/index.js +7 -8
  64. package/dist/solution/Checkout/index.d.ts +1 -46
  65. package/dist/solution/Checkout/index.js +530 -850
  66. package/dist/solution/ShopDiscount/index.js +9 -10
  67. package/dist/types/index.d.ts +27 -0
  68. package/lib/core/index.d.ts +8 -1
  69. package/lib/core/index.js +48 -1
  70. package/lib/effects/index.d.ts +1 -0
  71. package/lib/effects/index.js +13 -0
  72. package/lib/modules/Account/index.js +2 -3
  73. package/lib/modules/BaseModule.d.ts +3 -0
  74. package/lib/modules/BaseModule.js +9 -0
  75. package/lib/modules/Customer/index.js +9 -10
  76. package/lib/modules/Customer/types.d.ts +2 -2
  77. package/lib/modules/Customer/types.js +2 -2
  78. package/lib/modules/Discount/index.js +1 -1
  79. package/lib/modules/Guests/index.js +9 -9
  80. package/lib/modules/Order/index.js +1 -1
  81. package/lib/modules/Payment/index.js +56 -43
  82. package/lib/modules/Payment/walletpass.js +3 -1
  83. package/lib/modules/Product/index.d.ts +1 -1
  84. package/lib/modules/Product/types.d.ts +19 -0
  85. package/lib/modules/ProductList/index.js +4 -13
  86. package/lib/modules/Resource/index.js +1 -1
  87. package/lib/modules/Rules/index.js +2 -3
  88. package/lib/modules/Schedule/types.d.ts +2 -0
  89. package/lib/plugins/request.d.ts +1 -0
  90. package/lib/server/index.d.ts +152 -0
  91. package/lib/server/index.js +555 -0
  92. package/lib/server/modules/index.d.ts +16 -0
  93. package/lib/server/modules/index.js +47 -0
  94. package/lib/server/modules/menu/index.d.ts +63 -0
  95. package/lib/server/modules/menu/index.js +234 -0
  96. package/lib/server/modules/menu/types.d.ts +68 -0
  97. package/lib/server/modules/menu/types.js +33 -0
  98. package/lib/server/modules/products/index.d.ts +141 -0
  99. package/lib/server/modules/products/index.js +434 -0
  100. package/lib/server/modules/products/types.d.ts +94 -0
  101. package/lib/server/modules/products/types.js +35 -0
  102. package/lib/server/modules/quotation/index.d.ts +47 -0
  103. package/lib/server/modules/quotation/index.js +177 -0
  104. package/lib/server/modules/quotation/types.d.ts +50 -0
  105. package/lib/server/modules/quotation/types.js +33 -0
  106. package/lib/server/modules/schedule/index.d.ts +62 -0
  107. package/lib/server/modules/schedule/index.js +231 -0
  108. package/lib/server/modules/schedule/types.d.ts +1 -0
  109. package/lib/server/modules/schedule/types.js +23 -0
  110. package/lib/server/modules/schedule/utils.d.ts +32 -0
  111. package/lib/server/modules/schedule/utils.js +451 -0
  112. package/lib/server/types.d.ts +64 -0
  113. package/lib/server/types.js +17 -0
  114. package/lib/server/utils/index.d.ts +5 -0
  115. package/lib/server/utils/index.js +25 -0
  116. package/lib/server/utils/product.d.ts +18 -0
  117. package/lib/server/utils/product.js +262 -0
  118. package/lib/server/utils/schedule.d.ts +14 -0
  119. package/lib/server/utils/schedule.js +88 -0
  120. package/lib/server/utils/time.d.ts +18 -0
  121. package/lib/server/utils/time.js +70 -0
  122. package/lib/solution/BookingByStep/index.d.ts +1 -17
  123. package/lib/solution/BookingByStep/index.js +40 -312
  124. package/lib/solution/BookingByStep/utils/capacity.d.ts +2 -7
  125. package/lib/solution/BookingByStep/utils/capacity.js +8 -21
  126. package/lib/solution/BookingTicket/index.d.ts +12 -0
  127. package/lib/solution/BookingTicket/index.js +25 -6
  128. package/lib/solution/BookingTicket/utils/scan/index.d.ts +4 -0
  129. package/lib/solution/BookingTicket/utils/scan/index.js +7 -1
  130. package/lib/solution/BuyTickets/index.js +7 -8
  131. package/lib/solution/Checkout/index.d.ts +1 -46
  132. package/lib/solution/Checkout/index.js +92 -289
  133. package/lib/solution/ShopDiscount/index.js +10 -11
  134. package/lib/types/index.d.ts +27 -0
  135. package/package.json +2 -2
@@ -55,7 +55,7 @@ function generateRequestUniqueId() {
55
55
  }
56
56
  var PaymentModule = class extends import_BaseModule.BaseModule {
57
57
  constructor(name, version) {
58
- super(name, version);
58
+ super(name || "payment", version);
59
59
  this.defaultName = "pay";
60
60
  this.defaultVersion = "1.0.0";
61
61
  // LoggerManager 实例
@@ -193,7 +193,7 @@ var PaymentModule = class extends import_BaseModule.BaseModule {
193
193
  console.warn("[PaymentModule] 无法缓存支付方式,pay_method 表不存在");
194
194
  }
195
195
  await this.core.effects.emit(
196
- import_types.PaymentHooks.OnPaymentMethodsLoaded,
196
+ `${this.name}:onPaymentMethodsLoaded`,
197
197
  payMethods
198
198
  );
199
199
  this.logInfo("getPayMethodListAsync completed successfully", {
@@ -243,7 +243,7 @@ var PaymentModule = class extends import_BaseModule.BaseModule {
243
243
  newMethods: newPayMethods
244
244
  };
245
245
  await this.core.effects.emit(
246
- import_types.PaymentHooks.OnPaymentMethodsChanged,
246
+ `${this.name}:onPaymentMethodsChanged`,
247
247
  eventData
248
248
  );
249
249
  } else {
@@ -323,35 +323,48 @@ var PaymentModule = class extends import_BaseModule.BaseModule {
323
323
  totalAmount: params.total_amount
324
324
  });
325
325
  try {
326
- const newOrder = {
327
- uuid: (0, import_utils.getUniqueId)("pay_order_"),
328
- id: params.order_id,
329
- order_id: params.order_id,
330
- order_info: params.order_info,
331
- payment_status: import_types.PaymentStatus.Processing,
332
- payment: [],
333
- adjust_offline_payments: [],
334
- total_amount: params.total_amount,
335
- expect_amount: params.total_amount,
336
- tax_fee: "0.00",
337
- is_deposit: params.is_deposit || 0,
338
- deposit_amount: params.deposit_amount || "0.00"
339
- };
340
- const dbAddStartTime = Date.now();
341
- await this.dbManager.add("order", newOrder);
342
- const dbAddDuration = Date.now() - dbAddStartTime;
343
- this.logInfo("Database add operation completed", {
344
- operation: "dbManager.add",
345
- table: "order",
346
- orderUuid: newOrder.uuid,
347
- orderId: newOrder.order_id,
348
- duration: `${dbAddDuration}ms`,
349
- performance: dbAddDuration > 100 ? "slow" : dbAddDuration > 50 ? "medium" : "fast"
326
+ const existingOrder = await this.dbManager.get("order", params.order_id);
327
+ this.logInfo("createPaymentOrderAsync existingOrder", {
328
+ existingOrder
350
329
  });
351
- setTimeout(() => {
330
+ if (existingOrder) {
331
+ this.logInfo(
332
+ `createPaymentOrderAsync found duplicate order ID: ${params.order_id}, updating existing payment order`
333
+ );
334
+ existingOrder.order_info = params.order_info;
335
+ existingOrder.total_amount = params.total_amount;
336
+ existingOrder.is_deposit = params.is_deposit || 0;
337
+ existingOrder.deposit_amount = params.deposit_amount || "0.00";
338
+ this.recalculateOrderAmount(existingOrder);
339
+ await this.dbManager.update("order", existingOrder);
340
+ await this.core.effects.emit(
341
+ `${this.name}:onOrderUpdated`,
342
+ existingOrder
343
+ );
344
+ return existingOrder;
345
+ } else {
346
+ const newOrder = {
347
+ uuid: (0, import_utils.getUniqueId)("pay_order_"),
348
+ id: params.order_id,
349
+ order_id: params.order_id,
350
+ order_info: params.order_info,
351
+ payment_status: import_types.PaymentStatus.Processing,
352
+ payment: [],
353
+ adjust_offline_payments: [],
354
+ total_amount: params.total_amount,
355
+ expect_amount: params.total_amount,
356
+ tax_fee: "0.00",
357
+ is_deposit: params.is_deposit || 0,
358
+ deposit_amount: params.deposit_amount || "0.00"
359
+ };
360
+ await this.dbManager.add("order", newOrder);
352
361
  this.core.effects.emit(`${this.name}:onOrderAdded`, newOrder);
353
- }, 0);
354
- return newOrder;
362
+ this.logInfo("createPaymentOrderAsync completed - new payment order created", {
363
+ orderUuid: newOrder.uuid,
364
+ orderId: newOrder.id
365
+ });
366
+ return newOrder;
367
+ }
355
368
  } catch (error) {
356
369
  console.error("[PaymentModule] 创建支付订单失败", error);
357
370
  this.logError("createPaymentOrderAsync failed", error, {
@@ -368,7 +381,7 @@ var PaymentModule = class extends import_BaseModule.BaseModule {
368
381
  const order = await this.dbManager.get("order", orderUuid);
369
382
  if (order) {
370
383
  await this.dbManager.delete("order", orderUuid);
371
- await this.core.effects.emit(import_types.PaymentHooks.OnOrderDeleted, order);
384
+ await this.core.effects.emit(`${this.name}:onOrderDeleted`, order);
372
385
  console.log("[PaymentModule] 支付订单删除成功:", orderUuid);
373
386
  }
374
387
  } catch (error) {
@@ -386,8 +399,8 @@ var PaymentModule = class extends import_BaseModule.BaseModule {
386
399
  const updatedOrder = { ...order, ...params };
387
400
  this.recalculateOrderAmount(updatedOrder);
388
401
  await this.dbManager.update("order", updatedOrder);
389
- await this.core.effects.emit(import_types.PaymentHooks.OnOrderUpdated, updatedOrder);
390
- await this.core.effects.emit(import_types.PaymentHooks.OnOrderChanged, {
402
+ await this.core.effects.emit(`${this.name}:onOrderUpdated`, updatedOrder);
403
+ await this.core.effects.emit(`${this.name}:onOrderChanged`, {
391
404
  action: "update",
392
405
  order: updatedOrder,
393
406
  originalOrder: order
@@ -445,8 +458,8 @@ var PaymentModule = class extends import_BaseModule.BaseModule {
445
458
  }
446
459
  };
447
460
  await this.dbManager.update("order", updatedOrder);
448
- await this.core.effects.emit(import_types.PaymentHooks.OnOrderUpdated, updatedOrder);
449
- await this.core.effects.emit(import_types.PaymentHooks.OnOrderChanged, {
461
+ await this.core.effects.emit(`${this.name}:onOrderUpdated`, updatedOrder);
462
+ await this.core.effects.emit(`${this.name}:onOrderChanged`, {
450
463
  action: "order_id_replaced",
451
464
  order: updatedOrder,
452
465
  originalOrder: existingOrder,
@@ -563,7 +576,7 @@ var PaymentModule = class extends import_BaseModule.BaseModule {
563
576
  order.payment.push(newPaymentItem);
564
577
  this.recalculateOrderAmount(order);
565
578
  await this.dbManager.update("order", order);
566
- await this.core.effects.emit(import_types.PaymentHooks.OnPaymentAdded, {
579
+ await this.core.effects.emit(`${this.name}:onPaymentAdded`, {
567
580
  orderUuid,
568
581
  payment: newPaymentItem
569
582
  });
@@ -619,11 +632,11 @@ var PaymentModule = class extends import_BaseModule.BaseModule {
619
632
  });
620
633
  this.recalculateOrderAmount(order);
621
634
  await this.dbManager.update("order", order);
622
- await this.core.effects.emit(import_types.PaymentHooks.OnPaymentDeleted, {
635
+ await this.core.effects.emit(`${this.name}:onPaymentDeleted`, {
623
636
  order,
624
637
  paymentItem
625
638
  });
626
- await this.core.effects.emit(import_types.PaymentHooks.OnOrderChanged, {
639
+ await this.core.effects.emit(`${this.name}:onOrderChanged`, {
627
640
  action: "payment_delete",
628
641
  order,
629
642
  paymentItem
@@ -700,7 +713,7 @@ var PaymentModule = class extends import_BaseModule.BaseModule {
700
713
  await this.addPaymentItemAsync(orderUuid, voucherItem);
701
714
  }
702
715
  const updatedOrder = await this.getPaymentOrderByUuidAsync(orderUuid);
703
- await this.core.effects.emit(import_types.PaymentHooks.OnPaymentAdded, {
716
+ await this.core.effects.emit(`${this.name}:onPaymentAdded`, {
704
717
  orderUuid,
705
718
  order: updatedOrder,
706
719
  payment: null
@@ -741,11 +754,11 @@ var PaymentModule = class extends import_BaseModule.BaseModule {
741
754
  Object.assign(paymentItem, formattedParams);
742
755
  this.recalculateOrderAmount(order);
743
756
  await this.dbManager.update("order", order);
744
- await this.core.effects.emit(import_types.PaymentHooks.OnPaymentUpdated, {
757
+ await this.core.effects.emit(`${this.name}:onPaymentUpdated`, {
745
758
  order,
746
759
  paymentItem
747
760
  });
748
- await this.core.effects.emit(import_types.PaymentHooks.OnOrderChanged, {
761
+ await this.core.effects.emit(`${this.name}:onOrderChanged`, {
749
762
  action: "payment_update",
750
763
  order,
751
764
  paymentItem
@@ -833,8 +846,8 @@ var PaymentModule = class extends import_BaseModule.BaseModule {
833
846
  });
834
847
  return;
835
848
  }
836
- await this.core.effects.emit(import_types.PaymentHooks.OnPaymentSubmitted, order);
837
- await this.core.effects.emit(import_types.PaymentHooks.OnOrderChanged, {
849
+ await this.core.effects.emit(`${this.name}:onPaymentSubmitted`, order);
850
+ await this.core.effects.emit(`${this.name}:onOrderChanged`, {
838
851
  action: "submit",
839
852
  order
840
853
  });
@@ -38,7 +38,9 @@ var WalletPassPaymentImpl = class {
38
38
  */
39
39
  emitEvent(hook, data) {
40
40
  try {
41
- this.paymentModule.core.effects.emit(hook, data);
41
+ const eventName = hook.split(":")[1] || hook.replace(/^[A-Z][a-z]+/, "").replace(/^On/, "").toLowerCase();
42
+ const fullEventName = `${this.paymentModule.name}:${eventName}`;
43
+ this.paymentModule.core.effects.emit(fullEventName, data);
42
44
  } catch (error) {
43
45
  this.paymentModule.logError("[WalletPass] 发送事件失败", error, { hook });
44
46
  }
@@ -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
  }
@@ -1,3 +1,14 @@
1
+ /**
2
+ * 商品集合接口
3
+ */
4
+ export interface ProductCollection {
5
+ /** 商品集合id */
6
+ id: number;
7
+ /** 商品集合名称 */
8
+ title: string;
9
+ /** 商品集合封面 */
10
+ cover: string;
11
+ }
1
12
  /**
2
13
  * 商品基本信息接口
3
14
  */
@@ -8,6 +19,8 @@ export interface ProductData {
8
19
  id: number;
9
20
  /** 商品所属账户id */
10
21
  account_id: number | string;
22
+ /** 商品集合 */
23
+ collection?: ProductCollection[];
11
24
  /** 扩展类型id */
12
25
  extension_id: number;
13
26
  /** 扩展类型 */
@@ -189,6 +202,12 @@ export interface ProductData {
189
202
  };
190
203
  /** 购物车行键,用于唯一标识购物车中的商品,用于相同 SKU商品合并 */
191
204
  rowKey?: string;
205
+ /** 套餐组数量 */
206
+ bundle_group_count: number;
207
+ /** 选项组数量 */
208
+ option_group_count: number;
209
+ /** 服务时长 */
210
+ service_times?: any;
192
211
  }
193
212
  /**
194
213
  * 商品媒体信息接口
@@ -24,7 +24,6 @@ __export(ProductList_exports, {
24
24
  });
25
25
  module.exports = __toCommonJS(ProductList_exports);
26
26
  var import_BaseModule = require("../BaseModule");
27
- var import_types = require("./types");
28
27
  var import_lodash_es = require("lodash-es");
29
28
  __reExport(ProductList_exports, require("./types"), module.exports);
30
29
  var ProductList = class extends import_BaseModule.BaseModule {
@@ -96,21 +95,13 @@ var ProductList = class extends import_BaseModule.BaseModule {
96
95
  with_count,
97
96
  // client_schedule_ids: schedule_ids,
98
97
  schedule_date,
99
- application_code: (_b = this.otherParams) == null ? void 0 : _b.channel,
100
98
  with_schedule,
101
99
  schedule_datetime,
102
- is_eject: 1
100
+ application_code: (_b = this.otherParams) == null ? void 0 : _b.channel
103
101
  },
104
- { useCache: true }
102
+ { osServer: true }
105
103
  );
106
104
  const sortedList = (productsData.data.list || []).slice().sort((a, b) => Number(b.sort) - Number(a.sort));
107
- if (sortedList.length) {
108
- sortedList.forEach((n) => {
109
- if (n.is_eject !== 1 && n["schedule.ids"] && n["schedule.ids"].length) {
110
- n.is_eject = 1;
111
- }
112
- });
113
- }
114
105
  this.addProduct(sortedList);
115
106
  return sortedList;
116
107
  }
@@ -134,14 +125,14 @@ var ProductList = class extends import_BaseModule.BaseModule {
134
125
  }
135
126
  async getProducts() {
136
127
  await this.core.effects.emit(
137
- import_types.ProductListHooks.onGetProducts,
128
+ `${this.name}:onGetProducts`,
138
129
  this.store.list
139
130
  );
140
131
  return (0, import_lodash_es.cloneDeep)(this.store.list);
141
132
  }
142
133
  async getProduct(id) {
143
134
  await this.core.effects.emit(
144
- import_types.ProductListHooks.onGetProduct,
135
+ `${this.name}:onGetProduct`,
145
136
  this.store.list
146
137
  );
147
138
  const product = this.store.list.find((product2) => product2.id === id);
@@ -42,7 +42,7 @@ var ResourceListModule = class extends import_BaseModule.BaseModule {
42
42
  if (!resource)
43
43
  return;
44
44
  this.store.selectedResource = resource;
45
- await this.core.effects.emit(import_types.ResourceHooks.OnResourceSelect, resource);
45
+ await this.core.effects.emit(`${this.name}:onResourceSelect`, resource);
46
46
  }
47
47
  getSelectedResource() {
48
48
  return this.store.selectedResource;
@@ -33,7 +33,6 @@ __export(Rules_exports, {
33
33
  });
34
34
  module.exports = __toCommonJS(Rules_exports);
35
35
  var import_BaseModule = require("../BaseModule");
36
- var import_types = require("./types");
37
36
  var import_utils = require("../../solution/ShopDiscount/utils");
38
37
  var import_utils2 = require("../Cart/utils");
39
38
  var import_decimal = __toESM(require("decimal.js"));
@@ -52,7 +51,7 @@ var RulesModule = class extends import_BaseModule.BaseModule {
52
51
  }
53
52
  async setRulesList(rulesList) {
54
53
  this.store.rulesList = rulesList;
55
- await this.core.effects.emit(import_types.RulesHooks.OnRulesListChange, rulesList);
54
+ await this.core.effects.emit(`${this.name}:onRulesListChange`, rulesList);
56
55
  }
57
56
  getRulesList() {
58
57
  return this.store.rulesList;
@@ -489,7 +488,7 @@ var RulesModule = class extends import_BaseModule.BaseModule {
489
488
  }
490
489
  async destroy() {
491
490
  this.core.effects.offByModuleDestroy(this.name);
492
- await this.core.effects.emit(import_types.RulesHooks.OnDestroy, {});
491
+ await this.core.effects.emit(`${this.name}:onDestroy`, {});
493
492
  console.log("[Rules] 已销毁");
494
493
  }
495
494
  async clear() {
@@ -1,6 +1,8 @@
1
1
  import dayjs from 'dayjs';
2
2
  export interface ScheduleState {
3
3
  scheduleList: ScheduleItem[];
4
+ /** 日程 Map 缓存(以 id 为 key,加速查询) */
5
+ map: Map<number, ScheduleItem>;
4
6
  availabilityDateList: ScheduleAvailabilityDateItem[];
5
7
  otherProductsIds: number[];
6
8
  }
@@ -49,6 +49,7 @@ export interface RequestOptions {
49
49
  responseType?: 'json' | 'text' | 'arraybuffer' | 'blob';
50
50
  withCredentials?: boolean;
51
51
  useCache?: boolean;
52
+ osServer?: boolean;
52
53
  }
53
54
  /**
54
55
  * 响应接口
@@ -0,0 +1,152 @@
1
+ import { ProductsModule } from './modules/products';
2
+ import { MenuModule } from './modules/menu';
3
+ import { QuotationModule } from './modules/quotation';
4
+ import { ScheduleModuleEx } from './modules/schedule';
5
+ import { PisellCore, ServerModuleConfig, InitializeServerOptions } from '../types';
6
+ import type { RouteHandler, HttpMethod, RouteDefinition, Router, ModuleRegistryConfig, RequestSetting } from './types';
7
+ export type { RouteHandler, HttpMethod, RouteDefinition, Router, ModuleRegistryConfig, };
8
+ /**
9
+ * Server 类
10
+ * 用于注册和管理服务端模块
11
+ */
12
+ declare class Server {
13
+ private core;
14
+ products?: ProductsModule;
15
+ menu?: MenuModule;
16
+ quotation?: QuotationModule;
17
+ schedule?: ScheduleModuleEx;
18
+ router: Router;
19
+ private moduleRegistry;
20
+ constructor(core: PisellCore);
21
+ /**
22
+ * 注册路由
23
+ * @param routes 路由定义数组
24
+ */
25
+ private registerRoutes;
26
+ /**
27
+ * 注册单个模块并自动注册其路由
28
+ * @param module 模块实例
29
+ * @param options 模块配置
30
+ * @param moduleName 模块名称(用于日志)
31
+ */
32
+ private registerModuleWithRoutes;
33
+ /**
34
+ * 根据模块名称注册单个模块
35
+ * @param moduleConfig 模块配置(可以是字符串或配置对象)
36
+ */
37
+ private registerModuleByName;
38
+ /**
39
+ * 注册指定的服务端模块
40
+ * @param moduleConfigs 要注册的模块配置数组(模块名称或配置对象)
41
+ */
42
+ registerModules(moduleConfigs?: (string | ServerModuleConfig)[]): Promise<{
43
+ module: any;
44
+ config: ModuleRegistryConfig;
45
+ shouldPreload: boolean;
46
+ }[]>;
47
+ /**
48
+ * 预加载指定模块的数据
49
+ * @param registeredModules 已注册的模块信息
50
+ */
51
+ preloadModulesData(registeredModules: Array<{
52
+ module: any;
53
+ config: ModuleRegistryConfig;
54
+ shouldPreload: boolean;
55
+ }>, options?: InitializeServerOptions): Promise<void>;
56
+ /**
57
+ * 初始化 Server(注册模块并预加载数据)
58
+ * @param moduleConfigs 要注册的模块配置
59
+ * @param autoPreload 是否自动预加载数据
60
+ */
61
+ initialize(moduleConfigs?: (string | ServerModuleConfig)[], autoPreload?: boolean, options?: InitializeServerOptions): Promise<{
62
+ module: any;
63
+ config: ModuleRegistryConfig;
64
+ shouldPreload: boolean;
65
+ }[]>;
66
+ /**
67
+ * 获取 Products 模块实例
68
+ */
69
+ getProducts(): ProductsModule | undefined;
70
+ /**
71
+ * 获取 Menu 模块实例
72
+ */
73
+ getMenu(): MenuModule | undefined;
74
+ /**
75
+ * 获取 Quotation 模块实例
76
+ */
77
+ getQuotation(): QuotationModule | undefined;
78
+ /**
79
+ * 获取 Schedule 模块实例
80
+ */
81
+ getSchedule(): ScheduleModuleEx | undefined;
82
+ /**
83
+ * 获取所有已注册的模块列表
84
+ */
85
+ getRegisteredModules(): string[];
86
+ /**
87
+ * 清空所有server模块的IndexedDB缓存
88
+ * @returns Promise<void>
89
+ */
90
+ clearAllIndexDB(): Promise<void>;
91
+ /**
92
+ * 获取所有注册的路由
93
+ */
94
+ getRoutes(): Router;
95
+ /**
96
+ * 根据方法和路径获取路由处理函数
97
+ * @param method HTTP 方法
98
+ * @param path 路径
99
+ */
100
+ getRouteHandler(method: HttpMethod, path: string): RouteHandler | undefined;
101
+ /**
102
+ * 检查路由是否存在
103
+ * @param method HTTP 方法
104
+ * @param path 路径
105
+ */
106
+ hasRoute(method: HttpMethod, path: string): boolean;
107
+ /**
108
+ * 执行路由处理函数
109
+ * @param method HTTP 方法
110
+ * @param path 路径
111
+ * @param params 请求参数
112
+ */
113
+ handleRoute(method: HttpMethod, path: string, params: {
114
+ url: string;
115
+ method: HttpMethod;
116
+ data?: any;
117
+ config?: RequestSetting;
118
+ }): Promise<any>;
119
+ /**
120
+ * 获取所有路由列表(用于调试和文档)
121
+ */
122
+ getAllRoutes(): Array<{
123
+ method: HttpMethod;
124
+ path: string;
125
+ }>;
126
+ /**
127
+ * 注册 Server 层的业务路由
128
+ * 这些路由需要编排多个模块的数据
129
+ * @private
130
+ */
131
+ private registerServerRoutes;
132
+ /**
133
+ * 处理商品查询请求(编排 Products、Menu、Schedule 模块)
134
+ * 这是一个业务编排方法,协调多个模块完成复杂的业务需求
135
+ */
136
+ private handleProductQuery;
137
+ /**
138
+ * 根据餐牌配置过滤商品
139
+ * @param products 所有商品列表
140
+ * @param activeMenuList 生效的餐牌列表
141
+ * @returns 过滤后的商品列表
142
+ * @private
143
+ */
144
+ private filterProductsByMenuConfig;
145
+ /**
146
+ * 处理获取日程时间段点的请求
147
+ * 通过餐牌ID列表获取所有相关日程的时间段点
148
+ */
149
+ private handleGetScheduleTimePoints;
150
+ }
151
+ export default Server;
152
+ export * from './modules';