@pisell/pisellos 3.0.90 → 3.0.92
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/apis/picoding.d.ts +0 -0
- package/dist/apis/picoding.js +1 -0
- package/dist/model/index.d.ts +1 -0
- package/dist/model/index.js +1 -0
- package/dist/model/strategy/adapter/index.d.ts +7 -0
- package/dist/model/strategy/adapter/index.js +7 -0
- package/dist/model/strategy/adapter/itemRule/adapter.d.ts +67 -0
- package/dist/model/strategy/adapter/itemRule/adapter.js +483 -0
- package/dist/model/strategy/adapter/itemRule/evaluator.d.ts +43 -0
- package/dist/model/strategy/adapter/itemRule/evaluator.js +169 -0
- package/dist/model/strategy/adapter/itemRule/examples.d.ts +79 -0
- package/dist/model/strategy/adapter/itemRule/examples.js +382 -0
- package/dist/model/strategy/adapter/itemRule/index.d.ts +5 -0
- package/dist/model/strategy/adapter/itemRule/index.js +5 -0
- package/dist/model/strategy/adapter/itemRule/type.d.ts +225 -0
- package/dist/model/strategy/adapter/itemRule/type.js +101 -0
- package/dist/model/strategy/adapter/promotion/adapter.d.ts +66 -0
- package/dist/model/strategy/adapter/promotion/adapter.js +271 -0
- package/dist/model/strategy/adapter/promotion/evaluator.d.ts +213 -0
- package/dist/model/strategy/adapter/promotion/evaluator.js +1206 -0
- package/dist/model/strategy/adapter/promotion/examples.d.ts +138 -0
- package/dist/model/strategy/adapter/promotion/examples.js +166 -0
- package/dist/model/strategy/adapter/promotion/index.d.ts +4 -0
- package/dist/model/strategy/adapter/promotion/index.js +9 -0
- package/dist/model/strategy/adapter/promotion/type.d.ts +447 -0
- package/dist/model/strategy/adapter/promotion/type.js +209 -0
- package/dist/model/strategy/adapter/type.d.ts +28 -0
- package/dist/model/strategy/adapter/type.js +1 -0
- package/dist/model/strategy/adapter/walletPass/evaluator.d.ts +84 -0
- package/dist/model/strategy/adapter/walletPass/evaluator.js +502 -0
- package/dist/model/strategy/adapter/walletPass/example.d.ts +4 -0
- package/dist/model/strategy/adapter/walletPass/example.js +258 -0
- package/dist/model/strategy/adapter/walletPass/index.d.ts +32 -0
- package/dist/model/strategy/adapter/walletPass/index.js +182 -0
- package/dist/model/strategy/adapter/walletPass/locales.d.ts +1 -0
- package/dist/model/strategy/adapter/walletPass/locales.js +26 -0
- package/dist/model/strategy/adapter/walletPass/type.d.ts +187 -0
- package/dist/model/strategy/adapter/walletPass/type.js +1 -0
- package/dist/model/strategy/adapter/walletPass/utils.d.ts +50 -0
- package/dist/model/strategy/adapter/walletPass/utils.js +1104 -0
- package/dist/model/strategy/engine.d.ts +106 -0
- package/dist/model/strategy/engine.js +611 -0
- package/dist/model/strategy/index.d.ts +3 -0
- package/dist/model/strategy/index.js +8 -0
- package/dist/model/strategy/strategy-example.d.ts +5 -0
- package/dist/model/strategy/strategy-example.js +331 -0
- package/dist/model/strategy/type.d.ts +228 -0
- package/dist/model/strategy/type.js +94 -0
- package/dist/modules/Cart/utils/cartProduct.js +1 -0
- package/dist/modules/Discount/index.d.ts +4 -2
- package/dist/modules/Discount/index.js +90 -3
- package/dist/modules/Discount/types.d.ts +6 -0
- package/dist/modules/OpenData/index.d.ts +24 -0
- package/dist/modules/OpenData/index.js +173 -0
- package/dist/modules/OpenData/types.d.ts +73 -0
- package/dist/modules/OpenData/types.js +1 -0
- package/dist/modules/OpenData/utils.d.ts +2 -0
- package/dist/modules/OpenData/utils.js +75 -0
- package/dist/modules/Order/index.d.ts +66 -1
- package/dist/modules/Order/index.js +884 -10
- package/dist/modules/Order/types.d.ts +174 -12
- package/dist/modules/Order/types.js +2 -0
- package/dist/modules/Order/utils.d.ts +118 -0
- package/dist/modules/Order/utils.js +586 -2
- package/dist/modules/Product/utils.js +2 -2
- package/dist/modules/ProductList/index.d.ts +3 -1
- package/dist/modules/ProductList/index.js +26 -11
- package/dist/modules/Quotation/index.d.ts +48 -0
- package/dist/modules/Quotation/index.js +248 -0
- package/dist/modules/Quotation/types.d.ts +42 -0
- package/dist/modules/Quotation/types.js +1 -0
- package/dist/modules/Rules/index.js +17 -18
- package/dist/modules/SalesSummary/index.d.ts +63 -0
- package/dist/modules/SalesSummary/index.js +174 -0
- package/dist/modules/SalesSummary/types.d.ts +60 -0
- package/dist/modules/SalesSummary/types.js +1 -0
- package/dist/modules/SalesSummary/utils.d.ts +30 -0
- package/dist/modules/SalesSummary/utils.js +480 -0
- package/dist/modules/ScanOrderLogger/index.d.ts +23 -0
- package/dist/modules/ScanOrderLogger/index.js +174 -0
- package/dist/modules/ScanOrderLogger/providers/feishu.d.ts +2 -0
- package/dist/modules/ScanOrderLogger/providers/feishu.js +221 -0
- package/dist/modules/ScanOrderLogger/providers/grafana.d.ts +2 -0
- package/dist/modules/ScanOrderLogger/providers/grafana.js +50 -0
- package/dist/modules/ScanOrderLogger/types.d.ts +53 -0
- package/dist/modules/ScanOrderLogger/types.js +1 -0
- package/dist/modules/Schedule/getDateIsInSchedule.js +11 -18
- package/dist/modules/Schedule/utils.d.ts +1 -1
- package/dist/modules/Summary/utils.d.ts +3 -3
- package/dist/modules/Summary/utils.js +41 -31
- package/dist/modules/index.d.ts +4 -0
- package/dist/modules/index.js +5 -1
- package/dist/solution/BookingByStep/index.d.ts +2 -2
- package/dist/solution/BookingByStep/types.d.ts +3 -1
- package/dist/solution/BookingByStep/types.js +5 -1
- package/dist/solution/ScanOrder/index.d.ts +158 -0
- package/dist/solution/ScanOrder/index.js +3474 -0
- package/dist/solution/ScanOrder/types.d.ts +306 -0
- package/dist/solution/ScanOrder/types.js +35 -0
- package/dist/solution/ScanOrder/utils.d.ts +172 -0
- package/dist/solution/ScanOrder/utils.js +796 -0
- package/dist/solution/ShopDiscount/index.d.ts +1 -0
- package/dist/solution/ShopDiscount/index.js +23 -18
- package/dist/solution/VenueBooking/index.d.ts +201 -0
- package/dist/solution/VenueBooking/index.js +3472 -0
- package/dist/solution/VenueBooking/sales-section-4-annotated.json +343 -0
- package/dist/solution/VenueBooking/types.d.ts +154 -0
- package/dist/solution/VenueBooking/types.js +21 -0
- package/dist/solution/VenueBooking/utils/dateSummary.d.ts +11 -0
- package/dist/solution/VenueBooking/utils/dateSummary.js +104 -0
- package/dist/solution/VenueBooking/utils/resource.d.ts +14 -0
- package/dist/solution/VenueBooking/utils/resource.js +131 -0
- package/dist/solution/VenueBooking/utils/slotMerge.d.ts +38 -0
- package/dist/solution/VenueBooking/utils/slotMerge.js +239 -0
- package/dist/solution/VenueBooking/utils/timeSlot.d.ts +32 -0
- package/dist/solution/VenueBooking/utils/timeSlot.js +453 -0
- package/dist/solution/VenueBooking/utils.d.ts +1 -0
- package/dist/solution/VenueBooking/utils.js +1 -0
- package/dist/solution/index.d.ts +2 -0
- package/dist/solution/index.js +3 -1
- package/lib/apis/picoding.d.ts +0 -0
- package/lib/apis/picoding.js +0 -0
- package/lib/model/index.d.ts +1 -0
- package/lib/model/index.js +23 -0
- package/lib/model/strategy/adapter/index.d.ts +7 -0
- package/lib/model/strategy/adapter/index.js +57 -0
- package/lib/model/strategy/adapter/itemRule/adapter.d.ts +67 -0
- package/lib/model/strategy/adapter/itemRule/adapter.js +377 -0
- package/lib/model/strategy/adapter/itemRule/evaluator.d.ts +43 -0
- package/lib/model/strategy/adapter/itemRule/evaluator.js +124 -0
- package/lib/model/strategy/adapter/itemRule/examples.d.ts +79 -0
- package/lib/model/strategy/adapter/itemRule/examples.js +316 -0
- package/lib/model/strategy/adapter/itemRule/index.d.ts +5 -0
- package/lib/model/strategy/adapter/itemRule/index.js +60 -0
- package/lib/model/strategy/adapter/itemRule/type.d.ts +225 -0
- package/lib/model/strategy/adapter/itemRule/type.js +46 -0
- package/lib/model/strategy/adapter/promotion/adapter.d.ts +66 -0
- package/lib/model/strategy/adapter/promotion/adapter.js +217 -0
- package/lib/model/strategy/adapter/promotion/evaluator.d.ts +213 -0
- package/lib/model/strategy/adapter/promotion/evaluator.js +844 -0
- package/lib/model/strategy/adapter/promotion/examples.d.ts +138 -0
- package/lib/model/strategy/adapter/promotion/examples.js +192 -0
- package/lib/model/strategy/adapter/promotion/index.d.ts +4 -0
- package/lib/model/strategy/adapter/promotion/index.js +0 -0
- package/lib/model/strategy/adapter/promotion/type.d.ts +447 -0
- package/lib/model/strategy/adapter/promotion/type.js +51 -0
- package/lib/model/strategy/adapter/type.d.ts +28 -0
- package/lib/model/strategy/adapter/type.js +17 -0
- package/lib/model/strategy/adapter/walletPass/evaluator.d.ts +84 -0
- package/lib/model/strategy/adapter/walletPass/evaluator.js +424 -0
- package/lib/model/strategy/adapter/walletPass/example.d.ts +4 -0
- package/lib/model/strategy/adapter/walletPass/example.js +207 -0
- package/lib/model/strategy/adapter/walletPass/index.d.ts +32 -0
- package/lib/model/strategy/adapter/walletPass/index.js +142 -0
- package/lib/model/strategy/adapter/walletPass/locales.d.ts +1 -0
- package/lib/model/strategy/adapter/walletPass/locales.js +54 -0
- package/lib/model/strategy/adapter/walletPass/type.d.ts +187 -0
- package/lib/model/strategy/adapter/walletPass/type.js +17 -0
- package/lib/model/strategy/adapter/walletPass/utils.d.ts +50 -0
- package/lib/model/strategy/adapter/walletPass/utils.js +791 -0
- package/lib/model/strategy/engine.d.ts +106 -0
- package/lib/model/strategy/engine.js +450 -0
- package/lib/model/strategy/index.d.ts +3 -0
- package/lib/model/strategy/index.js +38 -0
- package/lib/model/strategy/strategy-example.d.ts +5 -0
- package/lib/model/strategy/strategy-example.js +318 -0
- package/lib/model/strategy/type.d.ts +228 -0
- package/lib/model/strategy/type.js +44 -0
- package/lib/modules/Cart/utils/cartProduct.js +1 -0
- package/lib/modules/Discount/index.d.ts +4 -2
- package/lib/modules/Discount/index.js +60 -2
- package/lib/modules/Discount/types.d.ts +6 -0
- package/lib/modules/OpenData/index.d.ts +24 -0
- package/lib/modules/OpenData/index.js +119 -0
- package/lib/modules/OpenData/types.d.ts +73 -0
- package/lib/modules/OpenData/types.js +17 -0
- package/lib/modules/OpenData/utils.d.ts +2 -0
- package/lib/modules/OpenData/utils.js +111 -0
- package/lib/modules/Order/index.d.ts +66 -1
- package/lib/modules/Order/index.js +525 -0
- package/lib/modules/Order/types.d.ts +174 -12
- package/lib/modules/Order/utils.d.ts +118 -0
- package/lib/modules/Order/utils.js +483 -2
- package/lib/modules/Product/utils.js +2 -2
- package/lib/modules/ProductList/index.d.ts +3 -1
- package/lib/modules/ProductList/index.js +51 -34
- package/lib/modules/Quotation/index.d.ts +48 -0
- package/lib/modules/Quotation/index.js +152 -0
- package/lib/modules/Quotation/types.d.ts +42 -0
- package/lib/modules/Quotation/types.js +17 -0
- package/lib/modules/Rules/index.js +17 -18
- package/lib/modules/SalesSummary/index.d.ts +63 -0
- package/lib/modules/SalesSummary/index.js +105 -0
- package/lib/modules/SalesSummary/types.d.ts +60 -0
- package/lib/modules/SalesSummary/types.js +17 -0
- package/lib/modules/SalesSummary/utils.d.ts +30 -0
- package/lib/modules/SalesSummary/utils.js +420 -0
- package/lib/modules/ScanOrderLogger/index.d.ts +23 -0
- package/lib/modules/ScanOrderLogger/index.js +147 -0
- package/lib/modules/ScanOrderLogger/providers/feishu.d.ts +2 -0
- package/lib/modules/ScanOrderLogger/providers/feishu.js +157 -0
- package/lib/modules/ScanOrderLogger/providers/grafana.d.ts +2 -0
- package/lib/modules/ScanOrderLogger/providers/grafana.js +52 -0
- package/lib/modules/ScanOrderLogger/types.d.ts +53 -0
- package/lib/modules/ScanOrderLogger/types.js +17 -0
- package/lib/modules/Schedule/getDateIsInSchedule.js +9 -11
- package/lib/modules/Schedule/utils.d.ts +1 -1
- package/lib/modules/Summary/utils.d.ts +3 -3
- package/lib/modules/Summary/utils.js +22 -16
- package/lib/modules/index.d.ts +4 -0
- package/lib/modules/index.js +9 -1
- package/lib/solution/BookingByStep/index.d.ts +2 -2
- package/lib/solution/BookingByStep/types.d.ts +3 -1
- package/lib/solution/BookingByStep/types.js +10 -0
- package/lib/solution/ScanOrder/index.d.ts +158 -0
- package/lib/solution/ScanOrder/index.js +2135 -0
- package/lib/solution/ScanOrder/types.d.ts +306 -0
- package/lib/solution/ScanOrder/types.js +36 -0
- package/lib/solution/ScanOrder/utils.d.ts +172 -0
- package/lib/solution/ScanOrder/utils.js +658 -0
- package/lib/solution/ShopDiscount/index.d.ts +1 -0
- package/lib/solution/ShopDiscount/index.js +4 -2
- package/lib/solution/VenueBooking/index.d.ts +201 -0
- package/lib/solution/VenueBooking/index.js +1937 -0
- package/lib/solution/VenueBooking/sales-section-4-annotated.json +343 -0
- package/lib/solution/VenueBooking/types.d.ts +154 -0
- package/lib/solution/VenueBooking/types.js +44 -0
- package/lib/solution/VenueBooking/utils/dateSummary.d.ts +11 -0
- package/lib/solution/VenueBooking/utils/dateSummary.js +110 -0
- package/lib/solution/VenueBooking/utils/resource.d.ts +14 -0
- package/lib/solution/VenueBooking/utils/resource.js +92 -0
- package/lib/solution/VenueBooking/utils/slotMerge.d.ts +38 -0
- package/lib/solution/VenueBooking/utils/slotMerge.js +237 -0
- package/lib/solution/VenueBooking/utils/timeSlot.d.ts +32 -0
- package/lib/solution/VenueBooking/utils/timeSlot.js +339 -0
- package/lib/solution/VenueBooking/utils.d.ts +1 -0
- package/lib/solution/VenueBooking/utils.js +69 -0
- package/lib/solution/index.d.ts +2 -0
- package/lib/solution/index.js +5 -1
- package/package.json +1 -1
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
|
|
19
|
+
// src/modules/Quotation/index.ts
|
|
20
|
+
var Quotation_exports = {};
|
|
21
|
+
__export(Quotation_exports, {
|
|
22
|
+
QuotationModule: () => QuotationModule
|
|
23
|
+
});
|
|
24
|
+
module.exports = __toCommonJS(Quotation_exports);
|
|
25
|
+
var import_BaseModule = require("../BaseModule");
|
|
26
|
+
var import_getDateIsInSchedule = require("../Schedule/getDateIsInSchedule");
|
|
27
|
+
var QuotationModule = class extends import_BaseModule.BaseModule {
|
|
28
|
+
constructor(name, version) {
|
|
29
|
+
super(name, version);
|
|
30
|
+
this.defaultName = "quotation";
|
|
31
|
+
this.defaultVersion = "1.0.0";
|
|
32
|
+
this.store = { list: [] };
|
|
33
|
+
}
|
|
34
|
+
async initialize(core, options) {
|
|
35
|
+
this.core = core;
|
|
36
|
+
this.request = core.getPlugin("request");
|
|
37
|
+
if (!this.request)
|
|
38
|
+
throw new Error("QuotationModule 需要 request 插件支持");
|
|
39
|
+
this.store = { list: [] };
|
|
40
|
+
}
|
|
41
|
+
async loadQuotations(params) {
|
|
42
|
+
var _a;
|
|
43
|
+
const query = {};
|
|
44
|
+
if (params == null ? void 0 : params.channel)
|
|
45
|
+
query.channel = params.channel;
|
|
46
|
+
if ((params == null ? void 0 : params.channel) === "online_store") {
|
|
47
|
+
query.channel = "online-store";
|
|
48
|
+
}
|
|
49
|
+
const res = await this.request.get(
|
|
50
|
+
"/quotation/available",
|
|
51
|
+
query,
|
|
52
|
+
{ useCache: false }
|
|
53
|
+
);
|
|
54
|
+
const list = ((_a = res == null ? void 0 : res.data) == null ? void 0 : _a.list) || (res == null ? void 0 : res.list) || [];
|
|
55
|
+
list.sort((a, b) => a.sort - b.sort);
|
|
56
|
+
this.store.list = list;
|
|
57
|
+
}
|
|
58
|
+
getQuotationList() {
|
|
59
|
+
return this.store.list;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Look up the quotation price for a specific product (+ optional variant) at a given datetime.
|
|
63
|
+
* Returns the price as a string (e.g. "300.00"), or null if no quotation applies.
|
|
64
|
+
*
|
|
65
|
+
* Priority: iterates quotations already sorted by `sort` ascending (lowest = highest priority).
|
|
66
|
+
* First matching quotation whose schedule covers `datetime` and whose product_data contains
|
|
67
|
+
* the requested productId wins.
|
|
68
|
+
*/
|
|
69
|
+
getPriceForProduct(params) {
|
|
70
|
+
const { productId, variantId, datetime } = params;
|
|
71
|
+
for (const quotation of this.store.list) {
|
|
72
|
+
if (!this.isQuotationActiveAt(quotation, datetime))
|
|
73
|
+
continue;
|
|
74
|
+
const match = this.findProductData(quotation.product_data, productId, variantId);
|
|
75
|
+
if (!match)
|
|
76
|
+
continue;
|
|
77
|
+
if (match.value === 0)
|
|
78
|
+
continue;
|
|
79
|
+
return String(match.value);
|
|
80
|
+
}
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
83
|
+
getQuotationShelfId(params) {
|
|
84
|
+
const { productId, variantId, datetime } = params;
|
|
85
|
+
for (const quotation of this.store.list) {
|
|
86
|
+
if (!this.isQuotationActiveAt(quotation, datetime))
|
|
87
|
+
continue;
|
|
88
|
+
const match = this.findProductData(quotation.product_data, productId, variantId);
|
|
89
|
+
if (!match || match.value === 0)
|
|
90
|
+
continue;
|
|
91
|
+
return quotation.id;
|
|
92
|
+
}
|
|
93
|
+
return 0;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Batch pre-compute quotation prices for a set of products across multiple time points.
|
|
97
|
+
* Key format: `${productId}:${timePoint}`
|
|
98
|
+
* This avoids repeated schedule matching when the same product appears in multiple resource rows.
|
|
99
|
+
*/
|
|
100
|
+
buildProductPriceMap(params) {
|
|
101
|
+
const map = /* @__PURE__ */ new Map();
|
|
102
|
+
if (!this.store.list.length)
|
|
103
|
+
return map;
|
|
104
|
+
for (const productId of params.productIds) {
|
|
105
|
+
for (const timePoint of params.timePoints) {
|
|
106
|
+
const key = `${productId}:${timePoint}`;
|
|
107
|
+
const price = this.getPriceForProduct({ productId, datetime: timePoint });
|
|
108
|
+
if (price !== null) {
|
|
109
|
+
map.set(key, price);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return map;
|
|
114
|
+
}
|
|
115
|
+
setScheduleResolver(resolver) {
|
|
116
|
+
this.scheduleResolver = resolver;
|
|
117
|
+
}
|
|
118
|
+
isQuotationActiveAt(quotation, datetime) {
|
|
119
|
+
var _a;
|
|
120
|
+
if (!((_a = quotation.schedule) == null ? void 0 : _a.length))
|
|
121
|
+
return false;
|
|
122
|
+
const scheduleItems = quotation.schedule.map((s) => {
|
|
123
|
+
var _a2;
|
|
124
|
+
const full = (_a2 = this.scheduleResolver) == null ? void 0 : _a2.call(this, s.id);
|
|
125
|
+
if (full)
|
|
126
|
+
return full;
|
|
127
|
+
return {
|
|
128
|
+
...s,
|
|
129
|
+
repeat_type: s.repeat_type || "none",
|
|
130
|
+
repeat_rule: s.repeat_rule || null,
|
|
131
|
+
time_slot: s.time_slot || []
|
|
132
|
+
};
|
|
133
|
+
});
|
|
134
|
+
return (0, import_getDateIsInSchedule.getDateIsInSchedule)(datetime, scheduleItems);
|
|
135
|
+
}
|
|
136
|
+
findProductData(productData, productId, variantId) {
|
|
137
|
+
if (variantId && variantId !== 0) {
|
|
138
|
+
const variantMatch = productData.find(
|
|
139
|
+
(p) => p.product_id === productId && p.variant_id === variantId
|
|
140
|
+
);
|
|
141
|
+
if (variantMatch)
|
|
142
|
+
return variantMatch;
|
|
143
|
+
}
|
|
144
|
+
return productData.find(
|
|
145
|
+
(p) => p.product_id === productId && p.variant_id === 0
|
|
146
|
+
);
|
|
147
|
+
}
|
|
148
|
+
};
|
|
149
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
150
|
+
0 && (module.exports = {
|
|
151
|
+
QuotationModule
|
|
152
|
+
});
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
export interface QuotationProductData {
|
|
2
|
+
id: number;
|
|
3
|
+
shelf_id: number;
|
|
4
|
+
product_id: number;
|
|
5
|
+
variant_id: number;
|
|
6
|
+
type: string;
|
|
7
|
+
value: number;
|
|
8
|
+
}
|
|
9
|
+
export interface QuotationSchedule {
|
|
10
|
+
id: number;
|
|
11
|
+
name: string;
|
|
12
|
+
type: 'standard' | 'time-slots' | 'designation';
|
|
13
|
+
start_time: string;
|
|
14
|
+
end_time: string;
|
|
15
|
+
is_all: number;
|
|
16
|
+
repeat_type?: string;
|
|
17
|
+
repeat_rule?: any;
|
|
18
|
+
designation?: any;
|
|
19
|
+
time_slot?: Array<{
|
|
20
|
+
start_time: string;
|
|
21
|
+
end_time: string;
|
|
22
|
+
}>;
|
|
23
|
+
pivot?: Record<string, any>;
|
|
24
|
+
}
|
|
25
|
+
export interface QuotationItem {
|
|
26
|
+
id: number;
|
|
27
|
+
shop_id: number;
|
|
28
|
+
shelf_type_id?: number;
|
|
29
|
+
name: string;
|
|
30
|
+
description?: string;
|
|
31
|
+
status: string;
|
|
32
|
+
sort: number;
|
|
33
|
+
channel: string[];
|
|
34
|
+
created_at?: string;
|
|
35
|
+
updated_at?: string;
|
|
36
|
+
deleted_at?: string | null;
|
|
37
|
+
schedule: QuotationSchedule[];
|
|
38
|
+
product_data: QuotationProductData[];
|
|
39
|
+
}
|
|
40
|
+
export interface QuotationState {
|
|
41
|
+
list: QuotationItem[];
|
|
42
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __copyProps = (to, from, except, desc) => {
|
|
6
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
7
|
+
for (let key of __getOwnPropNames(from))
|
|
8
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
9
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
10
|
+
}
|
|
11
|
+
return to;
|
|
12
|
+
};
|
|
13
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
14
|
+
|
|
15
|
+
// src/modules/Quotation/types.ts
|
|
16
|
+
var types_exports = {};
|
|
17
|
+
module.exports = __toCommonJS(types_exports);
|
|
@@ -704,29 +704,26 @@ var RulesModule = class extends import_BaseModule.BaseModule {
|
|
|
704
704
|
}
|
|
705
705
|
}
|
|
706
706
|
if (applicableDiscounts.length === 0 || isManualDiscount) {
|
|
707
|
+
const restoredOriginTotal = (0, import_utils2.getProductOriginTotalPrice)({
|
|
708
|
+
product: {
|
|
709
|
+
original_price: product.original_price
|
|
710
|
+
},
|
|
711
|
+
bundle: product.bundle,
|
|
712
|
+
options: product.options
|
|
713
|
+
});
|
|
714
|
+
const restoredPrice = Number(product.original_price || product.price || 0);
|
|
707
715
|
if (flatItem.type === "main") {
|
|
708
716
|
if (product.isClient) {
|
|
709
717
|
processedProductsMap.set(
|
|
710
718
|
product._id,
|
|
711
719
|
[this.hooks.setProduct(originProduct, {
|
|
712
720
|
...isManualDiscount ? {} : {
|
|
713
|
-
origin_total:
|
|
714
|
-
product: {
|
|
715
|
-
original_price: product.original_price
|
|
716
|
-
},
|
|
717
|
-
bundle: product.bundle,
|
|
718
|
-
options: product.options
|
|
719
|
-
}),
|
|
721
|
+
origin_total: restoredOriginTotal,
|
|
720
722
|
variant: originProduct._productInit.variant,
|
|
721
723
|
original_price: originProduct._productInit.original_price,
|
|
722
|
-
total:
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
},
|
|
726
|
-
bundle: product.bundle,
|
|
727
|
-
options: product.options
|
|
728
|
-
}),
|
|
729
|
-
price: product.price
|
|
724
|
+
total: restoredOriginTotal,
|
|
725
|
+
price: restoredPrice,
|
|
726
|
+
main_product_selling_price: restoredPrice
|
|
730
727
|
},
|
|
731
728
|
discount_list: []
|
|
732
729
|
})]
|
|
@@ -737,9 +734,11 @@ var RulesModule = class extends import_BaseModule.BaseModule {
|
|
|
737
734
|
[this.hooks.setProduct(originProduct, {
|
|
738
735
|
...isManualDiscount ? {} : {
|
|
739
736
|
_id: product._id.split("___")[0] + "___" + index,
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
737
|
+
origin_total: product.origin_total || restoredOriginTotal,
|
|
738
|
+
total: product.origin_total || restoredOriginTotal || product.total,
|
|
739
|
+
original_price: product.original_price,
|
|
740
|
+
price: restoredPrice,
|
|
741
|
+
main_product_selling_price: restoredPrice
|
|
743
742
|
},
|
|
744
743
|
discount_list: []
|
|
745
744
|
})]
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { Module, ModuleOptions, PisellCore } from '../../types';
|
|
2
|
+
import { BaseModule } from '../BaseModule';
|
|
3
|
+
import { SalesSummaryModuleAPI } from './types';
|
|
4
|
+
export * from './types';
|
|
5
|
+
export declare class SalesSummaryModule extends BaseModule implements Module, SalesSummaryModuleAPI {
|
|
6
|
+
protected defaultName: string;
|
|
7
|
+
protected defaultVersion: string;
|
|
8
|
+
private shopStore;
|
|
9
|
+
private store;
|
|
10
|
+
private request;
|
|
11
|
+
constructor(name?: string, version?: string);
|
|
12
|
+
initialize(core: PisellCore, options: ModuleOptions): Promise<void>;
|
|
13
|
+
getSurchargeList(): Promise<void>;
|
|
14
|
+
getSummary(params: {
|
|
15
|
+
products: any[];
|
|
16
|
+
isPriceIncludeTax?: number;
|
|
17
|
+
taxRate?: number;
|
|
18
|
+
}): Promise<{
|
|
19
|
+
tax_title: any;
|
|
20
|
+
tax_rate: any;
|
|
21
|
+
product_quantity: number;
|
|
22
|
+
product_original_amount: string;
|
|
23
|
+
product_amount: string;
|
|
24
|
+
product_expect_amount: string;
|
|
25
|
+
product_tax_fee: string;
|
|
26
|
+
shipping_fee: string;
|
|
27
|
+
shipping_tax_fee: string;
|
|
28
|
+
tax_fee: string;
|
|
29
|
+
surcharge_fee: string;
|
|
30
|
+
surcharges: any[];
|
|
31
|
+
discount_amount: string;
|
|
32
|
+
deposit_amount: string;
|
|
33
|
+
deposit?: import("./types").DepositInfo | undefined;
|
|
34
|
+
expect_amount: string;
|
|
35
|
+
total_amount: string;
|
|
36
|
+
amount_gap: string;
|
|
37
|
+
rounding_amount: string;
|
|
38
|
+
pay_service_charge_amount: string;
|
|
39
|
+
is_price_include_tax?: number | undefined;
|
|
40
|
+
} | {
|
|
41
|
+
tax_title: any;
|
|
42
|
+
tax_rate: any;
|
|
43
|
+
product_quantity: number;
|
|
44
|
+
product_original_amount: string;
|
|
45
|
+
product_amount: string;
|
|
46
|
+
product_expect_amount: string;
|
|
47
|
+
product_tax_fee: string;
|
|
48
|
+
shipping_fee: string;
|
|
49
|
+
shipping_tax_fee: string;
|
|
50
|
+
tax_fee: string;
|
|
51
|
+
surcharge_fee: string;
|
|
52
|
+
surcharges: any;
|
|
53
|
+
discount_amount: string;
|
|
54
|
+
deposit_amount: string;
|
|
55
|
+
deposit: import("./types").DepositInfo | undefined;
|
|
56
|
+
expect_amount: string;
|
|
57
|
+
total_amount: string;
|
|
58
|
+
amount_gap: string;
|
|
59
|
+
rounding_amount: string;
|
|
60
|
+
pay_service_charge_amount: string;
|
|
61
|
+
is_price_include_tax: number;
|
|
62
|
+
}>;
|
|
63
|
+
}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/modules/SalesSummary/index.ts
|
|
21
|
+
var SalesSummary_exports = {};
|
|
22
|
+
__export(SalesSummary_exports, {
|
|
23
|
+
SalesSummaryModule: () => SalesSummaryModule
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(SalesSummary_exports);
|
|
26
|
+
var import_BaseModule = require("../BaseModule");
|
|
27
|
+
var import_Schedule = require("../Schedule");
|
|
28
|
+
var import_utils = require("./utils");
|
|
29
|
+
__reExport(SalesSummary_exports, require("./types"), module.exports);
|
|
30
|
+
var SalesSummaryModule = class extends import_BaseModule.BaseModule {
|
|
31
|
+
constructor(name, version) {
|
|
32
|
+
super(name, version);
|
|
33
|
+
this.defaultName = "salesSummary";
|
|
34
|
+
this.defaultVersion = "1.0.0";
|
|
35
|
+
}
|
|
36
|
+
async initialize(core, options) {
|
|
37
|
+
var _a, _b;
|
|
38
|
+
this.core = core;
|
|
39
|
+
this.store = options.store;
|
|
40
|
+
this.shopStore = this.core.getPlugin("shopStore");
|
|
41
|
+
this.request = this.core.getPlugin("request");
|
|
42
|
+
this.store.surchargeList = ((_a = options.initialState) == null ? void 0 : _a.surchargeList) || [];
|
|
43
|
+
this.store.summary = ((_b = options.initialState) == null ? void 0 : _b.summary) || (0, import_utils.createEmptySalesSummary)();
|
|
44
|
+
if (!this.shopStore) {
|
|
45
|
+
throw new Error("SalesSummaryModule 需要 shopStore 插件支持");
|
|
46
|
+
}
|
|
47
|
+
if (!this.request) {
|
|
48
|
+
throw new Error("SalesSummaryModule 需要 request 插件支持");
|
|
49
|
+
}
|
|
50
|
+
await this.getSurchargeList();
|
|
51
|
+
}
|
|
52
|
+
async getSurchargeList() {
|
|
53
|
+
try {
|
|
54
|
+
const surchargeList = await this.request.get(
|
|
55
|
+
"/order/custom-surcharge/available/v2",
|
|
56
|
+
{
|
|
57
|
+
channel: "online-store",
|
|
58
|
+
is_assemble_product_data: 1,
|
|
59
|
+
is_assemble_schedule_data: 1,
|
|
60
|
+
with: ["relationSchedule"]
|
|
61
|
+
}
|
|
62
|
+
);
|
|
63
|
+
this.store.surchargeList = (surchargeList == null ? void 0 : surchargeList.data) || [];
|
|
64
|
+
} catch (error) {
|
|
65
|
+
console.warn("[SalesSummaryModule] 加载附加费配置失败", error);
|
|
66
|
+
this.store.surchargeList = [];
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
async getSummary(params) {
|
|
70
|
+
var _a, _b;
|
|
71
|
+
const { products = [], isPriceIncludeTax, taxRate } = params;
|
|
72
|
+
const shopInfo = ((_b = (_a = this.shopStore.get("core")) == null ? void 0 : _a.core) == null ? void 0 : _b.shop) || {};
|
|
73
|
+
const summarySchedule = this.core.getModule(
|
|
74
|
+
`${this.name.split("_")[0]}_schedule`
|
|
75
|
+
);
|
|
76
|
+
const needScheduleIds = this.store.surchargeList.map((item) => item.available_schedule_ids).flat();
|
|
77
|
+
const scheduleList = summarySchedule == null ? void 0 : summarySchedule.getScheduleListByIds(needScheduleIds);
|
|
78
|
+
const scheduleById = {};
|
|
79
|
+
if (Array.isArray(scheduleList)) {
|
|
80
|
+
for (const item of scheduleList) {
|
|
81
|
+
scheduleById[item.id] = item;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
const summary = (0, import_utils.calculateSalesSummary)({
|
|
85
|
+
products,
|
|
86
|
+
isPriceIncludeTax: isPriceIncludeTax ?? (shopInfo == null ? void 0 : shopInfo.is_price_include_tax) ?? 1,
|
|
87
|
+
taxRate: taxRate ?? (shopInfo == null ? void 0 : shopInfo.tax_rate),
|
|
88
|
+
surchargeList: this.store.surchargeList,
|
|
89
|
+
scheduleById,
|
|
90
|
+
isInScheduleByDate: import_Schedule.ScheduleModule.isInScheduleByDate
|
|
91
|
+
});
|
|
92
|
+
const summaryWithTaxMeta = {
|
|
93
|
+
...summary,
|
|
94
|
+
tax_title: (shopInfo == null ? void 0 : shopInfo.tax_title) || "",
|
|
95
|
+
tax_rate: taxRate ?? (shopInfo == null ? void 0 : shopInfo.tax_rate)
|
|
96
|
+
};
|
|
97
|
+
this.store.summary = summaryWithTaxMeta;
|
|
98
|
+
return summaryWithTaxMeta;
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
102
|
+
0 && (module.exports = {
|
|
103
|
+
SalesSummaryModule,
|
|
104
|
+
...require("./types")
|
|
105
|
+
});
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
export interface SalesSummaryProduct {
|
|
2
|
+
product_id: number | null;
|
|
3
|
+
product_variant_id: number;
|
|
4
|
+
num: number;
|
|
5
|
+
/** 券后单品单价(订单域成交单价),由 OrderModule 维护。 */
|
|
6
|
+
selling_price: string;
|
|
7
|
+
/** 券前单品单价(店铺售价)。 */
|
|
8
|
+
original_price: string;
|
|
9
|
+
tax_fee: string;
|
|
10
|
+
is_charge_tax?: number;
|
|
11
|
+
product_option_item?: any[];
|
|
12
|
+
discount_list?: any[];
|
|
13
|
+
product_bundle?: any[];
|
|
14
|
+
metadata?: Record<string, any>;
|
|
15
|
+
_origin?: Record<string, any>;
|
|
16
|
+
}
|
|
17
|
+
export interface DepositPolicyData {
|
|
18
|
+
id: number;
|
|
19
|
+
title: string;
|
|
20
|
+
}
|
|
21
|
+
export interface DepositInfo {
|
|
22
|
+
total: string;
|
|
23
|
+
deposit_policy_ids: number[];
|
|
24
|
+
deposit_policy_data: DepositPolicyData[];
|
|
25
|
+
hasDeposit: boolean;
|
|
26
|
+
}
|
|
27
|
+
export interface SalesSummaryData {
|
|
28
|
+
product_quantity: number;
|
|
29
|
+
product_original_amount: string;
|
|
30
|
+
product_amount: string;
|
|
31
|
+
product_expect_amount: string;
|
|
32
|
+
product_tax_fee: string;
|
|
33
|
+
shipping_fee: string;
|
|
34
|
+
shipping_tax_fee: string;
|
|
35
|
+
tax_fee: string;
|
|
36
|
+
surcharge_fee: string;
|
|
37
|
+
surcharges: any[];
|
|
38
|
+
discount_amount: string;
|
|
39
|
+
deposit_amount: string;
|
|
40
|
+
deposit?: DepositInfo;
|
|
41
|
+
expect_amount: string;
|
|
42
|
+
total_amount: string;
|
|
43
|
+
amount_gap: string;
|
|
44
|
+
rounding_amount: string;
|
|
45
|
+
pay_service_charge_amount: string;
|
|
46
|
+
is_price_include_tax?: number;
|
|
47
|
+
tax_title?: string;
|
|
48
|
+
tax_rate?: number;
|
|
49
|
+
}
|
|
50
|
+
export interface SalesSummaryState {
|
|
51
|
+
surchargeList: any[];
|
|
52
|
+
summary: SalesSummaryData;
|
|
53
|
+
}
|
|
54
|
+
export interface SalesSummaryModuleAPI {
|
|
55
|
+
getSummary(params: {
|
|
56
|
+
products: SalesSummaryProduct[];
|
|
57
|
+
isPriceIncludeTax?: number;
|
|
58
|
+
taxRate?: number;
|
|
59
|
+
}): Promise<SalesSummaryData>;
|
|
60
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __copyProps = (to, from, except, desc) => {
|
|
6
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
7
|
+
for (let key of __getOwnPropNames(from))
|
|
8
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
9
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
10
|
+
}
|
|
11
|
+
return to;
|
|
12
|
+
};
|
|
13
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
14
|
+
|
|
15
|
+
// src/modules/SalesSummary/types.ts
|
|
16
|
+
var types_exports = {};
|
|
17
|
+
module.exports = __toCommonJS(types_exports);
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { DepositInfo, SalesSummaryData, SalesSummaryProduct } from './types';
|
|
2
|
+
export declare function createEmptySalesSummary(): SalesSummaryData;
|
|
3
|
+
export declare function calculateSalesSummary(params: {
|
|
4
|
+
products: SalesSummaryProduct[];
|
|
5
|
+
isPriceIncludeTax: number;
|
|
6
|
+
taxRate?: number;
|
|
7
|
+
surchargeList: any[];
|
|
8
|
+
scheduleById?: Record<string, any>;
|
|
9
|
+
isInScheduleByDate?: any;
|
|
10
|
+
}): SalesSummaryData | {
|
|
11
|
+
product_quantity: number;
|
|
12
|
+
product_original_amount: string;
|
|
13
|
+
product_amount: string;
|
|
14
|
+
product_expect_amount: string;
|
|
15
|
+
product_tax_fee: string;
|
|
16
|
+
shipping_fee: string;
|
|
17
|
+
shipping_tax_fee: string;
|
|
18
|
+
tax_fee: string;
|
|
19
|
+
surcharge_fee: string;
|
|
20
|
+
surcharges: any;
|
|
21
|
+
discount_amount: string;
|
|
22
|
+
deposit_amount: string;
|
|
23
|
+
deposit: DepositInfo | undefined;
|
|
24
|
+
expect_amount: string;
|
|
25
|
+
total_amount: string;
|
|
26
|
+
amount_gap: string;
|
|
27
|
+
rounding_amount: string;
|
|
28
|
+
pay_service_charge_amount: string;
|
|
29
|
+
is_price_include_tax: number;
|
|
30
|
+
};
|