@pisell/pisellos 2.3.73 → 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.d.ts +7 -0
- package/dist/core/index.js +111 -71
- 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.d.ts +1 -1
- package/dist/modules/Order/index.js +36 -64
- package/dist/modules/Payment/index.js +97 -162
- package/dist/modules/Quotation/index.d.ts +6 -0
- package/dist/modules/Quotation/index.js +75 -19
- 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.d.ts +1 -0
- package/dist/plugins/request.js +1 -4
- package/dist/plugins/window.js +2 -6
- package/dist/server/index.d.ts +8 -2
- package/dist/server/index.js +303 -269
- package/dist/server/modules/floor-plan/index.d.ts +4 -0
- package/dist/server/modules/floor-plan/index.js +240 -98
- package/dist/server/modules/menu/index.js +75 -59
- package/dist/server/modules/order/index.d.ts +17 -7
- package/dist/server/modules/order/index.js +421 -211
- package/dist/server/modules/products/index.d.ts +8 -2
- package/dist/server/modules/products/index.js +191 -117
- package/dist/server/modules/quotation/index.js +29 -38
- package/dist/server/modules/resource/index.js +24 -17
- 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.d.ts +1 -1
- 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.d.ts +7 -0
- package/lib/core/index.js +149 -131
- 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.d.ts +1 -1
- 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.d.ts +6 -0
- package/lib/modules/Quotation/index.js +110 -103
- 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.d.ts +1 -0
- 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.d.ts +8 -2
- package/lib/server/index.js +3083 -2663
- package/lib/server/modules/floor-plan/index.d.ts +4 -0
- package/lib/server/modules/floor-plan/index.js +159 -127
- 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 +170 -124
- package/lib/server/modules/menu/types.js +18 -31
- package/lib/server/modules/order/index.d.ts +17 -7
- package/lib/server/modules/order/index.js +916 -977
- 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.d.ts +8 -2
- package/lib/server/modules/products/index.js +656 -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 +225 -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.d.ts +1 -1
- 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
|
@@ -10,6 +10,7 @@ export declare class FloorPlanModule extends BaseModule implements Module {
|
|
|
10
10
|
private store;
|
|
11
11
|
private request;
|
|
12
12
|
private logger;
|
|
13
|
+
private dbManager;
|
|
13
14
|
private floorPlanDataSource;
|
|
14
15
|
private pendingSyncMessages;
|
|
15
16
|
private syncTimer?;
|
|
@@ -28,6 +29,9 @@ export declare class FloorPlanModule extends BaseModule implements Module {
|
|
|
28
29
|
private mergeItems;
|
|
29
30
|
private removeByIds;
|
|
30
31
|
private loadListFromServer;
|
|
32
|
+
private loadListFromSQLite;
|
|
33
|
+
private saveListToSQLite;
|
|
34
|
+
private refreshListFromServer;
|
|
31
35
|
fetchByIdFromServer(id: number | string): Promise<FloorPlanItem | null>;
|
|
32
36
|
fetchByCodeFromServer(code: string): Promise<FloorPlanItem | null>;
|
|
33
37
|
preload(): Promise<void>;
|
|
@@ -1,101 +1,93 @@
|
|
|
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
|
-
|
|
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;
|
|
29
25
|
constructor(name, version) {
|
|
30
26
|
super(name, version);
|
|
31
|
-
this.defaultName = "floor_plan";
|
|
32
|
-
this.defaultVersion = "1.0.0";
|
|
33
|
-
this.pendingSyncMessages = [];
|
|
34
27
|
}
|
|
35
28
|
async initialize(core, options) {
|
|
36
|
-
var _a;
|
|
37
29
|
this.core = core;
|
|
38
30
|
this.store = options.store;
|
|
39
|
-
if (Array.isArray(
|
|
31
|
+
if (Array.isArray(options?.initialState?.list) && options.initialState.list.length > 0) {
|
|
40
32
|
this.store.list = options.initialState.list;
|
|
41
33
|
this.syncMaps();
|
|
42
|
-
this.core.effects.emit(
|
|
34
|
+
this.core.effects.emit(_types.FloorPlanHooks.onFloorPlansChanged, this.store.list);
|
|
43
35
|
} else {
|
|
44
36
|
this.store.list = [];
|
|
45
|
-
this.store.map =
|
|
46
|
-
this.store.codeMap =
|
|
37
|
+
this.store.map = new Map();
|
|
38
|
+
this.store.codeMap = new Map();
|
|
47
39
|
}
|
|
48
|
-
this.request = core.getPlugin(
|
|
49
|
-
const appPlugin = core.getPlugin(
|
|
40
|
+
this.request = core.getPlugin('request');
|
|
41
|
+
const appPlugin = core.getPlugin('app');
|
|
50
42
|
if (appPlugin) {
|
|
51
43
|
const app = appPlugin.getApp();
|
|
52
44
|
this.logger = app.logger;
|
|
45
|
+
this.dbManager = app.sqlite || app.dbManager;
|
|
53
46
|
}
|
|
54
47
|
this.initFloorPlanDataSource();
|
|
55
48
|
this.setupFloorPlanSync();
|
|
56
49
|
}
|
|
57
50
|
logInfo(title, metadata) {
|
|
58
|
-
var _a, _b;
|
|
59
51
|
try {
|
|
60
|
-
|
|
61
|
-
type:
|
|
52
|
+
this.logger?.addLog?.({
|
|
53
|
+
type: 'info',
|
|
62
54
|
title: `[FloorPlanModule] ${title}`,
|
|
63
55
|
metadata: metadata || {}
|
|
64
56
|
});
|
|
65
57
|
} catch {
|
|
58
|
+
// ignore
|
|
66
59
|
}
|
|
67
60
|
}
|
|
68
61
|
logWarning(title, metadata) {
|
|
69
|
-
var _a, _b;
|
|
70
62
|
try {
|
|
71
|
-
|
|
72
|
-
type:
|
|
63
|
+
this.logger?.addLog?.({
|
|
64
|
+
type: 'warning',
|
|
73
65
|
title: `[FloorPlanModule] ${title}`,
|
|
74
66
|
metadata: metadata || {}
|
|
75
67
|
});
|
|
76
68
|
} catch {
|
|
69
|
+
// ignore
|
|
77
70
|
}
|
|
78
71
|
}
|
|
79
72
|
logError(title, metadata) {
|
|
80
|
-
var _a, _b;
|
|
81
73
|
try {
|
|
82
|
-
|
|
83
|
-
type:
|
|
74
|
+
this.logger?.addLog?.({
|
|
75
|
+
type: 'error',
|
|
84
76
|
title: `[FloorPlanModule] ${title}`,
|
|
85
77
|
metadata: metadata || {}
|
|
86
78
|
});
|
|
87
79
|
} catch {
|
|
80
|
+
// ignore
|
|
88
81
|
}
|
|
89
82
|
}
|
|
90
83
|
idKey(id) {
|
|
91
84
|
return String(id);
|
|
92
85
|
}
|
|
93
86
|
syncMaps() {
|
|
94
|
-
this.store.map =
|
|
95
|
-
this.store.codeMap =
|
|
87
|
+
this.store.map = new Map();
|
|
88
|
+
this.store.codeMap = new Map();
|
|
96
89
|
for (const item of this.store.list) {
|
|
97
|
-
if (
|
|
98
|
-
continue;
|
|
90
|
+
if (item?.id == null) continue;
|
|
99
91
|
const key = this.idKey(item.id);
|
|
100
92
|
this.store.map.set(key, item);
|
|
101
93
|
if (item.code) {
|
|
@@ -103,12 +95,12 @@ var FloorPlanModule = class extends import_BaseModule.BaseModule {
|
|
|
103
95
|
}
|
|
104
96
|
}
|
|
105
97
|
}
|
|
98
|
+
|
|
106
99
|
/** 与接口约定一致:sort 升序,id 降序 */
|
|
107
100
|
getSortedList() {
|
|
108
101
|
return [...this.store.list].sort((a, b) => {
|
|
109
102
|
const sortDiff = Number(a.sort ?? 0) - Number(b.sort ?? 0);
|
|
110
|
-
if (sortDiff !== 0)
|
|
111
|
-
return sortDiff;
|
|
103
|
+
if (sortDiff !== 0) return sortDiff;
|
|
112
104
|
return Number(b.id) - Number(a.id);
|
|
113
105
|
});
|
|
114
106
|
}
|
|
@@ -119,56 +111,92 @@ var FloorPlanModule = class extends import_BaseModule.BaseModule {
|
|
|
119
111
|
return this.store.codeMap.get(String(code));
|
|
120
112
|
}
|
|
121
113
|
replaceStore(list) {
|
|
122
|
-
this.store.list = list.map(
|
|
114
|
+
this.store.list = list.map(i => ({
|
|
115
|
+
...i
|
|
116
|
+
}));
|
|
123
117
|
this.syncMaps();
|
|
124
118
|
}
|
|
125
119
|
mergeItems(items) {
|
|
126
|
-
if (items.length === 0)
|
|
127
|
-
return;
|
|
120
|
+
if (items.length === 0) return;
|
|
128
121
|
const byId = new Map(this.store.map);
|
|
129
122
|
for (const item of items) {
|
|
130
|
-
if (
|
|
131
|
-
|
|
132
|
-
|
|
123
|
+
if (item?.id == null) continue;
|
|
124
|
+
byId.set(this.idKey(item.id), {
|
|
125
|
+
...item
|
|
126
|
+
});
|
|
133
127
|
}
|
|
134
128
|
this.store.list = Array.from(byId.values());
|
|
135
129
|
this.syncMaps();
|
|
136
130
|
}
|
|
137
131
|
removeByIds(ids) {
|
|
138
|
-
if (ids.length === 0)
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
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)));
|
|
142
135
|
this.syncMaps();
|
|
143
136
|
}
|
|
144
137
|
async loadListFromServer() {
|
|
145
138
|
try {
|
|
146
|
-
const res = await this.request.get(
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
{ isShopApi: true }
|
|
150
|
-
);
|
|
139
|
+
const res = await this.request.get(`/schedule/floor-plan`, {}, {
|
|
140
|
+
isShopApi: true
|
|
141
|
+
});
|
|
151
142
|
const body = res;
|
|
152
|
-
const raw =
|
|
143
|
+
const raw = body?.data !== undefined ? body.data : body;
|
|
153
144
|
const list = Array.isArray(raw) ? raw : [];
|
|
154
145
|
return list;
|
|
155
146
|
} catch (e) {
|
|
156
|
-
this.logWarning(
|
|
147
|
+
this.logWarning('loadListFromServer 失败', {
|
|
157
148
|
error: e instanceof Error ? e.message : String(e)
|
|
158
149
|
});
|
|
159
150
|
return [];
|
|
160
151
|
}
|
|
161
152
|
}
|
|
153
|
+
async loadListFromSQLite() {
|
|
154
|
+
if (!this.dbManager) return [];
|
|
155
|
+
try {
|
|
156
|
+
const list = await this.dbManager.getAll(FLOOR_PLAN_STORE_NAME);
|
|
157
|
+
return Array.isArray(list) ? list : [];
|
|
158
|
+
} catch (error) {
|
|
159
|
+
this.logWarning('从 SQLite 读取平面图失败', {
|
|
160
|
+
error: error instanceof Error ? error.message : String(error)
|
|
161
|
+
});
|
|
162
|
+
return [];
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
async saveListToSQLite(list) {
|
|
166
|
+
if (!this.dbManager) return;
|
|
167
|
+
try {
|
|
168
|
+
await this.dbManager.clear(FLOOR_PLAN_STORE_NAME);
|
|
169
|
+
if (list.length > 0) {
|
|
170
|
+
await this.dbManager.bulkAdd(FLOOR_PLAN_STORE_NAME, list);
|
|
171
|
+
}
|
|
172
|
+
} catch (error) {
|
|
173
|
+
this.logWarning('保存平面图到 SQLite 失败', {
|
|
174
|
+
count: list.length,
|
|
175
|
+
error: error instanceof Error ? error.message : String(error)
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
async refreshListFromServer() {
|
|
180
|
+
const list = await this.loadListFromServer();
|
|
181
|
+
if (list.length === 0) {
|
|
182
|
+
this.logWarning('远端平面图刷新完成但列表为空');
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
this.replaceStore(list);
|
|
186
|
+
await this.saveListToSQLite(list);
|
|
187
|
+
this.core.effects.emit(_types.FloorPlanHooks.onFloorPlansChanged, this.getSortedList());
|
|
188
|
+
this.logInfo('远端平面图刷新完成', {
|
|
189
|
+
count: list.length
|
|
190
|
+
});
|
|
191
|
+
}
|
|
162
192
|
async fetchByIdFromServer(id) {
|
|
163
193
|
try {
|
|
164
|
-
const res = await this.request.get(
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
{ isShopApi: true }
|
|
168
|
-
);
|
|
194
|
+
const res = await this.request.get(`/schedule/floor-plan/${id}`, {}, {
|
|
195
|
+
isShopApi: true
|
|
196
|
+
});
|
|
169
197
|
const body = res;
|
|
170
|
-
const data =
|
|
171
|
-
return data && typeof data ===
|
|
198
|
+
const data = body?.data !== undefined ? body.data : body;
|
|
199
|
+
return data && typeof data === 'object' ? data : null;
|
|
172
200
|
} catch {
|
|
173
201
|
return null;
|
|
174
202
|
}
|
|
@@ -176,81 +204,88 @@ var FloorPlanModule = class extends import_BaseModule.BaseModule {
|
|
|
176
204
|
async fetchByCodeFromServer(code) {
|
|
177
205
|
try {
|
|
178
206
|
const enc = encodeURIComponent(code);
|
|
179
|
-
const res = await this.request.get(
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
{ isShopApi: true }
|
|
183
|
-
);
|
|
207
|
+
const res = await this.request.get(`/schedule/floor-plan/code/${enc}`, {}, {
|
|
208
|
+
isShopApi: true
|
|
209
|
+
});
|
|
184
210
|
const body = res;
|
|
185
|
-
const data =
|
|
186
|
-
return data && typeof data ===
|
|
211
|
+
const data = body?.data !== undefined ? body.data : body;
|
|
212
|
+
return data && typeof data === 'object' ? data : null;
|
|
187
213
|
} catch {
|
|
188
214
|
return null;
|
|
189
215
|
}
|
|
190
216
|
}
|
|
191
217
|
async preload() {
|
|
192
|
-
this.logInfo(
|
|
193
|
-
const
|
|
194
|
-
if (
|
|
195
|
-
this.replaceStore(
|
|
196
|
-
this.core.effects.emit(
|
|
197
|
-
this.logInfo(
|
|
198
|
-
|
|
199
|
-
|
|
218
|
+
this.logInfo('开始预加载平面图列表');
|
|
219
|
+
const cachedList = await this.loadListFromSQLite();
|
|
220
|
+
if (cachedList.length > 0) {
|
|
221
|
+
this.replaceStore(cachedList);
|
|
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('后台刷新平面图失败,继续使用本地数据', {
|
|
230
|
+
error: error instanceof Error ? error.message : String(error)
|
|
231
|
+
});
|
|
232
|
+
});
|
|
233
|
+
return;
|
|
200
234
|
}
|
|
235
|
+
|
|
236
|
+
// 首次启动没有缓存时仍等待一次远端请求,并为后续启动建立缓存。
|
|
237
|
+
await this.refreshListFromServer();
|
|
201
238
|
}
|
|
202
239
|
initFloorPlanDataSource() {
|
|
203
|
-
|
|
204
|
-
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;
|
|
205
241
|
if (!Ctor) {
|
|
206
|
-
this.logWarning(
|
|
242
|
+
this.logWarning('FloorPlanDataSource 不可用,跳过 pubsub 同步');
|
|
207
243
|
return;
|
|
208
244
|
}
|
|
209
245
|
this.floorPlanDataSource = new Ctor();
|
|
210
|
-
this.logInfo(
|
|
246
|
+
this.logInfo('FloorPlanDataSource 实例已创建');
|
|
211
247
|
}
|
|
212
248
|
setupFloorPlanSync() {
|
|
213
|
-
if (!this.floorPlanDataSource)
|
|
214
|
-
return;
|
|
249
|
+
if (!this.floorPlanDataSource) return;
|
|
215
250
|
const flush = () => {
|
|
216
|
-
if (this.syncTimer)
|
|
217
|
-
clearTimeout(this.syncTimer);
|
|
251
|
+
if (this.syncTimer) clearTimeout(this.syncTimer);
|
|
218
252
|
this.syncTimer = setTimeout(() => {
|
|
219
253
|
this.processFloorPlanSyncMessages();
|
|
220
254
|
}, FLOOR_PLAN_SYNC_DEBOUNCE_MS);
|
|
221
255
|
};
|
|
222
256
|
this.floorPlanDataSource.run({
|
|
223
257
|
pubsub: {
|
|
224
|
-
callback:
|
|
225
|
-
const data =
|
|
226
|
-
if (!data || data.module !==
|
|
227
|
-
|
|
228
|
-
|
|
258
|
+
callback: res => {
|
|
259
|
+
const data = res?.data || res;
|
|
260
|
+
if (!data || data.module !== 'floor_plan') return;
|
|
261
|
+
this.pendingSyncMessages.push({
|
|
262
|
+
...data
|
|
263
|
+
});
|
|
229
264
|
flush();
|
|
230
265
|
}
|
|
231
266
|
}
|
|
232
|
-
}).catch(
|
|
233
|
-
this.logError(
|
|
267
|
+
}).catch(err => {
|
|
268
|
+
this.logError('setupFloorPlanSync: DataSource run 出错', {
|
|
234
269
|
error: err instanceof Error ? err.message : String(err)
|
|
235
270
|
});
|
|
236
271
|
});
|
|
237
|
-
this.logInfo(
|
|
272
|
+
this.logInfo('floor_plan pubsub 订阅已建立');
|
|
238
273
|
}
|
|
239
274
|
async processFloorPlanSyncMessages() {
|
|
240
|
-
var _a, _b;
|
|
241
275
|
const messages = [...this.pendingSyncMessages];
|
|
242
276
|
this.pendingSyncMessages = [];
|
|
243
|
-
if (messages.length === 0)
|
|
244
|
-
|
|
245
|
-
|
|
277
|
+
if (messages.length === 0) return;
|
|
278
|
+
this.logInfo('processFloorPlanSyncMessages 开始', {
|
|
279
|
+
count: messages.length
|
|
280
|
+
});
|
|
246
281
|
let changed = false;
|
|
247
282
|
const deleteIds = [];
|
|
248
283
|
const bodyItems = [];
|
|
249
284
|
let needFullList = false;
|
|
250
|
-
const partialIds =
|
|
285
|
+
const partialIds = new Set();
|
|
251
286
|
for (const msg of messages) {
|
|
252
|
-
if (msg.operation ===
|
|
253
|
-
if (
|
|
287
|
+
if (msg.operation === 'delete' || msg.action === 'delete') {
|
|
288
|
+
if (msg.ids?.length) {
|
|
254
289
|
deleteIds.push(...msg.ids);
|
|
255
290
|
} else if (msg.id != null) {
|
|
256
291
|
deleteIds.push(msg.id);
|
|
@@ -258,7 +293,7 @@ var FloorPlanModule = class extends import_BaseModule.BaseModule {
|
|
|
258
293
|
continue;
|
|
259
294
|
}
|
|
260
295
|
const body = msg.body;
|
|
261
|
-
const hasBody = body && typeof body ===
|
|
296
|
+
const hasBody = body && typeof body === 'object' && Object.keys(body).length > 0 && body.id != null;
|
|
262
297
|
if (hasBody) {
|
|
263
298
|
bodyItems.push(body);
|
|
264
299
|
continue;
|
|
@@ -267,7 +302,7 @@ var FloorPlanModule = class extends import_BaseModule.BaseModule {
|
|
|
267
302
|
needFullList = true;
|
|
268
303
|
continue;
|
|
269
304
|
}
|
|
270
|
-
if (
|
|
305
|
+
if (msg.ids?.length === 1) {
|
|
271
306
|
partialIds.add(msg.ids[0]);
|
|
272
307
|
} else if (msg.id != null) {
|
|
273
308
|
partialIds.add(msg.id);
|
|
@@ -290,8 +325,7 @@ var FloorPlanModule = class extends import_BaseModule.BaseModule {
|
|
|
290
325
|
const fetched = [];
|
|
291
326
|
for (const id of partialIds) {
|
|
292
327
|
const one = await this.fetchByIdFromServer(id);
|
|
293
|
-
if (one)
|
|
294
|
-
fetched.push(one);
|
|
328
|
+
if (one) fetched.push(one);
|
|
295
329
|
}
|
|
296
330
|
if (fetched.length > 0) {
|
|
297
331
|
this.mergeItems(fetched);
|
|
@@ -299,29 +333,27 @@ var FloorPlanModule = class extends import_BaseModule.BaseModule {
|
|
|
299
333
|
}
|
|
300
334
|
}
|
|
301
335
|
if (changed) {
|
|
302
|
-
this.
|
|
303
|
-
this.core.effects.emit(
|
|
336
|
+
await this.saveListToSQLite(this.store.list);
|
|
337
|
+
this.core.effects.emit(_types.FloorPlanHooks.onFloorPlansChanged, this.getSortedList());
|
|
338
|
+
this.core.effects.emit(_types.FloorPlanHooks.onFloorPlanSyncCompleted, null);
|
|
304
339
|
}
|
|
305
340
|
}
|
|
306
341
|
async clear() {
|
|
307
342
|
this.store.list = [];
|
|
308
343
|
this.store.map.clear();
|
|
309
344
|
this.store.codeMap.clear();
|
|
345
|
+
await this.saveListToSQLite([]);
|
|
310
346
|
}
|
|
311
347
|
destroy() {
|
|
312
|
-
var _a;
|
|
313
348
|
if (this.syncTimer) {
|
|
314
349
|
clearTimeout(this.syncTimer);
|
|
315
|
-
this.syncTimer =
|
|
350
|
+
this.syncTimer = undefined;
|
|
316
351
|
}
|
|
317
352
|
this.pendingSyncMessages = [];
|
|
318
|
-
if (
|
|
353
|
+
if (this.floorPlanDataSource?.destroy) {
|
|
319
354
|
this.floorPlanDataSource.destroy();
|
|
320
355
|
}
|
|
321
356
|
super.destroy();
|
|
322
357
|
}
|
|
323
|
-
}
|
|
324
|
-
|
|
325
|
-
0 && (module.exports = {
|
|
326
|
-
FloorPlanModule
|
|
327
|
-
});
|
|
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
|
+
};
|