@pisell/pisellos 0.0.479 → 0.0.481
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 +3 -2
- package/dist/core/index.js +7 -0
- package/dist/effects/index.d.ts +2 -2
- package/dist/effects/index.js +34 -81
- package/dist/model/strategy/adapter/promotion/evaluator.js +99 -26
- package/dist/model/strategy/adapter/walletPass/type.d.ts +9 -2
- package/dist/model/strategy/adapter/walletPass/utils.d.ts +6 -6
- package/dist/model/strategy/adapter/walletPass/utils.js +111 -72
- package/dist/modules/Customer/index.js +1 -1
- package/dist/modules/Discount/index.d.ts +6 -2
- package/dist/modules/Discount/index.js +14 -8
- package/dist/modules/Order/index.d.ts +1 -1
- package/dist/modules/Order/index.js +18 -13
- package/dist/modules/Payment/index.d.ts +4 -0
- package/dist/modules/Payment/index.js +774 -649
- package/dist/modules/Payment/walletpass.js +44 -17
- package/dist/modules/Product/index.d.ts +1 -1
- package/dist/modules/Product/types.d.ts +2 -0
- package/dist/modules/ProductList/index.d.ts +3 -0
- package/dist/modules/ProductList/index.js +9 -7
- package/dist/modules/Rules/index.d.ts +2 -2
- package/dist/modules/Rules/index.js +37 -31
- package/dist/modules/Rules/types.d.ts +2 -2
- package/dist/modules/Schedule/index.d.ts +9 -0
- package/dist/modules/Schedule/index.js +15 -2
- package/dist/plugins/app-types/app/app.d.ts +1 -0
- package/dist/plugins/request.d.ts +2 -0
- package/dist/server/index.d.ts +107 -2
- package/dist/server/index.js +1507 -279
- package/dist/server/modules/index.d.ts +6 -0
- package/dist/server/modules/index.js +7 -0
- package/dist/server/modules/menu/index.d.ts +19 -0
- package/dist/server/modules/menu/index.js +221 -71
- package/dist/server/modules/order/index.d.ts +87 -0
- package/dist/server/modules/order/index.js +916 -0
- package/dist/server/modules/order/types.d.ts +530 -0
- package/dist/server/modules/order/types.js +141 -0
- package/dist/server/modules/order/utils/filterBookings.d.ts +6 -0
- package/dist/server/modules/order/utils/filterBookings.js +350 -0
- package/dist/server/modules/order/utils/filterOrders.d.ts +15 -0
- package/dist/server/modules/order/utils/filterOrders.js +226 -0
- package/dist/server/modules/products/index.d.ts +117 -5
- package/dist/server/modules/products/index.js +1450 -240
- package/dist/server/modules/products/types.d.ts +25 -1
- package/dist/server/modules/products/types.js +3 -0
- package/dist/server/modules/resource/index.d.ts +86 -0
- package/dist/server/modules/resource/index.js +1128 -0
- package/dist/server/modules/resource/types.d.ts +121 -0
- package/dist/server/modules/resource/types.js +47 -0
- package/dist/server/modules/schedule/index.d.ts +19 -0
- package/dist/server/modules/schedule/index.js +229 -68
- package/dist/server/utils/product.d.ts +5 -0
- package/dist/server/utils/product.js +71 -31
- package/dist/solution/BookingTicket/index.d.ts +10 -2
- package/dist/solution/BookingTicket/index.js +41 -28
- package/dist/solution/BookingTicket/utils/scan/index.js +1 -1
- package/dist/solution/Checkout/index.d.ts +1 -0
- package/dist/solution/Checkout/index.js +286 -188
- package/dist/solution/Checkout/utils/index.d.ts +2 -1
- package/dist/solution/Checkout/utils/index.js +6 -4
- package/dist/solution/RegisterAndLogin/config.js +340 -1
- package/dist/solution/Sales/index.d.ts +96 -0
- package/dist/solution/Sales/index.js +566 -0
- package/dist/solution/Sales/types.d.ts +67 -0
- package/dist/solution/Sales/types.js +26 -0
- package/dist/solution/ShopDiscount/index.d.ts +1 -0
- package/dist/solution/ShopDiscount/index.js +35 -22
- package/dist/solution/ShopDiscount/types.d.ts +6 -0
- package/dist/solution/ShopDiscount/utils.d.ts +9 -0
- package/dist/solution/ShopDiscount/utils.js +21 -27
- package/dist/solution/index.d.ts +2 -1
- package/dist/solution/index.js +2 -1
- package/dist/types/index.d.ts +5 -0
- package/lib/core/index.d.ts +3 -2
- package/lib/core/index.js +4 -0
- package/lib/effects/index.d.ts +2 -2
- package/lib/effects/index.js +22 -31
- package/lib/model/strategy/adapter/promotion/evaluator.js +57 -8
- package/lib/model/strategy/adapter/walletPass/type.d.ts +9 -2
- package/lib/model/strategy/adapter/walletPass/utils.d.ts +6 -6
- package/lib/model/strategy/adapter/walletPass/utils.js +115 -48
- package/lib/modules/Customer/index.js +1 -1
- package/lib/modules/Discount/index.d.ts +6 -2
- package/lib/modules/Discount/index.js +3 -1
- package/lib/modules/Order/index.d.ts +1 -1
- package/lib/modules/Order/index.js +20 -18
- package/lib/modules/Payment/index.d.ts +4 -0
- package/lib/modules/Payment/index.js +134 -66
- package/lib/modules/Payment/walletpass.js +23 -4
- package/lib/modules/Product/index.d.ts +1 -1
- package/lib/modules/Product/types.d.ts +2 -0
- package/lib/modules/ProductList/index.d.ts +3 -0
- package/lib/modules/ProductList/index.js +2 -2
- package/lib/modules/Rules/index.d.ts +2 -2
- package/lib/modules/Rules/index.js +69 -73
- package/lib/modules/Rules/types.d.ts +2 -2
- package/lib/modules/Schedule/index.d.ts +9 -0
- package/lib/modules/Schedule/index.js +11 -0
- package/lib/plugins/app-types/app/app.d.ts +1 -0
- package/lib/plugins/request.d.ts +2 -0
- package/lib/server/index.d.ts +107 -2
- package/lib/server/index.js +773 -51
- package/lib/server/modules/index.d.ts +6 -0
- package/lib/server/modules/index.js +16 -2
- package/lib/server/modules/menu/index.d.ts +19 -0
- package/lib/server/modules/menu/index.js +121 -2
- package/lib/server/modules/order/index.d.ts +87 -0
- package/lib/server/modules/order/index.js +543 -0
- package/lib/server/modules/order/types.d.ts +530 -0
- package/lib/server/modules/order/types.js +34 -0
- package/lib/server/modules/order/utils/filterBookings.d.ts +6 -0
- package/lib/server/modules/order/utils/filterBookings.js +320 -0
- package/lib/server/modules/order/utils/filterOrders.d.ts +15 -0
- package/lib/server/modules/order/utils/filterOrders.js +197 -0
- package/lib/server/modules/products/index.d.ts +117 -5
- package/lib/server/modules/products/index.js +799 -62
- package/lib/server/modules/products/types.d.ts +25 -1
- package/lib/server/modules/products/types.js +1 -0
- package/lib/server/modules/resource/index.d.ts +86 -0
- package/lib/server/modules/resource/index.js +557 -0
- package/lib/server/modules/resource/types.d.ts +121 -0
- package/lib/server/modules/resource/types.js +35 -0
- package/lib/server/modules/schedule/index.d.ts +19 -0
- package/lib/server/modules/schedule/index.js +141 -12
- package/lib/server/utils/product.d.ts +5 -0
- package/lib/server/utils/product.js +56 -27
- package/lib/solution/BookingTicket/index.d.ts +10 -2
- package/lib/solution/BookingTicket/index.js +10 -2
- package/lib/solution/BookingTicket/utils/scan/index.js +0 -1
- package/lib/solution/Checkout/index.d.ts +1 -0
- package/lib/solution/Checkout/index.js +399 -331
- package/lib/solution/Checkout/utils/index.d.ts +2 -1
- package/lib/solution/Checkout/utils/index.js +6 -4
- package/lib/solution/RegisterAndLogin/config.js +266 -1
- package/lib/solution/Sales/index.d.ts +96 -0
- package/lib/solution/Sales/index.js +416 -0
- package/lib/solution/Sales/types.d.ts +67 -0
- package/lib/solution/Sales/types.js +35 -0
- package/lib/solution/ShopDiscount/index.d.ts +1 -0
- package/lib/solution/ShopDiscount/index.js +14 -6
- package/lib/solution/ShopDiscount/types.d.ts +6 -0
- package/lib/solution/ShopDiscount/utils.d.ts +9 -0
- package/lib/solution/ShopDiscount/utils.js +6 -10
- package/lib/solution/index.d.ts +2 -1
- package/lib/solution/index.js +4 -2
- package/lib/types/index.d.ts +5 -0
- package/package.json +1 -1
|
@@ -13,4 +13,10 @@ export type { QuotationState, QuotationData, QuotationProductPrice } from './quo
|
|
|
13
13
|
export { QuotationHooks } from './quotation/types';
|
|
14
14
|
export { ScheduleModuleEx } from './schedule';
|
|
15
15
|
export type { ScheduleState, ScheduleItem } from './schedule/types';
|
|
16
|
+
export { OrderModule } from './order';
|
|
17
|
+
export type { OrderState, OrderData, OrderId, OrderSummary, OrderBookingItem, OrderProductLineItem, OrderPaymentItem, OrderSurchargeItem, OrderProductDiscountItem, OrderWithoutBookings, BookingData, OrderFilters, BookingFilters, OrderFilterResult, BookingFilterResult, OrderModulePagedResult, } from './order/types';
|
|
18
|
+
export { OrderHooks } from './order/types';
|
|
19
|
+
export { ResourceModule, resourceModule } from './resource';
|
|
20
|
+
export type { ResourceState, ResourceData, ResourceId, ResourceBooking, ResourcePageQuery, ResourcePageResult, QueryOptions, ScheduleEventResource, } from './resource';
|
|
21
|
+
export { ResourceHooks } from './resource';
|
|
16
22
|
export type { RouteHandler, HttpMethod, RouteDefinition, Router, ModuleRegistryConfig, } from '../types';
|
|
@@ -21,11 +21,16 @@ var modules_exports = {};
|
|
|
21
21
|
__export(modules_exports, {
|
|
22
22
|
MenuHooks: () => import_types2.MenuHooks,
|
|
23
23
|
MenuModule: () => import_menu.MenuModule,
|
|
24
|
+
OrderHooks: () => import_types4.OrderHooks,
|
|
25
|
+
OrderModule: () => import_order.OrderModule,
|
|
24
26
|
ProductsHooks: () => import_types.ProductsHooks,
|
|
25
27
|
ProductsModule: () => import_products.ProductsModule,
|
|
26
28
|
QuotationHooks: () => import_types3.QuotationHooks,
|
|
27
29
|
QuotationModule: () => import_quotation.QuotationModule,
|
|
28
|
-
|
|
30
|
+
ResourceHooks: () => import_resource2.ResourceHooks,
|
|
31
|
+
ResourceModule: () => import_resource.ResourceModule,
|
|
32
|
+
ScheduleModuleEx: () => import_schedule.ScheduleModuleEx,
|
|
33
|
+
resourceModule: () => import_resource.resourceModule
|
|
29
34
|
});
|
|
30
35
|
module.exports = __toCommonJS(modules_exports);
|
|
31
36
|
var import_products = require("./products");
|
|
@@ -35,13 +40,22 @@ var import_types2 = require("./menu/types");
|
|
|
35
40
|
var import_quotation = require("./quotation");
|
|
36
41
|
var import_types3 = require("./quotation/types");
|
|
37
42
|
var import_schedule = require("./schedule");
|
|
43
|
+
var import_order = require("./order");
|
|
44
|
+
var import_types4 = require("./order/types");
|
|
45
|
+
var import_resource = require("./resource");
|
|
46
|
+
var import_resource2 = require("./resource");
|
|
38
47
|
// Annotate the CommonJS export names for ESM import in node:
|
|
39
48
|
0 && (module.exports = {
|
|
40
49
|
MenuHooks,
|
|
41
50
|
MenuModule,
|
|
51
|
+
OrderHooks,
|
|
52
|
+
OrderModule,
|
|
42
53
|
ProductsHooks,
|
|
43
54
|
ProductsModule,
|
|
44
55
|
QuotationHooks,
|
|
45
56
|
QuotationModule,
|
|
46
|
-
|
|
57
|
+
ResourceHooks,
|
|
58
|
+
ResourceModule,
|
|
59
|
+
ScheduleModuleEx,
|
|
60
|
+
resourceModule
|
|
47
61
|
});
|
|
@@ -11,6 +11,7 @@ export declare class MenuModule extends BaseModule implements Module {
|
|
|
11
11
|
private request;
|
|
12
12
|
private store;
|
|
13
13
|
private dbManager;
|
|
14
|
+
private logger;
|
|
14
15
|
constructor(name?: string, version?: string);
|
|
15
16
|
initialize(core: PisellCore, options?: ModuleOptions): Promise<void>;
|
|
16
17
|
/**
|
|
@@ -60,4 +61,22 @@ export declare class MenuModule extends BaseModule implements Module {
|
|
|
60
61
|
* 返回该模块需要注册的 API 路由
|
|
61
62
|
*/
|
|
62
63
|
getRoutes(): RouteDefinition[];
|
|
64
|
+
/**
|
|
65
|
+
* 记录信息日志
|
|
66
|
+
* @param title 日志标题
|
|
67
|
+
* @param metadata 日志元数据
|
|
68
|
+
*/
|
|
69
|
+
private logInfo;
|
|
70
|
+
/**
|
|
71
|
+
* 记录警告日志
|
|
72
|
+
* @param title 日志标题
|
|
73
|
+
* @param metadata 日志元数据
|
|
74
|
+
*/
|
|
75
|
+
private logWarning;
|
|
76
|
+
/**
|
|
77
|
+
* 记录错误日志
|
|
78
|
+
* @param title 日志标题
|
|
79
|
+
* @param metadata 日志元数据
|
|
80
|
+
*/
|
|
81
|
+
private logError;
|
|
63
82
|
}
|
|
@@ -27,7 +27,7 @@ var import_BaseModule = require("../../../modules/BaseModule");
|
|
|
27
27
|
var import_types = require("./types");
|
|
28
28
|
var INDEXDB_STORE_NAME = "menu";
|
|
29
29
|
var MenuModule = class extends import_BaseModule.BaseModule {
|
|
30
|
-
//
|
|
30
|
+
// LoggerManager 实例
|
|
31
31
|
constructor(name, version) {
|
|
32
32
|
super(name, version);
|
|
33
33
|
this.defaultName = "menu";
|
|
@@ -53,18 +53,26 @@ var MenuModule = class extends import_BaseModule.BaseModule {
|
|
|
53
53
|
if (appPlugin) {
|
|
54
54
|
const app = appPlugin.getApp();
|
|
55
55
|
this.dbManager = app.dbManager;
|
|
56
|
+
this.logger = app.logger;
|
|
56
57
|
if (this.dbManager) {
|
|
57
58
|
console.log("[Menu] IndexDB Manager 已初始化");
|
|
58
59
|
} else {
|
|
59
60
|
console.warn("[Menu] IndexDB Manager 未找到");
|
|
60
61
|
}
|
|
61
62
|
}
|
|
63
|
+
this.logInfo("模块初始化完成", {
|
|
64
|
+
hasDbManager: !!this.dbManager,
|
|
65
|
+
hasLogger: !!this.logger,
|
|
66
|
+
initialMenuCount: this.store.menuList.length
|
|
67
|
+
});
|
|
62
68
|
}
|
|
63
69
|
/**
|
|
64
70
|
* 加载餐牌列表(从服务器)
|
|
65
71
|
*/
|
|
66
72
|
async loadMenuList() {
|
|
67
73
|
var _a;
|
|
74
|
+
this.logInfo("开始从服务器加载餐牌列表");
|
|
75
|
+
const startTime = Date.now();
|
|
68
76
|
try {
|
|
69
77
|
const response = await this.request.get(
|
|
70
78
|
`/form/data/v1`,
|
|
@@ -73,14 +81,25 @@ var MenuModule = class extends import_BaseModule.BaseModule {
|
|
|
73
81
|
num: 999,
|
|
74
82
|
code: "menu_list"
|
|
75
83
|
},
|
|
76
|
-
{
|
|
84
|
+
{ cache: void 0 }
|
|
77
85
|
);
|
|
78
86
|
const menuList = ((_a = response == null ? void 0 : response.data) == null ? void 0 : _a.list) || [];
|
|
87
|
+
const duration = Date.now() - startTime;
|
|
88
|
+
this.logInfo("从服务器加载餐牌列表成功", {
|
|
89
|
+
menuCount: menuList.length,
|
|
90
|
+
duration: `${duration}ms`
|
|
91
|
+
});
|
|
79
92
|
await this.saveMenuToIndexDB(menuList);
|
|
80
93
|
await this.setMenuList(menuList);
|
|
81
94
|
return menuList;
|
|
82
95
|
} catch (error) {
|
|
96
|
+
const duration = Date.now() - startTime;
|
|
97
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
83
98
|
console.error("[Menu] 加载餐牌数据失败:", error);
|
|
99
|
+
this.logError("从服务器加载餐牌列表失败", {
|
|
100
|
+
duration: `${duration}ms`,
|
|
101
|
+
error: errorMessage
|
|
102
|
+
});
|
|
84
103
|
return [];
|
|
85
104
|
}
|
|
86
105
|
}
|
|
@@ -104,6 +123,7 @@ var MenuModule = class extends import_BaseModule.BaseModule {
|
|
|
104
123
|
*/
|
|
105
124
|
getMenuByIds(ids) {
|
|
106
125
|
if (!ids || ids.length === 0) {
|
|
126
|
+
this.logInfo("getMenuByIds: 未提供有效的 ids", { idsCount: 0 });
|
|
107
127
|
return [];
|
|
108
128
|
}
|
|
109
129
|
const result = [];
|
|
@@ -113,6 +133,11 @@ var MenuModule = class extends import_BaseModule.BaseModule {
|
|
|
113
133
|
result.push(menu);
|
|
114
134
|
}
|
|
115
135
|
}
|
|
136
|
+
this.logInfo("getMenuByIds: 查询完成", {
|
|
137
|
+
requestedCount: ids.length,
|
|
138
|
+
foundCount: result.length,
|
|
139
|
+
notFoundCount: ids.length - result.length
|
|
140
|
+
});
|
|
116
141
|
return result;
|
|
117
142
|
}
|
|
118
143
|
/**
|
|
@@ -131,6 +156,9 @@ var MenuModule = class extends import_BaseModule.BaseModule {
|
|
|
131
156
|
* 清空缓存
|
|
132
157
|
*/
|
|
133
158
|
async clear() {
|
|
159
|
+
this.logInfo("开始清空缓存", {
|
|
160
|
+
currentMenuCount: this.store.menuList.length
|
|
161
|
+
});
|
|
134
162
|
this.store.menuList = [];
|
|
135
163
|
this.store.map.clear();
|
|
136
164
|
this.store.currentMenu = void 0;
|
|
@@ -138,11 +166,15 @@ var MenuModule = class extends import_BaseModule.BaseModule {
|
|
|
138
166
|
try {
|
|
139
167
|
await this.dbManager.clear(INDEXDB_STORE_NAME);
|
|
140
168
|
console.log("[Menu] IndexDB 缓存已清空");
|
|
169
|
+
this.logInfo("IndexDB 缓存已清空");
|
|
141
170
|
} catch (error) {
|
|
171
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
142
172
|
console.error("[Menu] 清空 IndexDB 缓存失败:", error);
|
|
173
|
+
this.logError("清空 IndexDB 缓存失败", { error: errorMessage });
|
|
143
174
|
}
|
|
144
175
|
}
|
|
145
176
|
console.log("[Menu] 缓存已清空");
|
|
177
|
+
this.logInfo("缓存清空完成");
|
|
146
178
|
}
|
|
147
179
|
/**
|
|
148
180
|
* 从 IndexDB 加载餐牌数据
|
|
@@ -150,13 +182,19 @@ var MenuModule = class extends import_BaseModule.BaseModule {
|
|
|
150
182
|
*/
|
|
151
183
|
async loadMenuFromIndexDB() {
|
|
152
184
|
if (!this.dbManager) {
|
|
185
|
+
this.logWarning("loadMenuFromIndexDB: dbManager 不可用");
|
|
153
186
|
return [];
|
|
154
187
|
}
|
|
155
188
|
try {
|
|
156
189
|
const menuList = await this.dbManager.getAll(INDEXDB_STORE_NAME);
|
|
190
|
+
this.logInfo("从 IndexDB 加载餐牌数据", {
|
|
191
|
+
menuCount: (menuList == null ? void 0 : menuList.length) ?? 0
|
|
192
|
+
});
|
|
157
193
|
return menuList || [];
|
|
158
194
|
} catch (error) {
|
|
195
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
159
196
|
console.error("[Menu] 从 IndexDB 读取数据失败:", error);
|
|
197
|
+
this.logError("从 IndexDB 读取数据失败", { error: errorMessage });
|
|
160
198
|
return [];
|
|
161
199
|
}
|
|
162
200
|
}
|
|
@@ -166,8 +204,10 @@ var MenuModule = class extends import_BaseModule.BaseModule {
|
|
|
166
204
|
*/
|
|
167
205
|
async saveMenuToIndexDB(menuList) {
|
|
168
206
|
if (!this.dbManager) {
|
|
207
|
+
this.logWarning("saveMenuToIndexDB: dbManager 不可用");
|
|
169
208
|
return;
|
|
170
209
|
}
|
|
210
|
+
this.logInfo("开始保存餐牌数据到 IndexDB", { menuCount: menuList.length });
|
|
171
211
|
try {
|
|
172
212
|
await this.dbManager.clear(INDEXDB_STORE_NAME);
|
|
173
213
|
const savePromises = menuList.map(
|
|
@@ -175,8 +215,14 @@ var MenuModule = class extends import_BaseModule.BaseModule {
|
|
|
175
215
|
);
|
|
176
216
|
await Promise.all(savePromises);
|
|
177
217
|
console.log(`[Menu] 已将 ${menuList.length} 条餐牌数据保存到 IndexDB`);
|
|
218
|
+
this.logInfo("餐牌数据已保存到 IndexDB", { menuCount: menuList.length });
|
|
178
219
|
} catch (error) {
|
|
220
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
179
221
|
console.error("[Menu] 保存数据到 IndexDB 失败:", error);
|
|
222
|
+
this.logError("保存数据到 IndexDB 失败", {
|
|
223
|
+
menuCount: menuList.length,
|
|
224
|
+
error: errorMessage
|
|
225
|
+
});
|
|
180
226
|
}
|
|
181
227
|
}
|
|
182
228
|
/**
|
|
@@ -185,6 +231,8 @@ var MenuModule = class extends import_BaseModule.BaseModule {
|
|
|
185
231
|
*/
|
|
186
232
|
async preload() {
|
|
187
233
|
console.log("[Menu] 开始预加载数据...");
|
|
234
|
+
const startTime = Date.now();
|
|
235
|
+
this.logInfo("开始预加载数据");
|
|
188
236
|
try {
|
|
189
237
|
const cachedData = await this.loadMenuFromIndexDB();
|
|
190
238
|
if (cachedData && cachedData.length > 0) {
|
|
@@ -192,11 +240,20 @@ var MenuModule = class extends import_BaseModule.BaseModule {
|
|
|
192
240
|
this.store.menuList = (0, import_lodash_es.cloneDeep)(cachedData);
|
|
193
241
|
this.syncMenuMap();
|
|
194
242
|
this.core.effects.emit(import_types.MenuHooks.onMenuChanged, this.store.menuList);
|
|
243
|
+
const duration = Date.now() - startTime;
|
|
244
|
+
this.logInfo("预加载完成(从 IndexDB)", {
|
|
245
|
+
menuCount: cachedData.length,
|
|
246
|
+
duration: `${duration}ms`,
|
|
247
|
+
source: "IndexDB"
|
|
248
|
+
});
|
|
195
249
|
return;
|
|
196
250
|
}
|
|
197
251
|
console.log("[Menu] IndexDB 中没有缓存数据,从服务器加载...");
|
|
252
|
+
this.logInfo("IndexDB 中没有缓存数据,准备从服务器加载");
|
|
198
253
|
} catch (error) {
|
|
254
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
199
255
|
console.warn("[Menu] 从 IndexDB 加载数据失败:", error);
|
|
256
|
+
this.logWarning("从 IndexDB 加载数据失败,准备从服务器加载", { error: errorMessage });
|
|
200
257
|
}
|
|
201
258
|
const menuList = await this.loadMenuList();
|
|
202
259
|
if (menuList && menuList.length > 0) {
|
|
@@ -204,6 +261,17 @@ var MenuModule = class extends import_BaseModule.BaseModule {
|
|
|
204
261
|
this.store.menuList = (0, import_lodash_es.cloneDeep)(menuList);
|
|
205
262
|
this.syncMenuMap();
|
|
206
263
|
this.core.effects.emit(import_types.MenuHooks.onMenuChanged, this.store.menuList);
|
|
264
|
+
const duration = Date.now() - startTime;
|
|
265
|
+
this.logInfo("预加载完成(从服务器)", {
|
|
266
|
+
menuCount: menuList.length,
|
|
267
|
+
duration: `${duration}ms`,
|
|
268
|
+
source: "Server"
|
|
269
|
+
});
|
|
270
|
+
} else {
|
|
271
|
+
const duration = Date.now() - startTime;
|
|
272
|
+
this.logWarning("预加载完成但未获取到数据", {
|
|
273
|
+
duration: `${duration}ms`
|
|
274
|
+
});
|
|
207
275
|
}
|
|
208
276
|
}
|
|
209
277
|
/**
|
|
@@ -227,6 +295,57 @@ var MenuModule = class extends import_BaseModule.BaseModule {
|
|
|
227
295
|
}
|
|
228
296
|
];
|
|
229
297
|
}
|
|
298
|
+
/**
|
|
299
|
+
* 记录信息日志
|
|
300
|
+
* @param title 日志标题
|
|
301
|
+
* @param metadata 日志元数据
|
|
302
|
+
*/
|
|
303
|
+
logInfo(title, metadata) {
|
|
304
|
+
try {
|
|
305
|
+
if (this.logger) {
|
|
306
|
+
this.logger.addLog({
|
|
307
|
+
type: "info",
|
|
308
|
+
title: `[MenuModule] ${title}`,
|
|
309
|
+
metadata: metadata || {}
|
|
310
|
+
});
|
|
311
|
+
}
|
|
312
|
+
} catch {
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
/**
|
|
316
|
+
* 记录警告日志
|
|
317
|
+
* @param title 日志标题
|
|
318
|
+
* @param metadata 日志元数据
|
|
319
|
+
*/
|
|
320
|
+
logWarning(title, metadata) {
|
|
321
|
+
try {
|
|
322
|
+
if (this.logger) {
|
|
323
|
+
this.logger.addLog({
|
|
324
|
+
type: "warning",
|
|
325
|
+
title: `[MenuModule] ${title}`,
|
|
326
|
+
metadata: metadata || {}
|
|
327
|
+
});
|
|
328
|
+
}
|
|
329
|
+
} catch {
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
/**
|
|
333
|
+
* 记录错误日志
|
|
334
|
+
* @param title 日志标题
|
|
335
|
+
* @param metadata 日志元数据
|
|
336
|
+
*/
|
|
337
|
+
logError(title, metadata) {
|
|
338
|
+
try {
|
|
339
|
+
if (this.logger) {
|
|
340
|
+
this.logger.addLog({
|
|
341
|
+
type: "error",
|
|
342
|
+
title: `[MenuModule] ${title}`,
|
|
343
|
+
metadata: metadata || {}
|
|
344
|
+
});
|
|
345
|
+
}
|
|
346
|
+
} catch {
|
|
347
|
+
}
|
|
348
|
+
}
|
|
230
349
|
};
|
|
231
350
|
// Annotate the CommonJS export names for ESM import in node:
|
|
232
351
|
0 && (module.exports = {
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { Module, ModuleOptions, PisellCore } from '../../../types';
|
|
2
|
+
import { BaseModule } from '../../../modules/BaseModule';
|
|
3
|
+
import type { RouteDefinition } from '../../types';
|
|
4
|
+
import { OrderData, OrderId } from './types';
|
|
5
|
+
/**
|
|
6
|
+
* Order 模块 - 基础框架
|
|
7
|
+
*/
|
|
8
|
+
export declare class OrderModule extends BaseModule implements Module {
|
|
9
|
+
protected defaultName: string;
|
|
10
|
+
protected defaultVersion: string;
|
|
11
|
+
private store;
|
|
12
|
+
private dbManager;
|
|
13
|
+
private orderDataSource;
|
|
14
|
+
private pendingSyncMessages;
|
|
15
|
+
private syncTimer?;
|
|
16
|
+
private readonly ORDER_SYNC_DEBOUNCE_MS;
|
|
17
|
+
private resourceIdIndex;
|
|
18
|
+
private logger;
|
|
19
|
+
private storage;
|
|
20
|
+
constructor(name?: string, version?: string);
|
|
21
|
+
initialize(core: PisellCore, options?: ModuleOptions): Promise<void>;
|
|
22
|
+
/**
|
|
23
|
+
* 记录信息日志
|
|
24
|
+
* @param title 日志标题
|
|
25
|
+
* @param metadata 日志元数据
|
|
26
|
+
*/
|
|
27
|
+
private logInfo;
|
|
28
|
+
/**
|
|
29
|
+
* 记录错误日志
|
|
30
|
+
* @param title 日志标题
|
|
31
|
+
* @param metadata 日志元数据
|
|
32
|
+
*/
|
|
33
|
+
private logError;
|
|
34
|
+
preload(): Promise<void>;
|
|
35
|
+
getOrders(): OrderData[];
|
|
36
|
+
getOrderById(id: OrderId): OrderData | undefined;
|
|
37
|
+
/** 按 order_id 查询(推荐) */
|
|
38
|
+
getOrderByOrderId(orderId: OrderId): OrderData | undefined;
|
|
39
|
+
loadOrdersByServer(): Promise<OrderData[]>;
|
|
40
|
+
getOrdersByResourceId(resourceId: string | number): OrderData[];
|
|
41
|
+
getRoutes(): RouteDefinition[];
|
|
42
|
+
destroy(): void;
|
|
43
|
+
private syncOrdersMap;
|
|
44
|
+
private extractResourceIds;
|
|
45
|
+
private getOrderDateKey;
|
|
46
|
+
/**
|
|
47
|
+
* 初始化 OrderDataSource 实例
|
|
48
|
+
*/
|
|
49
|
+
private initOrderDataSource;
|
|
50
|
+
/**
|
|
51
|
+
* 初始化 pubsub 订阅,监听订单变更
|
|
52
|
+
*/
|
|
53
|
+
private setupOrderSync;
|
|
54
|
+
/**
|
|
55
|
+
* 处理防抖后的同步消息批次
|
|
56
|
+
*
|
|
57
|
+
* 后端统一发送 change 消息,不再区分新增/编辑/删除。
|
|
58
|
+
* - 单条(id/order_id):若携带 body/data 则直接 upsert 到本地
|
|
59
|
+
* - 批量(ids):通过 HTTP 按 ids 增量拉取,再 merge 到本地
|
|
60
|
+
*/
|
|
61
|
+
private processOrderSyncMessages;
|
|
62
|
+
/**
|
|
63
|
+
* 通过 HTTP 按 ids 增量拉取订单
|
|
64
|
+
*/
|
|
65
|
+
private fetchOrdersByHttp;
|
|
66
|
+
/**
|
|
67
|
+
* 将增量订单合并到 store
|
|
68
|
+
*/
|
|
69
|
+
private mergeOrdersToStore;
|
|
70
|
+
private normalizeOrderSyncMessage;
|
|
71
|
+
private normalizeOrderSyncPayload;
|
|
72
|
+
private uniqueOrderIds;
|
|
73
|
+
private getIdKey;
|
|
74
|
+
/**
|
|
75
|
+
* 当前订单拉取窗口:
|
|
76
|
+
* - 优先使用 createdAtQuery.sales_time_between(已按营业日边界初始化)
|
|
77
|
+
* - 无法解析时退化为自然日窗口
|
|
78
|
+
*/
|
|
79
|
+
private getCurrentPullWindow;
|
|
80
|
+
private hasPulledOrdersToday;
|
|
81
|
+
private markOrderPulledAtNow;
|
|
82
|
+
private getStorageItem;
|
|
83
|
+
private setStorageItem;
|
|
84
|
+
private loadOrdersFromSQLite;
|
|
85
|
+
private saveOrdersToSQLite;
|
|
86
|
+
clear(): Promise<void>;
|
|
87
|
+
}
|