@pisell/private-materials 6.12.162 → 6.12.164

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.
Files changed (54) hide show
  1. package/build/lowcode/assets-daily.json +11 -11
  2. package/build/lowcode/assets-dev.json +2 -2
  3. package/build/lowcode/assets-prod.json +11 -11
  4. package/build/lowcode/meta.js +1 -1
  5. package/build/lowcode/preview.js +1 -1
  6. package/build/lowcode/render/default/view.js +18 -18
  7. package/build/lowcode/view.js +18 -18
  8. package/es/components/bigSale/components/ProductList/index.js +1 -1
  9. package/es/components/bigSale/dialog.js +5 -4
  10. package/es/components/bigSale/hooks/useSelectFloorMapResourceForBigSale.js +67 -24
  11. package/es/components/bigSale/templates/Standard/index.js +5 -3
  12. package/es/components/bigSale/utils/floorResourceSelection.js +106 -0
  13. package/es/components/bigSale/utils/orderIdentity.js +16 -0
  14. package/es/components/checkout/plugin.js +1 -1
  15. package/es/components/kioskSale/index.js +7 -2
  16. package/es/components/pay/toB/components/EFTPOS/index.js +1 -1
  17. package/es/components/ticketBooking/dialog.js +1 -1
  18. package/es/components/ticketBooking/hooks/pisellos/useProducts.js +1 -1
  19. package/es/plus/pisellReservation/utils/reservationTicketBookingHostParams.js +26 -1
  20. package/es/plus/productSelect/ProductCard/SkuCard/components/CardCom/index.js +23 -2
  21. package/es/plus/productSelect/ProductCard/SkuCard/components/CardWrapper/index.js +18 -1
  22. package/es/plus/saleDetail/tmpl/B/components/Pay/index.js +34 -24
  23. package/es/plus/salesSdk/context/SalesSdkCartContext.js +1 -1
  24. package/es/plus/salesSdk/normalProductDetail/NormalProductDetailHostRenderer.js +2 -2
  25. package/es/plus/salesSdk/services/refundPayments.js +1 -0
  26. package/es/plus/salesSdk/types.d.ts +9 -1
  27. package/es/pro/skuDetailModal/flow/presets.js +1 -1
  28. package/es/pro/skuDetailModal/index.js +11 -4
  29. package/es/pro/skuDetailModal/types.d.ts +5 -0
  30. package/es/pro/skuDetailModal/utils.js +2 -1
  31. package/lib/components/bigSale/components/ProductList/index.js +1 -1
  32. package/lib/components/bigSale/dialog.js +5 -4
  33. package/lib/components/bigSale/hooks/useSelectFloorMapResourceForBigSale.js +67 -24
  34. package/lib/components/bigSale/templates/Standard/index.js +5 -3
  35. package/lib/components/bigSale/utils/floorResourceSelection.js +110 -0
  36. package/lib/components/bigSale/utils/orderIdentity.js +16 -0
  37. package/lib/components/checkout/plugin.js +1 -1
  38. package/lib/components/kioskSale/index.js +7 -2
  39. package/lib/components/pay/toB/components/EFTPOS/index.js +1 -1
  40. package/lib/components/ticketBooking/dialog.js +1 -1
  41. package/lib/components/ticketBooking/hooks/pisellos/useProducts.js +1 -1
  42. package/lib/plus/pisellReservation/utils/reservationTicketBookingHostParams.js +26 -0
  43. package/lib/plus/productSelect/ProductCard/SkuCard/components/CardCom/index.js +23 -2
  44. package/lib/plus/productSelect/ProductCard/SkuCard/components/CardWrapper/index.js +18 -1
  45. package/lib/plus/saleDetail/tmpl/B/components/Pay/index.js +33 -23
  46. package/lib/plus/salesSdk/context/SalesSdkCartContext.js +1 -1
  47. package/lib/plus/salesSdk/normalProductDetail/NormalProductDetailHostRenderer.js +2 -2
  48. package/lib/plus/salesSdk/services/refundPayments.js +1 -0
  49. package/lib/plus/salesSdk/types.d.ts +9 -1
  50. package/lib/pro/skuDetailModal/flow/presets.js +1 -0
  51. package/lib/pro/skuDetailModal/index.js +10 -3
  52. package/lib/pro/skuDetailModal/types.d.ts +5 -0
  53. package/lib/pro/skuDetailModal/utils.js +2 -0
  54. package/package.json +3 -3
@@ -0,0 +1,110 @@
1
+ const require_objectSpread2 = require("../../../_virtual/_@oxc-project_runtime@0.122.0/helpers/objectSpread2.js");
2
+ const require_asyncToGenerator = require("../../../_virtual/_@oxc-project_runtime@0.122.0/helpers/asyncToGenerator.js");
3
+ //#region src/components/bigSale/utils/floorResourceSelection.ts
4
+ function normalizeIdentity(value) {
5
+ if (value === void 0 || value === null) return null;
6
+ const normalized = String(value).trim();
7
+ return normalized && normalized !== "0" ? normalized : null;
8
+ }
9
+ function resolveBookingResources(booking) {
10
+ return (Array.isArray(booking.resources) ? booking.resources : Array.isArray(booking.event_resources) ? booking.event_resources : []).filter((resource) => Boolean(resource) && typeof resource === "object");
11
+ }
12
+ function resolveProductUid(product) {
13
+ var _product$metadata$uni, _product$metadata;
14
+ return normalizeIdentity((_product$metadata$uni = (_product$metadata = product.metadata) === null || _product$metadata === void 0 ? void 0 : _product$metadata.unique_identification_number) !== null && _product$metadata$uni !== void 0 ? _product$metadata$uni : product.unique_identification_number);
15
+ }
16
+ function resolveBookingUid(booking) {
17
+ var _booking$metadata$uni, _booking$metadata;
18
+ return normalizeIdentity((_booking$metadata$uni = (_booking$metadata = booking.metadata) === null || _booking$metadata === void 0 ? void 0 : _booking$metadata.unique_identification_number) !== null && _booking$metadata$uni !== void 0 ? _booking$metadata$uni : booking.unique_identification_number);
19
+ }
20
+ /** 将选择 payload 归一为 seed / 换桌共同消费的桌台行。 */
21
+ function resolveSelectedReservationRow(selected) {
22
+ var _selected$resource$ra, _ref, _selected$resource$re, _selected$resource$fo, _ref2, _selected$resource$co, _ref3, _selected$resource$ma;
23
+ const raw = (_selected$resource$ra = selected.resource.raw) !== null && _selected$resource$ra !== void 0 ? _selected$resource$ra : selected.row;
24
+ const relationId = (_ref = (_selected$resource$re = selected.resource.relation_id) !== null && _selected$resource$re !== void 0 ? _selected$resource$re : selected.resource.id) !== null && _ref !== void 0 ? _ref : raw.id;
25
+ return require_objectSpread2._objectSpread2(require_objectSpread2._objectSpread2(require_objectSpread2._objectSpread2({}, selected.row), raw), {}, {
26
+ id: String(relationId),
27
+ form_id: (_selected$resource$fo = selected.resource.form_id) !== null && _selected$resource$fo !== void 0 ? _selected$resource$fo : raw.form_id,
28
+ code: (_ref2 = (_selected$resource$co = selected.resource.code) !== null && _selected$resource$co !== void 0 ? _selected$resource$co : raw.code) !== null && _ref2 !== void 0 ? _ref2 : String(relationId),
29
+ main_field: (_ref3 = (_selected$resource$ma = selected.resource.main_field) !== null && _selected$resource$ma !== void 0 ? _selected$resource$ma : raw.main_field) !== null && _ref3 !== void 0 ? _ref3 : selected.row.main_field
30
+ });
31
+ }
32
+ /** 选择 payload 中的资源主键,与 booking.resources[].relation_id 对齐。 */
33
+ function resolveSelectedFloorResourceId(selected) {
34
+ var _ref4, _selected$resource$re2;
35
+ return normalizeIdentity((_ref4 = (_selected$resource$re2 = selected.resource.relation_id) !== null && _selected$resource$re2 !== void 0 ? _selected$resource$re2 : selected.resource.id) !== null && _ref4 !== void 0 ? _ref4 : selected.row.id);
36
+ }
37
+ /** 当前 booking 是否已经绑定了本次选中的桌台。 */
38
+ function bookingUsesFloorResource(booking, resourceId) {
39
+ if (!resourceId) return false;
40
+ return resolveBookingResources(booking).some((resource) => normalizeIdentity(resource.relation_id) === resourceId);
41
+ }
42
+ /**
43
+ * 从 tempOrder 找出桌台 booking。
44
+ *
45
+ * 优先使用当前配置的桌台规则商品关联关系;历史数据无法关联时,再退回到带资源的
46
+ * 非 root booking。这样既兼容配置变更后的旧单,也不会把 root booking 当成桌台商品。
47
+ */
48
+ function resolveCurrentTableBookings(tempOrder, reservationRuleProduct) {
49
+ var _tempOrder$bookings, _reservationRuleProdu, _tempOrder$products;
50
+ if (!tempOrder) return [];
51
+ const nonRootBookings = ((_tempOrder$bookings = tempOrder.bookings) !== null && _tempOrder$bookings !== void 0 ? _tempOrder$bookings : []).filter((booking) => {
52
+ if (!booking || typeof booking !== "object") return false;
53
+ return Number(booking.parent_id) !== 0;
54
+ });
55
+ const resourceBookings = nonRootBookings.filter((booking) => resolveBookingResources(booking).some((resource) => Boolean(normalizeIdentity(resource.relation_id))));
56
+ const ruleProductId = normalizeIdentity((_reservationRuleProdu = reservationRuleProduct === null || reservationRuleProduct === void 0 ? void 0 : reservationRuleProduct.id) !== null && _reservationRuleProdu !== void 0 ? _reservationRuleProdu : reservationRuleProduct === null || reservationRuleProduct === void 0 ? void 0 : reservationRuleProduct.product_id);
57
+ if (!ruleProductId) return resourceBookings;
58
+ const linkedProductUids = /* @__PURE__ */ new Set();
59
+ const linkedBookingUids = /* @__PURE__ */ new Set();
60
+ for (const product of (_tempOrder$products = tempOrder.products) !== null && _tempOrder$products !== void 0 ? _tempOrder$products : []) {
61
+ var _booking_uid, _product$metadata2;
62
+ if (normalizeIdentity(product.product_id) !== ruleProductId) continue;
63
+ const productUid = resolveProductUid(product);
64
+ if (productUid) linkedProductUids.add(productUid);
65
+ const bookingUid = normalizeIdentity((_booking_uid = product.booking_uid) !== null && _booking_uid !== void 0 ? _booking_uid : (_product$metadata2 = product.metadata) === null || _product$metadata2 === void 0 ? void 0 : _product$metadata2.booking_uid);
66
+ if (bookingUid) linkedBookingUids.add(bookingUid);
67
+ }
68
+ const linkedBookings = nonRootBookings.filter((booking) => {
69
+ const productUid = normalizeIdentity(booking.product_uid);
70
+ const bookingUid = resolveBookingUid(booking);
71
+ return Boolean(productUid && linkedProductUids.has(productUid) || bookingUid && linkedBookingUids.has(bookingUid));
72
+ });
73
+ return Array.from(new Set([...linkedBookings, ...resourceBookings]));
74
+ }
75
+ /**
76
+ * 执行桌台选择分流。已落库订单永远不会进入 merge 回调;新订单命中已有
77
+ * 订单时仍优先 merge,否则对当前草稿已有桌台执行同桌不变或异桌替换。
78
+ */
79
+ function applyBigSaleFloorResourceSelection(_x) {
80
+ return _applyBigSaleFloorResourceSelection.apply(this, arguments);
81
+ }
82
+ function _applyBigSaleFloorResourceSelection() {
83
+ _applyBigSaleFloorResourceSelection = require_asyncToGenerator._asyncToGenerator(function* (options) {
84
+ const { isPersistedOrder, selectedOrderId, selectedResourceId, currentTableBookings, add, replace, merge } = options;
85
+ if (!isPersistedOrder && selectedOrderId != null) {
86
+ yield merge(selectedOrderId);
87
+ return "merged";
88
+ }
89
+ if (currentTableBookings.length > 1) throw new Error("[BigSale] 当前订单存在多条桌台 booking,无法自动换桌");
90
+ const currentTableBooking = currentTableBookings[0];
91
+ if (!currentTableBooking) {
92
+ yield add();
93
+ return "added";
94
+ }
95
+ if (bookingUsesFloorResource(currentTableBooking, selectedResourceId)) return "unchanged";
96
+ yield replace(currentTableBooking);
97
+ return "replaced";
98
+ });
99
+ return _applyBigSaleFloorResourceSelection.apply(this, arguments);
100
+ }
101
+ /** 只有发生实际写入或合单时才关闭桌台选择弹窗。 */
102
+ function shouldCloseFloorResourceSelection(result) {
103
+ return result !== "unchanged";
104
+ }
105
+ //#endregion
106
+ exports.applyBigSaleFloorResourceSelection = applyBigSaleFloorResourceSelection;
107
+ exports.resolveCurrentTableBookings = resolveCurrentTableBookings;
108
+ exports.resolveSelectedFloorResourceId = resolveSelectedFloorResourceId;
109
+ exports.resolveSelectedReservationRow = resolveSelectedReservationRow;
110
+ exports.shouldCloseFloorResourceSelection = shouldCloseFloorResourceSelection;
@@ -0,0 +1,16 @@
1
+ //#region src/components/bigSale/utils/orderIdentity.ts
2
+ /**
3
+ * 判断订单 ID 是否指向后端已落库订单。
4
+ *
5
+ * `local_order*` / `LOCAL_*` 等本地草稿标识仍属于新建订单流程。
6
+ */
7
+ function isPersistedBigSaleOrderId(orderId) {
8
+ if (orderId === void 0 || orderId === null) return false;
9
+ if (typeof orderId === "number") return Number.isFinite(orderId) && orderId > 0;
10
+ const normalized = String(orderId).trim();
11
+ if (!normalized || normalized === "0") return false;
12
+ const lower = normalized.toLowerCase();
13
+ return !(lower === "local" || lower.startsWith("local_") || lower.startsWith("local-"));
14
+ }
15
+ //#endregion
16
+ exports.isPersistedBigSaleOrderId = isPersistedBigSaleOrderId;
@@ -3,8 +3,8 @@ const require_objectSpread2 = require("../../_virtual/_@oxc-project_runtime@0.12
3
3
  const require_asyncToGenerator = require("../../_virtual/_@oxc-project_runtime@0.122.0/helpers/asyncToGenerator.js");
4
4
  const require_model = require("../booking/info/model.js");
5
5
  const require_useEngineContext = require("../../hooks/useEngineContext.js");
6
- const require_index = require("../../utils/index.js");
7
6
  const require_useLogger = require("../../hooks/useLogger.js");
7
+ const require_index = require("../../utils/index.js");
8
8
  const require_payment_modal_utils = require("./payment-modal-utils.js");
9
9
  const require_PaymentModal = require("./PaymentModal.js");
10
10
  let react = require("react");
@@ -63,12 +63,17 @@ function KioskSale(props) {
63
63
  return require_objectWithoutProperties._objectWithoutProperties(productLoadParams, _excluded2);
64
64
  }, [productLoadParams]);
65
65
  const resolvedOtherParams = (0, react.useMemo)(() => require_objectSpread2._objectSpread2(require_objectSpread2._objectSpread2({}, otherParams || {}), channel ? { channel } : {}), [channel, otherParams]);
66
- const productDetailPresentationPlatform = String((otherParams === null || otherParams === void 0 ? void 0 : otherParams.platform) || "").trim().toLowerCase() === "h5" ? "default" : "kiosk";
66
+ const isH5 = [otherParams === null || otherParams === void 0 ? void 0 : otherParams.platform, channel].some((value) => String(value || "").trim().toLowerCase() === "h5");
67
+ const productDetailPresentationPlatform = isH5 ? "default" : "kiosk";
67
68
  const isPosChannel = String(channel || "").trim().toLowerCase() === "pos";
68
69
  const resolvedNormalProductDetailConfig = (0, react.useMemo)(() => require_objectSpread2._objectSpread2(require_objectSpread2._objectSpread2(require_objectSpread2._objectSpread2({}, normalProductDetailConfig), isPosChannel ? {
69
70
  allowUnavailableBookingSelection: true,
70
71
  allowNoResourceBookingSelection: true
71
- } : {}), {}, { presentationPlatform: productDetailPresentationPlatform }), [
72
+ } : {}), {}, {
73
+ presentationPlatform: productDetailPresentationPlatform,
74
+ hideQuantityForBookingProducts: isH5 || (normalProductDetailConfig === null || normalProductDetailConfig === void 0 ? void 0 : normalProductDetailConfig.hideQuantityForBookingProducts)
75
+ }), [
76
+ isH5,
72
77
  isPosChannel,
73
78
  normalProductDetailConfig,
74
79
  productDetailPresentationPlatform
@@ -1,8 +1,8 @@
1
1
  const require_runtime = require("../../../../../_virtual/_rolldown/runtime.js");
2
2
  const require_asyncToGenerator = require("../../../../../_virtual/_@oxc-project_runtime@0.122.0/helpers/asyncToGenerator.js");
3
3
  const require_useEngineContext = require("../../../../../hooks/useEngineContext.js");
4
- const require_index = require("../../../../../utils/index.js");
5
4
  const require_useLogger = require("../../../../../hooks/useLogger.js");
5
+ const require_index = require("../../../../../utils/index.js");
6
6
  const require_EFTPos = require("../../../../eftposPay/EFTPos.js");
7
7
  let react = require("react");
8
8
  react = require_runtime.__toESM(react);
@@ -4,8 +4,8 @@ const require_asyncToGenerator = require("../../_virtual/_@oxc-project_runtime@0
4
4
  const require_useEngineContext = require("../../hooks/useEngineContext.js");
5
5
  const require_index = require("../../pro/compensatedPisellContainer/index.js");
6
6
  const require_withResponsive = require("../../responsive/withResponsive.js");
7
- const require_index$1 = require("../../utils/index.js");
8
7
  const require_useLogger = require("../../hooks/useLogger.js");
8
+ const require_index$1 = require("../../utils/index.js");
9
9
  const require_serve = require("./serve.js");
10
10
  const require_locales = require("./locales.js");
11
11
  const require_formResourcePage = require("../../plus/pisellReservation/serve/formResourcePage.js");
@@ -3,8 +3,8 @@ const require_objectSpread2 = require("../../../../_virtual/_@oxc-project_runtim
3
3
  const require_asyncToGenerator = require("../../../../_virtual/_@oxc-project_runtime@0.122.0/helpers/asyncToGenerator.js");
4
4
  const require_useEngineContext = require("../../../../hooks/useEngineContext.js");
5
5
  const require_bookingTicket = require("./bookingTicket.js");
6
- const require_usePromotion = require("../../../booking/hooks/usePromotion.js");
7
6
  const require_useLogger = require("../../../../hooks/useLogger.js");
7
+ const require_usePromotion = require("../../../booking/hooks/usePromotion.js");
8
8
  let dayjs = require("dayjs");
9
9
  dayjs = require_runtime.__toESM(dayjs);
10
10
  let react = require("react");
@@ -49,6 +49,31 @@ function buildResourcePayloadFromReservationRow(row) {
49
49
  deleted_at: null
50
50
  }] };
51
51
  }
52
+ /**
53
+ * 换桌时生成 booking.resources 协议数组。
54
+ *
55
+ * 只替换资源身份;资源占用人数沿用原 booking,避免换桌时改变人数或其它预约字段。
56
+ */
57
+ function buildReplacementBookingResourcesFromReservationRow(row, currentBooking) {
58
+ var _capacityCandidates$m;
59
+ const resourceMap = buildResourcePayloadFromReservationRow(row);
60
+ const sourceResource = Object.values(resourceMap).flat()[0];
61
+ if (!sourceResource || Number(sourceResource.relation_id) <= 0) throw new Error("[BigSale] 所选桌台缺少有效资源 ID");
62
+ const currentResource = Array.isArray(currentBooking.resources) ? currentBooking.resources[0] : void 0;
63
+ const capacity = (_capacityCandidates$m = [
64
+ currentResource === null || currentResource === void 0 ? void 0 : currentResource.capacity,
65
+ currentBooking.number,
66
+ sourceResource.capacity
67
+ ].map((value) => Number(value)).find((value) => Number.isFinite(value) && value >= 0)) !== null && _capacityCandidates$m !== void 0 ? _capacityCandidates$m : 0;
68
+ return [{
69
+ form_id: sourceResource.form_id,
70
+ relation_type: sourceResource.relation_type || "form",
71
+ relation_id: sourceResource.relation_id,
72
+ capacity,
73
+ like_status: sourceResource.like_status || "common",
74
+ metadata: sourceResource.metadata
75
+ }];
76
+ }
52
77
  function buildInitialExtendCapacityFromRuleProduct(product) {
53
78
  const capacitys = product === null || product === void 0 ? void 0 : product.capacity;
54
79
  if ((capacitys === null || capacitys === void 0 ? void 0 : capacitys.type) !== "custom" || !Array.isArray(capacitys.custom)) return [{
@@ -140,6 +165,7 @@ function openNewReservationBookingFromHost(input) {
140
165
  return true;
141
166
  }
142
167
  //#endregion
168
+ exports.buildReplacementBookingResourcesFromReservationRow = buildReplacementBookingResourcesFromReservationRow;
143
169
  exports.buildResourcePayloadFromReservationRow = buildResourcePayloadFromReservationRow;
144
170
  exports.buildServiceItemFromReservationRuleProduct = buildServiceItemFromReservationRuleProduct;
145
171
  exports.openNewReservationBookingFromHost = openNewReservationBookingFromHost;
@@ -2,6 +2,7 @@ const require_runtime = require("../../../../../../_virtual/_rolldown/runtime.js
2
2
  const require_objectSpread2 = require("../../../../../../_virtual/_@oxc-project_runtime@0.122.0/helpers/objectSpread2.js");
3
3
  const require_status = require("../../status.js");
4
4
  const require_index = require("../Action/index.js");
5
+ const require_useLogger = require("../../../../../../hooks/useLogger.js");
5
6
  const require_index$1 = require("../CardWrapper/index.js");
6
7
  const require_index$2 = require("../Cover/index.js");
7
8
  const require_useDynamicComponents = require("../../hooks/useDynamicComponents.js");
@@ -17,6 +18,7 @@ const CardCom = ({ props, className }) => {
17
18
  var _productCardDefault$s, _dataSource$sortKeys3;
18
19
  const [isFold, setIsFold] = (0, react.useState)(false);
19
20
  require_useInitLocalesOnce.default(require_locales.default);
21
+ const logger = require_useLogger.default();
20
22
  const { skuCardConfig, skuImageConfig, dataSource, skuActionConfig, skuTextConfig, style, rightStyle, onSelectCover, onSelectInfo, selectionTrigger = "pointerUp" } = props;
21
23
  const { renderComponent } = require_useDynamicComponents.useDynamicComponents();
22
24
  const { layoutDirection, displayMode, isFoldable } = skuCardConfig || (require_status.productCardDefault === null || require_status.productCardDefault === void 0 ? void 0 : require_status.productCardDefault.skuCardConfig) || {};
@@ -25,12 +27,31 @@ const CardCom = ({ props, className }) => {
25
27
  const { paddingY, justifyContent, alignItems, slot } = (skuTextConfig === null || skuTextConfig === void 0 ? void 0 : skuTextConfig.infoConfig) || (require_status.productCardDefault === null || require_status.productCardDefault === void 0 || (_productCardDefault$s = require_status.productCardDefault.skuTextConfig) === null || _productCardDefault$s === void 0 ? void 0 : _productCardDefault$s.infoConfig) || {};
26
28
  const handleSelect = (0, react.useCallback)((event, callback) => {
27
29
  event.stopPropagation();
30
+ const reportProductSelection = () => {
31
+ var _logger$addLog, _dataSource$id, _dataSource$title;
32
+ logger === null || logger === void 0 || (_logger$addLog = logger.addLog) === null || _logger$addLog === void 0 || _logger$addLog.call(logger, {
33
+ type: "info",
34
+ title: `BigSale商品卡-${selectionTrigger}触发商品选择`,
35
+ metadata: {
36
+ productId: (_dataSource$id = dataSource === null || dataSource === void 0 ? void 0 : dataSource.id) !== null && _dataSource$id !== void 0 ? _dataSource$id : dataSource === null || dataSource === void 0 ? void 0 : dataSource.product_id,
37
+ productTitle: (_dataSource$title = dataSource === null || dataSource === void 0 ? void 0 : dataSource.title) !== null && _dataSource$title !== void 0 ? _dataSource$title : dataSource === null || dataSource === void 0 ? void 0 : dataSource.name
38
+ }
39
+ });
40
+ };
28
41
  if (selectionTrigger === "click") {
42
+ reportProductSelection();
29
43
  callback === null || callback === void 0 || callback(dataSource);
30
44
  return;
31
45
  }
32
- requestAnimationFrame(() => requestAnimationFrame(() => callback === null || callback === void 0 ? void 0 : callback(dataSource)));
33
- }, [dataSource, selectionTrigger]);
46
+ requestAnimationFrame(() => requestAnimationFrame(() => {
47
+ reportProductSelection();
48
+ callback === null || callback === void 0 || callback(dataSource);
49
+ }));
50
+ }, [
51
+ dataSource,
52
+ logger === null || logger === void 0 ? void 0 : logger.addLog,
53
+ selectionTrigger
54
+ ]);
34
55
  /**
35
56
  * @title: 文本区域样式
36
57
  * @description:
@@ -4,6 +4,7 @@ const require_status = require("../../status.js");
4
4
  const require_index = require("../Action/index.js");
5
5
  const require_index$1 = require("../TooltipTags/index.js");
6
6
  const require_index$2 = require("../CardMask/index.js");
7
+ const require_useLogger = require("../../../../../../hooks/useLogger.js");
7
8
  let react = require("react");
8
9
  react = require_runtime.__toESM(react);
9
10
  let _pisell_materials = require("@pisell/materials");
@@ -12,6 +13,7 @@ classnames = require_runtime.__toESM(classnames);
12
13
  require("./index.less");
13
14
  //#region src/plus/productSelect/ProductCard/SkuCard/components/CardWrapper/index.tsx
14
15
  const CardWrapper = (props) => {
16
+ const logger = require_useLogger.default();
15
17
  const { children, className, style, skuCardConfig, skuActionConfig, skuStatusOverlayConfig, dataSource, onCardClick, isSelected, selectionTrigger = "pointerUp" } = props;
16
18
  const { paddingX, paddingY, background, marginY, marginX, radius, borderWidth, borderColor, isBorderVisible, layoutDirection } = skuCardConfig || (require_status.productCardDefault === null || require_status.productCardDefault === void 0 ? void 0 : require_status.productCardDefault.skuCardConfig) || {};
17
19
  const { method } = skuActionConfig || (require_status.productCardDefault === null || require_status.productCardDefault === void 0 ? void 0 : require_status.productCardDefault.skuActionConfig) || {};
@@ -36,11 +38,26 @@ const CardWrapper = (props) => {
36
38
  marginY
37
39
  ]);
38
40
  const handleCardSelect = () => {
41
+ const reportProductSelection = () => {
42
+ var _logger$addLog, _dataSource$id, _dataSource$title;
43
+ logger === null || logger === void 0 || (_logger$addLog = logger.addLog) === null || _logger$addLog === void 0 || _logger$addLog.call(logger, {
44
+ type: "info",
45
+ title: `BigSale商品卡外层-${selectionTrigger}触发商品选择`,
46
+ metadata: {
47
+ productId: (_dataSource$id = dataSource === null || dataSource === void 0 ? void 0 : dataSource.id) !== null && _dataSource$id !== void 0 ? _dataSource$id : dataSource === null || dataSource === void 0 ? void 0 : dataSource.product_id,
48
+ productTitle: (_dataSource$title = dataSource === null || dataSource === void 0 ? void 0 : dataSource.title) !== null && _dataSource$title !== void 0 ? _dataSource$title : dataSource === null || dataSource === void 0 ? void 0 : dataSource.name
49
+ }
50
+ });
51
+ };
39
52
  if (selectionTrigger === "click") {
53
+ reportProductSelection();
40
54
  onCardClick === null || onCardClick === void 0 || onCardClick(dataSource);
41
55
  return;
42
56
  }
43
- requestAnimationFrame(() => requestAnimationFrame(() => onCardClick === null || onCardClick === void 0 ? void 0 : onCardClick(dataSource)));
57
+ requestAnimationFrame(() => requestAnimationFrame(() => {
58
+ reportProductSelection();
59
+ onCardClick === null || onCardClick === void 0 || onCardClick(dataSource);
60
+ }));
44
61
  };
45
62
  return /* @__PURE__ */ react.default.createElement("div", {
46
63
  className: (0, classnames.default)(`${require_status.PREFIX}__card-wrapper`, (skuStatusOverlayConfig === null || skuStatusOverlayConfig === void 0 ? void 0 : skuStatusOverlayConfig.isOpen) && `pisell-product-sku__card-wrapper-overlay`, className),
@@ -364,11 +364,12 @@ function getPayV2RefundMethods() {
364
364
  iconType: "pisell2-credit-card-02"
365
365
  }];
366
366
  }
367
- function buildNormalRefundPayments(selected, editedAmounts) {
368
- return selected.map((transaction) => ({
367
+ function buildNormalRefundPayments(selected, editedAmounts, shopWalletPassId) {
368
+ const normalizedShopWalletPassId = String(shopWalletPassId || "").trim();
369
+ return selected.map((transaction) => require_objectSpread2._objectSpread2({
369
370
  id: transaction.payment.orderPaymentId,
370
371
  amount: editedAmounts.get(transaction.key) || toDecimal(transaction.refundableAmount).toFixed(2)
371
- }));
372
+ }, normalizedShopWalletPassId && isCashRefundTransaction(transaction) ? { metadata: { shop_wallet_pass_id: normalizedShopWalletPassId } } : {}));
372
373
  }
373
374
  function PayV2RefundModalConnected({ context, onClose, open }) {
374
375
  var _engineContext$appHel;
@@ -418,6 +419,14 @@ function PayV2RefundModalConnected({ context, onClose, open }) {
418
419
  return next;
419
420
  });
420
421
  }, []);
422
+ const buildNormalRefundPaymentsForSubmit = (0, react.useCallback)(function() {
423
+ var _ref10 = require_asyncToGenerator._asyncToGenerator(function* (selected) {
424
+ return buildNormalRefundPayments(selected, editedAmounts, selected.some(isCashRefundTransaction) ? yield require_utils$1.getShopWalletPassId(interaction) : null);
425
+ });
426
+ return function(_x) {
427
+ return _ref10.apply(this, arguments);
428
+ };
429
+ }(), [editedAmounts, interaction]);
421
430
  const openCashDrawer = (0, react.useCallback)(() => {
422
431
  try {
423
432
  var _interaction$utils, _interaction$utils$po;
@@ -451,13 +460,12 @@ function PayV2RefundModalConnected({ context, onClose, open }) {
451
460
  Toast
452
461
  ]);
453
462
  const submitNormalRefund = (0, react.useCallback)(function() {
454
- var _ref10 = require_asyncToGenerator._asyncToGenerator(function* (selected, cancelOrder, note) {
455
- const payments = buildNormalRefundPayments(selected, editedAmounts);
456
- const submittedRefundAmount = payments.reduce((total, payment) => total.plus(toDecimal(payment.amount)), new decimal_js.default(0));
463
+ var _ref11 = require_asyncToGenerator._asyncToGenerator(function* (selected, cancelOrder, note) {
457
464
  const shouldOpenCashDrawer = selected.some(isCashRefundTransaction);
458
465
  setSubmitting(true);
459
466
  try {
460
- finishSuccessfulRefund(submittedRefundAmount, (yield context.sales.refundPayments(payments, {
467
+ const payments = yield buildNormalRefundPaymentsForSubmit(selected);
468
+ finishSuccessfulRefund(payments.reduce((total, payment) => total.plus(toDecimal(payment.amount)), new decimal_js.default(0)), (yield context.sales.refundPayments(payments, {
461
469
  cancelOrder,
462
470
  note
463
471
  })).refreshError, shouldOpenCashDrawer);
@@ -467,17 +475,17 @@ function PayV2RefundModalConnected({ context, onClose, open }) {
467
475
  setSubmitting(false);
468
476
  }
469
477
  });
470
- return function(_x, _x2, _x3) {
471
- return _ref10.apply(this, arguments);
478
+ return function(_x2, _x3, _x4) {
479
+ return _ref11.apply(this, arguments);
472
480
  };
473
481
  }(), [
482
+ buildNormalRefundPaymentsForSubmit,
474
483
  context.sales,
475
- editedAmounts,
476
484
  finishSuccessfulRefund,
477
485
  getErrorText
478
486
  ]);
479
487
  const submitSpiMx51Refund = (0, react.useCallback)(function() {
480
- var _ref11 = require_asyncToGenerator._asyncToGenerator(function* (transaction, normalTransactions, cancelOrder, note) {
488
+ var _ref12 = require_asyncToGenerator._asyncToGenerator(function* (transaction, normalTransactions, cancelOrder, note) {
481
489
  if (transaction.payment.orderPaymentId === void 0 || transaction.payment.orderPaymentId === null || !transaction.payment.paymentMethod.code) {
482
490
  antd.message.error(String(_pisell_utils.locales.getText("pisell2.sale-detail.refund-modal.eftpos-missing-identity")));
483
491
  return;
@@ -486,13 +494,13 @@ function PayV2RefundModalConnected({ context, onClose, open }) {
486
494
  const paymentMethodCode = transaction.payment.paymentMethod.code;
487
495
  const amount = editedAmounts.get(transaction.key) || toDecimal(transaction.refundableAmount).toFixed(2);
488
496
  const refundUuid = createRefundPaymentNumber();
489
- const normalPayments = buildNormalRefundPayments(normalTransactions, editedAmounts);
490
- const normalRefundAmount = normalPayments.reduce((total, payment) => total.plus(toDecimal(payment.amount)), new decimal_js.default(0));
491
497
  const shouldOpenCashDrawer = normalTransactions.some(isCashRefundTransaction);
492
498
  setSubmitting(true);
493
499
  let nativeRefundSucceeded = false;
494
500
  try {
495
501
  var _engineContext$appHel2, _engineContext$appHel3, _engineContext$appHel4, _nativeResult$code, _nativeResult$data, _nativeResult$data2, _transaction$payment$;
502
+ const normalPayments = yield buildNormalRefundPaymentsForSubmit(normalTransactions);
503
+ const normalRefundAmount = normalPayments.reduce((total, payment) => total.plus(toDecimal(payment.amount)), new decimal_js.default(0));
496
504
  const mx51Plugin = engineContext === null || engineContext === void 0 || (_engineContext$appHel2 = engineContext.appHelper) === null || _engineContext$appHel2 === void 0 || (_engineContext$appHel2 = _engineContext$appHel2.utils) === null || _engineContext$appHel2 === void 0 || (_engineContext$appHel3 = _engineContext$appHel2.getApp) === null || _engineContext$appHel3 === void 0 || (_engineContext$appHel3 = _engineContext$appHel3.call(_engineContext$appHel2)) === null || _engineContext$appHel3 === void 0 || (_engineContext$appHel4 = _engineContext$appHel3.getPlugin) === null || _engineContext$appHel4 === void 0 ? void 0 : _engineContext$appHel4.call(_engineContext$appHel3, "mx51");
497
505
  if (typeof (mx51Plugin === null || mx51Plugin === void 0 ? void 0 : mx51Plugin.refund) !== "function") throw new Error(String(_pisell_utils.locales.getText("pisell2.sale-detail.refund-modal.eftpos-open-failed")));
498
506
  const nativeResult = yield mx51Plugin.refund({
@@ -534,10 +542,11 @@ function PayV2RefundModalConnected({ context, onClose, open }) {
534
542
  setSubmitting(false);
535
543
  }
536
544
  });
537
- return function(_x4, _x5, _x6, _x7) {
538
- return _ref11.apply(this, arguments);
545
+ return function(_x5, _x6, _x7, _x8) {
546
+ return _ref12.apply(this, arguments);
539
547
  };
540
548
  }(), [
549
+ buildNormalRefundPaymentsForSubmit,
541
550
  context.sales,
542
551
  editedAmounts,
543
552
  engineContext,
@@ -546,7 +555,7 @@ function PayV2RefundModalConnected({ context, onClose, open }) {
546
555
  onClose
547
556
  ]);
548
557
  const submitEftposRefund = (0, react.useCallback)(function() {
549
- var _ref12 = require_asyncToGenerator._asyncToGenerator(function* (transaction, normalTransactions, cancelOrder, note) {
558
+ var _ref13 = require_asyncToGenerator._asyncToGenerator(function* (transaction, normalTransactions, cancelOrder, note) {
550
559
  if (!transaction.eftposProvider || !transaction.originalPaymentNumber || !transaction.salesId || transaction.payment.orderPaymentId === void 0 || transaction.payment.orderPaymentId === null || !transaction.payment.paymentMethod.code) {
551
560
  antd.message.error(String(_pisell_utils.locales.getText("pisell2.sale-detail.refund-modal.eftpos-missing-identity")));
552
561
  return;
@@ -555,15 +564,15 @@ function PayV2RefundModalConnected({ context, onClose, open }) {
555
564
  const orderPaymentId = transaction.payment.orderPaymentId;
556
565
  const paymentMethodCode = transaction.payment.paymentMethod.code;
557
566
  const amount = editedAmounts.get(transaction.key) || toDecimal(transaction.refundableAmount).toFixed(2);
558
- const normalPayments = buildNormalRefundPayments(normalTransactions, editedAmounts);
559
- const normalRefundAmount = normalPayments.reduce((total, payment) => total.plus(toDecimal(payment.amount)), new decimal_js.default(0));
560
567
  const shouldOpenCashDrawer = normalTransactions.some(isCashRefundTransaction);
561
568
  setSubmitting(true);
562
569
  eftposSuccessHandlingRef.current = false;
563
- const deviceNumber = yield require_utils$1.getCurrentDeviceNumber(interaction);
564
570
  let opened = false;
565
571
  try {
566
572
  var _piPaymentRef$current, _context$sales$tempOr3, _context$sales$salesD3;
573
+ const normalPayments = yield buildNormalRefundPaymentsForSubmit(normalTransactions);
574
+ const normalRefundAmount = normalPayments.reduce((total, payment) => total.plus(toDecimal(payment.amount)), new decimal_js.default(0));
575
+ const deviceNumber = yield require_utils$1.getCurrentDeviceNumber(interaction);
567
576
  opened = Boolean((_piPaymentRef$current = piPaymentRef.current) === null || _piPaymentRef$current === void 0 ? void 0 : _piPaymentRef$current.open({
568
577
  provider: transaction.eftposProvider,
569
578
  mode: require_index.PaymentMode.Refund,
@@ -632,10 +641,11 @@ function PayV2RefundModalConnected({ context, onClose, open }) {
632
641
  antd.message.error(String(_pisell_utils.locales.getText("pisell2.sale-detail.refund-modal.eftpos-open-failed")));
633
642
  }
634
643
  });
635
- return function(_x8, _x9, _x10, _x11) {
636
- return _ref12.apply(this, arguments);
644
+ return function(_x9, _x10, _x11, _x12) {
645
+ return _ref13.apply(this, arguments);
637
646
  };
638
647
  }(), [
648
+ buildNormalRefundPaymentsForSubmit,
639
649
  context.sales,
640
650
  editedAmounts,
641
651
  finishSuccessfulRefund,
@@ -697,10 +707,10 @@ function PayV2RefundModalConnected({ context, onClose, open }) {
697
707
  }));
698
708
  }
699
709
  function Pay({ context }) {
700
- var _ref13, _context$summary$summ2;
710
+ var _ref14, _context$summary$summ2;
701
711
  const paymentMethodNameMap = require_usePaymentMethodNameMap.usePaymentMethodNameMap();
702
712
  const tempOrder = context.sales.tempOrder;
703
- const summary = (_ref13 = (_context$summary$summ2 = context.summary.summary) !== null && _context$summary$summ2 !== void 0 ? _context$summary$summ2 : tempOrder === null || tempOrder === void 0 ? void 0 : tempOrder.summary) !== null && _ref13 !== void 0 ? _ref13 : null;
713
+ const summary = (_ref14 = (_context$summary$summ2 = context.summary.summary) !== null && _context$summary$summ2 !== void 0 ? _context$summary$summ2 : tempOrder === null || tempOrder === void 0 ? void 0 : tempOrder.summary) !== null && _ref14 !== void 0 ? _ref14 : null;
704
714
  const symbol = (tempOrder === null || tempOrder === void 0 ? void 0 : tempOrder.currency_symbol) || "$";
705
715
  const payments = Array.isArray(tempOrder === null || tempOrder === void 0 ? void 0 : tempOrder.payments) ? tempOrder === null || tempOrder === void 0 ? void 0 : tempOrder.payments : [];
706
716
  const overviewItems = [
@@ -298,7 +298,7 @@ function readSnapshot(bookingTicket, getHolderOptionsForSource = () => [], shoul
298
298
  salesDetail,
299
299
  bookings: shouldMergeBookingsForDisplay ? require_mergeBookingsForDisplay.mergeBookingsForDisplay(bookings) : bookings,
300
300
  items,
301
- displayLines: [...productLineMergeEnabled ? require_mergeBookingsForDisplay.mergeCartLinesForDisplay(enrichedLines, shouldMergeBookingsForDisplay ? void 0 : isRuntimeNewBookingLine) : enrichedLines].reverse(),
301
+ displayLines: [...productLineMergeEnabled ? require_mergeBookingsForDisplay.mergeCartLinesForDisplay(enrichedLines, shouldMergeBookingsForDisplay ? void 0 : mergeBookingLinesForDisplay ? isRuntimeNewBookingLine : () => false) : enrichedLines].reverse(),
302
302
  productLineMergeEnabled,
303
303
  discountList: ((_bookingTicket$getDis = bookingTicket.getDiscountList) === null || _bookingTicket$getDis === void 0 ? void 0 : _bookingTicket$getDis.call(bookingTicket)) || EMPTY_DISCOUNT_LIST
304
304
  };
@@ -106,7 +106,7 @@ const NormalProductDetailHostRenderer = ({ defaultSkuDetailConfig }) => {
106
106
  const pending = require_useSyncExternalStoreCompat.useSyncExternalStoreCompat(bridge.subscribe, bridge.getSnapshot, () => null);
107
107
  const dismissRevision = require_useSyncExternalStoreCompat.useSyncExternalStoreCompat(bridge.subscribe, bridge.getDismissRevision, () => 0);
108
108
  const { bookingTicket, salesModule, solution, bookingConfigParams, tempOrder, productLoadChannel, businessCode } = require_useSalesSdk.useSalesSdk();
109
- const { refreshCartSnapshot } = require_useSalesSdkCart.useSalesSdkCart();
109
+ const { recalcSummary } = require_useSalesSdkCart.useSalesSdkCart();
110
110
  const usesUnifiedBookingSales = solution === "unifiedBookingSales";
111
111
  const initializeFullBookingContext = (defaultSkuDetailConfig === null || defaultSkuDetailConfig === void 0 ? void 0 : defaultSkuDetailConfig.initializeFullBookingContext) === true;
112
112
  const { ensureHolderOptionsForSource, getHolderOptionsForSource } = require_SalesSdkHolderContext.useSalesSdkHolderOptional();
@@ -148,7 +148,7 @@ const NormalProductDetailHostRenderer = ({ defaultSkuDetailConfig }) => {
148
148
  const reason = (_committed$validation2 = committed.validation.conflicts) === null || _committed$validation2 === void 0 ? void 0 : _committed$validation2.map((item) => item.message || item.code).filter(Boolean).join("; ");
149
149
  throw new Error(reason || "预约可用性校验失败。");
150
150
  }
151
- refreshCartSnapshot();
151
+ yield recalcSummary();
152
152
  return salesModule.getCart().items;
153
153
  });
154
154
  return function(_x2, _x3, _x4) {
@@ -10,6 +10,7 @@ function _refundOrderPayments() {
10
10
  _refundOrderPayments = require_asyncToGenerator._asyncToGenerator(function* (orderId, payments, options = {}) {
11
11
  var _options$note$trim, _options$note;
12
12
  const payload = require_objectSpread2._objectSpread2({
13
+ platform: "pos",
13
14
  note: (_options$note$trim = (_options$note = options.note) === null || _options$note === void 0 ? void 0 : _options$note.trim()) !== null && _options$note$trim !== void 0 ? _options$note$trim : "",
14
15
  content: [],
15
16
  is_notice: 0,
@@ -179,7 +179,8 @@ interface SalesSdkRefundPaymentInput {
179
179
  product_voucher?: unknown;
180
180
  payment_method_name?: string;
181
181
  metadata?: {
182
- unique_refund_number: string;
182
+ /** 现金退款归属的钱箱 ID。 */shop_wallet_pass_id?: string;
183
+ unique_refund_number?: string;
183
184
  manual_marking_flag?: 1;
184
185
  };
185
186
  }
@@ -577,6 +578,11 @@ interface UpdateOrderProductParams {
577
578
  */
578
579
  allow_booking_discount_reapply?: boolean;
579
580
  }
581
+ /** Order.updateOrderBooking 入参;仅覆盖 updates 中显式给出的 booking 字段。 */
582
+ interface UpdateOrderBookingParams {
583
+ unique_identification_number: string;
584
+ updates: Record<string, any>;
585
+ }
580
586
  /** Order.updateOrderProductQuantity 入参;行定位语义与 updateOrderProduct / removeProductFromOrder 一致 */
581
587
  interface UpdateOrderProductQuantityParams extends ScanOrderOrderProductIdentity {
582
588
  num: number;
@@ -944,6 +950,8 @@ interface BookingTicketHandle {
944
950
  }) => Promise<ScanOrderOrderProduct[]>;
945
951
  updateOrderProduct: (params: UpdateOrderProductParams) => Promise<ScanOrderOrderProduct[]>;
946
952
  updateOrderProducts?: (paramsList: UpdateOrderProductParams[]) => Promise<ScanOrderOrderProduct[]>;
953
+ /** 按 booking UID 更新预约;OS 会保留未出现在 updates 中的原字段。 */
954
+ updateOrderBooking?: (params: UpdateOrderBookingParams) => Record<string, any>[];
947
955
  updateOrderProductQuantity: (params: UpdateOrderProductQuantityParams) => Promise<ScanOrderOrderProduct[]>;
948
956
  removeProductFromOrder: (identity: ScanOrderOrderProductIdentity, options?: {
949
957
  preserveDisplayPosition?: {
@@ -252,6 +252,7 @@ const selectionFlowPresets = {
252
252
  //#endregion
253
253
  exports.bookingSelectionFlowSteps = bookingSelectionFlowSteps;
254
254
  exports.customerSteps = customerSteps;
255
+ exports.isBookingProduct = isBookingProduct;
255
256
  exports.posSteps = posSteps;
256
257
  exports.resolveBookingSelectionFlowSteps = resolveBookingSelectionFlowSteps;
257
258
  exports.resolveKioskBookingSelectionFlowSteps = resolveKioskBookingSelectionFlowSteps;
@@ -12,6 +12,7 @@ const require_withResponsive = require("../../responsive/withResponsive.js");
12
12
  const require_index$1 = require("../../plus/noteModal/index.js");
13
13
  const require_index$2 = require("../priceKeyboard/components/discountKeyboard/index.js");
14
14
  const require_index$3 = require("../NumericStepper/index.js");
15
+ const require_useLogger = require("../../hooks/useLogger.js");
15
16
  const require_stock = require("../../shared/locales/stock.js");
16
17
  const require_resolveSkuValue = require("../../plus/skuOptionsSelection/utils/resolveSkuValue.js");
17
18
  const require_index$4 = require("../../plus/skuOptionsSelection/index.js");
@@ -20,7 +21,6 @@ const require_locales$1 = require("./flow/locales.js");
20
21
  const require_useLocale = require("../../hooks/useLocale.js");
21
22
  const require_utils$3 = require("./utils.js");
22
23
  const require_useToast = require("../../hooks/useToast.js");
23
- const require_useLogger = require("../../hooks/useLogger.js");
24
24
  const require_LoadingPanel = require("./LoadingPanel.js");
25
25
  const require_index$5 = require("./components/CollapsibleSection/index.js");
26
26
  const require_utils$4 = require("./components/weighing/utils.js");
@@ -28,6 +28,7 @@ const require_index$6 = require("./components/weighing/index.js");
28
28
  const require_useWeighing = require("./components/weighing/useWeighing.js");
29
29
  const require_mergeSkuOther = require("./flow/mergeSkuOther.js");
30
30
  const require_i18n = require("./flow/i18n.js");
31
+ const require_presets = require("./flow/presets.js");
31
32
  const require_draftAdapter = require("./flow/draftAdapter.js");
32
33
  const require_buildConfirmProductData = require("./flow/buildConfirmProductData.js");
33
34
  const require_bookingPrice = require("./flow/bookingPrice.js");
@@ -718,7 +719,7 @@ const SkuDetailModal = ({ onConfirm, onRemove, onClose, variant }, ref) => {
718
719
  (0, react.useImperativeHandle)(ref, () => ({
719
720
  open: function() {
720
721
  var _ref16 = require_asyncToGenerator._asyncToGenerator(function* (data) {
721
- var _skuDetailConfig$isSh, _skuDetailConfig$isSh2, _skuDetailConfig$isSh3, _skuDetailConfig$isSh4, _skuDetailConfig$isSh5, _skuDetailConfig$isSh6, _skuDetailConfig$isSh7, _skuDetailConfig$isSh8, _skuDetailConfig$exte, _skuDetailConfig$useC, _skuDetailConfig$cust, _skuDetailConfig$isCa, _skuDetailConfig, _skuDetailConfig2, _data$bundle_group, _data$_extend, _data$_extend2, _data$discount_list, _ref14, _data$_extend3, _data$_extend4, _data$_extend5, _data$discount_list$f, _data$discount_list2, _ref15, _data$_extend$priceOv, _data$_extend7;
722
+ var _skuDetailConfig$isSh, _skuDetailConfig$isSh2, _skuDetailConfig$isSh3, _skuDetailConfig$isSh4, _skuDetailConfig$isSh5, _skuDetailConfig$hide, _skuDetailConfig$isSh6, _skuDetailConfig$isSh7, _skuDetailConfig$isSh8, _skuDetailConfig$exte, _skuDetailConfig$useC, _skuDetailConfig$cust, _skuDetailConfig$isCa, _skuDetailConfig, _skuDetailConfig2, _data$bundle_group, _data$_extend, _data$_extend2, _data$discount_list, _ref14, _data$_extend3, _data$_extend4, _data$_extend5, _data$discount_list$f, _data$discount_list2, _ref15, _data$_extend$priceOv, _data$_extend7;
722
723
  const currentTaskId = openTaskIdRef.current + 1;
723
724
  openTaskIdRef.current = currentTaskId;
724
725
  flowDateHydrationVersionRef.current += 1;
@@ -767,6 +768,7 @@ const SkuDetailModal = ({ onConfirm, onRemove, onClose, variant }, ref) => {
767
768
  isShowMobileWeighing: (_skuDetailConfig$isSh3 = skuDetailConfig === null || skuDetailConfig === void 0 ? void 0 : skuDetailConfig.isShowMobileWeighing) !== null && _skuDetailConfig$isSh3 !== void 0 ? _skuDetailConfig$isSh3 : false,
768
769
  isShowProcedureSteps: (_skuDetailConfig$isSh4 = skuDetailConfig === null || skuDetailConfig === void 0 ? void 0 : skuDetailConfig.isShowProcedureSteps) !== null && _skuDetailConfig$isSh4 !== void 0 ? _skuDetailConfig$isSh4 : true,
769
770
  isShowStepper: (_skuDetailConfig$isSh5 = skuDetailConfig === null || skuDetailConfig === void 0 ? void 0 : skuDetailConfig.isShowStepper) !== null && _skuDetailConfig$isSh5 !== void 0 ? _skuDetailConfig$isSh5 : true,
771
+ hideQuantityForBookingProducts: (_skuDetailConfig$hide = skuDetailConfig === null || skuDetailConfig === void 0 ? void 0 : skuDetailConfig.hideQuantityForBookingProducts) !== null && _skuDetailConfig$hide !== void 0 ? _skuDetailConfig$hide : false,
770
772
  isShowNote: (_skuDetailConfig$isSh6 = skuDetailConfig === null || skuDetailConfig === void 0 ? void 0 : skuDetailConfig.isShowNote) !== null && _skuDetailConfig$isSh6 !== void 0 ? _skuDetailConfig$isSh6 : true,
771
773
  isShowManualPriceChange: (_skuDetailConfig$isSh7 = skuDetailConfig === null || skuDetailConfig === void 0 ? void 0 : skuDetailConfig.isShowManualPriceChange) !== null && _skuDetailConfig$isSh7 !== void 0 ? _skuDetailConfig$isSh7 : true,
772
774
  isShowRemove: (_skuDetailConfig$isSh8 = skuDetailConfig === null || skuDetailConfig === void 0 ? void 0 : skuDetailConfig.isShowRemove) !== null && _skuDetailConfig$isSh8 !== void 0 ? _skuDetailConfig$isSh8 : true,
@@ -1103,7 +1105,12 @@ const SkuDetailModal = ({ onConfirm, onRemove, onClose, variant }, ref) => {
1103
1105
  readySelectionFlowBookingPrice,
1104
1106
  unitPrice
1105
1107
  ]);
1106
- const showQuantityStepper = Boolean((skuDetailConfig === null || skuDetailConfig === void 0 ? void 0 : skuDetailConfig.isShowStepper) && !isWeighingProduct$1);
1108
+ const showQuantityStepper = require_utils$3.shouldShowQuantityStepper({
1109
+ isShowStepper: skuDetailConfig === null || skuDetailConfig === void 0 ? void 0 : skuDetailConfig.isShowStepper,
1110
+ isWeighingProduct: isWeighingProduct$1,
1111
+ hideQuantityForBookingProducts: skuDetailConfig === null || skuDetailConfig === void 0 ? void 0 : skuDetailConfig.hideQuantityForBookingProducts,
1112
+ isBookingProduct: require_presets.isBookingProduct(productData)
1113
+ });
1107
1114
  /**
1108
1115
  * @title 售价小计
1109
1116
  * @description