@pisell/pisellos 2.2.171 → 2.2.172
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/modules/BookingContext/index.d.ts +37 -0
- package/dist/modules/BookingContext/index.js +436 -0
- package/dist/modules/BookingContext/types.d.ts +102 -0
- package/dist/modules/BookingContext/types.js +51 -0
- package/dist/modules/BookingContext/utils/buildCacheItemFromOrderLine.d.ts +16 -0
- package/dist/modules/BookingContext/utils/buildCacheItemFromOrderLine.js +193 -0
- package/dist/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.d.ts +8 -0
- package/dist/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.js +137 -0
- package/dist/modules/BookingContext/utils/cacheItemToBookingInput.d.ts +75 -0
- package/dist/modules/BookingContext/utils/cacheItemToBookingInput.js +215 -0
- package/dist/modules/BookingContext/utils/flexible.d.ts +28 -0
- package/dist/modules/BookingContext/utils/flexible.js +56 -0
- package/dist/modules/BookingContext/utils/formatResourceList.d.ts +8 -0
- package/dist/modules/BookingContext/utils/formatResourceList.js +38 -0
- package/dist/modules/BookingContext/utils/index.d.ts +11 -0
- package/dist/modules/BookingContext/utils/index.js +11 -0
- package/dist/modules/BookingContext/utils/noResource.d.ts +13 -0
- package/dist/modules/BookingContext/utils/noResource.js +77 -0
- package/dist/modules/BookingContext/utils/productExtend.d.ts +72 -0
- package/dist/modules/BookingContext/utils/productExtend.js +339 -0
- package/dist/modules/BookingContext/utils/resourceErrors.d.ts +41 -0
- package/dist/modules/BookingContext/utils/resourceErrors.js +74 -0
- package/dist/modules/BookingContext/utils/resourceSelection.d.ts +7 -0
- package/dist/modules/BookingContext/utils/resourceSelection.js +24 -0
- package/dist/modules/BookingContext/utils/resources.d.ts +80 -0
- package/dist/modules/BookingContext/utils/resources.js +486 -0
- package/dist/modules/BookingContext/utils/serviceTimes.d.ts +55 -0
- package/dist/modules/BookingContext/utils/serviceTimes.js +151 -0
- package/dist/modules/BookingContext/utils/timeSlices.d.ts +42 -0
- package/dist/modules/BookingContext/utils/timeSlices.js +100 -0
- package/dist/modules/Customer/index.d.ts +6 -0
- package/dist/modules/Customer/index.js +129 -83
- package/dist/modules/Customer/types.d.ts +2 -0
- package/dist/modules/Discount/index.d.ts +2 -4
- package/dist/modules/Discount/index.js +8 -93
- package/dist/modules/Discount/types.d.ts +1 -7
- package/dist/modules/Order/index.d.ts +47 -16
- package/dist/modules/Order/index.js +743 -334
- package/dist/modules/Order/types.d.ts +57 -17
- package/dist/modules/Order/types.js +2 -0
- package/dist/modules/Order/utils/manualProductDiscount.d.ts +106 -0
- package/dist/modules/Order/utils/manualProductDiscount.js +212 -0
- package/dist/modules/Order/utils.d.ts +23 -1
- package/dist/modules/Order/utils.js +139 -30
- package/dist/modules/Quotation/index.js +16 -5
- package/dist/modules/Rules/index.d.ts +4 -0
- package/dist/modules/Rules/index.js +26 -10
- package/dist/modules/SalesSummary/index.js +4 -2
- package/dist/modules/Schedule/index.js +6 -2
- package/dist/modules/index.d.ts +1 -0
- package/dist/modules/index.js +2 -1
- package/dist/server/index.js +10 -6
- package/dist/server/modules/order/utils/filterOrders.js +20 -6
- package/dist/server/modules/products/index.js +9 -8
- package/dist/server/modules/schedule/index.js +13 -6
- package/dist/solution/BaseSales/index.d.ts +65 -7
- package/dist/solution/BaseSales/index.js +1066 -315
- package/dist/solution/BaseSales/types.d.ts +53 -1
- package/dist/solution/BaseSales/types.js +3 -1
- package/dist/solution/BaseSales/utils/quotationPrice.d.ts +7 -0
- package/dist/solution/BaseSales/utils/quotationPrice.js +159 -0
- package/dist/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +65 -15
- package/dist/solution/BaseSales/utils.js +46 -8
- package/dist/solution/BookingTicket/index.d.ts +134 -2
- package/dist/solution/BookingTicket/index.js +768 -175
- package/dist/solution/BookingTicket/types.d.ts +2 -0
- package/dist/solution/BookingTicket/types.js +3 -0
- package/dist/solution/BookingTicket/utils/addProductDecision.d.ts +113 -0
- package/dist/solution/BookingTicket/utils/addProductDecision.js +346 -0
- package/dist/solution/ScanOrder/index.d.ts +9 -3
- package/dist/solution/ScanOrder/index.js +231 -128
- package/dist/solution/ScanOrder/utils.js +46 -8
- package/dist/solution/ShopDiscount/index.d.ts +0 -1
- package/dist/solution/ShopDiscount/index.js +18 -23
- package/dist/solution/VenueBooking/index.d.ts +5 -9
- package/dist/solution/VenueBooking/index.js +103 -55
- package/dist/solution/VenueBooking/utils/slotMerge.d.ts +4 -0
- package/dist/solution/VenueBooking/utils/slotMerge.js +10 -0
- package/lib/modules/BookingContext/index.d.ts +37 -0
- package/lib/modules/BookingContext/index.js +297 -0
- package/lib/modules/BookingContext/types.d.ts +102 -0
- package/lib/modules/BookingContext/types.js +34 -0
- package/lib/modules/BookingContext/utils/buildCacheItemFromOrderLine.d.ts +16 -0
- package/lib/modules/BookingContext/utils/buildCacheItemFromOrderLine.js +207 -0
- package/lib/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.d.ts +8 -0
- package/lib/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.js +141 -0
- package/lib/modules/BookingContext/utils/cacheItemToBookingInput.d.ts +75 -0
- package/lib/modules/BookingContext/utils/cacheItemToBookingInput.js +198 -0
- package/lib/modules/BookingContext/utils/flexible.d.ts +28 -0
- package/lib/modules/BookingContext/utils/flexible.js +80 -0
- package/lib/modules/BookingContext/utils/formatResourceList.d.ts +8 -0
- package/lib/modules/BookingContext/utils/formatResourceList.js +50 -0
- package/lib/modules/BookingContext/utils/index.d.ts +11 -0
- package/lib/modules/BookingContext/utils/index.js +43 -0
- package/lib/modules/BookingContext/utils/noResource.d.ts +13 -0
- package/lib/modules/BookingContext/utils/noResource.js +90 -0
- package/lib/modules/BookingContext/utils/productExtend.d.ts +72 -0
- package/lib/modules/BookingContext/utils/productExtend.js +283 -0
- package/lib/modules/BookingContext/utils/resourceErrors.d.ts +41 -0
- package/lib/modules/BookingContext/utils/resourceErrors.js +80 -0
- package/lib/modules/BookingContext/utils/resourceSelection.d.ts +7 -0
- package/lib/modules/BookingContext/utils/resourceSelection.js +46 -0
- package/lib/modules/BookingContext/utils/resources.d.ts +80 -0
- package/lib/modules/BookingContext/utils/resources.js +377 -0
- package/lib/modules/BookingContext/utils/serviceTimes.d.ts +55 -0
- package/lib/modules/BookingContext/utils/serviceTimes.js +162 -0
- package/lib/modules/BookingContext/utils/timeSlices.d.ts +42 -0
- package/lib/modules/BookingContext/utils/timeSlices.js +124 -0
- package/lib/modules/Customer/index.d.ts +6 -0
- package/lib/modules/Customer/index.js +26 -11
- package/lib/modules/Customer/types.d.ts +2 -0
- package/lib/modules/Discount/index.d.ts +2 -4
- package/lib/modules/Discount/index.js +8 -63
- package/lib/modules/Discount/types.d.ts +1 -7
- package/lib/modules/Order/index.d.ts +47 -16
- package/lib/modules/Order/index.js +389 -90
- package/lib/modules/Order/types.d.ts +57 -17
- package/lib/modules/Order/utils/manualProductDiscount.d.ts +106 -0
- package/lib/modules/Order/utils/manualProductDiscount.js +207 -0
- package/lib/modules/Order/utils.d.ts +23 -1
- package/lib/modules/Order/utils.js +145 -21
- package/lib/modules/Quotation/index.js +17 -6
- package/lib/modules/Rules/index.d.ts +4 -0
- package/lib/modules/Rules/index.js +22 -14
- package/lib/modules/SalesSummary/index.js +4 -2
- package/lib/modules/Schedule/index.js +3 -1
- package/lib/modules/index.d.ts +1 -0
- package/lib/modules/index.js +3 -1
- package/lib/server/index.js +2 -0
- package/lib/server/modules/order/utils/filterOrders.js +12 -4
- package/lib/server/modules/products/index.js +8 -9
- package/lib/server/modules/schedule/index.js +2 -1
- package/lib/solution/BaseSales/index.d.ts +65 -7
- package/lib/solution/BaseSales/index.js +492 -20
- package/lib/solution/BaseSales/types.d.ts +53 -1
- package/lib/solution/BaseSales/types.js +3 -1
- package/lib/solution/BaseSales/utils/quotationPrice.d.ts +7 -0
- package/lib/solution/BaseSales/utils/quotationPrice.js +201 -0
- package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +70 -11
- package/lib/solution/BaseSales/utils.js +46 -6
- package/lib/solution/BookingTicket/index.d.ts +134 -2
- package/lib/solution/BookingTicket/index.js +341 -8
- package/lib/solution/BookingTicket/types.d.ts +2 -0
- package/lib/solution/BookingTicket/types.js +6 -0
- package/lib/solution/BookingTicket/utils/addProductDecision.d.ts +113 -0
- package/lib/solution/BookingTicket/utils/addProductDecision.js +318 -0
- package/lib/solution/ScanOrder/index.d.ts +9 -3
- package/lib/solution/ScanOrder/index.js +147 -66
- package/lib/solution/ScanOrder/utils.js +46 -6
- package/lib/solution/ShopDiscount/index.d.ts +0 -1
- package/lib/solution/ShopDiscount/index.js +2 -4
- package/lib/solution/VenueBooking/index.d.ts +5 -9
- package/lib/solution/VenueBooking/index.js +50 -14
- package/lib/solution/VenueBooking/utils/slotMerge.d.ts +4 -0
- package/lib/solution/VenueBooking/utils/slotMerge.js +10 -0
- package/package.json +2 -2
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { ProductList, OrderModule } from '../../modules';
|
|
2
|
+
import { BookingContextModule } from '../../modules/BookingContext';
|
|
2
3
|
import { CustomerModule } from '../../modules/Customer';
|
|
3
4
|
import { SalesSummaryModule } from '../../modules/SalesSummary';
|
|
4
5
|
import { ScheduleModule } from '../../modules/Schedule';
|
|
@@ -16,6 +17,7 @@ export interface BookingTicketState extends BaseSalesState {
|
|
|
16
17
|
salesSummary: SalesSummaryModule;
|
|
17
18
|
schedule: ScheduleModule;
|
|
18
19
|
customer: CustomerModule;
|
|
20
|
+
bookingContext: BookingContextModule;
|
|
19
21
|
}
|
|
20
22
|
export declare function createBookingTicketModule<T extends keyof BookingTicketState>(moduleName: T, solutionName: string, name?: string, version?: string): BookingTicketState[T] | null;
|
|
21
23
|
export declare enum BookingTicketHooks {
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { ProductList, OrderModule } from "../../modules";
|
|
2
|
+
import { BookingContextModule } from "../../modules/BookingContext";
|
|
2
3
|
import { CustomerModule } from "../../modules/Customer";
|
|
3
4
|
import { SalesSummaryModule } from "../../modules/SalesSummary";
|
|
4
5
|
import { ScheduleModule } from "../../modules/Schedule";
|
|
@@ -20,6 +21,8 @@ export function createBookingTicketModule(moduleName, solutionName, name, versio
|
|
|
20
21
|
return new ScheduleModule("".concat(solutionName, "_").concat(name || moduleName), version);
|
|
21
22
|
case 'customer':
|
|
22
23
|
return new CustomerModule("".concat(solutionName, "_").concat(name || moduleName), version);
|
|
24
|
+
case 'bookingContext':
|
|
25
|
+
return new BookingContextModule("".concat(solutionName, "_").concat(name || moduleName), version);
|
|
23
26
|
default:
|
|
24
27
|
return null;
|
|
25
28
|
}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { BookingCalcContext } from '../../../modules/BookingContext';
|
|
2
|
+
import type { ProductData } from '../../../modules/Product/types';
|
|
3
|
+
import type { OrderProduct, OrderProductIdentity, AddProductBookingInput } from '../../../modules/Order/types';
|
|
4
|
+
/**
|
|
5
|
+
* cart.addProduct 两阶段决策(与 ticketBooking `handleSelectProduct` 对齐):
|
|
6
|
+
*
|
|
7
|
+
* 1. `requiresDetail`:规格 / SKU / 套餐 / Session / 称重弹窗(门禁:`isOpenDetailModal` / `cartDetailValue` / `open_sold_weight`)
|
|
8
|
+
* 2. `requiresBookingEdit`:资源 / 时间编辑抽屉(门禁:`getIsAutoClose` on prepared cacheItem)
|
|
9
|
+
* 3. `add`:两关均通过,直接 transform + 加车
|
|
10
|
+
*/
|
|
11
|
+
export type AddProductDecision = {
|
|
12
|
+
action: 'add';
|
|
13
|
+
cacheItem: any;
|
|
14
|
+
} | {
|
|
15
|
+
action: 'requiresDetail';
|
|
16
|
+
payload: AddProductRequiresDetailPayload;
|
|
17
|
+
} | {
|
|
18
|
+
action: 'requiresBookingEdit';
|
|
19
|
+
cacheItem: any;
|
|
20
|
+
payload: AddProductRequiresBookingEditPayload;
|
|
21
|
+
};
|
|
22
|
+
/** 资源 / 时间编辑抽屉所需的最小 payload。 */
|
|
23
|
+
export interface AddProductRequiresBookingEditPayload {
|
|
24
|
+
cacheItem: any;
|
|
25
|
+
customerId?: number | string;
|
|
26
|
+
date: string | null;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* 加车主决策:对齐 `handleSelectProduct` 两段分支。
|
|
30
|
+
*/
|
|
31
|
+
export declare function decideAddProduct(item: any, ctx?: AddProductDecideContext): AddProductDecision;
|
|
32
|
+
/**
|
|
33
|
+
* 规格弹窗 callback 后的第二段决策(对齐 `handleBooking4Service` 内 `cacheItem.autoClose` 分支)。
|
|
34
|
+
*/
|
|
35
|
+
export declare function decideAfterDetail(cacheItem: any, ctx?: AddProductDecideContext): AddProductDecision;
|
|
36
|
+
/**
|
|
37
|
+
* @deprecated 请用 `decideAddProduct`;保留兼容:autoClose=true 仅表示可直接加车(action=add)。
|
|
38
|
+
*/
|
|
39
|
+
export interface AddProductRequiresDetailPayload {
|
|
40
|
+
item: ProductData | Record<string, any>;
|
|
41
|
+
/** UI 需展示的子弹窗开关。 */
|
|
42
|
+
showConfig: {
|
|
43
|
+
option: boolean;
|
|
44
|
+
session: boolean;
|
|
45
|
+
variant: boolean;
|
|
46
|
+
package: boolean;
|
|
47
|
+
number: boolean;
|
|
48
|
+
};
|
|
49
|
+
/** 仅 session 商品(且无 variant/option/package)→ true,UI 可只渲染 session 选择。 */
|
|
50
|
+
isOnlySession: boolean;
|
|
51
|
+
/** 0/1,与 info2 `getIsEject` 等价含义。 */
|
|
52
|
+
isEject: 0 | 1;
|
|
53
|
+
/** 当前选中客户 id(透传给 detail 弹窗用)。 */
|
|
54
|
+
customerId?: number | string;
|
|
55
|
+
/** 当前选择的日期。 */
|
|
56
|
+
date: string | null;
|
|
57
|
+
/** 透传完整商品数据,UI 渲染时直接用。 */
|
|
58
|
+
productData: ProductData | Record<string, any>;
|
|
59
|
+
}
|
|
60
|
+
export interface AddProductDecideContext extends BookingCalcContext {
|
|
61
|
+
type?: 'select' | 'detail';
|
|
62
|
+
quantity?: number;
|
|
63
|
+
customerId?: number | string;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* 统一补齐预约商品的运行态字段。
|
|
67
|
+
*
|
|
68
|
+
* 新链路不再让决策和提交各自重建 cacheItem;这里作为唯一入口补齐
|
|
69
|
+
* `_extend.resource / capacity / startDate / endDate` 等后续 booking mapper 需要的字段。
|
|
70
|
+
*/
|
|
71
|
+
export declare function prepareBookingCacheItem(cacheItem: any, ctx?: AddProductDecideContext): any;
|
|
72
|
+
export declare function decideAutoClose(item: any, ctx?: AddProductDecideContext): {
|
|
73
|
+
autoClose: boolean;
|
|
74
|
+
cacheItem?: any;
|
|
75
|
+
};
|
|
76
|
+
/**
|
|
77
|
+
* 替代 info2 `getIsEject`:商品是否需要弹窗(含 type='detail' / option_group / bundle_group / variant / session / sold_by_weight)。
|
|
78
|
+
*/
|
|
79
|
+
export declare function getIsEject(item: any, type?: 'select' | 'detail'): 0 | 1;
|
|
80
|
+
/** 仅 session 商品(且没有 variant/option/package)。 */
|
|
81
|
+
export declare function getIsOnlySession(item: any): boolean;
|
|
82
|
+
/**
|
|
83
|
+
* 拼装 requiresDetail payload;showConfig 与 info2 弹窗内部判断一致。
|
|
84
|
+
*/
|
|
85
|
+
export declare function buildRequiresDetailPayload(item: any, ctx?: AddProductDecideContext): AddProductRequiresDetailPayload;
|
|
86
|
+
/**
|
|
87
|
+
* 用 item.cartDetailValue 拼装一个 cacheItem 雏形(与 info2 `handleDirectAddService` 等价路径)。
|
|
88
|
+
* 这里只补 `_extend.start_date / quantity / other` 等运行态字段;后续走 getProductExtend 才会补齐资源 / 时间。
|
|
89
|
+
*/
|
|
90
|
+
export declare function buildCacheItemFromCartDetail(item: any, ctx?: AddProductDecideContext): any;
|
|
91
|
+
/**
|
|
92
|
+
* 用 Info2 callback 的 (e, extension_type, detail) 拼装 cacheItem。
|
|
93
|
+
*
|
|
94
|
+
* 保留 detail._extend 中的 pricing / note(规格弹窗改价、备注等),
|
|
95
|
+
* 再叠加 session 时间、ctx.quantity 等运行态字段;other 以 callback `e` 为准。
|
|
96
|
+
*/
|
|
97
|
+
export declare function buildCacheItemFromDetail(item: any, detailResult: {
|
|
98
|
+
e: any;
|
|
99
|
+
extension_type?: any;
|
|
100
|
+
detail?: any;
|
|
101
|
+
}, ctx?: AddProductDecideContext): any;
|
|
102
|
+
/**
|
|
103
|
+
* `transformDetailToProductAndBooking`:把 cacheItem 拆成 OS `addProductToOrder` 所需的 `(product, booking)`。
|
|
104
|
+
*
|
|
105
|
+
* - `product` 走 `transformBaseProductToOrderProduct`(沿用 BaseSales 现有 mapper)。
|
|
106
|
+
* - `booking` 走 `cacheItemToBookingInput`(严格按 TEMP_ORDER_FIELDS_SUMMARY.md 协议)。
|
|
107
|
+
* - 普通商品(无 duration / 无 schedules)不产 booking,与 info2 一致。
|
|
108
|
+
*/
|
|
109
|
+
export declare function transformDetailToProductAndBooking(cacheItem: any, ctx?: AddProductDecideContext): {
|
|
110
|
+
product: Partial<OrderProduct> & OrderProductIdentity;
|
|
111
|
+
booking?: AddProductBookingInput;
|
|
112
|
+
cacheItem: any;
|
|
113
|
+
};
|
|
@@ -0,0 +1,346 @@
|
|
|
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
|
+
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
|
+
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 _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
5
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
|
|
6
|
+
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
7
|
+
import dayjs from 'dayjs';
|
|
8
|
+
import { cacheItemToBookingInput, derivePresetStartTimeFromDate, getProductExtend, getIsAutoClose, isSessionProduct, isBookingProduct, applySessionTimesToExtend, hasActualResourceSelection, productNeedsResourceExtend } from "../../../modules/BookingContext";
|
|
9
|
+
import { transformBaseProductToOrderProduct } from "../../BaseSales/utils/transformBaseProductToOrderProduct";
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* cart.addProduct 两阶段决策(与 ticketBooking `handleSelectProduct` 对齐):
|
|
13
|
+
*
|
|
14
|
+
* 1. `requiresDetail`:规格 / SKU / 套餐 / Session / 称重弹窗(门禁:`isOpenDetailModal` / `cartDetailValue` / `open_sold_weight`)
|
|
15
|
+
* 2. `requiresBookingEdit`:资源 / 时间编辑抽屉(门禁:`getIsAutoClose` on prepared cacheItem)
|
|
16
|
+
* 3. `add`:两关均通过,直接 transform + 加车
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
/** 资源 / 时间编辑抽屉所需的最小 payload。 */
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* 第一段:是否需要打开规格 / SKU 详情弹窗(与 addService `handleSelectProduct` 一致,不用 `getIsEject` 做门禁)。
|
|
23
|
+
*/
|
|
24
|
+
function needsSpecDetailModal(item) {
|
|
25
|
+
if (item !== null && item !== void 0 && item.open_sold_weight) return true;
|
|
26
|
+
if (item !== null && item !== void 0 && item.isOpenDetailModal) return true;
|
|
27
|
+
if (!(item !== null && item !== void 0 && item.cartDetailValue)) return true;
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* 第二段:预约商品是否仍需打开资源 / 时间编辑(与 info2 `cacheItem.autoClose` 等价)。
|
|
33
|
+
*/
|
|
34
|
+
function needsBookingEdit(cacheItem, ctx) {
|
|
35
|
+
if (isNormalBookingProduct(cacheItem)) return false;
|
|
36
|
+
var isAutoAllocationOn = (ctx === null || ctx === void 0 ? void 0 : ctx.isAutoAllocationOn) || function () {
|
|
37
|
+
return true;
|
|
38
|
+
};
|
|
39
|
+
return !getIsAutoClose(cacheItem, isAutoAllocationOn);
|
|
40
|
+
}
|
|
41
|
+
function buildRequiresBookingEditPayload(cacheItem, ctx) {
|
|
42
|
+
return {
|
|
43
|
+
cacheItem: cacheItem,
|
|
44
|
+
customerId: ctx === null || ctx === void 0 ? void 0 : ctx.customerId,
|
|
45
|
+
date: typeof (ctx === null || ctx === void 0 ? void 0 : ctx.date) === 'string' ? ctx.date : null
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* 加车主决策:对齐 `handleSelectProduct` 两段分支。
|
|
51
|
+
*/
|
|
52
|
+
export function decideAddProduct(item, ctx) {
|
|
53
|
+
var derivedCtx = withDerivedBookingCtx(ctx);
|
|
54
|
+
if (needsSpecDetailModal(item)) {
|
|
55
|
+
return {
|
|
56
|
+
action: 'requiresDetail',
|
|
57
|
+
payload: buildRequiresDetailPayload(item, derivedCtx)
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
var cacheItem = prepareBookingCacheItem(buildCacheItemFromCartDetail(item, derivedCtx), derivedCtx);
|
|
61
|
+
if (needsBookingEdit(cacheItem, derivedCtx)) {
|
|
62
|
+
return {
|
|
63
|
+
action: 'requiresBookingEdit',
|
|
64
|
+
cacheItem: cacheItem,
|
|
65
|
+
payload: buildRequiresBookingEditPayload(cacheItem, derivedCtx)
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
return {
|
|
69
|
+
action: 'add',
|
|
70
|
+
cacheItem: cacheItem
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* 规格弹窗 callback 后的第二段决策(对齐 `handleBooking4Service` 内 `cacheItem.autoClose` 分支)。
|
|
76
|
+
*/
|
|
77
|
+
export function decideAfterDetail(cacheItem, ctx) {
|
|
78
|
+
var derivedCtx = withDerivedBookingCtx(ctx);
|
|
79
|
+
var extended = prepareBookingCacheItem(cacheItem, derivedCtx);
|
|
80
|
+
if (needsBookingEdit(extended, derivedCtx)) {
|
|
81
|
+
return {
|
|
82
|
+
action: 'requiresBookingEdit',
|
|
83
|
+
cacheItem: extended,
|
|
84
|
+
payload: buildRequiresBookingEditPayload(extended, derivedCtx)
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
return {
|
|
88
|
+
action: 'add',
|
|
89
|
+
cacheItem: extended
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* @deprecated 请用 `decideAddProduct`;保留兼容:autoClose=true 仅表示可直接加车(action=add)。
|
|
95
|
+
*/
|
|
96
|
+
|
|
97
|
+
function isNormalBookingProduct(item) {
|
|
98
|
+
return !isBookingProduct(item);
|
|
99
|
+
}
|
|
100
|
+
function hasPreparedBookingExtend(cacheItem) {
|
|
101
|
+
var _ext$other;
|
|
102
|
+
// 场次/时间已写入但资源仍未选中时,须继续走 getProductExtend(对齐 info2 必定调用 getProductExtend)。
|
|
103
|
+
if (productNeedsResourceExtend(cacheItem) && !hasActualResourceSelection(cacheItem)) {
|
|
104
|
+
return false;
|
|
105
|
+
}
|
|
106
|
+
var ext = (cacheItem === null || cacheItem === void 0 ? void 0 : cacheItem._extend) || {};
|
|
107
|
+
var hasResourceState = Boolean(hasActualResourceSelection(cacheItem) && ext.capacity && (ext.endDate || ext.end_date));
|
|
108
|
+
var hasSessionState = Boolean(isSessionProduct(cacheItem) && ((_ext$other = ext.other) === null || _ext$other === void 0 ? void 0 : _ext$other.session) && ext.start_time && (ext.end_time || ext.endDate));
|
|
109
|
+
var hasMultiDayState = Boolean(isNormalBookingProduct(cacheItem) === false && isMultiDayLike(cacheItem));
|
|
110
|
+
var hasExplicitTimeState = Boolean(ext.duration && (ext.start_date || ext.startDate) && ext.start_time && (ext.end_date && ext.end_time || ext.endDate));
|
|
111
|
+
return hasResourceState || hasSessionState || hasMultiDayState || hasExplicitTimeState;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/** 弹窗 / Host 使用的日历日,与 ticketBooking `state.date.format('YYYY-MM-DD')` 对齐。 */
|
|
115
|
+
function formatBookingDateForUI(date) {
|
|
116
|
+
if (date == null || date === '') return null;
|
|
117
|
+
var parsed = dayjs(date);
|
|
118
|
+
return parsed.isValid() ? parsed.format('YYYY-MM-DD') : null;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/** 补齐 presetStartTime(decideAutoClose / transform 与 BookingTicket.buildAddProductCtx 共用)。 */
|
|
122
|
+
function withDerivedBookingCtx(ctx) {
|
|
123
|
+
var _ctx$presetStartTime;
|
|
124
|
+
if (!ctx) return {};
|
|
125
|
+
return _objectSpread(_objectSpread({}, ctx), {}, {
|
|
126
|
+
presetStartTime: (_ctx$presetStartTime = ctx.presetStartTime) !== null && _ctx$presetStartTime !== void 0 ? _ctx$presetStartTime : derivePresetStartTimeFromDate(ctx.date)
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
function isMultiDayLike(cacheItem) {
|
|
130
|
+
var _cacheItem$duration;
|
|
131
|
+
var ext = (cacheItem === null || cacheItem === void 0 ? void 0 : cacheItem._extend) || {};
|
|
132
|
+
return Boolean((cacheItem === null || cacheItem === void 0 || (_cacheItem$duration = cacheItem.duration) === null || _cacheItem$duration === void 0 ? void 0 : _cacheItem$duration.type) === 'days' && ext.duration && ext.start_date && ext.end_date);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* 统一补齐预约商品的运行态字段。
|
|
137
|
+
*
|
|
138
|
+
* 新链路不再让决策和提交各自重建 cacheItem;这里作为唯一入口补齐
|
|
139
|
+
* `_extend.resource / capacity / startDate / endDate` 等后续 booking mapper 需要的字段。
|
|
140
|
+
*/
|
|
141
|
+
export function prepareBookingCacheItem(cacheItem, ctx) {
|
|
142
|
+
if (isNormalBookingProduct(cacheItem) || hasPreparedBookingExtend(cacheItem)) {
|
|
143
|
+
return cacheItem;
|
|
144
|
+
}
|
|
145
|
+
return getProductExtend({
|
|
146
|
+
cacheItem: cacheItem,
|
|
147
|
+
ctx: withDerivedBookingCtx(ctx),
|
|
148
|
+
isDisabledTime: true
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
export function decideAutoClose(item, ctx) {
|
|
152
|
+
var decision = decideAddProduct(item, ctx);
|
|
153
|
+
if (decision.action === 'add') {
|
|
154
|
+
return {
|
|
155
|
+
autoClose: true,
|
|
156
|
+
cacheItem: decision.cacheItem
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
if (decision.action === 'requiresBookingEdit') {
|
|
160
|
+
return {
|
|
161
|
+
autoClose: false,
|
|
162
|
+
cacheItem: decision.cacheItem
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
return {
|
|
166
|
+
autoClose: false
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* 替代 info2 `getIsEject`:商品是否需要弹窗(含 type='detail' / option_group / bundle_group / variant / session / sold_by_weight)。
|
|
172
|
+
*/
|
|
173
|
+
export function getIsEject(item) {
|
|
174
|
+
var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'select';
|
|
175
|
+
var isSession = isSessionProduct(item);
|
|
176
|
+
var isSoldByWeight = Boolean(item === null || item === void 0 ? void 0 : item.open_sold_weight);
|
|
177
|
+
var need = type === 'detail' || ((item === null || item === void 0 ? void 0 : item.bundle_group_count) || 0) > 0 || ((item === null || item === void 0 ? void 0 : item.option_group_count) || 0) > 0 || ((item === null || item === void 0 ? void 0 : item.is_variant) || 0) > 0 || isSession || isSoldByWeight;
|
|
178
|
+
return need ? 1 : 0;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
/** 仅 session 商品(且没有 variant/option/package)。 */
|
|
182
|
+
export function getIsOnlySession(item) {
|
|
183
|
+
var isSession = isSessionProduct(item);
|
|
184
|
+
return !(((item === null || item === void 0 ? void 0 : item.bundle_group_count) || 0) > 0 || ((item === null || item === void 0 ? void 0 : item.option_group_count) || 0) > 0 || ((item === null || item === void 0 ? void 0 : item.is_variant) || 0) > 0) && isSession;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
/**
|
|
188
|
+
* 拼装 requiresDetail payload;showConfig 与 info2 弹窗内部判断一致。
|
|
189
|
+
*/
|
|
190
|
+
export function buildRequiresDetailPayload(item, ctx) {
|
|
191
|
+
var isOnlySession = getIsOnlySession(item);
|
|
192
|
+
var isEject = getIsEject(item, (ctx === null || ctx === void 0 ? void 0 : ctx.type) || 'select');
|
|
193
|
+
return {
|
|
194
|
+
item: item,
|
|
195
|
+
showConfig: {
|
|
196
|
+
option: ((item === null || item === void 0 ? void 0 : item.option_group_count) || 0) > 0,
|
|
197
|
+
session: isSessionProduct(item),
|
|
198
|
+
variant: ((item === null || item === void 0 ? void 0 : item.is_variant) || 0) > 0,
|
|
199
|
+
package: ((item === null || item === void 0 ? void 0 : item.bundle_group_count) || 0) > 0,
|
|
200
|
+
number: Boolean(item === null || item === void 0 ? void 0 : item.open_sold_weight)
|
|
201
|
+
},
|
|
202
|
+
isOnlySession: isOnlySession,
|
|
203
|
+
isEject: isEject ? 1 : 0,
|
|
204
|
+
customerId: ctx === null || ctx === void 0 ? void 0 : ctx.customerId,
|
|
205
|
+
date: formatBookingDateForUI(ctx === null || ctx === void 0 ? void 0 : ctx.date),
|
|
206
|
+
productData: item
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
/**
|
|
211
|
+
* 用 item.cartDetailValue 拼装一个 cacheItem 雏形(与 info2 `handleDirectAddService` 等价路径)。
|
|
212
|
+
* 这里只补 `_extend.start_date / quantity / other` 等运行态字段;后续走 getProductExtend 才会补齐资源 / 时间。
|
|
213
|
+
*/
|
|
214
|
+
export function buildCacheItemFromCartDetail(item, ctx) {
|
|
215
|
+
var _item$id, _ref, _ctx$quantity, _item$_extend$price, _item$_extend;
|
|
216
|
+
var cartDetailValue = item.cartDetailValue || {};
|
|
217
|
+
var other = JSON.parse(JSON.stringify(cartDetailValue || {}));
|
|
218
|
+
other.session = cartDetailValue.session;
|
|
219
|
+
/** 列表/接口可能只带 product_id 不带 id,勿用 item.id 覆盖掉已有 product_id */
|
|
220
|
+
var resolvedId = (_item$id = item.id) !== null && _item$id !== void 0 ? _item$id : item.product_id;
|
|
221
|
+
var extend = applySessionTimesToExtend(item, {
|
|
222
|
+
start_date: (ctx === null || ctx === void 0 ? void 0 : ctx.date) || undefined,
|
|
223
|
+
/** 列表连点 / 防抖合并时以 ctx.quantity 为准,避免 cartDetailValue 默认 1 盖掉合并数量 */
|
|
224
|
+
quantity: (_ref = (_ctx$quantity = ctx === null || ctx === void 0 ? void 0 : ctx.quantity) !== null && _ctx$quantity !== void 0 ? _ctx$quantity : cartDetailValue === null || cartDetailValue === void 0 ? void 0 : cartDetailValue.quantity) !== null && _ref !== void 0 ? _ref : 1,
|
|
225
|
+
product_name: item.title,
|
|
226
|
+
other: other,
|
|
227
|
+
isNormalProduct: !isBookingProduct(item),
|
|
228
|
+
price: (_item$_extend$price = item === null || item === void 0 || (_item$_extend = item._extend) === null || _item$_extend === void 0 ? void 0 : _item$_extend.price) !== null && _item$_extend$price !== void 0 ? _item$_extend$price : item === null || item === void 0 ? void 0 : item.price
|
|
229
|
+
}, {
|
|
230
|
+
date: ctx === null || ctx === void 0 ? void 0 : ctx.date
|
|
231
|
+
});
|
|
232
|
+
return _objectSpread(_objectSpread({}, item), {}, {
|
|
233
|
+
id: resolvedId,
|
|
234
|
+
product_id: resolvedId,
|
|
235
|
+
_key: cartDetailValue.key,
|
|
236
|
+
_extend: extend,
|
|
237
|
+
new: 1
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
/**
|
|
242
|
+
* 用 Info2 callback 的 (e, extension_type, detail) 拼装 cacheItem。
|
|
243
|
+
*
|
|
244
|
+
* 保留 detail._extend 中的 pricing / note(规格弹窗改价、备注等),
|
|
245
|
+
* 再叠加 session 时间、ctx.quantity 等运行态字段;other 以 callback `e` 为准。
|
|
246
|
+
*/
|
|
247
|
+
export function buildCacheItemFromDetail(item, detailResult, ctx) {
|
|
248
|
+
var _detailResult$e, _currentItem$id, _detail$extension_typ, _ref2, _ref3, _ctx$quantity2, _detailResult$e2, _ref4, _detailExtend$price, _currentItem$title, _detailExtend$note, _detailResult$e3;
|
|
249
|
+
var _currentItem = detailResult.detail || item;
|
|
250
|
+
var _detail = _currentItem;
|
|
251
|
+
var detailExtend = (_detail === null || _detail === void 0 ? void 0 : _detail._extend) || {};
|
|
252
|
+
var other = JSON.parse(JSON.stringify(detailResult.e || {}));
|
|
253
|
+
other.session = (_detailResult$e = detailResult.e) === null || _detailResult$e === void 0 ? void 0 : _detailResult$e.session;
|
|
254
|
+
var resolvedId = (_currentItem$id = _currentItem.id) !== null && _currentItem$id !== void 0 ? _currentItem$id : _currentItem.product_id;
|
|
255
|
+
var mergedItem = _objectSpread(_objectSpread(_objectSpread({}, item), _detail), {}, {
|
|
256
|
+
extension_type: (_detail$extension_typ = _detail.extension_type) !== null && _detail$extension_typ !== void 0 ? _detail$extension_typ : item.extension_type
|
|
257
|
+
});
|
|
258
|
+
var runtimeExtend = applySessionTimesToExtend(mergedItem, {
|
|
259
|
+
start_date: (ctx === null || ctx === void 0 ? void 0 : ctx.date) || detailExtend.start_date || undefined,
|
|
260
|
+
quantity: (_ref2 = (_ref3 = (_ctx$quantity2 = ctx === null || ctx === void 0 ? void 0 : ctx.quantity) !== null && _ctx$quantity2 !== void 0 ? _ctx$quantity2 : (_detailResult$e2 = detailResult.e) === null || _detailResult$e2 === void 0 ? void 0 : _detailResult$e2.quantity) !== null && _ref3 !== void 0 ? _ref3 : detailExtend.quantity) !== null && _ref2 !== void 0 ? _ref2 : 1,
|
|
261
|
+
price: (_ref4 = (_detailExtend$price = detailExtend.price) !== null && _detailExtend$price !== void 0 ? _detailExtend$price : _detail === null || _detail === void 0 ? void 0 : _detail.price) !== null && _ref4 !== void 0 ? _ref4 : item === null || item === void 0 ? void 0 : item.price,
|
|
262
|
+
product_name: (_currentItem$title = _currentItem.title) !== null && _currentItem$title !== void 0 ? _currentItem$title : detailExtend.product_name,
|
|
263
|
+
other: other,
|
|
264
|
+
isNormalProduct: !isBookingProduct(mergedItem)
|
|
265
|
+
}, {
|
|
266
|
+
date: ctx === null || ctx === void 0 ? void 0 : ctx.date
|
|
267
|
+
});
|
|
268
|
+
var extend = _objectSpread(_objectSpread(_objectSpread({}, detailExtend), runtimeExtend), {}, {
|
|
269
|
+
other: other
|
|
270
|
+
});
|
|
271
|
+
var note = (_detailExtend$note = detailExtend.note) !== null && _detailExtend$note !== void 0 ? _detailExtend$note : _detail === null || _detail === void 0 ? void 0 : _detail.note;
|
|
272
|
+
return _objectSpread(_objectSpread(_objectSpread({}, _detail), {}, {
|
|
273
|
+
id: resolvedId,
|
|
274
|
+
product_id: resolvedId,
|
|
275
|
+
extension_type: mergedItem.extension_type,
|
|
276
|
+
_key: (_detailResult$e3 = detailResult.e) === null || _detailResult$e3 === void 0 ? void 0 : _detailResult$e3.key
|
|
277
|
+
}, note != null && note !== '' ? {
|
|
278
|
+
note: String(note)
|
|
279
|
+
} : {}), {}, {
|
|
280
|
+
_extend: extend,
|
|
281
|
+
new: 1
|
|
282
|
+
});
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
/**
|
|
286
|
+
* `transformDetailToProductAndBooking`:把 cacheItem 拆成 OS `addProductToOrder` 所需的 `(product, booking)`。
|
|
287
|
+
*
|
|
288
|
+
* - `product` 走 `transformBaseProductToOrderProduct`(沿用 BaseSales 现有 mapper)。
|
|
289
|
+
* - `booking` 走 `cacheItemToBookingInput`(严格按 TEMP_ORDER_FIELDS_SUMMARY.md 协议)。
|
|
290
|
+
* - 普通商品(无 duration / 无 schedules)不产 booking,与 info2 一致。
|
|
291
|
+
*/
|
|
292
|
+
export function transformDetailToProductAndBooking(cacheItem, ctx) {
|
|
293
|
+
var preparedCacheItem = prepareBookingCacheItem(cacheItem, withDerivedBookingCtx(ctx));
|
|
294
|
+
var payload = buildBasePayloadFromCacheItem(preparedCacheItem, ctx);
|
|
295
|
+
var productInput = transformBaseProductToOrderProduct({
|
|
296
|
+
payload: payload,
|
|
297
|
+
sourceProduct: preparedCacheItem
|
|
298
|
+
});
|
|
299
|
+
if (!productInput) {
|
|
300
|
+
throw new Error('[BookingTicket] transformDetailToProductAndBooking: product transform failed (missing numeric item.id / item.product_id)');
|
|
301
|
+
}
|
|
302
|
+
var isNormalProduct = isNormalBookingProduct(preparedCacheItem);
|
|
303
|
+
var booking;
|
|
304
|
+
if (!isNormalProduct) {
|
|
305
|
+
booking = cacheItemToBookingInput(preparedCacheItem, {
|
|
306
|
+
bookingConfig: ctx === null || ctx === void 0 ? void 0 : ctx.bookingConfig
|
|
307
|
+
});
|
|
308
|
+
}
|
|
309
|
+
return {
|
|
310
|
+
product: productInput,
|
|
311
|
+
booking: booking,
|
|
312
|
+
cacheItem: preparedCacheItem
|
|
313
|
+
};
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
/**
|
|
317
|
+
* 把 cacheItem._extend.other 中的字段 + 顶层运行态拼成 `BaseProductDetailPayload`。
|
|
318
|
+
*/
|
|
319
|
+
function buildBasePayloadFromCacheItem(cacheItem, ctx) {
|
|
320
|
+
var _cacheItem$_extend, _cacheItem$_extend$qu, _cacheItem$_extend2, _cacheItem$product_id, _cacheItem$id, _ref5, _other$product_varian, _extend$skuValue, _extend$_skuValue, _extend$price, _extend$price2;
|
|
321
|
+
var other = (cacheItem === null || cacheItem === void 0 || (_cacheItem$_extend = cacheItem._extend) === null || _cacheItem$_extend === void 0 ? void 0 : _cacheItem$_extend.other) || {};
|
|
322
|
+
var quantity = (ctx === null || ctx === void 0 ? void 0 : ctx.quantity) != null && ctx.quantity > 0 ? ctx.quantity : (_cacheItem$_extend$qu = cacheItem === null || cacheItem === void 0 || (_cacheItem$_extend2 = cacheItem._extend) === null || _cacheItem$_extend2 === void 0 ? void 0 : _cacheItem$_extend2.quantity) !== null && _cacheItem$_extend$qu !== void 0 ? _cacheItem$_extend$qu : 1;
|
|
323
|
+
var resolvedPid = (_cacheItem$product_id = cacheItem === null || cacheItem === void 0 ? void 0 : cacheItem.product_id) !== null && _cacheItem$product_id !== void 0 ? _cacheItem$product_id : cacheItem === null || cacheItem === void 0 ? void 0 : cacheItem.id;
|
|
324
|
+
var extend = (cacheItem === null || cacheItem === void 0 ? void 0 : cacheItem._extend) || {};
|
|
325
|
+
return {
|
|
326
|
+
id: (_cacheItem$id = cacheItem === null || cacheItem === void 0 ? void 0 : cacheItem.id) !== null && _cacheItem$id !== void 0 ? _cacheItem$id : cacheItem === null || cacheItem === void 0 ? void 0 : cacheItem.product_id,
|
|
327
|
+
product_id: resolvedPid,
|
|
328
|
+
variant_id: (_ref5 = (_other$product_varian = other === null || other === void 0 ? void 0 : other.product_variant_id) !== null && _other$product_varian !== void 0 ? _other$product_varian : other === null || other === void 0 ? void 0 : other.variant_id) !== null && _ref5 !== void 0 ? _ref5 : 0,
|
|
329
|
+
quantity: quantity,
|
|
330
|
+
option: (other === null || other === void 0 ? void 0 : other.option) || [],
|
|
331
|
+
bundle: (other === null || other === void 0 ? void 0 : other.bundle) || (extend === null || extend === void 0 || (_extend$skuValue = extend.skuValue) === null || _extend$skuValue === void 0 ? void 0 : _extend$skuValue.bundle) || (extend === null || extend === void 0 || (_extend$_skuValue = extend._skuValue) === null || _extend$_skuValue === void 0 ? void 0 : _extend$_skuValue.bundle) || [],
|
|
332
|
+
unique: other === null || other === void 0 ? void 0 : other.unique,
|
|
333
|
+
session: other === null || other === void 0 ? void 0 : other.session,
|
|
334
|
+
note: extend === null || extend === void 0 ? void 0 : extend.note,
|
|
335
|
+
price: (_extend$price = extend === null || extend === void 0 ? void 0 : extend.price) !== null && _extend$price !== void 0 ? _extend$price : cacheItem === null || cacheItem === void 0 ? void 0 : cacheItem.price,
|
|
336
|
+
selling_price: (_extend$price2 = extend === null || extend === void 0 ? void 0 : extend.price) !== null && _extend$price2 !== void 0 ? _extend$price2 : cacheItem === null || cacheItem === void 0 ? void 0 : cacheItem.price,
|
|
337
|
+
line_total: extend === null || extend === void 0 ? void 0 : extend.total,
|
|
338
|
+
total: extend === null || extend === void 0 ? void 0 : extend.total,
|
|
339
|
+
origin_total: extend === null || extend === void 0 ? void 0 : extend.origin_total,
|
|
340
|
+
price_override: extend === null || extend === void 0 ? void 0 : extend.priceOverride,
|
|
341
|
+
bundle_edit: extend === null || extend === void 0 ? void 0 : extend.bundle_edit,
|
|
342
|
+
discount_reason: extend === null || extend === void 0 ? void 0 : extend.discount_reason,
|
|
343
|
+
discount_list: cacheItem === null || cacheItem === void 0 ? void 0 : cacheItem.discount_list,
|
|
344
|
+
_extend: extend
|
|
345
|
+
};
|
|
346
|
+
}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { Module, ModuleOptions, PisellCore } from '../../types';
|
|
2
2
|
import { BaseModule } from '../../modules/BaseModule';
|
|
3
3
|
import { ScanOrderAddLogParams, ScanOrderAvailabilityInfo, ScanOrderOrderProduct, ScanOrderOrderProductIdentity, ScanOrderScanCodeResult } from './types';
|
|
4
|
-
import type {
|
|
4
|
+
import type { UpdateOrderProductParams } from '../../modules/Order/types';
|
|
5
5
|
import type { Discount } from '../../modules/Discount/types';
|
|
6
6
|
import { type CartItemSummary, type PaxInfo, type QuantityCheckResult, type QuantityLimitResult } from '../../model/strategy/adapter/itemRule';
|
|
7
7
|
import type { StrategyConfig } from '../../model/strategy/type';
|
|
8
|
+
import type { ProductData } from '../../modules/Product/types';
|
|
8
9
|
export * from './types';
|
|
9
10
|
interface ScanOrderItemRuleRuntimeConfig {
|
|
10
11
|
strategyConfigs?: StrategyConfig[];
|
|
@@ -36,11 +37,14 @@ export declare class ScanOrderImpl extends BaseModule implements Module {
|
|
|
36
37
|
private customerLoginRefreshIdInFlight;
|
|
37
38
|
private static readonly PISELL1_LOGIN_SUCCESS;
|
|
38
39
|
private getScanOrderLoggerContext;
|
|
40
|
+
private safeStringify;
|
|
41
|
+
private pickErrorMessage;
|
|
39
42
|
private serializeError;
|
|
40
43
|
private addScanOrderLog;
|
|
41
44
|
private logMethodStart;
|
|
42
45
|
private logMethodSuccess;
|
|
43
46
|
private logMethodError;
|
|
47
|
+
private assertProductListLoaded;
|
|
44
48
|
addLog(params: ScanOrderAddLogParams): Promise<void>;
|
|
45
49
|
private normalizeCustomerId;
|
|
46
50
|
private resolveCustomerIdFromLoginPayload;
|
|
@@ -86,10 +90,12 @@ export declare class ScanOrderImpl extends BaseModule implements Module {
|
|
|
86
90
|
onCustomerLogin(params: {
|
|
87
91
|
customerId: number;
|
|
88
92
|
}): Promise<void>;
|
|
93
|
+
private findReservationRuleResource;
|
|
94
|
+
private buildScanOrderResourceMetadata;
|
|
89
95
|
private buildSubmitPayloadEnhancer;
|
|
90
96
|
submitScanOrder<T = any>(): Promise<T>;
|
|
91
97
|
addProductToOrder(product: Partial<ScanOrderOrderProduct> & ScanOrderOrderProductIdentity): Promise<import("../../modules/Order/types").OrderProduct[]>;
|
|
92
|
-
|
|
98
|
+
updateOrderProduct(params: UpdateOrderProductParams): Promise<import("../../modules/Order/types").OrderProduct[]>;
|
|
93
99
|
/**
|
|
94
100
|
* 设置单行商品备注(与整单 `updateTempOrderNote` 区分)。
|
|
95
101
|
* 多行同 SKU 时必须传入与删除/更新一致的 identity(如 `identity_key`)。
|
|
@@ -120,7 +126,7 @@ export declare class ScanOrderImpl extends BaseModule implements Module {
|
|
|
120
126
|
orderAmount: number;
|
|
121
127
|
orderItems: any[];
|
|
122
128
|
}>;
|
|
123
|
-
getProductList(): Promise<
|
|
129
|
+
getProductList(): Promise<ProductData[]>;
|
|
124
130
|
getOtherParams(): Record<string, any>;
|
|
125
131
|
setOtherParams(params: Record<string, any>, { cover }?: {
|
|
126
132
|
cover?: boolean;
|