@pisell/pisellos 2.3.74 → 2.3.75
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.
- package/dist/core/index.js +6 -10
- package/dist/model/strategy/adapter/promotion/index.js +9 -0
- package/dist/model/strategy/adapter/walletPass/example.js +3 -26
- package/dist/model/strategy/strategy-example.js +5 -19
- package/dist/modules/Cart/index.js +0 -3
- package/dist/modules/Cart/utils/cartProduct.js +0 -1
- package/dist/modules/Date/index.js +1 -5
- package/dist/modules/Discount/index.js +2 -4
- package/dist/modules/OpenData/index.js +0 -2
- package/dist/modules/Order/index.js +36 -64
- package/dist/modules/Payment/index.js +97 -162
- package/dist/modules/Rules/index.js +1 -4
- package/dist/modules/Schedule/index.js +0 -1
- package/dist/modules/Schedule/utils.js +0 -1
- package/dist/modules/Step/index.js +0 -1
- package/dist/plugins/request.js +1 -4
- package/dist/plugins/window.js +2 -6
- package/dist/server/index.js +97 -129
- package/dist/server/modules/menu/index.js +32 -41
- package/dist/server/modules/order/index.js +2 -4
- package/dist/server/modules/products/index.js +24 -42
- package/dist/server/modules/quotation/index.js +29 -38
- package/dist/server/modules/resource/index.js +3 -4
- package/dist/server/modules/schedule/index.js +27 -35
- package/dist/server/utils/product.js +0 -1
- package/dist/solution/BaseSales/index.js +38 -41
- package/dist/solution/BookingByStep/index.js +7 -59
- package/dist/solution/BookingByStep/utils/capacity.js +1 -11
- package/dist/solution/BookingByStep/utils/resources.js +1 -3
- package/dist/solution/BookingByStep/utils/timeslots.js +2 -43
- package/dist/solution/BookingTicket/index.js +0 -2
- package/dist/solution/BookingTicket/utils/scan/cloudSearch.js +6 -7
- package/dist/solution/BookingTicket/utils/scan/handleScan.js +25 -31
- package/dist/solution/BookingTicket/utils/scan/index.js +6 -10
- package/dist/solution/BuyTickets/index.js +9 -12
- package/dist/solution/Checkout/index.js +177 -252
- package/dist/solution/Checkout/utils/index.js +4 -16
- package/dist/solution/RegisterAndLogin/index.js +30 -76
- package/dist/solution/ScanOrder/index.js +50 -60
- package/dist/solution/ShopDiscount/index.js +2 -7
- package/dist/solution/VenueBooking/index.js +45 -55
- package/dist/utils/task.js +15 -18
- package/dist/utils/watch.js +0 -1
- package/lib/apis/picoding.js +2 -0
- package/lib/core/index.js +134 -134
- package/lib/effects/index.js +46 -57
- package/lib/index.js +82 -49
- package/lib/model/index.js +14 -21
- package/lib/model/strategy/adapter/dataVariant/adapter.js +38 -50
- package/lib/model/strategy/adapter/dataVariant/evaluator.js +162 -236
- package/lib/model/strategy/adapter/dataVariant/examples.js +229 -237
- package/lib/model/strategy/adapter/dataVariant/index.js +39 -34
- package/lib/model/strategy/adapter/dataVariant/type.js +57 -28
- package/lib/model/strategy/adapter/index.js +100 -64
- package/lib/model/strategy/adapter/itemRule/adapter.js +156 -144
- package/lib/model/strategy/adapter/itemRule/evaluator.js +36 -48
- package/lib/model/strategy/adapter/itemRule/examples.js +295 -225
- package/lib/model/strategy/adapter/itemRule/index.js +83 -57
- package/lib/model/strategy/adapter/itemRule/type.js +97 -36
- package/lib/model/strategy/adapter/promotion/adapter.js +91 -69
- package/lib/model/strategy/adapter/promotion/evaluator.js +444 -310
- package/lib/model/strategy/adapter/promotion/examples.js +222 -234
- package/lib/model/strategy/adapter/promotion/index.js +1 -0
- package/lib/model/strategy/adapter/promotion/type.js +243 -36
- package/lib/model/strategy/adapter/type.js +4 -16
- package/lib/model/strategy/adapter/walletPass/evaluator.js +180 -150
- package/lib/model/strategy/adapter/walletPass/example.js +217 -190
- package/lib/model/strategy/adapter/walletPass/index.js +75 -51
- package/lib/model/strategy/adapter/walletPass/locales.js +36 -58
- package/lib/model/strategy/adapter/walletPass/type.js +4 -16
- package/lib/model/strategy/adapter/walletPass/utils.js +588 -378
- package/lib/model/strategy/engine.js +270 -168
- package/lib/model/strategy/index.js +49 -34
- package/lib/model/strategy/strategy-example.js +243 -239
- package/lib/model/strategy/type.js +100 -40
- package/lib/modules/Account/index.js +39 -53
- package/lib/modules/Account/types.js +20 -33
- package/lib/modules/AccountList/index.js +116 -154
- package/lib/modules/AccountList/types.js +30 -31
- package/lib/modules/AccountList/utils.js +18 -30
- package/lib/modules/BaseModule.js +23 -42
- package/lib/modules/BookingContext/index.js +158 -136
- package/lib/modules/BookingContext/types.js +46 -32
- package/lib/modules/BookingContext/utils/buildCacheItemFromOrderLine.js +138 -146
- package/lib/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.js +78 -83
- package/lib/modules/BookingContext/utils/cacheItemToBookingInput.js +170 -150
- package/lib/modules/BookingContext/utils/flexible.js +38 -55
- package/lib/modules/BookingContext/utils/formatResourceList.js +19 -34
- package/lib/modules/BookingContext/utils/index.js +124 -41
- package/lib/modules/BookingContext/utils/noResource.js +58 -70
- package/lib/modules/BookingContext/utils/orderLineDisplay.js +14 -41
- package/lib/modules/BookingContext/utils/productExtend.js +202 -155
- package/lib/modules/BookingContext/utils/resourceErrors.js +53 -53
- package/lib/modules/BookingContext/utils/resourceSelection.js +19 -41
- package/lib/modules/BookingContext/utils/resources.js +209 -167
- package/lib/modules/BookingContext/utils/serviceTimes.js +115 -116
- package/lib/modules/BookingContext/utils/timeSlices.js +76 -86
- package/lib/modules/Cart/index.js +170 -124
- package/lib/modules/Cart/types.js +46 -51
- package/lib/modules/Cart/utils/cartAccount.js +40 -39
- package/lib/modules/Cart/utils/cartDate.js +56 -61
- package/lib/modules/Cart/utils/cartDiscount.js +28 -33
- package/lib/modules/Cart/utils/cartNote.js +27 -32
- package/lib/modules/Cart/utils/cartProduct.js +321 -251
- package/lib/modules/Cart/utils/cartRelationForms.js +29 -35
- package/lib/modules/Cart/utils/cartResource.js +70 -78
- package/lib/modules/Cart/utils/changePrice.js +22 -50
- package/lib/modules/Cart/utils/index.js +106 -48
- package/lib/modules/Customer/constants.js +13 -34
- package/lib/modules/Customer/index.js +235 -172
- package/lib/modules/Customer/types.js +38 -35
- package/lib/modules/Date/index.js +116 -115
- package/lib/modules/Date/types.js +16 -28
- package/lib/modules/Date/utils.js +174 -123
- package/lib/modules/Discount/index.js +122 -127
- package/lib/modules/Discount/types.js +9 -31
- package/lib/modules/Guests/index.js +30 -56
- package/lib/modules/Guests/types.js +23 -33
- package/lib/modules/Holder/index.js +209 -189
- package/lib/modules/Holder/types.js +4 -16
- package/lib/modules/Holder/utils.js +20 -49
- package/lib/modules/OpenData/index.js +70 -76
- package/lib/modules/OpenData/types.js +4 -16
- package/lib/modules/OpenData/utils.js +44 -78
- package/lib/modules/Order/index.js +1713 -2118
- package/lib/modules/Order/payment-utils.js +77 -120
- package/lib/modules/Order/types.js +88 -35
- package/lib/modules/Order/utils/bundleDiscountHydration.js +41 -74
- package/lib/modules/Order/utils/discountProductLineIdentity.js +142 -100
- package/lib/modules/Order/utils/manualProductDiscount.js +124 -123
- package/lib/modules/Order/utils/orderCollectionIdentity.js +184 -244
- package/lib/modules/Order/utils.js +814 -647
- package/lib/modules/Payment/cash.js +20 -33
- package/lib/modules/Payment/cashRecommendationAlgorithm.js +145 -76
- package/lib/modules/Payment/eftpos.js +16 -30
- package/lib/modules/Payment/index.js +532 -399
- package/lib/modules/Payment/mx51.js +1 -0
- package/lib/modules/Payment/types.js +230 -108
- package/lib/modules/Payment/utils.js +52 -51
- package/lib/modules/Payment/walletpass.js +485 -660
- package/lib/modules/Product/index.js +51 -46
- package/lib/modules/Product/types.js +4 -16
- package/lib/modules/Product/utils.js +32 -33
- package/lib/modules/ProductList/index.js +113 -123
- package/lib/modules/ProductList/types.js +9 -31
- package/lib/modules/Quotation/index.js +81 -118
- package/lib/modules/Quotation/types.js +4 -16
- package/lib/modules/Resource/index.js +27 -59
- package/lib/modules/Resource/types.js +22 -32
- package/lib/modules/Resource/utils.js +30 -38
- package/lib/modules/ResourcePlanner/index.js +25 -23
- package/lib/modules/ResourcePlanner/localClock.js +54 -119
- package/lib/modules/ResourcePlanner/planner.js +589 -770
- package/lib/modules/ResourcePlanner/types.js +10 -29
- package/lib/modules/Rules/index.js +1218 -959
- package/lib/modules/Rules/types.js +17 -40
- package/lib/modules/SalesSummary/index.js +85 -90
- package/lib/modules/SalesSummary/types.js +4 -16
- package/lib/modules/SalesSummary/utils.js +355 -430
- package/lib/modules/ScanOrderLogger/index.js +59 -79
- package/lib/modules/ScanOrderLogger/providers/feishu.js +54 -78
- package/lib/modules/ScanOrderLogger/providers/grafana.js +13 -36
- package/lib/modules/ScanOrderLogger/types.js +4 -16
- package/lib/modules/Schedule/getDateIsInSchedule.js +334 -163
- package/lib/modules/Schedule/index.js +100 -114
- package/lib/modules/Schedule/type.js +4 -16
- package/lib/modules/Schedule/types.js +4 -16
- package/lib/modules/Schedule/utils.js +433 -291
- package/lib/modules/Step/index.js +40 -52
- package/lib/modules/Step/tyeps.js +4 -16
- package/lib/modules/Summary/index.js +66 -71
- package/lib/modules/Summary/types.js +4 -16
- package/lib/modules/Summary/utils.js +773 -418
- package/lib/modules/SurchargeList/index.js +46 -60
- package/lib/modules/SurchargeList/types.js +4 -16
- package/lib/modules/index.js +245 -63
- package/lib/plugins/app.js +4 -16
- package/lib/plugins/index.js +36 -25
- package/lib/plugins/request.js +137 -126
- package/lib/plugins/shopStore.js +4 -16
- package/lib/plugins/user.js +4 -16
- package/lib/plugins/window.js +171 -179
- package/lib/server/index.js +3050 -2665
- package/lib/server/modules/floor-plan/index.js +118 -134
- package/lib/server/modules/floor-plan/types.js +15 -30
- package/lib/server/modules/index.js +106 -68
- package/lib/server/modules/menu/index.js +142 -122
- package/lib/server/modules/menu/types.js +18 -31
- package/lib/server/modules/order/index.js +784 -1002
- package/lib/server/modules/order/types.js +122 -33
- package/lib/server/modules/order/utils/filterBookings.js +219 -194
- package/lib/server/modules/order/utils/filterOrders.js +118 -92
- package/lib/server/modules/payment/index.js +59 -83
- package/lib/server/modules/payment/types.js +4 -16
- package/lib/server/modules/products/index.js +583 -471
- package/lib/server/modules/products/types.js +44 -34
- package/lib/server/modules/quotation/index.js +137 -172
- package/lib/server/modules/quotation/types.js +21 -31
- package/lib/server/modules/resource/index.js +220 -186
- package/lib/server/modules/resource/types.js +42 -33
- package/lib/server/modules/schedule/index.js +135 -123
- package/lib/server/modules/schedule/types.js +14 -21
- package/lib/server/modules/schedule/utils.js +334 -163
- package/lib/server/types.js +4 -16
- package/lib/server/utils/index.js +25 -23
- package/lib/server/utils/product.js +196 -139
- package/lib/server/utils/schedule.js +34 -41
- package/lib/server/utils/small-ticket.js +479 -456
- package/lib/server/utils/time.js +40 -49
- package/lib/solution/BaseSales/index.js +1186 -1410
- package/lib/solution/BaseSales/types.js +42 -38
- package/lib/solution/BaseSales/utils/cartPromotion.js +642 -498
- package/lib/solution/BaseSales/utils/parseSalesResponse.js +85 -105
- package/lib/solution/BaseSales/utils/quotationPrice.js +56 -114
- package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +108 -145
- package/lib/solution/BaseSales/utils.js +158 -143
- package/lib/solution/BookingByStep/index.js +1527 -1340
- package/lib/solution/BookingByStep/types.js +40 -99
- package/lib/solution/BookingByStep/utils/capacity.js +192 -160
- package/lib/solution/BookingByStep/utils/products.js +42 -52
- package/lib/solution/BookingByStep/utils/resources.js +527 -330
- package/lib/solution/BookingByStep/utils/stock.js +65 -44
- package/lib/solution/BookingByStep/utils/timeslots.js +129 -131
- package/lib/solution/BookingTicket/index.js +607 -522
- package/lib/solution/BookingTicket/types.js +99 -77
- package/lib/solution/BookingTicket/utils/addProductDecision.js +226 -189
- package/lib/solution/BookingTicket/utils/addTimeAvailability.js +58 -89
- package/lib/solution/BookingTicket/utils/bookingStatus.js +107 -78
- package/lib/solution/BookingTicket/utils/cartView.js +114 -99
- package/lib/solution/BookingTicket/utils/exampleData.js +185 -0
- package/lib/solution/BookingTicket/utils/orderCustomer.js +18 -41
- package/lib/solution/BookingTicket/utils/resolveBestAddTimePlan.js +219 -86
- package/lib/solution/BookingTicket/utils/scan/applyGlobalScan.js +168 -116
- package/lib/solution/BookingTicket/utils/scan/cloudSearch.js +79 -91
- package/lib/solution/BookingTicket/utils/scan/formatGlobalScan.js +54 -41
- package/lib/solution/BookingTicket/utils/scan/handleScan.js +84 -81
- package/lib/solution/BookingTicket/utils/scan/index.js +98 -104
- package/lib/solution/BookingTicket/utils/scan/scanCache.js +90 -43
- package/lib/solution/BookingTicket/utils/scan/scanProductValues.js +52 -64
- package/lib/solution/BookingTicket/utils/sessionCatalogStale.js +56 -58
- package/lib/solution/BookingTicket/utils/weighingProductSku.js +34 -48
- package/lib/solution/BuyTickets/index.js +67 -70
- package/lib/solution/BuyTickets/types.js +22 -38
- package/lib/solution/Checkout/index.js +1451 -1158
- package/lib/solution/Checkout/types.js +91 -61
- package/lib/solution/Checkout/utils/index.js +228 -156
- package/lib/solution/PlaceOrder/index.js +55 -0
- package/lib/solution/RegisterAndLogin/config.js +493 -460
- package/lib/solution/RegisterAndLogin/index.js +633 -630
- package/lib/solution/RegisterAndLogin/types.js +189 -76
- package/lib/solution/RegisterAndLogin/utils.js +183 -125
- package/lib/solution/Sales/index.js +328 -324
- package/lib/solution/Sales/types.js +27 -33
- package/lib/solution/ScanOrder/index.js +832 -864
- package/lib/solution/ScanOrder/types.js +33 -34
- package/lib/solution/ScanOrder/utils.js +409 -374
- package/lib/solution/ShopDiscount/index.js +226 -232
- package/lib/solution/ShopDiscount/types.js +15 -37
- package/lib/solution/ShopDiscount/utils.js +300 -172
- package/lib/solution/UnifiedBookingSales/index.js +1035 -1201
- package/lib/solution/UnifiedBookingSales/remoteOccupancyCache.js +99 -159
- package/lib/solution/UnifiedBookingSales/types.js +10 -32
- package/lib/solution/VenueBooking/index.js +811 -879
- package/lib/solution/VenueBooking/types.js +19 -39
- package/lib/solution/VenueBooking/utils/dateSummary.js +27 -56
- package/lib/solution/VenueBooking/utils/resource.js +31 -54
- package/lib/solution/VenueBooking/utils/slotMerge.js +94 -107
- package/lib/solution/VenueBooking/utils/timeSlot.js +132 -132
- package/lib/solution/VenueBooking/utils.js +130 -67
- package/lib/solution/index.js +124 -41
- package/lib/store/createStore.js +32 -29
- package/lib/types/index.js +4 -16
- package/lib/utils/payment-number.js +26 -46
- package/lib/utils/task.js +36 -36
- package/lib/utils/watch.js +81 -47
- package/package.json +2 -1
|
@@ -1,53 +1,44 @@
|
|
|
1
|
-
|
|
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
|
-
|
|
20
|
-
|
|
21
|
-
__export(floor_plan_exports, {
|
|
22
|
-
FloorPlanModule: () => FloorPlanModule
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
23
5
|
});
|
|
24
|
-
|
|
25
|
-
var
|
|
26
|
-
var
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
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(
|
|
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(
|
|
34
|
+
this.core.effects.emit(_types.FloorPlanHooks.onFloorPlansChanged, this.store.list);
|
|
44
35
|
} else {
|
|
45
36
|
this.store.list = [];
|
|
46
|
-
this.store.map =
|
|
47
|
-
this.store.codeMap =
|
|
37
|
+
this.store.map = new Map();
|
|
38
|
+
this.store.codeMap = new Map();
|
|
48
39
|
}
|
|
49
|
-
this.request = core.getPlugin(
|
|
50
|
-
const appPlugin = core.getPlugin(
|
|
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
|
-
|
|
63
|
-
type:
|
|
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
|
-
|
|
74
|
-
type:
|
|
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
|
-
|
|
85
|
-
type:
|
|
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 =
|
|
97
|
-
this.store.codeMap =
|
|
87
|
+
this.store.map = new Map();
|
|
88
|
+
this.store.codeMap = new Map();
|
|
98
89
|
for (const item of this.store.list) {
|
|
99
|
-
if (
|
|
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(
|
|
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 (
|
|
133
|
-
|
|
134
|
-
|
|
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
|
-
|
|
142
|
-
|
|
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
|
-
|
|
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 =
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
201
|
-
this.logInfo(
|
|
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
|
-
|
|
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 =
|
|
212
|
-
return data && typeof data ===
|
|
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
|
-
|
|
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 =
|
|
227
|
-
return data && typeof data ===
|
|
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(
|
|
238
|
-
this.logInfo(
|
|
239
|
-
|
|
240
|
-
|
|
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
|
-
|
|
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(
|
|
242
|
+
this.logWarning('FloorPlanDataSource 不可用,跳过 pubsub 同步');
|
|
253
243
|
return;
|
|
254
244
|
}
|
|
255
245
|
this.floorPlanDataSource = new Ctor();
|
|
256
|
-
this.logInfo(
|
|
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:
|
|
271
|
-
const data =
|
|
272
|
-
if (!data || data.module !==
|
|
273
|
-
|
|
274
|
-
|
|
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(
|
|
279
|
-
this.logError(
|
|
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(
|
|
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
|
-
|
|
291
|
-
|
|
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 =
|
|
285
|
+
const partialIds = new Set();
|
|
297
286
|
for (const msg of messages) {
|
|
298
|
-
if (msg.operation ===
|
|
299
|
-
if (
|
|
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 ===
|
|
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 (
|
|
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(
|
|
350
|
-
this.core.effects.emit(
|
|
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 =
|
|
350
|
+
this.syncTimer = undefined;
|
|
364
351
|
}
|
|
365
352
|
this.pendingSyncMessages = [];
|
|
366
|
-
if (
|
|
353
|
+
if (this.floorPlanDataSource?.destroy) {
|
|
367
354
|
this.floorPlanDataSource.destroy();
|
|
368
355
|
}
|
|
369
356
|
super.destroy();
|
|
370
357
|
}
|
|
371
|
-
}
|
|
372
|
-
|
|
373
|
-
0 && (module.exports = {
|
|
374
|
-
FloorPlanModule
|
|
375
|
-
});
|
|
358
|
+
}
|
|
359
|
+
exports.FloorPlanModule = FloorPlanModule;
|
|
@@ -1,34 +1,19 @@
|
|
|
1
|
-
|
|
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
|
-
|
|
20
|
-
|
|
21
|
-
__export(types_exports, {
|
|
22
|
-
FloorPlanHooks: () => FloorPlanHooks
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
23
5
|
});
|
|
24
|
-
|
|
25
|
-
|
|
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:
|
|
16
|
+
onFloorPlansChanged: 'server_floor_plan:onFloorPlansChanged',
|
|
28
17
|
/** pubsub 同步处理完成,供 Server 向订阅者推送最新查询结果 */
|
|
29
|
-
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
|
+
};
|