@pisell/pisellos 2.3.74 → 2.3.76

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 (283) hide show
  1. package/dist/core/index.js +6 -10
  2. package/dist/model/strategy/adapter/promotion/index.js +9 -0
  3. package/dist/model/strategy/adapter/walletPass/example.js +3 -26
  4. package/dist/model/strategy/strategy-example.js +5 -19
  5. package/dist/modules/Cart/index.js +0 -3
  6. package/dist/modules/Cart/utils/cartProduct.js +0 -1
  7. package/dist/modules/Date/index.js +1 -5
  8. package/dist/modules/Discount/index.js +2 -4
  9. package/dist/modules/OpenData/index.js +0 -2
  10. package/dist/modules/Order/index.d.ts +1 -1
  11. package/dist/modules/Order/index.js +75 -91
  12. package/dist/modules/Order/types.d.ts +3 -1
  13. package/dist/modules/Payment/index.js +97 -162
  14. package/dist/modules/Rules/index.js +1 -4
  15. package/dist/modules/Schedule/index.js +0 -1
  16. package/dist/modules/Schedule/utils.js +0 -1
  17. package/dist/modules/Step/index.js +0 -1
  18. package/dist/plugins/request.js +1 -4
  19. package/dist/plugins/window.js +2 -6
  20. package/dist/server/index.js +97 -129
  21. package/dist/server/modules/menu/index.js +32 -41
  22. package/dist/server/modules/order/index.js +2 -4
  23. package/dist/server/modules/products/index.js +24 -42
  24. package/dist/server/modules/quotation/index.js +29 -38
  25. package/dist/server/modules/resource/index.js +3 -4
  26. package/dist/server/modules/schedule/index.js +27 -35
  27. package/dist/server/utils/product.js +0 -1
  28. package/dist/solution/BaseSales/index.js +100 -72
  29. package/dist/solution/BaseSales/utils/cartPromotion.d.ts +5 -0
  30. package/dist/solution/BaseSales/utils/cartPromotion.js +15 -6
  31. package/dist/solution/BookingByStep/index.js +7 -59
  32. package/dist/solution/BookingByStep/utils/capacity.js +1 -11
  33. package/dist/solution/BookingByStep/utils/resources.js +1 -3
  34. package/dist/solution/BookingByStep/utils/timeslots.js +2 -43
  35. package/dist/solution/BookingTicket/index.js +0 -2
  36. package/dist/solution/BookingTicket/utils/scan/cloudSearch.js +6 -7
  37. package/dist/solution/BookingTicket/utils/scan/handleScan.js +25 -31
  38. package/dist/solution/BookingTicket/utils/scan/index.js +6 -10
  39. package/dist/solution/BuyTickets/index.js +9 -12
  40. package/dist/solution/Checkout/index.js +177 -252
  41. package/dist/solution/Checkout/utils/index.js +4 -16
  42. package/dist/solution/RegisterAndLogin/index.js +30 -76
  43. package/dist/solution/ScanOrder/index.js +50 -60
  44. package/dist/solution/ShopDiscount/index.js +2 -7
  45. package/dist/solution/VenueBooking/index.js +45 -55
  46. package/dist/utils/task.js +15 -18
  47. package/dist/utils/watch.js +0 -1
  48. package/lib/apis/picoding.js +2 -0
  49. package/lib/core/index.js +134 -134
  50. package/lib/effects/index.js +46 -57
  51. package/lib/index.js +82 -49
  52. package/lib/model/index.js +14 -21
  53. package/lib/model/strategy/adapter/dataVariant/adapter.js +38 -50
  54. package/lib/model/strategy/adapter/dataVariant/evaluator.js +162 -236
  55. package/lib/model/strategy/adapter/dataVariant/examples.js +229 -237
  56. package/lib/model/strategy/adapter/dataVariant/index.js +39 -34
  57. package/lib/model/strategy/adapter/dataVariant/type.js +57 -28
  58. package/lib/model/strategy/adapter/index.js +100 -64
  59. package/lib/model/strategy/adapter/itemRule/adapter.js +156 -144
  60. package/lib/model/strategy/adapter/itemRule/evaluator.js +36 -48
  61. package/lib/model/strategy/adapter/itemRule/examples.js +295 -225
  62. package/lib/model/strategy/adapter/itemRule/index.js +83 -57
  63. package/lib/model/strategy/adapter/itemRule/type.js +97 -36
  64. package/lib/model/strategy/adapter/promotion/adapter.js +91 -69
  65. package/lib/model/strategy/adapter/promotion/evaluator.js +444 -310
  66. package/lib/model/strategy/adapter/promotion/examples.js +222 -234
  67. package/lib/model/strategy/adapter/promotion/index.js +1 -0
  68. package/lib/model/strategy/adapter/promotion/type.js +243 -36
  69. package/lib/model/strategy/adapter/type.js +4 -16
  70. package/lib/model/strategy/adapter/walletPass/evaluator.js +180 -150
  71. package/lib/model/strategy/adapter/walletPass/example.js +217 -190
  72. package/lib/model/strategy/adapter/walletPass/index.js +75 -51
  73. package/lib/model/strategy/adapter/walletPass/locales.js +36 -58
  74. package/lib/model/strategy/adapter/walletPass/type.js +4 -16
  75. package/lib/model/strategy/adapter/walletPass/utils.js +588 -378
  76. package/lib/model/strategy/engine.js +270 -168
  77. package/lib/model/strategy/index.js +49 -34
  78. package/lib/model/strategy/strategy-example.js +243 -239
  79. package/lib/model/strategy/type.js +100 -40
  80. package/lib/modules/Account/index.js +39 -53
  81. package/lib/modules/Account/types.js +20 -33
  82. package/lib/modules/AccountList/index.js +116 -154
  83. package/lib/modules/AccountList/types.js +30 -31
  84. package/lib/modules/AccountList/utils.js +18 -30
  85. package/lib/modules/BaseModule.js +23 -42
  86. package/lib/modules/BookingContext/index.js +158 -136
  87. package/lib/modules/BookingContext/types.js +46 -32
  88. package/lib/modules/BookingContext/utils/buildCacheItemFromOrderLine.js +138 -146
  89. package/lib/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.js +78 -83
  90. package/lib/modules/BookingContext/utils/cacheItemToBookingInput.js +170 -150
  91. package/lib/modules/BookingContext/utils/flexible.js +38 -55
  92. package/lib/modules/BookingContext/utils/formatResourceList.js +19 -34
  93. package/lib/modules/BookingContext/utils/index.js +124 -41
  94. package/lib/modules/BookingContext/utils/noResource.js +58 -70
  95. package/lib/modules/BookingContext/utils/orderLineDisplay.js +14 -41
  96. package/lib/modules/BookingContext/utils/productExtend.js +202 -155
  97. package/lib/modules/BookingContext/utils/resourceErrors.js +53 -53
  98. package/lib/modules/BookingContext/utils/resourceSelection.js +19 -41
  99. package/lib/modules/BookingContext/utils/resources.js +209 -167
  100. package/lib/modules/BookingContext/utils/serviceTimes.js +115 -116
  101. package/lib/modules/BookingContext/utils/timeSlices.js +76 -86
  102. package/lib/modules/Cart/index.js +170 -124
  103. package/lib/modules/Cart/types.js +46 -51
  104. package/lib/modules/Cart/utils/cartAccount.js +40 -39
  105. package/lib/modules/Cart/utils/cartDate.js +56 -61
  106. package/lib/modules/Cart/utils/cartDiscount.js +28 -33
  107. package/lib/modules/Cart/utils/cartNote.js +27 -32
  108. package/lib/modules/Cart/utils/cartProduct.js +321 -251
  109. package/lib/modules/Cart/utils/cartRelationForms.js +29 -35
  110. package/lib/modules/Cart/utils/cartResource.js +70 -78
  111. package/lib/modules/Cart/utils/changePrice.js +22 -50
  112. package/lib/modules/Cart/utils/index.js +106 -48
  113. package/lib/modules/Customer/constants.js +13 -34
  114. package/lib/modules/Customer/index.js +235 -172
  115. package/lib/modules/Customer/types.js +38 -35
  116. package/lib/modules/Date/index.js +116 -115
  117. package/lib/modules/Date/types.js +16 -28
  118. package/lib/modules/Date/utils.js +174 -123
  119. package/lib/modules/Discount/index.js +122 -127
  120. package/lib/modules/Discount/types.js +9 -31
  121. package/lib/modules/Guests/index.js +30 -56
  122. package/lib/modules/Guests/types.js +23 -33
  123. package/lib/modules/Holder/index.js +209 -189
  124. package/lib/modules/Holder/types.js +4 -16
  125. package/lib/modules/Holder/utils.js +20 -49
  126. package/lib/modules/OpenData/index.js +70 -76
  127. package/lib/modules/OpenData/types.js +4 -16
  128. package/lib/modules/OpenData/utils.js +44 -78
  129. package/lib/modules/Order/index.d.ts +1 -1
  130. package/lib/modules/Order/index.js +1733 -2121
  131. package/lib/modules/Order/payment-utils.js +77 -120
  132. package/lib/modules/Order/types.d.ts +3 -1
  133. package/lib/modules/Order/types.js +88 -35
  134. package/lib/modules/Order/utils/bundleDiscountHydration.js +41 -74
  135. package/lib/modules/Order/utils/discountProductLineIdentity.js +142 -100
  136. package/lib/modules/Order/utils/manualProductDiscount.js +124 -123
  137. package/lib/modules/Order/utils/orderCollectionIdentity.js +184 -244
  138. package/lib/modules/Order/utils.js +814 -647
  139. package/lib/modules/Payment/cash.js +20 -33
  140. package/lib/modules/Payment/cashRecommendationAlgorithm.js +145 -76
  141. package/lib/modules/Payment/eftpos.js +16 -30
  142. package/lib/modules/Payment/index.js +532 -399
  143. package/lib/modules/Payment/mx51.js +1 -0
  144. package/lib/modules/Payment/types.js +230 -108
  145. package/lib/modules/Payment/utils.js +52 -51
  146. package/lib/modules/Payment/walletpass.js +485 -660
  147. package/lib/modules/Product/index.js +51 -46
  148. package/lib/modules/Product/types.js +4 -16
  149. package/lib/modules/Product/utils.js +32 -33
  150. package/lib/modules/ProductList/index.js +113 -123
  151. package/lib/modules/ProductList/types.js +9 -31
  152. package/lib/modules/Quotation/index.js +81 -118
  153. package/lib/modules/Quotation/types.js +4 -16
  154. package/lib/modules/Resource/index.js +27 -59
  155. package/lib/modules/Resource/types.js +22 -32
  156. package/lib/modules/Resource/utils.js +30 -38
  157. package/lib/modules/ResourcePlanner/index.js +25 -23
  158. package/lib/modules/ResourcePlanner/localClock.js +54 -119
  159. package/lib/modules/ResourcePlanner/planner.js +589 -770
  160. package/lib/modules/ResourcePlanner/types.js +10 -29
  161. package/lib/modules/Rules/index.js +1218 -959
  162. package/lib/modules/Rules/types.js +17 -40
  163. package/lib/modules/SalesSummary/index.js +85 -90
  164. package/lib/modules/SalesSummary/types.js +4 -16
  165. package/lib/modules/SalesSummary/utils.js +355 -430
  166. package/lib/modules/ScanOrderLogger/index.js +59 -79
  167. package/lib/modules/ScanOrderLogger/providers/feishu.js +54 -78
  168. package/lib/modules/ScanOrderLogger/providers/grafana.js +13 -36
  169. package/lib/modules/ScanOrderLogger/types.js +4 -16
  170. package/lib/modules/Schedule/getDateIsInSchedule.js +334 -163
  171. package/lib/modules/Schedule/index.js +100 -114
  172. package/lib/modules/Schedule/type.js +4 -16
  173. package/lib/modules/Schedule/types.js +4 -16
  174. package/lib/modules/Schedule/utils.js +433 -291
  175. package/lib/modules/Step/index.js +40 -52
  176. package/lib/modules/Step/tyeps.js +4 -16
  177. package/lib/modules/Summary/index.js +66 -71
  178. package/lib/modules/Summary/types.js +4 -16
  179. package/lib/modules/Summary/utils.js +773 -418
  180. package/lib/modules/SurchargeList/index.js +46 -60
  181. package/lib/modules/SurchargeList/types.js +4 -16
  182. package/lib/modules/index.js +245 -63
  183. package/lib/plugins/app.js +4 -16
  184. package/lib/plugins/index.js +36 -25
  185. package/lib/plugins/request.js +137 -126
  186. package/lib/plugins/shopStore.js +4 -16
  187. package/lib/plugins/user.js +4 -16
  188. package/lib/plugins/window.js +171 -179
  189. package/lib/server/index.js +3050 -2665
  190. package/lib/server/modules/floor-plan/index.js +118 -134
  191. package/lib/server/modules/floor-plan/types.js +15 -30
  192. package/lib/server/modules/index.js +106 -68
  193. package/lib/server/modules/menu/index.js +142 -122
  194. package/lib/server/modules/menu/types.js +18 -31
  195. package/lib/server/modules/order/index.js +784 -1002
  196. package/lib/server/modules/order/types.js +122 -33
  197. package/lib/server/modules/order/utils/filterBookings.js +219 -194
  198. package/lib/server/modules/order/utils/filterOrders.js +118 -92
  199. package/lib/server/modules/payment/index.js +59 -83
  200. package/lib/server/modules/payment/types.js +4 -16
  201. package/lib/server/modules/products/index.js +583 -471
  202. package/lib/server/modules/products/types.js +44 -34
  203. package/lib/server/modules/quotation/index.js +137 -172
  204. package/lib/server/modules/quotation/types.js +21 -31
  205. package/lib/server/modules/resource/index.js +220 -186
  206. package/lib/server/modules/resource/types.js +42 -33
  207. package/lib/server/modules/schedule/index.js +135 -123
  208. package/lib/server/modules/schedule/types.js +14 -21
  209. package/lib/server/modules/schedule/utils.js +334 -163
  210. package/lib/server/types.js +4 -16
  211. package/lib/server/utils/index.js +25 -23
  212. package/lib/server/utils/product.js +196 -139
  213. package/lib/server/utils/schedule.js +34 -41
  214. package/lib/server/utils/small-ticket.js +479 -456
  215. package/lib/server/utils/time.js +40 -49
  216. package/lib/solution/BaseSales/index.js +1220 -1412
  217. package/lib/solution/BaseSales/types.js +42 -38
  218. package/lib/solution/BaseSales/utils/cartPromotion.d.ts +5 -0
  219. package/lib/solution/BaseSales/utils/cartPromotion.js +652 -498
  220. package/lib/solution/BaseSales/utils/parseSalesResponse.js +85 -105
  221. package/lib/solution/BaseSales/utils/quotationPrice.js +56 -114
  222. package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +108 -145
  223. package/lib/solution/BaseSales/utils.js +158 -143
  224. package/lib/solution/BookingByStep/index.js +1527 -1340
  225. package/lib/solution/BookingByStep/types.js +40 -99
  226. package/lib/solution/BookingByStep/utils/capacity.js +192 -160
  227. package/lib/solution/BookingByStep/utils/products.js +42 -52
  228. package/lib/solution/BookingByStep/utils/resources.js +527 -330
  229. package/lib/solution/BookingByStep/utils/stock.js +65 -44
  230. package/lib/solution/BookingByStep/utils/timeslots.js +129 -131
  231. package/lib/solution/BookingTicket/index.js +607 -522
  232. package/lib/solution/BookingTicket/types.js +99 -77
  233. package/lib/solution/BookingTicket/utils/addProductDecision.js +226 -189
  234. package/lib/solution/BookingTicket/utils/addTimeAvailability.js +58 -89
  235. package/lib/solution/BookingTicket/utils/bookingStatus.js +107 -78
  236. package/lib/solution/BookingTicket/utils/cartView.js +114 -99
  237. package/lib/solution/BookingTicket/utils/exampleData.js +185 -0
  238. package/lib/solution/BookingTicket/utils/orderCustomer.js +18 -41
  239. package/lib/solution/BookingTicket/utils/resolveBestAddTimePlan.js +219 -86
  240. package/lib/solution/BookingTicket/utils/scan/applyGlobalScan.js +168 -116
  241. package/lib/solution/BookingTicket/utils/scan/cloudSearch.js +79 -91
  242. package/lib/solution/BookingTicket/utils/scan/formatGlobalScan.js +54 -41
  243. package/lib/solution/BookingTicket/utils/scan/handleScan.js +84 -81
  244. package/lib/solution/BookingTicket/utils/scan/index.js +98 -104
  245. package/lib/solution/BookingTicket/utils/scan/scanCache.js +90 -43
  246. package/lib/solution/BookingTicket/utils/scan/scanProductValues.js +52 -64
  247. package/lib/solution/BookingTicket/utils/sessionCatalogStale.js +56 -58
  248. package/lib/solution/BookingTicket/utils/weighingProductSku.js +34 -48
  249. package/lib/solution/BuyTickets/index.js +67 -70
  250. package/lib/solution/BuyTickets/types.js +22 -38
  251. package/lib/solution/Checkout/index.js +1451 -1158
  252. package/lib/solution/Checkout/types.js +91 -61
  253. package/lib/solution/Checkout/utils/index.js +228 -156
  254. package/lib/solution/PlaceOrder/index.js +55 -0
  255. package/lib/solution/RegisterAndLogin/config.js +493 -460
  256. package/lib/solution/RegisterAndLogin/index.js +633 -630
  257. package/lib/solution/RegisterAndLogin/types.js +189 -76
  258. package/lib/solution/RegisterAndLogin/utils.js +183 -125
  259. package/lib/solution/Sales/index.js +328 -324
  260. package/lib/solution/Sales/types.js +27 -33
  261. package/lib/solution/ScanOrder/index.js +832 -864
  262. package/lib/solution/ScanOrder/types.js +33 -34
  263. package/lib/solution/ScanOrder/utils.js +409 -374
  264. package/lib/solution/ShopDiscount/index.js +226 -232
  265. package/lib/solution/ShopDiscount/types.js +15 -37
  266. package/lib/solution/ShopDiscount/utils.js +300 -172
  267. package/lib/solution/UnifiedBookingSales/index.js +1035 -1201
  268. package/lib/solution/UnifiedBookingSales/remoteOccupancyCache.js +99 -159
  269. package/lib/solution/UnifiedBookingSales/types.js +10 -32
  270. package/lib/solution/VenueBooking/index.js +811 -879
  271. package/lib/solution/VenueBooking/types.js +19 -39
  272. package/lib/solution/VenueBooking/utils/dateSummary.js +27 -56
  273. package/lib/solution/VenueBooking/utils/resource.js +31 -54
  274. package/lib/solution/VenueBooking/utils/slotMerge.js +94 -107
  275. package/lib/solution/VenueBooking/utils/timeSlot.js +132 -132
  276. package/lib/solution/VenueBooking/utils.js +130 -67
  277. package/lib/solution/index.js +124 -41
  278. package/lib/store/createStore.js +32 -29
  279. package/lib/types/index.js +4 -16
  280. package/lib/utils/payment-number.js +26 -46
  281. package/lib/utils/task.js +36 -36
  282. package/lib/utils/watch.js +81 -47
  283. package/package.json +2 -1
@@ -1,53 +1,44 @@
1
- var __defProp = Object.defineProperty;
2
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
- var __getOwnPropNames = Object.getOwnPropertyNames;
4
- var __hasOwnProp = Object.prototype.hasOwnProperty;
5
- var __export = (target, all) => {
6
- for (var name in all)
7
- __defProp(target, name, { get: all[name], enumerable: true });
8
- };
9
- var __copyProps = (to, from, except, desc) => {
10
- if (from && typeof from === "object" || typeof from === "function") {
11
- for (let key of __getOwnPropNames(from))
12
- if (!__hasOwnProp.call(to, key) && key !== except)
13
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
- }
15
- return to;
16
- };
17
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
1
+ "use strict";
18
2
 
19
- // src/server/modules/floor-plan/index.ts
20
- var floor_plan_exports = {};
21
- __export(floor_plan_exports, {
22
- FloorPlanModule: () => FloorPlanModule
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
23
5
  });
24
- module.exports = __toCommonJS(floor_plan_exports);
25
- var import_BaseModule = require("../../../modules/BaseModule");
26
- var import_types = require("./types");
27
- var FLOOR_PLAN_SYNC_DEBOUNCE_MS = 3e3;
28
- var FLOOR_PLAN_STORE_NAME = "floor_plans";
29
- var FloorPlanModule = class extends import_BaseModule.BaseModule {
6
+ exports.FloorPlanModule = void 0;
7
+ var _BaseModule = require("../../../modules/BaseModule");
8
+ var _types = require("./types");
9
+ const FLOOR_PLAN_SYNC_DEBOUNCE_MS = 3000;
10
+ const FLOOR_PLAN_STORE_NAME = 'floor_plans';
11
+
12
+ /**
13
+ * 平面图模块:预加载列表、pubsub 同步、供 OS Server 路由读本地 store
14
+ */
15
+ class FloorPlanModule extends _BaseModule.BaseModule {
16
+ defaultName = 'floor_plan';
17
+ defaultVersion = '1.0.0';
18
+ store;
19
+ request;
20
+ logger;
21
+ dbManager;
22
+ floorPlanDataSource;
23
+ pendingSyncMessages = [];
24
+ syncTimer;
30
25
  constructor(name, version) {
31
26
  super(name, version);
32
- this.defaultName = "floor_plan";
33
- this.defaultVersion = "1.0.0";
34
- this.pendingSyncMessages = [];
35
27
  }
36
28
  async initialize(core, options) {
37
- var _a;
38
29
  this.core = core;
39
30
  this.store = options.store;
40
- if (Array.isArray((_a = options == null ? void 0 : options.initialState) == null ? void 0 : _a.list) && options.initialState.list.length > 0) {
31
+ if (Array.isArray(options?.initialState?.list) && options.initialState.list.length > 0) {
41
32
  this.store.list = options.initialState.list;
42
33
  this.syncMaps();
43
- this.core.effects.emit(import_types.FloorPlanHooks.onFloorPlansChanged, this.store.list);
34
+ this.core.effects.emit(_types.FloorPlanHooks.onFloorPlansChanged, this.store.list);
44
35
  } else {
45
36
  this.store.list = [];
46
- this.store.map = /* @__PURE__ */ new Map();
47
- this.store.codeMap = /* @__PURE__ */ new Map();
37
+ this.store.map = new Map();
38
+ this.store.codeMap = new Map();
48
39
  }
49
- this.request = core.getPlugin("request");
50
- const appPlugin = core.getPlugin("app");
40
+ this.request = core.getPlugin('request');
41
+ const appPlugin = core.getPlugin('app');
51
42
  if (appPlugin) {
52
43
  const app = appPlugin.getApp();
53
44
  this.logger = app.logger;
@@ -57,47 +48,46 @@ var FloorPlanModule = class extends import_BaseModule.BaseModule {
57
48
  this.setupFloorPlanSync();
58
49
  }
59
50
  logInfo(title, metadata) {
60
- var _a, _b;
61
51
  try {
62
- (_b = (_a = this.logger) == null ? void 0 : _a.addLog) == null ? void 0 : _b.call(_a, {
63
- type: "info",
52
+ this.logger?.addLog?.({
53
+ type: 'info',
64
54
  title: `[FloorPlanModule] ${title}`,
65
55
  metadata: metadata || {}
66
56
  });
67
57
  } catch {
58
+ // ignore
68
59
  }
69
60
  }
70
61
  logWarning(title, metadata) {
71
- var _a, _b;
72
62
  try {
73
- (_b = (_a = this.logger) == null ? void 0 : _a.addLog) == null ? void 0 : _b.call(_a, {
74
- type: "warning",
63
+ this.logger?.addLog?.({
64
+ type: 'warning',
75
65
  title: `[FloorPlanModule] ${title}`,
76
66
  metadata: metadata || {}
77
67
  });
78
68
  } catch {
69
+ // ignore
79
70
  }
80
71
  }
81
72
  logError(title, metadata) {
82
- var _a, _b;
83
73
  try {
84
- (_b = (_a = this.logger) == null ? void 0 : _a.addLog) == null ? void 0 : _b.call(_a, {
85
- type: "error",
74
+ this.logger?.addLog?.({
75
+ type: 'error',
86
76
  title: `[FloorPlanModule] ${title}`,
87
77
  metadata: metadata || {}
88
78
  });
89
79
  } catch {
80
+ // ignore
90
81
  }
91
82
  }
92
83
  idKey(id) {
93
84
  return String(id);
94
85
  }
95
86
  syncMaps() {
96
- this.store.map = /* @__PURE__ */ new Map();
97
- this.store.codeMap = /* @__PURE__ */ new Map();
87
+ this.store.map = new Map();
88
+ this.store.codeMap = new Map();
98
89
  for (const item of this.store.list) {
99
- if ((item == null ? void 0 : item.id) == null)
100
- continue;
90
+ if (item?.id == null) continue;
101
91
  const key = this.idKey(item.id);
102
92
  this.store.map.set(key, item);
103
93
  if (item.code) {
@@ -105,12 +95,12 @@ var FloorPlanModule = class extends import_BaseModule.BaseModule {
105
95
  }
106
96
  }
107
97
  }
98
+
108
99
  /** 与接口约定一致:sort 升序,id 降序 */
109
100
  getSortedList() {
110
101
  return [...this.store.list].sort((a, b) => {
111
102
  const sortDiff = Number(a.sort ?? 0) - Number(b.sort ?? 0);
112
- if (sortDiff !== 0)
113
- return sortDiff;
103
+ if (sortDiff !== 0) return sortDiff;
114
104
  return Number(b.id) - Number(a.id);
115
105
  });
116
106
  }
@@ -121,69 +111,66 @@ var FloorPlanModule = class extends import_BaseModule.BaseModule {
121
111
  return this.store.codeMap.get(String(code));
122
112
  }
123
113
  replaceStore(list) {
124
- this.store.list = list.map((i) => ({ ...i }));
114
+ this.store.list = list.map(i => ({
115
+ ...i
116
+ }));
125
117
  this.syncMaps();
126
118
  }
127
119
  mergeItems(items) {
128
- if (items.length === 0)
129
- return;
120
+ if (items.length === 0) return;
130
121
  const byId = new Map(this.store.map);
131
122
  for (const item of items) {
132
- if ((item == null ? void 0 : item.id) == null)
133
- continue;
134
- byId.set(this.idKey(item.id), { ...item });
123
+ if (item?.id == null) continue;
124
+ byId.set(this.idKey(item.id), {
125
+ ...item
126
+ });
135
127
  }
136
128
  this.store.list = Array.from(byId.values());
137
129
  this.syncMaps();
138
130
  }
139
131
  removeByIds(ids) {
140
- if (ids.length === 0)
141
- return;
142
- const set = new Set(ids.map((id) => this.idKey(id)));
143
- this.store.list = this.store.list.filter((p) => !set.has(this.idKey(p.id)));
132
+ if (ids.length === 0) return;
133
+ const set = new Set(ids.map(id => this.idKey(id)));
134
+ this.store.list = this.store.list.filter(p => !set.has(this.idKey(p.id)));
144
135
  this.syncMaps();
145
136
  }
146
137
  async loadListFromServer() {
147
138
  try {
148
- const res = await this.request.get(
149
- `/schedule/floor-plan`,
150
- {},
151
- { isShopApi: true }
152
- );
139
+ const res = await this.request.get(`/schedule/floor-plan`, {}, {
140
+ isShopApi: true
141
+ });
153
142
  const body = res;
154
- const raw = (body == null ? void 0 : body.data) !== void 0 ? body.data : body;
143
+ const raw = body?.data !== undefined ? body.data : body;
155
144
  const list = Array.isArray(raw) ? raw : [];
156
145
  return list;
157
146
  } catch (e) {
158
- this.logWarning("loadListFromServer 失败", {
147
+ this.logWarning('loadListFromServer 失败', {
159
148
  error: e instanceof Error ? e.message : String(e)
160
149
  });
161
150
  return [];
162
151
  }
163
152
  }
164
153
  async loadListFromSQLite() {
165
- if (!this.dbManager)
166
- return [];
154
+ if (!this.dbManager) return [];
167
155
  try {
168
156
  const list = await this.dbManager.getAll(FLOOR_PLAN_STORE_NAME);
169
157
  return Array.isArray(list) ? list : [];
170
158
  } catch (error) {
171
- this.logWarning("从 SQLite 读取平面图失败", {
159
+ this.logWarning('从 SQLite 读取平面图失败', {
172
160
  error: error instanceof Error ? error.message : String(error)
173
161
  });
174
162
  return [];
175
163
  }
176
164
  }
177
165
  async saveListToSQLite(list) {
178
- if (!this.dbManager)
179
- return;
166
+ if (!this.dbManager) return;
180
167
  try {
181
168
  await this.dbManager.clear(FLOOR_PLAN_STORE_NAME);
182
169
  if (list.length > 0) {
183
170
  await this.dbManager.bulkAdd(FLOOR_PLAN_STORE_NAME, list);
184
171
  }
185
172
  } catch (error) {
186
- this.logWarning("保存平面图到 SQLite 失败", {
173
+ this.logWarning('保存平面图到 SQLite 失败', {
187
174
  count: list.length,
188
175
  error: error instanceof Error ? error.message : String(error)
189
176
  });
@@ -192,24 +179,24 @@ var FloorPlanModule = class extends import_BaseModule.BaseModule {
192
179
  async refreshListFromServer() {
193
180
  const list = await this.loadListFromServer();
194
181
  if (list.length === 0) {
195
- this.logWarning("远端平面图刷新完成但列表为空");
182
+ this.logWarning('远端平面图刷新完成但列表为空');
196
183
  return;
197
184
  }
198
185
  this.replaceStore(list);
199
186
  await this.saveListToSQLite(list);
200
- this.core.effects.emit(import_types.FloorPlanHooks.onFloorPlansChanged, this.getSortedList());
201
- this.logInfo("远端平面图刷新完成", { count: list.length });
187
+ this.core.effects.emit(_types.FloorPlanHooks.onFloorPlansChanged, this.getSortedList());
188
+ this.logInfo('远端平面图刷新完成', {
189
+ count: list.length
190
+ });
202
191
  }
203
192
  async fetchByIdFromServer(id) {
204
193
  try {
205
- const res = await this.request.get(
206
- `/schedule/floor-plan/${id}`,
207
- {},
208
- { isShopApi: true }
209
- );
194
+ const res = await this.request.get(`/schedule/floor-plan/${id}`, {}, {
195
+ isShopApi: true
196
+ });
210
197
  const body = res;
211
- const data = (body == null ? void 0 : body.data) !== void 0 ? body.data : body;
212
- return data && typeof data === "object" ? data : null;
198
+ const data = body?.data !== undefined ? body.data : body;
199
+ return data && typeof data === 'object' ? data : null;
213
200
  } catch {
214
201
  return null;
215
202
  }
@@ -217,86 +204,88 @@ var FloorPlanModule = class extends import_BaseModule.BaseModule {
217
204
  async fetchByCodeFromServer(code) {
218
205
  try {
219
206
  const enc = encodeURIComponent(code);
220
- const res = await this.request.get(
221
- `/schedule/floor-plan/code/${enc}`,
222
- {},
223
- { isShopApi: true }
224
- );
207
+ const res = await this.request.get(`/schedule/floor-plan/code/${enc}`, {}, {
208
+ isShopApi: true
209
+ });
225
210
  const body = res;
226
- const data = (body == null ? void 0 : body.data) !== void 0 ? body.data : body;
227
- return data && typeof data === "object" ? data : null;
211
+ const data = body?.data !== undefined ? body.data : body;
212
+ return data && typeof data === 'object' ? data : null;
228
213
  } catch {
229
214
  return null;
230
215
  }
231
216
  }
232
217
  async preload() {
233
- this.logInfo("开始预加载平面图列表");
218
+ this.logInfo('开始预加载平面图列表');
234
219
  const cachedList = await this.loadListFromSQLite();
235
220
  if (cachedList.length > 0) {
236
221
  this.replaceStore(cachedList);
237
- this.core.effects.emit(import_types.FloorPlanHooks.onFloorPlansChanged, this.getSortedList());
238
- this.logInfo("预加载完成(SQLite)", { count: cachedList.length });
239
- void this.refreshListFromServer().catch((error) => {
240
- this.logWarning("后台刷新平面图失败,继续使用本地数据", {
222
+ this.core.effects.emit(_types.FloorPlanHooks.onFloorPlansChanged, this.getSortedList());
223
+ this.logInfo('预加载完成(SQLite)', {
224
+ count: cachedList.length
225
+ });
226
+
227
+ // 二次启动立即使用本地平面图,远端刷新完成后自动更新 store 与订阅者。
228
+ void this.refreshListFromServer().catch(error => {
229
+ this.logWarning('后台刷新平面图失败,继续使用本地数据', {
241
230
  error: error instanceof Error ? error.message : String(error)
242
231
  });
243
232
  });
244
233
  return;
245
234
  }
235
+
236
+ // 首次启动没有缓存时仍等待一次远端请求,并为后续启动建立缓存。
246
237
  await this.refreshListFromServer();
247
238
  }
248
239
  initFloorPlanDataSource() {
249
- var _a, _b;
250
- const Ctor = (_b = (_a = this.core.serverOptions) == null ? void 0 : _a.All_DATA_SOURCES) == null ? void 0 : _b.FloorPlanDataSource;
240
+ const Ctor = this.core.serverOptions?.All_DATA_SOURCES?.FloorPlanDataSource;
251
241
  if (!Ctor) {
252
- this.logWarning("FloorPlanDataSource 不可用,跳过 pubsub 同步");
242
+ this.logWarning('FloorPlanDataSource 不可用,跳过 pubsub 同步');
253
243
  return;
254
244
  }
255
245
  this.floorPlanDataSource = new Ctor();
256
- this.logInfo("FloorPlanDataSource 实例已创建");
246
+ this.logInfo('FloorPlanDataSource 实例已创建');
257
247
  }
258
248
  setupFloorPlanSync() {
259
- if (!this.floorPlanDataSource)
260
- return;
249
+ if (!this.floorPlanDataSource) return;
261
250
  const flush = () => {
262
- if (this.syncTimer)
263
- clearTimeout(this.syncTimer);
251
+ if (this.syncTimer) clearTimeout(this.syncTimer);
264
252
  this.syncTimer = setTimeout(() => {
265
253
  this.processFloorPlanSyncMessages();
266
254
  }, FLOOR_PLAN_SYNC_DEBOUNCE_MS);
267
255
  };
268
256
  this.floorPlanDataSource.run({
269
257
  pubsub: {
270
- callback: (res) => {
271
- const data = (res == null ? void 0 : res.data) || res;
272
- if (!data || data.module !== "floor_plan")
273
- return;
274
- this.pendingSyncMessages.push({ ...data });
258
+ callback: res => {
259
+ const data = res?.data || res;
260
+ if (!data || data.module !== 'floor_plan') return;
261
+ this.pendingSyncMessages.push({
262
+ ...data
263
+ });
275
264
  flush();
276
265
  }
277
266
  }
278
- }).catch((err) => {
279
- this.logError("setupFloorPlanSync: DataSource run 出错", {
267
+ }).catch(err => {
268
+ this.logError('setupFloorPlanSync: DataSource run 出错', {
280
269
  error: err instanceof Error ? err.message : String(err)
281
270
  });
282
271
  });
283
- this.logInfo("floor_plan pubsub 订阅已建立");
272
+ this.logInfo('floor_plan pubsub 订阅已建立');
284
273
  }
285
274
  async processFloorPlanSyncMessages() {
286
- var _a, _b;
287
275
  const messages = [...this.pendingSyncMessages];
288
276
  this.pendingSyncMessages = [];
289
- if (messages.length === 0)
290
- return;
291
- this.logInfo("processFloorPlanSyncMessages 开始", { count: messages.length });
277
+ if (messages.length === 0) return;
278
+ this.logInfo('processFloorPlanSyncMessages 开始', {
279
+ count: messages.length
280
+ });
292
281
  let changed = false;
293
282
  const deleteIds = [];
294
283
  const bodyItems = [];
295
284
  let needFullList = false;
296
- const partialIds = /* @__PURE__ */ new Set();
285
+ const partialIds = new Set();
297
286
  for (const msg of messages) {
298
- if (msg.operation === "delete" || msg.action === "delete") {
299
- if ((_a = msg.ids) == null ? void 0 : _a.length) {
287
+ if (msg.operation === 'delete' || msg.action === 'delete') {
288
+ if (msg.ids?.length) {
300
289
  deleteIds.push(...msg.ids);
301
290
  } else if (msg.id != null) {
302
291
  deleteIds.push(msg.id);
@@ -304,7 +293,7 @@ var FloorPlanModule = class extends import_BaseModule.BaseModule {
304
293
  continue;
305
294
  }
306
295
  const body = msg.body;
307
- const hasBody = body && typeof body === "object" && Object.keys(body).length > 0 && body.id != null;
296
+ const hasBody = body && typeof body === 'object' && Object.keys(body).length > 0 && body.id != null;
308
297
  if (hasBody) {
309
298
  bodyItems.push(body);
310
299
  continue;
@@ -313,7 +302,7 @@ var FloorPlanModule = class extends import_BaseModule.BaseModule {
313
302
  needFullList = true;
314
303
  continue;
315
304
  }
316
- if (((_b = msg.ids) == null ? void 0 : _b.length) === 1) {
305
+ if (msg.ids?.length === 1) {
317
306
  partialIds.add(msg.ids[0]);
318
307
  } else if (msg.id != null) {
319
308
  partialIds.add(msg.id);
@@ -336,8 +325,7 @@ var FloorPlanModule = class extends import_BaseModule.BaseModule {
336
325
  const fetched = [];
337
326
  for (const id of partialIds) {
338
327
  const one = await this.fetchByIdFromServer(id);
339
- if (one)
340
- fetched.push(one);
328
+ if (one) fetched.push(one);
341
329
  }
342
330
  if (fetched.length > 0) {
343
331
  this.mergeItems(fetched);
@@ -346,8 +334,8 @@ var FloorPlanModule = class extends import_BaseModule.BaseModule {
346
334
  }
347
335
  if (changed) {
348
336
  await this.saveListToSQLite(this.store.list);
349
- this.core.effects.emit(import_types.FloorPlanHooks.onFloorPlansChanged, this.getSortedList());
350
- this.core.effects.emit(import_types.FloorPlanHooks.onFloorPlanSyncCompleted, null);
337
+ this.core.effects.emit(_types.FloorPlanHooks.onFloorPlansChanged, this.getSortedList());
338
+ this.core.effects.emit(_types.FloorPlanHooks.onFloorPlanSyncCompleted, null);
351
339
  }
352
340
  }
353
341
  async clear() {
@@ -357,19 +345,15 @@ var FloorPlanModule = class extends import_BaseModule.BaseModule {
357
345
  await this.saveListToSQLite([]);
358
346
  }
359
347
  destroy() {
360
- var _a;
361
348
  if (this.syncTimer) {
362
349
  clearTimeout(this.syncTimer);
363
- this.syncTimer = void 0;
350
+ this.syncTimer = undefined;
364
351
  }
365
352
  this.pendingSyncMessages = [];
366
- if ((_a = this.floorPlanDataSource) == null ? void 0 : _a.destroy) {
353
+ if (this.floorPlanDataSource?.destroy) {
367
354
  this.floorPlanDataSource.destroy();
368
355
  }
369
356
  super.destroy();
370
357
  }
371
- };
372
- // Annotate the CommonJS export names for ESM import in node:
373
- 0 && (module.exports = {
374
- FloorPlanModule
375
- });
358
+ }
359
+ exports.FloorPlanModule = FloorPlanModule;
@@ -1,34 +1,19 @@
1
- var __defProp = Object.defineProperty;
2
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
- var __getOwnPropNames = Object.getOwnPropertyNames;
4
- var __hasOwnProp = Object.prototype.hasOwnProperty;
5
- var __export = (target, all) => {
6
- for (var name in all)
7
- __defProp(target, name, { get: all[name], enumerable: true });
8
- };
9
- var __copyProps = (to, from, except, desc) => {
10
- if (from && typeof from === "object" || typeof from === "function") {
11
- for (let key of __getOwnPropNames(from))
12
- if (!__hasOwnProp.call(to, key) && key !== except)
13
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
- }
15
- return to;
16
- };
17
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
1
+ "use strict";
18
2
 
19
- // src/server/modules/floor-plan/types.ts
20
- var types_exports = {};
21
- __export(types_exports, {
22
- FloorPlanHooks: () => FloorPlanHooks
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
23
5
  });
24
- module.exports = __toCommonJS(types_exports);
25
- var FloorPlanHooks = {
6
+ exports.FloorPlanHooks = void 0;
7
+ /**
8
+ * 平面图(floor-plan)Server 模块类型
9
+ * 与 GET /shop/schedule/floor-plan 系列接口数据结构对齐
10
+ */
11
+
12
+ /** pubsub / Ably 推送消息(与《平面图编辑器API文档》Socket 一节一致) */
13
+
14
+ const FloorPlanHooks = exports.FloorPlanHooks = {
26
15
  /** 本地列表变更(预加载、合并、删除后) */
27
- onFloorPlansChanged: "server_floor_plan:onFloorPlansChanged",
16
+ onFloorPlansChanged: 'server_floor_plan:onFloorPlansChanged',
28
17
  /** pubsub 同步处理完成,供 Server 向订阅者推送最新查询结果 */
29
- onFloorPlanSyncCompleted: "server_floor_plan:onFloorPlanSyncCompleted"
30
- };
31
- // Annotate the CommonJS export names for ESM import in node:
32
- 0 && (module.exports = {
33
- FloorPlanHooks
34
- });
18
+ onFloorPlanSyncCompleted: 'server_floor_plan:onFloorPlanSyncCompleted'
19
+ };