@pisell/pisellos 0.0.567 → 0.0.568
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/core/index.js +6 -9
- package/dist/model/strategy/adapter/walletPass/evaluator.js +0 -2
- package/dist/model/strategy/adapter/walletPass/example.js +3 -26
- package/dist/model/strategy/adapter/walletPass/utils.js +0 -3
- package/dist/model/strategy/strategy-example.js +5 -19
- package/dist/modules/Cart/index.js +0 -3
- package/dist/modules/Cart/utils/cartProduct.js +0 -1
- package/dist/modules/Date/index.js +1 -5
- package/dist/modules/Discount/index.js +1 -4
- package/dist/modules/OpenData/index.js +0 -2
- package/dist/modules/Order/index.d.ts +1 -1
- package/dist/modules/Order/index.js +14 -41
- package/dist/modules/Payment/index.js +142 -270
- package/dist/modules/Payment/walletpass.js +4 -5
- package/dist/modules/Rules/index.js +0 -7
- package/dist/modules/Schedule/utils.js +0 -1
- package/dist/modules/Step/index.js +0 -1
- package/dist/plugins/request.js +1 -4
- package/dist/plugins/window.js +2 -6
- package/dist/server/index.js +88 -121
- package/dist/server/modules/menu/index.js +32 -41
- package/dist/server/modules/products/index.js +29 -49
- package/dist/server/modules/quotation/index.js +29 -38
- package/dist/server/modules/resource/index.js +3 -4
- package/dist/server/modules/schedule/index.js +32 -40
- package/dist/server/utils/product.js +0 -1
- package/dist/solution/BookingByStep/index.d.ts +1 -1
- package/dist/solution/BookingByStep/index.js +7 -59
- package/dist/solution/BookingByStep/utils/capacity.js +1 -11
- package/dist/solution/BookingByStep/utils/resources.js +1 -3
- package/dist/solution/BookingByStep/utils/timeslots.js +2 -43
- package/dist/solution/BookingTicket/index.d.ts +1 -1
- package/dist/solution/BookingTicket/index.js +5 -7
- package/dist/solution/BookingTicket/utils/scan/handleScan.js +25 -31
- package/dist/solution/BookingTicket/utils/scan/index.js +6 -10
- package/dist/solution/BuyTickets/index.js +9 -12
- package/dist/solution/Checkout/index.js +177 -246
- package/dist/solution/Checkout/utils/index.js +4 -16
- package/dist/solution/RegisterAndLogin/index.js +30 -76
- package/dist/solution/ScanOrder/index.js +50 -60
- package/dist/solution/ShopDiscount/index.js +2 -7
- package/dist/solution/VenueBooking/index.d.ts +5 -0
- package/dist/solution/VenueBooking/index.js +364 -327
- package/dist/utils/task.js +15 -18
- package/dist/utils/watch.js +0 -1
- package/lib/apis/picoding.js +2 -0
- package/lib/core/index.js +130 -131
- package/lib/effects/index.js +46 -57
- package/lib/index.js +92 -53
- package/lib/model/index.js +14 -21
- package/lib/model/strategy/adapter/dataVariant/adapter.js +38 -50
- package/lib/model/strategy/adapter/dataVariant/evaluator.js +162 -236
- package/lib/model/strategy/adapter/dataVariant/examples.js +229 -237
- package/lib/model/strategy/adapter/dataVariant/index.js +39 -34
- package/lib/model/strategy/adapter/dataVariant/type.js +57 -28
- package/lib/model/strategy/adapter/index.js +100 -64
- package/lib/model/strategy/adapter/itemRule/adapter.js +156 -144
- package/lib/model/strategy/adapter/itemRule/evaluator.js +36 -48
- package/lib/model/strategy/adapter/itemRule/examples.js +295 -225
- package/lib/model/strategy/adapter/itemRule/index.js +83 -57
- package/lib/model/strategy/adapter/itemRule/type.js +97 -36
- package/lib/model/strategy/adapter/promotion/adapter.js +84 -63
- package/lib/model/strategy/adapter/promotion/evaluator.js +381 -231
- package/lib/model/strategy/adapter/promotion/examples.js +139 -159
- package/lib/model/strategy/adapter/promotion/index.js +1 -49
- package/lib/model/strategy/adapter/promotion/type.js +199 -35
- package/lib/model/strategy/adapter/type.js +4 -16
- package/lib/model/strategy/adapter/walletPass/evaluator.js +180 -152
- package/lib/model/strategy/adapter/walletPass/example.js +217 -190
- package/lib/model/strategy/adapter/walletPass/index.js +75 -51
- package/lib/model/strategy/adapter/walletPass/locales.js +36 -58
- package/lib/model/strategy/adapter/walletPass/type.js +4 -16
- package/lib/model/strategy/adapter/walletPass/utils.js +652 -402
- package/lib/model/strategy/engine.js +270 -168
- package/lib/model/strategy/index.js +49 -34
- package/lib/model/strategy/strategy-example.js +243 -239
- package/lib/model/strategy/type.js +100 -40
- package/lib/modules/Account/index.js +39 -53
- package/lib/modules/Account/types.js +20 -33
- package/lib/modules/AccountList/index.js +116 -154
- package/lib/modules/AccountList/types.js +30 -31
- package/lib/modules/AccountList/utils.js +18 -30
- package/lib/modules/BaseModule.js +22 -45
- package/lib/modules/Cart/index.js +170 -124
- package/lib/modules/Cart/types.js +46 -51
- package/lib/modules/Cart/utils/cartAccount.js +40 -39
- package/lib/modules/Cart/utils/cartDate.js +56 -61
- package/lib/modules/Cart/utils/cartDiscount.js +28 -33
- package/lib/modules/Cart/utils/cartNote.js +27 -32
- package/lib/modules/Cart/utils/cartProduct.js +306 -241
- package/lib/modules/Cart/utils/cartRelationForms.js +29 -35
- package/lib/modules/Cart/utils/cartResource.js +72 -78
- package/lib/modules/Cart/utils/changePrice.js +26 -62
- package/lib/modules/Cart/utils/index.js +106 -48
- package/lib/modules/Customer/constants.js +13 -34
- package/lib/modules/Customer/index.js +216 -153
- package/lib/modules/Customer/types.js +38 -35
- package/lib/modules/Date/index.js +116 -115
- package/lib/modules/Date/types.js +16 -28
- package/lib/modules/Date/utils.js +174 -123
- package/lib/modules/Discount/index.js +117 -113
- package/lib/modules/Discount/types.js +9 -31
- package/lib/modules/Guests/index.js +30 -56
- package/lib/modules/Guests/types.js +23 -33
- package/lib/modules/Holder/index.js +209 -189
- package/lib/modules/Holder/types.js +4 -16
- package/lib/modules/Holder/utils.js +20 -49
- package/lib/modules/OpenData/index.js +63 -74
- package/lib/modules/OpenData/types.js +4 -16
- package/lib/modules/OpenData/utils.js +44 -78
- package/lib/modules/Order/index.d.ts +1 -1
- package/lib/modules/Order/index.js +332 -320
- package/lib/modules/Order/types.js +24 -33
- package/lib/modules/Order/utils.js +350 -284
- package/lib/modules/Payment/cash.js +20 -33
- package/lib/modules/Payment/cashRecommendationAlgorithm.js +145 -76
- package/lib/modules/Payment/eftpos.js +16 -30
- package/lib/modules/Payment/index.js +566 -432
- package/lib/modules/Payment/mx51.js +1 -0
- package/lib/modules/Payment/types.js +216 -107
- package/lib/modules/Payment/utils.js +50 -47
- package/lib/modules/Payment/walletpass.js +221 -203
- package/lib/modules/Product/index.js +51 -46
- package/lib/modules/Product/types.js +4 -16
- package/lib/modules/Product/utils.js +32 -33
- package/lib/modules/ProductList/index.js +111 -110
- package/lib/modules/ProductList/types.js +9 -31
- package/lib/modules/Quotation/index.js +60 -82
- package/lib/modules/Quotation/types.js +4 -16
- package/lib/modules/Resource/index.js +27 -59
- package/lib/modules/Resource/types.js +22 -32
- package/lib/modules/Resource/utils.js +30 -38
- package/lib/modules/Rules/index.js +1172 -872
- package/lib/modules/Rules/types.js +17 -40
- package/lib/modules/SalesSummary/index.js +59 -68
- package/lib/modules/SalesSummary/types.js +4 -16
- package/lib/modules/SalesSummary/utils.js +176 -193
- package/lib/modules/ScanOrderLogger/index.js +59 -79
- package/lib/modules/ScanOrderLogger/providers/feishu.js +54 -78
- package/lib/modules/ScanOrderLogger/providers/grafana.js +13 -36
- package/lib/modules/ScanOrderLogger/types.js +4 -16
- package/lib/modules/Schedule/getDateIsInSchedule.js +334 -167
- package/lib/modules/Schedule/index.js +97 -107
- package/lib/modules/Schedule/type.js +4 -16
- package/lib/modules/Schedule/types.js +4 -16
- package/lib/modules/Schedule/utils.js +433 -291
- package/lib/modules/Step/index.js +40 -52
- package/lib/modules/Step/tyeps.js +4 -16
- package/lib/modules/Summary/index.js +66 -70
- package/lib/modules/Summary/types.js +4 -16
- package/lib/modules/Summary/utils.js +782 -429
- package/lib/modules/index.js +212 -57
- package/lib/plugins/app.js +4 -16
- package/lib/plugins/index.js +36 -25
- package/lib/plugins/request.js +137 -126
- package/lib/plugins/shopStore.js +4 -16
- package/lib/plugins/user.js +4 -16
- package/lib/plugins/window.js +171 -179
- package/lib/server/index.js +882 -623
- package/lib/server/modules/index.js +85 -59
- package/lib/server/modules/menu/index.js +146 -122
- package/lib/server/modules/menu/types.js +18 -31
- package/lib/server/modules/order/index.js +195 -231
- package/lib/server/modules/order/types.js +107 -32
- package/lib/server/modules/order/utils/filterBookings.js +174 -140
- package/lib/server/modules/order/utils/filterOrders.js +89 -60
- package/lib/server/modules/products/index.js +430 -335
- package/lib/server/modules/products/types.js +41 -34
- package/lib/server/modules/quotation/index.js +76 -77
- package/lib/server/modules/quotation/types.js +21 -31
- package/lib/server/modules/resource/index.js +216 -187
- package/lib/server/modules/resource/types.js +42 -33
- package/lib/server/modules/schedule/index.js +134 -119
- package/lib/server/modules/schedule/types.js +14 -21
- package/lib/server/modules/schedule/utils.js +334 -163
- package/lib/server/types.js +4 -16
- package/lib/server/utils/index.js +25 -23
- package/lib/server/utils/product.js +196 -139
- package/lib/server/utils/schedule.js +34 -41
- package/lib/server/utils/time.js +40 -49
- package/lib/solution/BookingByStep/index.d.ts +1 -1
- package/lib/solution/BookingByStep/index.js +1530 -1343
- package/lib/solution/BookingByStep/types.js +40 -99
- package/lib/solution/BookingByStep/utils/capacity.js +192 -160
- package/lib/solution/BookingByStep/utils/products.js +42 -52
- package/lib/solution/BookingByStep/utils/resources.js +527 -330
- package/lib/solution/BookingByStep/utils/stock.js +65 -44
- package/lib/solution/BookingByStep/utils/timeslots.js +129 -131
- package/lib/solution/BookingTicket/index.d.ts +1 -1
- package/lib/solution/BookingTicket/index.js +147 -122
- package/lib/solution/BookingTicket/types.js +38 -64
- package/lib/solution/BookingTicket/utils/scan/cloudSearch.js +64 -80
- package/lib/solution/BookingTicket/utils/scan/handleScan.js +82 -80
- package/lib/solution/BookingTicket/utils/scan/index.js +90 -94
- package/lib/solution/BookingTicket/utils/scan/scanCache.js +90 -43
- package/lib/solution/BuyTickets/index.js +67 -70
- package/lib/solution/BuyTickets/types.js +22 -38
- package/lib/solution/Checkout/index.js +1451 -1158
- package/lib/solution/Checkout/types.js +91 -61
- package/lib/solution/Checkout/utils/index.js +227 -158
- package/lib/solution/PlaceOrder/index.js +55 -0
- package/lib/solution/RegisterAndLogin/config.js +493 -460
- package/lib/solution/RegisterAndLogin/index.js +633 -630
- package/lib/solution/RegisterAndLogin/types.js +189 -76
- package/lib/solution/RegisterAndLogin/utils.js +183 -125
- package/lib/solution/Sales/index.js +218 -200
- package/lib/solution/Sales/types.js +27 -33
- package/lib/solution/ScanOrder/index.js +803 -840
- package/lib/solution/ScanOrder/types.js +34 -34
- package/lib/solution/ScanOrder/utils.js +372 -331
- package/lib/solution/ShopDiscount/index.js +230 -236
- package/lib/solution/ShopDiscount/types.js +15 -37
- package/lib/solution/ShopDiscount/utils.js +309 -172
- package/lib/solution/VenueBooking/index.d.ts +5 -0
- package/lib/solution/VenueBooking/index.js +886 -929
- package/lib/solution/VenueBooking/types.js +20 -40
- package/lib/solution/VenueBooking/utils/dateSummary.js +22 -54
- package/lib/solution/VenueBooking/utils/resource.js +31 -54
- package/lib/solution/VenueBooking/utils/slotMerge.js +88 -106
- package/lib/solution/VenueBooking/utils/smartPricing.js +112 -100
- package/lib/solution/VenueBooking/utils/timeSlot.js +133 -132
- package/lib/solution/VenueBooking/utils.js +130 -67
- package/lib/solution/index.js +102 -37
- package/lib/store/createStore.js +32 -29
- package/lib/types/index.js +4 -16
- package/lib/utils/task.js +36 -36
- package/lib/utils/watch.js +81 -47
- package/package.json +2 -1
|
@@ -1,265 +1,274 @@
|
|
|
1
|
-
|
|
2
|
-
var __defProp = Object.defineProperty;
|
|
3
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
-
var __export = (target, all) => {
|
|
8
|
-
for (var name in all)
|
|
9
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
-
};
|
|
11
|
-
var __copyProps = (to, from, except, desc) => {
|
|
12
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
-
for (let key of __getOwnPropNames(from))
|
|
14
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
-
}
|
|
17
|
-
return to;
|
|
18
|
-
};
|
|
19
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
20
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
|
21
|
-
// file that has been converted to a CommonJS file using a Babel-
|
|
22
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
23
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
24
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
25
|
-
mod
|
|
26
|
-
));
|
|
27
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
1
|
+
"use strict";
|
|
28
2
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
__export(Discount_exports, {
|
|
32
|
-
DiscountModule: () => DiscountModule
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
33
5
|
});
|
|
34
|
-
|
|
35
|
-
var
|
|
36
|
-
var
|
|
37
|
-
var
|
|
38
|
-
var
|
|
39
|
-
|
|
6
|
+
exports.DiscountModule = void 0;
|
|
7
|
+
var _utils = require("../../solution/ShopDiscount/utils");
|
|
8
|
+
var _BaseModule = require("../BaseModule");
|
|
9
|
+
var _types = require("./types");
|
|
10
|
+
var _decimal = _interopRequireDefault(require("decimal.js"));
|
|
11
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
12
|
+
class DiscountModule extends _BaseModule.BaseModule {
|
|
13
|
+
defaultName = 'discount';
|
|
14
|
+
defaultVersion = '1.0.0';
|
|
15
|
+
request;
|
|
16
|
+
window;
|
|
17
|
+
store;
|
|
18
|
+
cacheId;
|
|
19
|
+
openCache = false;
|
|
20
|
+
fatherModule;
|
|
40
21
|
constructor(name, version) {
|
|
41
22
|
super(name, version);
|
|
42
|
-
this.defaultName = "discount";
|
|
43
|
-
this.defaultVersion = "1.0.0";
|
|
44
|
-
this.openCache = false;
|
|
45
23
|
}
|
|
46
24
|
async initialize(core, options) {
|
|
47
|
-
var _a, _b, _c, _d;
|
|
48
25
|
this.core = core;
|
|
49
|
-
this.store = options
|
|
50
|
-
if (Array.isArray(
|
|
51
|
-
this.store.discountList = options
|
|
26
|
+
this.store = options?.store;
|
|
27
|
+
if (Array.isArray(options?.initialState?.discountList)) {
|
|
28
|
+
this.store.discountList = options?.initialState.discountList;
|
|
52
29
|
} else {
|
|
53
30
|
this.store.discountList = [];
|
|
54
31
|
}
|
|
55
|
-
if (Array.isArray(
|
|
56
|
-
this.store.originalDiscountList = options
|
|
32
|
+
if (Array.isArray(options?.initialState?.originalDiscountList)) {
|
|
33
|
+
this.store.originalDiscountList = options?.initialState.originalDiscountList;
|
|
57
34
|
} else {
|
|
58
35
|
this.store.originalDiscountList = [];
|
|
59
36
|
}
|
|
60
|
-
if (
|
|
37
|
+
if (options?.otherParams?.cacheId) {
|
|
61
38
|
this.openCache = options.otherParams.openCache;
|
|
62
39
|
this.cacheId = options.otherParams.cacheId;
|
|
63
40
|
}
|
|
64
|
-
if (
|
|
41
|
+
if (options?.otherParams?.fatherModule) {
|
|
65
42
|
this.fatherModule = options.otherParams.fatherModule;
|
|
66
43
|
}
|
|
67
|
-
|
|
68
|
-
|
|
44
|
+
|
|
45
|
+
// 获取依赖的插件
|
|
46
|
+
this.request = core.getPlugin('request');
|
|
47
|
+
this.window = core.getPlugin('window');
|
|
69
48
|
if (!this.request) {
|
|
70
|
-
throw new Error(
|
|
49
|
+
throw new Error('discount模块需要 request 插件支持');
|
|
71
50
|
}
|
|
72
51
|
if (!this.window) {
|
|
73
|
-
throw new Error(
|
|
52
|
+
throw new Error('discount模块需要 window 插件支持');
|
|
74
53
|
}
|
|
75
54
|
}
|
|
76
55
|
async setDiscountList(discountList) {
|
|
77
56
|
this.store.discountList = discountList;
|
|
78
|
-
await this.core.effects.emit(
|
|
79
|
-
import_types.DiscountHooks.OnDiscountListChange,
|
|
80
|
-
discountList
|
|
81
|
-
);
|
|
57
|
+
await this.core.effects.emit(_types.DiscountHooks.OnDiscountListChange, discountList);
|
|
82
58
|
}
|
|
83
59
|
getDiscountList() {
|
|
84
60
|
return this.store.discountList;
|
|
85
61
|
}
|
|
62
|
+
|
|
86
63
|
// 设置原始优惠券列表
|
|
87
64
|
async setOriginalDiscountList(originalDiscountList) {
|
|
88
65
|
this.store.originalDiscountList = originalDiscountList;
|
|
89
66
|
}
|
|
67
|
+
|
|
90
68
|
// 获取原始优惠券列表
|
|
91
69
|
getOriginalDiscountList() {
|
|
92
70
|
return this.store.originalDiscountList || [];
|
|
93
71
|
}
|
|
94
72
|
async loadPrepareConfig(params) {
|
|
95
|
-
|
|
96
|
-
const
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
const goodPassList = this.filterEnabledDiscountList(
|
|
101
|
-
[...((_a = prepareConfig == null ? void 0 : prepareConfig.data) == null ? void 0 : _a.good_pass_list) || [], ...((_b = prepareConfig == null ? void 0 : prepareConfig.data) == null ? void 0 : _b.discount_card_list) || []]
|
|
102
|
-
) || [];
|
|
73
|
+
const prepareConfig = await this.request.post(`/order/prepare/config`, params);
|
|
74
|
+
const goodPassList = this.filterEnabledDiscountList([...(prepareConfig?.data?.good_pass_list || []), ...(prepareConfig?.data?.discount_card_list || [])]) || [];
|
|
75
|
+
|
|
76
|
+
// this.setDiscountList(goodPassList);
|
|
77
|
+
|
|
103
78
|
return {
|
|
104
79
|
discountList: goodPassList,
|
|
105
|
-
availableWalletIds: this.extractAvailableWalletIds(prepareConfig
|
|
80
|
+
availableWalletIds: this.extractAvailableWalletIds(prepareConfig?.data)
|
|
106
81
|
};
|
|
107
82
|
}
|
|
108
83
|
extractAvailableWalletIds(data) {
|
|
109
|
-
const availableWalletList = Array.isArray(data
|
|
110
|
-
const availableWalletPassList = Array.isArray(data
|
|
111
|
-
const walletIds = availableWalletList.map(
|
|
112
|
-
const walletPassProductIds = availableWalletPassList.map(
|
|
113
|
-
return Array.from(
|
|
84
|
+
const availableWalletList = Array.isArray(data?.avaiable_wallet_list) ? data.avaiable_wallet_list : Array.isArray(data?.available_wallet_list) ? data.available_wallet_list : [];
|
|
85
|
+
const availableWalletPassList = Array.isArray(data?.available_wallet_pass_list) ? data.available_wallet_pass_list : [];
|
|
86
|
+
const walletIds = availableWalletList.map(item => Number(item?.id)).filter(id => Number.isFinite(id) && id > 0);
|
|
87
|
+
const walletPassProductIds = availableWalletPassList.map(item => Number(item?.product_id)).filter(id => Number.isFinite(id) && id > 0);
|
|
88
|
+
return Array.from(new Set([...walletIds, ...walletPassProductIds]));
|
|
114
89
|
}
|
|
115
90
|
async batchSearch(code, options) {
|
|
116
|
-
const {
|
|
91
|
+
const {
|
|
92
|
+
customerId,
|
|
93
|
+
orderId
|
|
94
|
+
} = options || {};
|
|
117
95
|
const result = await this.request.get(`/machinecode/batch-search`, {
|
|
118
96
|
code,
|
|
119
97
|
translate_flag: 1,
|
|
120
|
-
tags: [
|
|
98
|
+
tags: ['good_pass', 'product_discount_card'],
|
|
121
99
|
// available: 1,
|
|
122
100
|
relation_product: 1,
|
|
123
|
-
with: [
|
|
101
|
+
with: ['extensionData', 'customScheduleSnapshot', 'holder.detail'],
|
|
124
102
|
order_behavior_count: 1,
|
|
125
103
|
order_behavior_count_customer_id: customerId || 1,
|
|
126
104
|
unified_status_info_flag: 1,
|
|
127
|
-
...orderId ? {
|
|
105
|
+
...(orderId ? {
|
|
106
|
+
order_behavior_count_order_id: orderId
|
|
107
|
+
} : {}),
|
|
128
108
|
request_timezone: Intl.DateTimeFormat().resolvedOptions().timeZone
|
|
129
109
|
});
|
|
130
|
-
const resultDiscountWithReason = this.filterEnabledDiscountListWithReason(
|
|
110
|
+
const resultDiscountWithReason = this.filterEnabledDiscountListWithReason(result?.data || []) || [];
|
|
131
111
|
return resultDiscountWithReason;
|
|
132
112
|
}
|
|
133
113
|
async batchSearchByProductIds(productIds) {
|
|
134
114
|
const result = await this.request.get(`/machinecode/batch-search`, {
|
|
135
115
|
ids: productIds,
|
|
136
116
|
translate_flag: 1,
|
|
137
|
-
tags: [
|
|
117
|
+
tags: ['good_pass', 'product_discount_card'],
|
|
138
118
|
relation_product: 1
|
|
139
119
|
});
|
|
140
|
-
return
|
|
120
|
+
return result?.data || [];
|
|
141
121
|
}
|
|
142
122
|
filterEnabledDiscountList(discountList) {
|
|
143
|
-
return discountList.filter(
|
|
144
|
-
(discount) => discount.limit_status === "enable" && new import_decimal.default((discount == null ? void 0 : discount.par_value) || 0).minus(new import_decimal.default((discount == null ? void 0 : discount.used_par_value) || 0)).greaterThan(0) && this.checkUsageCreditsLimit(discount)
|
|
145
|
-
);
|
|
123
|
+
return discountList.filter(discount => discount.limit_status === 'enable' && new _decimal.default(discount?.par_value || 0).minus(new _decimal.default(discount?.used_par_value || 0)).greaterThan(0) && this.checkUsageCreditsLimit(discount));
|
|
146
124
|
}
|
|
125
|
+
|
|
147
126
|
// 检查使用次数限制
|
|
148
127
|
checkUsageCreditsLimit(discount) {
|
|
128
|
+
// 如果没有 extension_data,则不需要限制
|
|
149
129
|
if (!discount.extension_data || discount.extension_data.length === 0) {
|
|
150
130
|
return true;
|
|
151
131
|
}
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
);
|
|
132
|
+
|
|
133
|
+
// 查找 field_key 为 usage_credits 的数据
|
|
134
|
+
const usageCreditsData = discount.extension_data.find(data => data.field_key === 'usage_credits');
|
|
135
|
+
|
|
136
|
+
// 如果没有找到 usage_credits 数据,则不需要限制
|
|
155
137
|
if (!usageCreditsData) {
|
|
156
138
|
return true;
|
|
157
139
|
}
|
|
158
140
|
const value = usageCreditsData.value;
|
|
141
|
+
|
|
142
|
+
// 检查总次数限制
|
|
159
143
|
if (value.total_credits && value.total_credits > 0) {
|
|
160
144
|
if ((discount.total_order_behavior_count || 0) >= value.total_credits) {
|
|
161
145
|
return false;
|
|
162
146
|
}
|
|
163
147
|
}
|
|
148
|
+
|
|
149
|
+
// 检查单用户限制
|
|
164
150
|
if (value.per_user_limit && value.per_user_limit > 0) {
|
|
165
151
|
if ((discount.customer_order_behavior_count || 0) >= value.per_user_limit) {
|
|
166
152
|
return false;
|
|
167
153
|
}
|
|
168
154
|
}
|
|
155
|
+
|
|
156
|
+
// 检查单日限制
|
|
169
157
|
if (value.max_per_day && value.max_per_day > 0) {
|
|
170
158
|
if ((discount.today_order_behavior_count || 0) >= value.max_per_day) {
|
|
171
159
|
return false;
|
|
172
160
|
}
|
|
173
161
|
}
|
|
162
|
+
|
|
163
|
+
// 检查单周限制
|
|
174
164
|
if (value.max_per_week && value.max_per_week > 0) {
|
|
175
165
|
if ((discount.week_order_behavior_count || 0) >= value.max_per_week) {
|
|
176
166
|
return false;
|
|
177
167
|
}
|
|
178
168
|
}
|
|
169
|
+
|
|
170
|
+
// 检查单月限制
|
|
179
171
|
if (value.max_per_month && value.max_per_month > 0) {
|
|
180
172
|
if ((discount.month_order_behavior_count || 0) >= value.max_per_month) {
|
|
181
173
|
return false;
|
|
182
174
|
}
|
|
183
175
|
}
|
|
176
|
+
|
|
177
|
+
// 所有检查都通过
|
|
184
178
|
return true;
|
|
185
179
|
}
|
|
180
|
+
|
|
186
181
|
// 过滤启用且可用的优惠券,并返回校验失败原因
|
|
187
182
|
filterEnabledDiscountListWithReason(discountList) {
|
|
188
|
-
let lists = discountList.filter(
|
|
189
|
-
const remaining = new
|
|
183
|
+
let lists = discountList.filter(discount => discount.limit_status === 'enable').filter(discount => {
|
|
184
|
+
const remaining = new _decimal.default(discount?.par_value || 0).minus(new _decimal.default(discount?.used_par_value || 0)).greaterThan(0);
|
|
190
185
|
return remaining;
|
|
191
|
-
}).map(
|
|
186
|
+
}).map(discount => {
|
|
192
187
|
const limitFailKey = this.checkUsageCreditsLimitWithFailKey(discount);
|
|
193
188
|
return {
|
|
194
189
|
...discount,
|
|
195
190
|
usageLimitFailKey: limitFailKey
|
|
196
191
|
};
|
|
197
192
|
});
|
|
198
|
-
|
|
199
|
-
|
|
193
|
+
|
|
194
|
+
// 可用的列表
|
|
195
|
+
const availableLists = lists.filter(item => !item.usageLimitFailKey && item.unified_available_status !== 0);
|
|
196
|
+
// 不可用数据
|
|
197
|
+
const currentFailDiscount = lists.find(item => item.usageLimitFailKey);
|
|
200
198
|
return {
|
|
201
199
|
discountList: availableLists,
|
|
202
|
-
unavailableReasonKey: currentFailDiscount
|
|
200
|
+
unavailableReasonKey: currentFailDiscount?.usageLimitFailKey
|
|
203
201
|
};
|
|
204
202
|
}
|
|
203
|
+
|
|
205
204
|
// 检查使用次数限制,并返回校验失败原因
|
|
206
205
|
checkUsageCreditsLimitWithFailKey(discount) {
|
|
207
206
|
if (!discount.extension_data || discount.extension_data.length === 0) {
|
|
208
207
|
return null;
|
|
209
208
|
}
|
|
210
|
-
const usageCreditsData = discount.extension_data.find(
|
|
211
|
-
(data) => data.field_key === "usage_credits"
|
|
212
|
-
);
|
|
209
|
+
const usageCreditsData = discount.extension_data.find(data => data.field_key === 'usage_credits');
|
|
213
210
|
if (!usageCreditsData) {
|
|
214
211
|
return null;
|
|
215
212
|
}
|
|
216
213
|
const value = usageCreditsData.value;
|
|
214
|
+
|
|
215
|
+
// 总次数限制
|
|
217
216
|
if (value.total_credits && value.total_credits > 0) {
|
|
218
217
|
if ((discount.total_order_behavior_count || 0) >= value.total_credits) {
|
|
219
|
-
return
|
|
218
|
+
return 'total_credits';
|
|
220
219
|
}
|
|
221
220
|
}
|
|
221
|
+
|
|
222
|
+
// 单用户限制
|
|
222
223
|
if (value.per_user_limit && value.per_user_limit > 0) {
|
|
223
224
|
if ((discount.customer_order_behavior_count || 0) >= value.per_user_limit) {
|
|
224
|
-
return
|
|
225
|
+
return 'per_user_limit';
|
|
225
226
|
}
|
|
226
227
|
}
|
|
228
|
+
|
|
229
|
+
// 单日限制
|
|
227
230
|
if (value.max_per_day && value.max_per_day > 0) {
|
|
228
231
|
if ((discount.today_order_behavior_count || 0) >= value.max_per_day) {
|
|
229
|
-
return
|
|
232
|
+
return 'max_per_day';
|
|
230
233
|
}
|
|
231
234
|
}
|
|
235
|
+
|
|
236
|
+
// 单周限制
|
|
232
237
|
if (value.max_per_week && value.max_per_week > 0) {
|
|
233
238
|
if ((discount.week_order_behavior_count || 0) >= value.max_per_week) {
|
|
234
|
-
return
|
|
239
|
+
return 'max_per_week';
|
|
235
240
|
}
|
|
236
241
|
}
|
|
242
|
+
|
|
243
|
+
// 单月限制
|
|
237
244
|
if (value.max_per_month && value.max_per_month > 0) {
|
|
238
245
|
if ((discount.month_order_behavior_count || 0) >= value.max_per_month) {
|
|
239
|
-
return
|
|
246
|
+
return 'max_per_month';
|
|
240
247
|
}
|
|
241
248
|
}
|
|
249
|
+
|
|
250
|
+
// 全部通过
|
|
242
251
|
return null;
|
|
243
252
|
}
|
|
253
|
+
|
|
244
254
|
// 根据productIds去重
|
|
245
255
|
uniqueByProductId(discountList) {
|
|
246
|
-
return (0,
|
|
256
|
+
return (0, _utils.uniqueById)(discountList, 'product_id');
|
|
247
257
|
}
|
|
248
258
|
filterDiscountListByProductIds(discountList, productIds) {
|
|
249
|
-
return discountList.filter(
|
|
259
|
+
return discountList.filter(discount => {
|
|
250
260
|
const applicableProductIds = discount.applicableProductIds || [];
|
|
251
|
-
return applicableProductIds.some(
|
|
261
|
+
return applicableProductIds.some(id => productIds.includes(id));
|
|
252
262
|
});
|
|
253
263
|
}
|
|
254
264
|
calcDiscountApplicableProductTotalPrice(discount) {
|
|
255
|
-
if (discount
|
|
256
|
-
return
|
|
265
|
+
if (discount?.savedAmount) {
|
|
266
|
+
return discount?.savedAmount || 0;
|
|
257
267
|
}
|
|
258
268
|
if (discount.appliedProductDetails) {
|
|
259
269
|
return discount.appliedProductDetails.reduce((total, product) => {
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
return new import_decimal.default(total).plus(price).add(((_b = product == null ? void 0 : product.metadata) == null ? void 0 : _b.product_discount_difference) || 0).toNumber();
|
|
270
|
+
const price = new _decimal.default(product?.discount?.fixed_amount || 0).mul(product?._num || 1);
|
|
271
|
+
return new _decimal.default(total).plus(price).add(product?.metadata?.product_discount_difference || 0).toNumber();
|
|
263
272
|
}, 0);
|
|
264
273
|
}
|
|
265
274
|
}
|
|
@@ -267,12 +276,10 @@ var DiscountModule = class extends import_BaseModule.BaseModule {
|
|
|
267
276
|
this.store.discountList = [];
|
|
268
277
|
this.core.effects.offByModuleDestroy(this.name);
|
|
269
278
|
await this.core.effects.emit(`${this.name}:onDestroy`, {});
|
|
270
|
-
console.log("[Discount] 已销毁");
|
|
271
279
|
}
|
|
272
280
|
async clear() {
|
|
273
281
|
this.store.discountList = [];
|
|
274
282
|
this.store.originalDiscountList = [];
|
|
275
|
-
console.log("[Discount] clear");
|
|
276
283
|
}
|
|
277
284
|
storeChange() {
|
|
278
285
|
if (this.openCache) {
|
|
@@ -280,12 +287,9 @@ var DiscountModule = class extends import_BaseModule.BaseModule {
|
|
|
280
287
|
cacheId: this.cacheId,
|
|
281
288
|
fatherModule: this.fatherModule,
|
|
282
289
|
store: this.store,
|
|
283
|
-
cacheKey: [
|
|
290
|
+
cacheKey: ['discountList']
|
|
284
291
|
});
|
|
285
292
|
}
|
|
286
293
|
}
|
|
287
|
-
}
|
|
288
|
-
|
|
289
|
-
0 && (module.exports = {
|
|
290
|
-
DiscountModule
|
|
291
|
-
});
|
|
294
|
+
}
|
|
295
|
+
exports.DiscountModule = DiscountModule;
|
|
@@ -1,33 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
-
var __export = (target, all) => {
|
|
6
|
-
for (var name in all)
|
|
7
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
-
};
|
|
9
|
-
var __copyProps = (to, from, except, desc) => {
|
|
10
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
-
for (let key of __getOwnPropNames(from))
|
|
12
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
-
}
|
|
15
|
-
return to;
|
|
16
|
-
};
|
|
17
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
1
|
+
"use strict";
|
|
18
2
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
__export(types_exports, {
|
|
22
|
-
DiscountHooks: () => DiscountHooks
|
|
23
|
-
});
|
|
24
|
-
module.exports = __toCommonJS(types_exports);
|
|
25
|
-
var DiscountHooks = /* @__PURE__ */ ((DiscountHooks2) => {
|
|
26
|
-
DiscountHooks2["OnDiscountListChange"] = "discount:onDiscountListChange";
|
|
27
|
-
DiscountHooks2["OnDestroy"] = "discount:onDestroy";
|
|
28
|
-
return DiscountHooks2;
|
|
29
|
-
})(DiscountHooks || {});
|
|
30
|
-
// Annotate the CommonJS export names for ESM import in node:
|
|
31
|
-
0 && (module.exports = {
|
|
32
|
-
DiscountHooks
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
33
5
|
});
|
|
6
|
+
exports.DiscountHooks = void 0;
|
|
7
|
+
let DiscountHooks = exports.DiscountHooks = /*#__PURE__*/function (DiscountHooks) {
|
|
8
|
+
DiscountHooks["OnDiscountListChange"] = "discount:onDiscountListChange";
|
|
9
|
+
DiscountHooks["OnDestroy"] = "discount:onDestroy";
|
|
10
|
+
return DiscountHooks;
|
|
11
|
+
}({});
|
|
@@ -1,42 +1,27 @@
|
|
|
1
|
-
|
|
2
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
-
var __export = (target, all) => {
|
|
6
|
-
for (var name in all)
|
|
7
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
-
};
|
|
9
|
-
var __copyProps = (to, from, except, desc) => {
|
|
10
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
-
for (let key of __getOwnPropNames(from))
|
|
12
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
-
}
|
|
15
|
-
return to;
|
|
16
|
-
};
|
|
17
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
1
|
+
"use strict";
|
|
18
2
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
__export(Guests_exports, {
|
|
22
|
-
GuestListModule: () => GuestListModule
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
23
5
|
});
|
|
24
|
-
|
|
25
|
-
var
|
|
26
|
-
var
|
|
27
|
-
|
|
6
|
+
exports.GuestListModule = void 0;
|
|
7
|
+
var _BaseModule = require("../BaseModule");
|
|
8
|
+
var _types = require("./types");
|
|
9
|
+
class GuestListModule extends _BaseModule.BaseModule {
|
|
10
|
+
defaultName = 'guestList';
|
|
11
|
+
defaultVersion = '1.0.0';
|
|
12
|
+
state = {
|
|
13
|
+
list: []
|
|
14
|
+
};
|
|
28
15
|
constructor(name, version) {
|
|
29
16
|
super(name, version);
|
|
30
|
-
this.defaultName = "guestList";
|
|
31
|
-
this.defaultVersion = "1.0.0";
|
|
32
|
-
this.state = {
|
|
33
|
-
list: []
|
|
34
|
-
};
|
|
35
17
|
}
|
|
36
18
|
async initialize(core, options) {
|
|
37
19
|
this.core = core;
|
|
38
|
-
if (options
|
|
39
|
-
this.state = {
|
|
20
|
+
if (options?.initialState) {
|
|
21
|
+
this.state = {
|
|
22
|
+
...this.state,
|
|
23
|
+
...options.initialState
|
|
24
|
+
};
|
|
40
25
|
}
|
|
41
26
|
}
|
|
42
27
|
async addGuest(guest) {
|
|
@@ -45,23 +30,18 @@ var GuestListModule = class extends import_BaseModule.BaseModule {
|
|
|
45
30
|
await this.core.effects.emit(`${this.name}:onGuestChange`, this.state.list);
|
|
46
31
|
}
|
|
47
32
|
async updateGuest(id, updates) {
|
|
48
|
-
const index = this.state.list.findIndex(
|
|
49
|
-
if (index === -1)
|
|
50
|
-
return;
|
|
33
|
+
const index = this.state.list.findIndex(g => g.id === id);
|
|
34
|
+
if (index === -1) return;
|
|
51
35
|
this.state.list[index] = {
|
|
52
36
|
...this.state.list[index],
|
|
53
37
|
...updates
|
|
54
38
|
};
|
|
55
|
-
await this.core.effects.emit(
|
|
56
|
-
import_types.GuestHooks.OnGuestUpdate,
|
|
57
|
-
this.state.list[index]
|
|
58
|
-
);
|
|
39
|
+
await this.core.effects.emit(_types.GuestHooks.OnGuestUpdate, this.state.list[index]);
|
|
59
40
|
await this.core.effects.emit(`${this.name}:onGuestChange`, this.state.list);
|
|
60
41
|
}
|
|
61
42
|
async removeGuest(id) {
|
|
62
|
-
const index = this.state.list.findIndex(
|
|
63
|
-
if (index === -1)
|
|
64
|
-
return;
|
|
43
|
+
const index = this.state.list.findIndex(g => g.id === id);
|
|
44
|
+
if (index === -1) return;
|
|
65
45
|
const [removed] = this.state.list.splice(index, 1);
|
|
66
46
|
await this.core.effects.emit(`${this.name}:onGuestRemove`, removed);
|
|
67
47
|
await this.core.effects.emit(`${this.name}:onGuestChange`, this.state.list);
|
|
@@ -73,26 +53,20 @@ var GuestListModule = class extends import_BaseModule.BaseModule {
|
|
|
73
53
|
return this.state.list.length;
|
|
74
54
|
}
|
|
75
55
|
async addItemToGuest(guestId, item) {
|
|
76
|
-
const guest = this.state.list.find(
|
|
77
|
-
if (!guest)
|
|
78
|
-
return;
|
|
56
|
+
const guest = this.state.list.find(g => g.id === guestId);
|
|
57
|
+
if (!guest) return;
|
|
79
58
|
guest.items.push(item);
|
|
80
59
|
await this.core.effects.emit(`${this.name}:onGuestUpdate`, guest);
|
|
81
60
|
await this.core.effects.emit(`${this.name}:onGuestChange`, this.state.list);
|
|
82
61
|
}
|
|
83
62
|
async removeItemFromGuest(guestId, itemId) {
|
|
84
|
-
const guest = this.state.list.find(
|
|
85
|
-
if (!guest)
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
if (index === -1)
|
|
89
|
-
return;
|
|
63
|
+
const guest = this.state.list.find(g => g.id === guestId);
|
|
64
|
+
if (!guest) return;
|
|
65
|
+
const index = guest.items.findIndex(i => i.id === itemId);
|
|
66
|
+
if (index === -1) return;
|
|
90
67
|
guest.items.splice(index, 1);
|
|
91
68
|
await this.core.effects.emit(`${this.name}:onGuestUpdate`, guest);
|
|
92
69
|
await this.core.effects.emit(`${this.name}:onGuestChange`, this.state.list);
|
|
93
70
|
}
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
0 && (module.exports = {
|
|
97
|
-
GuestListModule
|
|
98
|
-
});
|
|
71
|
+
}
|
|
72
|
+
exports.GuestListModule = GuestListModule;
|
|
@@ -1,35 +1,25 @@
|
|
|
1
|
-
|
|
2
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
-
var __export = (target, all) => {
|
|
6
|
-
for (var name in all)
|
|
7
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
-
};
|
|
9
|
-
var __copyProps = (to, from, except, desc) => {
|
|
10
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
-
for (let key of __getOwnPropNames(from))
|
|
12
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
-
}
|
|
15
|
-
return to;
|
|
16
|
-
};
|
|
17
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
1
|
+
"use strict";
|
|
18
2
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
__export(types_exports, {
|
|
22
|
-
GuestHooks: () => GuestHooks
|
|
23
|
-
});
|
|
24
|
-
module.exports = __toCommonJS(types_exports);
|
|
25
|
-
var GuestHooks = /* @__PURE__ */ ((GuestHooks2) => {
|
|
26
|
-
GuestHooks2["OnGuestAdd"] = "guest:onGuestAdd";
|
|
27
|
-
GuestHooks2["OnGuestUpdate"] = "guest:onGuestUpdate";
|
|
28
|
-
GuestHooks2["OnGuestRemove"] = "guest:onGuestRemove";
|
|
29
|
-
GuestHooks2["OnGuestChange"] = "guest:onGuestChange";
|
|
30
|
-
return GuestHooks2;
|
|
31
|
-
})(GuestHooks || {});
|
|
32
|
-
// Annotate the CommonJS export names for ESM import in node:
|
|
33
|
-
0 && (module.exports = {
|
|
34
|
-
GuestHooks
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
35
5
|
});
|
|
6
|
+
exports.GuestHooks = void 0;
|
|
7
|
+
let GuestHooks = exports.GuestHooks = /*#__PURE__*/function (GuestHooks) {
|
|
8
|
+
GuestHooks["OnGuestAdd"] = "guest:onGuestAdd";
|
|
9
|
+
GuestHooks["OnGuestUpdate"] = "guest:onGuestUpdate";
|
|
10
|
+
GuestHooks["OnGuestRemove"] = "guest:onGuestRemove";
|
|
11
|
+
GuestHooks["OnGuestChange"] = "guest:onGuestChange";
|
|
12
|
+
return GuestHooks;
|
|
13
|
+
}({});
|
|
14
|
+
/**
|
|
15
|
+
* 预约人选择的商品/服务
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* 预约人信息
|
|
19
|
+
*/
|
|
20
|
+
/**
|
|
21
|
+
* 预约人列表状态
|
|
22
|
+
*/
|
|
23
|
+
/**
|
|
24
|
+
* 预约人列表模块 API
|
|
25
|
+
*/
|