@pisell/pisellos 2.3.57 → 2.3.59
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 +109 -65
- package/dist/model/strategy/adapter/promotion/index.js +0 -9
- package/dist/modules/Quotation/index.d.ts +6 -0
- package/dist/modules/Quotation/index.js +75 -19
- package/dist/modules/Rules/index.js +14 -7
- package/dist/plugins/request.d.ts +1 -0
- package/dist/server/index.d.ts +15 -0
- package/dist/server/index.js +970 -842
- 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/order/index.d.ts +7 -5
- package/dist/server/modules/order/index.js +185 -80
- package/dist/server/modules/order/types.d.ts +1 -1
- package/dist/server/modules/products/index.d.ts +2 -0
- package/dist/server/modules/products/index.js +17 -3
- package/dist/server/modules/resource/index.js +21 -13
- package/lib/core/index.d.ts +7 -0
- package/lib/core/index.js +20 -2
- package/lib/modules/Quotation/index.d.ts +6 -0
- package/lib/modules/Quotation/index.js +49 -5
- package/lib/modules/Rules/index.js +20 -5
- package/lib/plugins/request.d.ts +1 -0
- package/lib/server/index.d.ts +15 -0
- package/lib/server/index.js +120 -15
- package/lib/server/modules/floor-plan/index.d.ts +4 -0
- package/lib/server/modules/floor-plan/index.js +54 -6
- package/lib/server/modules/order/index.d.ts +7 -5
- package/lib/server/modules/order/index.js +114 -26
- package/lib/server/modules/order/types.d.ts +1 -1
- package/lib/server/modules/products/index.d.ts +2 -0
- package/lib/server/modules/products/index.js +15 -4
- package/lib/server/modules/resource/index.js +7 -2
- package/package.json +1 -1
package/dist/core/index.d.ts
CHANGED
|
@@ -12,8 +12,15 @@ declare class PisellOSCore implements PisellCore {
|
|
|
12
12
|
context: BusinessContext;
|
|
13
13
|
server: any;
|
|
14
14
|
serverOptions?: ServerOptions;
|
|
15
|
+
private serverModulePromise?;
|
|
15
16
|
constructor(options?: PisellOSOptions);
|
|
16
17
|
private initialize;
|
|
18
|
+
/**
|
|
19
|
+
* 仅预加载 Server 模块代码,不创建实例、不注册模块、不请求业务数据。
|
|
20
|
+
* 导入失败会清空 Promise,正式 initializeServer 时仍可重新尝试。
|
|
21
|
+
*/
|
|
22
|
+
preloadServerModule(): Promise<void>;
|
|
23
|
+
private loadServerModule;
|
|
17
24
|
/**
|
|
18
25
|
* 初始化 Server(公开方法,需要外部显式调用并等待)
|
|
19
26
|
* Server 配置从构造函数传入的 options.server 中获取
|
package/dist/core/index.js
CHANGED
|
@@ -24,8 +24,6 @@ import { EffectsManager } from "../effects";
|
|
|
24
24
|
* pisell OS 核心实现
|
|
25
25
|
*/
|
|
26
26
|
var PisellOSCore = /*#__PURE__*/function () {
|
|
27
|
-
// 保存 Server 配置
|
|
28
|
-
|
|
29
27
|
function PisellOSCore(options) {
|
|
30
28
|
_classCallCheck(this, PisellOSCore);
|
|
31
29
|
_defineProperty(this, "plugins", new Map());
|
|
@@ -37,6 +35,8 @@ var PisellOSCore = /*#__PURE__*/function () {
|
|
|
37
35
|
_defineProperty(this, "server", void 0);
|
|
38
36
|
// Server 实例
|
|
39
37
|
_defineProperty(this, "serverOptions", void 0);
|
|
38
|
+
// 保存 Server 配置
|
|
39
|
+
_defineProperty(this, "serverModulePromise", void 0);
|
|
40
40
|
this.debug = (options === null || options === void 0 ? void 0 : options.debug) || false;
|
|
41
41
|
this.context = (options === null || options === void 0 ? void 0 : options.context) || {};
|
|
42
42
|
|
|
@@ -45,6 +45,7 @@ var PisellOSCore = /*#__PURE__*/function () {
|
|
|
45
45
|
this.serverOptions = options.server;
|
|
46
46
|
}
|
|
47
47
|
this.initialize(options);
|
|
48
|
+
console.log('constructor123456');
|
|
48
49
|
}
|
|
49
50
|
_createClass(PisellOSCore, [{
|
|
50
51
|
key: "initialize",
|
|
@@ -63,6 +64,49 @@ var PisellOSCore = /*#__PURE__*/function () {
|
|
|
63
64
|
this.log('[PisellOS] 核心初始化完成');
|
|
64
65
|
}
|
|
65
66
|
|
|
67
|
+
/**
|
|
68
|
+
* 仅预加载 Server 模块代码,不创建实例、不注册模块、不请求业务数据。
|
|
69
|
+
* 导入失败会清空 Promise,正式 initializeServer 时仍可重新尝试。
|
|
70
|
+
*/
|
|
71
|
+
}, {
|
|
72
|
+
key: "preloadServerModule",
|
|
73
|
+
value: (function () {
|
|
74
|
+
var _preloadServerModule = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
|
|
75
|
+
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
76
|
+
while (1) switch (_context.prev = _context.next) {
|
|
77
|
+
case 0:
|
|
78
|
+
if (!(this.server || !this.serverOptions)) {
|
|
79
|
+
_context.next = 2;
|
|
80
|
+
break;
|
|
81
|
+
}
|
|
82
|
+
return _context.abrupt("return");
|
|
83
|
+
case 2:
|
|
84
|
+
_context.next = 4;
|
|
85
|
+
return this.loadServerModule();
|
|
86
|
+
case 4:
|
|
87
|
+
case "end":
|
|
88
|
+
return _context.stop();
|
|
89
|
+
}
|
|
90
|
+
}, _callee, this);
|
|
91
|
+
}));
|
|
92
|
+
function preloadServerModule() {
|
|
93
|
+
return _preloadServerModule.apply(this, arguments);
|
|
94
|
+
}
|
|
95
|
+
return preloadServerModule;
|
|
96
|
+
}())
|
|
97
|
+
}, {
|
|
98
|
+
key: "loadServerModule",
|
|
99
|
+
value: function loadServerModule() {
|
|
100
|
+
var _this2 = this;
|
|
101
|
+
if (!this.serverModulePromise) {
|
|
102
|
+
this.serverModulePromise = import("../server").catch(function (error) {
|
|
103
|
+
_this2.serverModulePromise = undefined;
|
|
104
|
+
throw error;
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
return this.serverModulePromise;
|
|
108
|
+
}
|
|
109
|
+
|
|
66
110
|
/**
|
|
67
111
|
* 初始化 Server(公开方法,需要外部显式调用并等待)
|
|
68
112
|
* Server 配置从构造函数传入的 options.server 中获取
|
|
@@ -70,57 +114,57 @@ var PisellOSCore = /*#__PURE__*/function () {
|
|
|
70
114
|
}, {
|
|
71
115
|
key: "initializeServer",
|
|
72
116
|
value: (function () {
|
|
73
|
-
var _initializeServer = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function
|
|
117
|
+
var _initializeServer = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(options) {
|
|
74
118
|
var ServerModule, Server;
|
|
75
|
-
return _regeneratorRuntime().wrap(function
|
|
76
|
-
while (1) switch (
|
|
119
|
+
return _regeneratorRuntime().wrap(function _callee2$(_context2) {
|
|
120
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
77
121
|
case 0:
|
|
78
122
|
if (!this.server) {
|
|
79
|
-
|
|
123
|
+
_context2.next = 3;
|
|
80
124
|
break;
|
|
81
125
|
}
|
|
82
126
|
this.log('Server 已经初始化,跳过重复初始化', 'warn');
|
|
83
|
-
return
|
|
127
|
+
return _context2.abrupt("return");
|
|
84
128
|
case 3:
|
|
85
129
|
if (this.serverOptions) {
|
|
86
|
-
|
|
130
|
+
_context2.next = 6;
|
|
87
131
|
break;
|
|
88
132
|
}
|
|
89
133
|
this.log('未提供 Server 配置,无法初始化', 'warn');
|
|
90
|
-
return
|
|
134
|
+
return _context2.abrupt("return");
|
|
91
135
|
case 6:
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
return
|
|
136
|
+
_context2.prev = 6;
|
|
137
|
+
_context2.next = 9;
|
|
138
|
+
return this.loadServerModule();
|
|
95
139
|
case 9:
|
|
96
|
-
ServerModule =
|
|
140
|
+
ServerModule = _context2.sent;
|
|
97
141
|
Server = ServerModule.default; // 创建 Server 实例
|
|
98
142
|
this.server = new Server(this);
|
|
99
143
|
this.log('Server 实例已创建');
|
|
100
144
|
|
|
101
145
|
// 初始化模块并预加载数据
|
|
102
146
|
if (!this.serverOptions.modules) {
|
|
103
|
-
|
|
147
|
+
_context2.next = 16;
|
|
104
148
|
break;
|
|
105
149
|
}
|
|
106
|
-
|
|
150
|
+
_context2.next = 16;
|
|
107
151
|
return this.server.initialize(this.serverOptions.modules, this.serverOptions.autoInitData !== false, options);
|
|
108
152
|
case 16:
|
|
109
153
|
console.log('[PisellOS] ✅ Server 初始化完成,所有数据已预加载');
|
|
110
154
|
this.log('[PisellOS] Server 初始化完成');
|
|
111
|
-
|
|
155
|
+
_context2.next = 25;
|
|
112
156
|
break;
|
|
113
157
|
case 20:
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
console.error('[PisellOS] ❌ Server 初始化失败:',
|
|
117
|
-
this.log("Server \u521D\u59CB\u5316\u5931\u8D25: ".concat(
|
|
118
|
-
throw
|
|
158
|
+
_context2.prev = 20;
|
|
159
|
+
_context2.t0 = _context2["catch"](6);
|
|
160
|
+
console.error('[PisellOS] ❌ Server 初始化失败:', _context2.t0);
|
|
161
|
+
this.log("Server \u521D\u59CB\u5316\u5931\u8D25: ".concat(_context2.t0), 'error');
|
|
162
|
+
throw _context2.t0;
|
|
119
163
|
case 25:
|
|
120
164
|
case "end":
|
|
121
|
-
return
|
|
165
|
+
return _context2.stop();
|
|
122
166
|
}
|
|
123
|
-
},
|
|
167
|
+
}, _callee2, this, [[6, 20]]);
|
|
124
168
|
}));
|
|
125
169
|
function initializeServer(_x) {
|
|
126
170
|
return _initializeServer.apply(this, arguments);
|
|
@@ -153,7 +197,7 @@ var PisellOSCore = /*#__PURE__*/function () {
|
|
|
153
197
|
}, {
|
|
154
198
|
key: "registerPlugin",
|
|
155
199
|
value: function registerPlugin(plugin, options) {
|
|
156
|
-
var
|
|
200
|
+
var _this3 = this;
|
|
157
201
|
if (this.plugins.has(plugin.name)) {
|
|
158
202
|
this.log("\u63D2\u4EF6 ".concat(plugin.name, " \u5DF2\u7ECF\u6CE8\u518C\u8FC7\uFF0C\u5C06\u88AB\u8986\u76D6"), 'warn');
|
|
159
203
|
}
|
|
@@ -181,7 +225,7 @@ var PisellOSCore = /*#__PURE__*/function () {
|
|
|
181
225
|
var result = plugin.initialize();
|
|
182
226
|
if (result instanceof Promise) {
|
|
183
227
|
result.catch(function (err) {
|
|
184
|
-
|
|
228
|
+
_this3.log("\u63D2\u4EF6 ".concat(plugin.name, " \u521D\u59CB\u5316\u5931\u8D25: ").concat(err.message), 'error');
|
|
185
229
|
throw err;
|
|
186
230
|
});
|
|
187
231
|
}
|
|
@@ -207,7 +251,7 @@ var PisellOSCore = /*#__PURE__*/function () {
|
|
|
207
251
|
}, {
|
|
208
252
|
key: "registerModule",
|
|
209
253
|
value: function registerModule(module, options) {
|
|
210
|
-
var
|
|
254
|
+
var _this4 = this;
|
|
211
255
|
if (this.modules.has(module.name)) {
|
|
212
256
|
this.log("\u6A21\u5757 ".concat(module.name, " \u5DF2\u7ECF\u6CE8\u518C\u8FC7\uFF0C\u5C06\u88AB\u8986\u76D6"), 'warn');
|
|
213
257
|
}
|
|
@@ -250,7 +294,7 @@ var PisellOSCore = /*#__PURE__*/function () {
|
|
|
250
294
|
// 预先给模块初始化值系统
|
|
251
295
|
var _createStore = createStore((options === null || options === void 0 ? void 0 : options.initialState) || {}, module.name, function (path, value) {
|
|
252
296
|
console.log('core 检测到模块值更新', module.name, path, value);
|
|
253
|
-
|
|
297
|
+
_this4.effects.emit("".concat(module.name, ":changed"), {
|
|
254
298
|
path: path,
|
|
255
299
|
value: value
|
|
256
300
|
});
|
|
@@ -265,7 +309,7 @@ var PisellOSCore = /*#__PURE__*/function () {
|
|
|
265
309
|
}, options));
|
|
266
310
|
if (result instanceof Promise) {
|
|
267
311
|
result.catch(function (err) {
|
|
268
|
-
|
|
312
|
+
_this4.log("\u6A21\u5757 ".concat(module.name, " \u521D\u59CB\u5316\u5931\u8D25: ").concat(err.message), 'error');
|
|
269
313
|
throw err;
|
|
270
314
|
});
|
|
271
315
|
}
|
|
@@ -310,100 +354,100 @@ var PisellOSCore = /*#__PURE__*/function () {
|
|
|
310
354
|
}, {
|
|
311
355
|
key: "destroy",
|
|
312
356
|
value: function () {
|
|
313
|
-
var _destroy = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function
|
|
357
|
+
var _destroy = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3() {
|
|
314
358
|
var _iterator4, _step4, _step4$value, name, module, _iterator5, _step5, _step5$value, _name, plugin;
|
|
315
|
-
return _regeneratorRuntime().wrap(function
|
|
316
|
-
while (1) switch (
|
|
359
|
+
return _regeneratorRuntime().wrap(function _callee3$(_context3) {
|
|
360
|
+
while (1) switch (_context3.prev = _context3.next) {
|
|
317
361
|
case 0:
|
|
318
362
|
// 先销毁模块
|
|
319
363
|
_iterator4 = _createForOfIteratorHelper(this.modules.entries());
|
|
320
|
-
|
|
364
|
+
_context3.prev = 1;
|
|
321
365
|
_iterator4.s();
|
|
322
366
|
case 3:
|
|
323
367
|
if ((_step4 = _iterator4.n()).done) {
|
|
324
|
-
|
|
368
|
+
_context3.next = 17;
|
|
325
369
|
break;
|
|
326
370
|
}
|
|
327
371
|
_step4$value = _slicedToArray(_step4.value, 2), name = _step4$value[0], module = _step4$value[1];
|
|
328
372
|
if (!module.destroy) {
|
|
329
|
-
|
|
373
|
+
_context3.next = 15;
|
|
330
374
|
break;
|
|
331
375
|
}
|
|
332
|
-
|
|
333
|
-
|
|
376
|
+
_context3.prev = 6;
|
|
377
|
+
_context3.next = 9;
|
|
334
378
|
return Promise.resolve(module.destroy());
|
|
335
379
|
case 9:
|
|
336
380
|
this.log("\u6A21\u5757 ".concat(name, " \u5DF2\u9500\u6BC1"));
|
|
337
|
-
|
|
381
|
+
_context3.next = 15;
|
|
338
382
|
break;
|
|
339
383
|
case 12:
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
this.log("\u9500\u6BC1\u6A21\u5757 ".concat(name, " \u65F6\u51FA\u9519: ").concat(
|
|
384
|
+
_context3.prev = 12;
|
|
385
|
+
_context3.t0 = _context3["catch"](6);
|
|
386
|
+
this.log("\u9500\u6BC1\u6A21\u5757 ".concat(name, " \u65F6\u51FA\u9519: ").concat(_context3.t0), 'error');
|
|
343
387
|
case 15:
|
|
344
|
-
|
|
388
|
+
_context3.next = 3;
|
|
345
389
|
break;
|
|
346
390
|
case 17:
|
|
347
|
-
|
|
391
|
+
_context3.next = 22;
|
|
348
392
|
break;
|
|
349
393
|
case 19:
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
_iterator4.e(
|
|
394
|
+
_context3.prev = 19;
|
|
395
|
+
_context3.t1 = _context3["catch"](1);
|
|
396
|
+
_iterator4.e(_context3.t1);
|
|
353
397
|
case 22:
|
|
354
|
-
|
|
398
|
+
_context3.prev = 22;
|
|
355
399
|
_iterator4.f();
|
|
356
|
-
return
|
|
400
|
+
return _context3.finish(22);
|
|
357
401
|
case 25:
|
|
358
402
|
this.modules.clear();
|
|
359
403
|
|
|
360
404
|
// 再销毁插件
|
|
361
405
|
_iterator5 = _createForOfIteratorHelper(this.plugins.entries());
|
|
362
|
-
|
|
406
|
+
_context3.prev = 27;
|
|
363
407
|
_iterator5.s();
|
|
364
408
|
case 29:
|
|
365
409
|
if ((_step5 = _iterator5.n()).done) {
|
|
366
|
-
|
|
410
|
+
_context3.next = 43;
|
|
367
411
|
break;
|
|
368
412
|
}
|
|
369
413
|
_step5$value = _slicedToArray(_step5.value, 2), _name = _step5$value[0], plugin = _step5$value[1];
|
|
370
414
|
if (!plugin.destroy) {
|
|
371
|
-
|
|
415
|
+
_context3.next = 41;
|
|
372
416
|
break;
|
|
373
417
|
}
|
|
374
|
-
|
|
375
|
-
|
|
418
|
+
_context3.prev = 32;
|
|
419
|
+
_context3.next = 35;
|
|
376
420
|
return Promise.resolve(plugin.destroy());
|
|
377
421
|
case 35:
|
|
378
422
|
this.log("\u63D2\u4EF6 ".concat(_name, " \u5DF2\u9500\u6BC1"));
|
|
379
|
-
|
|
423
|
+
_context3.next = 41;
|
|
380
424
|
break;
|
|
381
425
|
case 38:
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
this.log("\u9500\u6BC1\u63D2\u4EF6 ".concat(_name, " \u65F6\u51FA\u9519: ").concat(
|
|
426
|
+
_context3.prev = 38;
|
|
427
|
+
_context3.t2 = _context3["catch"](32);
|
|
428
|
+
this.log("\u9500\u6BC1\u63D2\u4EF6 ".concat(_name, " \u65F6\u51FA\u9519: ").concat(_context3.t2), 'error');
|
|
385
429
|
case 41:
|
|
386
|
-
|
|
430
|
+
_context3.next = 29;
|
|
387
431
|
break;
|
|
388
432
|
case 43:
|
|
389
|
-
|
|
433
|
+
_context3.next = 48;
|
|
390
434
|
break;
|
|
391
435
|
case 45:
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
_iterator5.e(
|
|
436
|
+
_context3.prev = 45;
|
|
437
|
+
_context3.t3 = _context3["catch"](27);
|
|
438
|
+
_iterator5.e(_context3.t3);
|
|
395
439
|
case 48:
|
|
396
|
-
|
|
440
|
+
_context3.prev = 48;
|
|
397
441
|
_iterator5.f();
|
|
398
|
-
return
|
|
442
|
+
return _context3.finish(48);
|
|
399
443
|
case 51:
|
|
400
444
|
this.plugins.clear();
|
|
401
445
|
this.log('PisellOS 核心已销毁');
|
|
402
446
|
case 53:
|
|
403
447
|
case "end":
|
|
404
|
-
return
|
|
448
|
+
return _context3.stop();
|
|
405
449
|
}
|
|
406
|
-
},
|
|
450
|
+
}, _callee3, this, [[1, 19, 22, 25], [6, 12], [27, 45, 48, 51], [32, 38]]);
|
|
407
451
|
}));
|
|
408
452
|
function destroy() {
|
|
409
453
|
return _destroy.apply(this, arguments);
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
// 导出评估器
|
|
2
|
-
export { PromotionEvaluator } from "./evaluator";
|
|
3
|
-
|
|
4
|
-
// 导出适配器
|
|
5
|
-
export { PromotionAdapter } from "./adapter";
|
|
6
|
-
export { default } from "./adapter";
|
|
7
|
-
|
|
8
|
-
// 导出策略配置示例常量
|
|
9
|
-
export { X_ITEMS_FOR_Y_PRICE_STRATEGY, BUY_X_GET_Y_FREE_STRATEGY, ITEM_REWARD_STRATEGY } from "./examples";
|
|
@@ -9,6 +9,8 @@ export declare class QuotationModule extends BaseModule implements Module {
|
|
|
9
9
|
private request;
|
|
10
10
|
private store;
|
|
11
11
|
private scheduleResolver?;
|
|
12
|
+
private app;
|
|
13
|
+
private quotationListUpdatedListener?;
|
|
12
14
|
constructor(name?: string, version?: string);
|
|
13
15
|
initialize(core: PisellCore, options: ModuleOptions): Promise<void>;
|
|
14
16
|
loadQuotations(params?: {
|
|
@@ -16,6 +18,7 @@ export declare class QuotationModule extends BaseModule implements Module {
|
|
|
16
18
|
customer_id?: number | string;
|
|
17
19
|
}): Promise<void>;
|
|
18
20
|
getQuotationList(): QuotationItem[];
|
|
21
|
+
setQuotationListUpdatedListener(listener?: () => void): void;
|
|
19
22
|
getQuotationCustomerScopeInfo(): QuotationCustomerScopeInfo;
|
|
20
23
|
/**
|
|
21
24
|
* Look up the quotation price for a specific product (+ optional variant) at a given datetime.
|
|
@@ -60,6 +63,9 @@ export declare class QuotationModule extends BaseModule implements Module {
|
|
|
60
63
|
customer_id?: number | string;
|
|
61
64
|
}): Map<string, string | null>;
|
|
62
65
|
setScheduleResolver(resolver: (id: number) => ScheduleItem | undefined): void;
|
|
66
|
+
private applyQuotationResponse;
|
|
67
|
+
private notifyQuotationListUpdated;
|
|
68
|
+
private getQuotationCacheKeyData;
|
|
63
69
|
private isQuotationVisibleForCustomer;
|
|
64
70
|
private hasValidCustomerId;
|
|
65
71
|
private normalizeCustomerId;
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
2
2
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
3
3
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
4
|
+
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
|
5
|
+
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
6
|
+
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
|
|
7
|
+
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
|
4
8
|
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
|
|
5
9
|
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
6
10
|
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
@@ -36,12 +40,15 @@ export var QuotationModule = /*#__PURE__*/function (_BaseModule) {
|
|
|
36
40
|
list: []
|
|
37
41
|
});
|
|
38
42
|
_defineProperty(_assertThisInitialized(_this), "scheduleResolver", void 0);
|
|
43
|
+
_defineProperty(_assertThisInitialized(_this), "app", void 0);
|
|
44
|
+
_defineProperty(_assertThisInitialized(_this), "quotationListUpdatedListener", void 0);
|
|
39
45
|
return _this;
|
|
40
46
|
}
|
|
41
47
|
_createClass(QuotationModule, [{
|
|
42
48
|
key: "initialize",
|
|
43
49
|
value: function () {
|
|
44
50
|
var _initialize = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(core, options) {
|
|
51
|
+
var _core$getPlugin, _core$getPlugin$getAp;
|
|
45
52
|
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
46
53
|
while (1) switch (_context.prev = _context.next) {
|
|
47
54
|
case 0:
|
|
@@ -53,10 +60,11 @@ export var QuotationModule = /*#__PURE__*/function (_BaseModule) {
|
|
|
53
60
|
}
|
|
54
61
|
throw new Error('QuotationModule 需要 request 插件支持');
|
|
55
62
|
case 4:
|
|
63
|
+
this.app = (_core$getPlugin = core.getPlugin('app')) === null || _core$getPlugin === void 0 || (_core$getPlugin$getAp = _core$getPlugin.getApp) === null || _core$getPlugin$getAp === void 0 ? void 0 : _core$getPlugin$getAp.call(_core$getPlugin);
|
|
56
64
|
this.store = {
|
|
57
65
|
list: []
|
|
58
66
|
};
|
|
59
|
-
case
|
|
67
|
+
case 6:
|
|
60
68
|
case "end":
|
|
61
69
|
return _context.stop();
|
|
62
70
|
}
|
|
@@ -71,8 +79,8 @@ export var QuotationModule = /*#__PURE__*/function (_BaseModule) {
|
|
|
71
79
|
key: "loadQuotations",
|
|
72
80
|
value: function () {
|
|
73
81
|
var _loadQuotations = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(params) {
|
|
74
|
-
var
|
|
75
|
-
var query,
|
|
82
|
+
var _this2 = this;
|
|
83
|
+
var query, initialResultApplied, applyRemoteUpdate, res;
|
|
76
84
|
return _regeneratorRuntime().wrap(function _callee2$(_context2) {
|
|
77
85
|
while (1) switch (_context2.prev = _context2.next) {
|
|
78
86
|
case 0:
|
|
@@ -81,19 +89,27 @@ export var QuotationModule = /*#__PURE__*/function (_BaseModule) {
|
|
|
81
89
|
if ((params === null || params === void 0 ? void 0 : params.channel) === 'online_store') {
|
|
82
90
|
query.channel = 'online-store';
|
|
83
91
|
}
|
|
84
|
-
|
|
92
|
+
initialResultApplied = false;
|
|
93
|
+
applyRemoteUpdate = function applyRemoteUpdate(response) {
|
|
94
|
+
_this2.applyQuotationResponse(response);
|
|
95
|
+
if (initialResultApplied) {
|
|
96
|
+
_this2.notifyQuotationListUpdated();
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
_context2.next = 7;
|
|
85
100
|
return this.request.get('/quotation/available', query, {
|
|
86
|
-
|
|
87
|
-
|
|
101
|
+
cache: {
|
|
102
|
+
type: 'indexDB',
|
|
103
|
+
updateCache: true,
|
|
104
|
+
cacheKeyData: this.getQuotationCacheKeyData(query)
|
|
105
|
+
},
|
|
106
|
+
cacheUpdateChange: applyRemoteUpdate
|
|
88
107
|
});
|
|
89
|
-
case
|
|
108
|
+
case 7:
|
|
90
109
|
res = _context2.sent;
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
});
|
|
95
|
-
this.store.list = list;
|
|
96
|
-
case 9:
|
|
110
|
+
this.applyQuotationResponse(res);
|
|
111
|
+
initialResultApplied = true;
|
|
112
|
+
case 10:
|
|
97
113
|
case "end":
|
|
98
114
|
return _context2.stop();
|
|
99
115
|
}
|
|
@@ -109,10 +125,15 @@ export var QuotationModule = /*#__PURE__*/function (_BaseModule) {
|
|
|
109
125
|
value: function getQuotationList() {
|
|
110
126
|
return this.store.list;
|
|
111
127
|
}
|
|
128
|
+
}, {
|
|
129
|
+
key: "setQuotationListUpdatedListener",
|
|
130
|
+
value: function setQuotationListUpdatedListener(listener) {
|
|
131
|
+
this.quotationListUpdatedListener = listener;
|
|
132
|
+
}
|
|
112
133
|
}, {
|
|
113
134
|
key: "getQuotationCustomerScopeInfo",
|
|
114
135
|
value: function getQuotationCustomerScopeInfo() {
|
|
115
|
-
var
|
|
136
|
+
var _this3 = this;
|
|
116
137
|
var customerById = new Map();
|
|
117
138
|
var quotationScopes = this.store.list.filter(function (quotation) {
|
|
118
139
|
return Array.isArray(quotation.customer) && quotation.customer.length > 0;
|
|
@@ -122,7 +143,7 @@ export var QuotationModule = /*#__PURE__*/function (_BaseModule) {
|
|
|
122
143
|
var localSeen = new Set();
|
|
123
144
|
var quotationCustomers = quotation.customer || [];
|
|
124
145
|
quotationCustomers.forEach(function (customer) {
|
|
125
|
-
var customerId =
|
|
146
|
+
var customerId = _this3.normalizeCustomerId(customer === null || customer === void 0 ? void 0 : customer.id);
|
|
126
147
|
if (!customerId || localSeen.has(customerId)) return;
|
|
127
148
|
localSeen.add(customerId);
|
|
128
149
|
customerIds.push(customerId);
|
|
@@ -247,6 +268,41 @@ export var QuotationModule = /*#__PURE__*/function (_BaseModule) {
|
|
|
247
268
|
value: function setScheduleResolver(resolver) {
|
|
248
269
|
this.scheduleResolver = resolver;
|
|
249
270
|
}
|
|
271
|
+
}, {
|
|
272
|
+
key: "applyQuotationResponse",
|
|
273
|
+
value: function applyQuotationResponse(response) {
|
|
274
|
+
var _data;
|
|
275
|
+
var source = (response === null || response === void 0 || (_data = response.data) === null || _data === void 0 ? void 0 : _data.list) || (response === null || response === void 0 ? void 0 : response.list) || [];
|
|
276
|
+
this.store.list = _toConsumableArray(source).sort(function (a, b) {
|
|
277
|
+
return Number(b.sort || 0) - Number(a.sort || 0);
|
|
278
|
+
});
|
|
279
|
+
}
|
|
280
|
+
}, {
|
|
281
|
+
key: "notifyQuotationListUpdated",
|
|
282
|
+
value: function notifyQuotationListUpdated() {
|
|
283
|
+
try {
|
|
284
|
+
var _this$quotationListUp;
|
|
285
|
+
(_this$quotationListUp = this.quotationListUpdatedListener) === null || _this$quotationListUp === void 0 || _this$quotationListUp.call(this);
|
|
286
|
+
} catch (error) {
|
|
287
|
+
console.warn('[QuotationModule] 报价单后台更新回调失败', error);
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
}, {
|
|
291
|
+
key: "getQuotationCacheKeyData",
|
|
292
|
+
value: function getQuotationCacheKeyData(query) {
|
|
293
|
+
var shopId = '';
|
|
294
|
+
try {
|
|
295
|
+
var _this$app, _this$app$getStorage;
|
|
296
|
+
var storedCore = (_this$app = this.app) === null || _this$app === void 0 || (_this$app = _this$app.storage) === null || _this$app === void 0 || (_this$app$getStorage = _this$app.getStorage) === null || _this$app$getStorage === void 0 ? void 0 : _this$app$getStorage.call(_this$app, 'core');
|
|
297
|
+
var coreInfo = typeof storedCore === 'string' ? JSON.parse(storedCore || '{}') : storedCore || {};
|
|
298
|
+
shopId = String((coreInfo === null || coreInfo === void 0 ? void 0 : coreInfo.id) || '');
|
|
299
|
+
} catch (_unused) {
|
|
300
|
+
// 缓存隔离信息读取失败时仍按请求参数缓存。
|
|
301
|
+
}
|
|
302
|
+
return _objectSpread(_objectSpread({}, query), {}, {
|
|
303
|
+
shop_id: shopId
|
|
304
|
+
});
|
|
305
|
+
}
|
|
250
306
|
}, {
|
|
251
307
|
key: "isQuotationVisibleForCustomer",
|
|
252
308
|
value: function isQuotationVisibleForCustomer(quotation, customerId) {
|
|
@@ -273,17 +329,17 @@ export var QuotationModule = /*#__PURE__*/function (_BaseModule) {
|
|
|
273
329
|
key: "isQuotationActiveAt",
|
|
274
330
|
value: function isQuotationActiveAt(quotation, datetime) {
|
|
275
331
|
var _quotation$schedule,
|
|
276
|
-
|
|
332
|
+
_this4 = this;
|
|
277
333
|
if (!((_quotation$schedule = quotation.schedule) !== null && _quotation$schedule !== void 0 && _quotation$schedule.length)) return false;
|
|
278
334
|
var scheduleItems = [];
|
|
279
335
|
quotation.schedule.forEach(function (s) {
|
|
280
|
-
var
|
|
281
|
-
var full = (
|
|
336
|
+
var _this4$scheduleResolv;
|
|
337
|
+
var full = (_this4$scheduleResolv = _this4.scheduleResolver) === null || _this4$scheduleResolv === void 0 ? void 0 : _this4$scheduleResolv.call(_this4, s.id);
|
|
282
338
|
if (full) {
|
|
283
339
|
scheduleItems.push(full);
|
|
284
340
|
return;
|
|
285
341
|
}
|
|
286
|
-
if (
|
|
342
|
+
if (_this4.scheduleResolver) {
|
|
287
343
|
return;
|
|
288
344
|
}
|
|
289
345
|
var fallbackSchedule = _objectSpread(_objectSpread({}, s), {}, {
|
|
@@ -1186,19 +1186,27 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
|
|
|
1186
1186
|
return false;
|
|
1187
1187
|
});
|
|
1188
1188
|
|
|
1189
|
-
//
|
|
1189
|
+
// 用户显式点击某张卡券时,本次选择优先于自动排序和扫码默认选择。
|
|
1190
1190
|
// 目标仍必须在当前商品的 applicableDiscounts 中,因此不会绕过 Holder、时间或商品范围校验。
|
|
1191
|
-
var
|
|
1191
|
+
var explicitlySelectedDiscount = (options === null || options === void 0 ? void 0 : options.isSelected) === true && options.discountId !== undefined ? applicableDiscounts.find(function (discount) {
|
|
1192
1192
|
var discountType = discount.tag || discount.type;
|
|
1193
|
-
return String(discount.id) === String(options.discountId) && ['discount_card', 'product_discount_card'].includes(discountType);
|
|
1193
|
+
return String(discount.id) === String(options.discountId) && ['good_pass', 'discount_card', 'product_discount_card'].includes(discountType);
|
|
1194
1194
|
}) : undefined;
|
|
1195
|
+
// 折扣卡会复用于整条商品行;商品券必须继续按单张拆分,不能复用该分支。
|
|
1196
|
+
var explicitlySelectedDiscountCard = explicitlySelectedDiscount && (explicitlySelectedDiscount.tag || explicitlySelectedDiscount.type) !== 'good_pass' ? explicitlySelectedDiscount : undefined;
|
|
1195
1197
|
|
|
1196
1198
|
// 没有显式选择时保持现有行为:扫码且已选中的折扣卡优先,否则使用自动排序第一项。
|
|
1197
1199
|
var scannedSelectedDiscountCard = applicableDiscounts.find(function (n) {
|
|
1198
1200
|
return n.isScan && n.isSelected && (n.tag || n.type) !== 'good_pass';
|
|
1199
1201
|
});
|
|
1200
1202
|
var selectedDiscountCard = explicitlySelectedDiscountCard || scannedSelectedDiscountCard;
|
|
1201
|
-
var selectedDiscount = selectedDiscountCard || applicableDiscounts[0];
|
|
1203
|
+
var selectedDiscount = explicitlySelectedDiscount || selectedDiscountCard || applicableDiscounts[0];
|
|
1204
|
+
var prioritizedApplicableDiscounts = explicitlySelectedDiscount && (explicitlySelectedDiscount.tag || explicitlySelectedDiscount.type) === 'good_pass' ? [explicitlySelectedDiscount].concat(_toConsumableArray(applicableDiscounts.filter(function (discount) {
|
|
1205
|
+
var discountType = discount.tag || discount.type;
|
|
1206
|
+
return discountType === 'good_pass' && String(discount.id) !== String(explicitlySelectedDiscount.id);
|
|
1207
|
+
})), _toConsumableArray(applicableDiscounts.filter(function (discount) {
|
|
1208
|
+
return (discount.tag || discount.type) !== 'good_pass';
|
|
1209
|
+
}))) : applicableDiscounts;
|
|
1202
1210
|
|
|
1203
1211
|
// 如果是手动折扣,则不适用优惠券
|
|
1204
1212
|
var isManualDiscount = false;
|
|
@@ -1440,8 +1448,7 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
|
|
|
1440
1448
|
}
|
|
1441
1449
|
for (var i = 0; i < splitCount; i++) {
|
|
1442
1450
|
var _originProduct4, _selectedDiscount$con, _product$options, _product$options2, _selectedDiscount$met, _selectedDiscount$met2, _reapplyDiscountPerce;
|
|
1443
|
-
|
|
1444
|
-
var _selectedDiscount = selectedDiscountCard || applicableDiscounts[i];
|
|
1451
|
+
var _selectedDiscount = isNeedSplit ? prioritizedApplicableDiscounts[i] : selectedDiscountCard || applicableDiscounts[i];
|
|
1445
1452
|
// 标记优惠券为已使用
|
|
1446
1453
|
usedDiscounts.set(_selectedDiscount.id, true);
|
|
1447
1454
|
// 🔥 更新 product_id 使用计数
|
|
@@ -1586,7 +1593,7 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
|
|
|
1586
1593
|
// 生成有折扣的商品(每张商品券对应 num: 1)
|
|
1587
1594
|
for (var _i = 0; _i < discountNum; _i++) {
|
|
1588
1595
|
var _selectedDiscount2$me;
|
|
1589
|
-
var _selectedDiscount2 =
|
|
1596
|
+
var _selectedDiscount2 = prioritizedApplicableDiscounts[_i];
|
|
1590
1597
|
usedDiscounts.set(_selectedDiscount2.id, true);
|
|
1591
1598
|
// 🔥 更新 product_id 使用计数
|
|
1592
1599
|
if ((_selectedDiscount2.tag || _selectedDiscount2.type) === 'good_pass') {
|