@pisell/pisellos 0.10.43 → 0.10.45

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 (118) hide show
  1. package/dist/model/strategy/adapter/itemRule/adapter.d.ts +4 -1
  2. package/dist/model/strategy/adapter/itemRule/adapter.js +135 -35
  3. package/dist/model/strategy/adapter/itemRule/evaluator.d.ts +8 -1
  4. package/dist/model/strategy/adapter/itemRule/evaluator.js +25 -1
  5. package/dist/model/strategy/adapter/itemRule/type.d.ts +44 -0
  6. package/dist/model/strategy/adapter/itemRule/type.js +19 -1
  7. package/dist/model/strategy/adapter/promotion/index.js +9 -0
  8. package/dist/model/strategy/adapter/walletPass/evaluator.d.ts +2 -0
  9. package/dist/model/strategy/adapter/walletPass/evaluator.js +4 -2
  10. package/dist/modules/Customer/index.js +2 -1
  11. package/dist/modules/Discount/availability.d.ts +7 -0
  12. package/dist/modules/Discount/availability.js +49 -0
  13. package/dist/modules/Discount/index.d.ts +1 -3
  14. package/dist/modules/Discount/index.js +12 -151
  15. package/dist/modules/Discount/types.d.ts +6 -0
  16. package/dist/modules/Order/index.d.ts +41 -9
  17. package/dist/modules/Order/index.js +1457 -872
  18. package/dist/modules/Order/salesNotes.d.ts +31 -0
  19. package/dist/modules/Order/salesNotes.js +492 -0
  20. package/dist/modules/Order/types.d.ts +105 -8
  21. package/dist/modules/Order/types.js +6 -1
  22. package/dist/modules/Order/utils.d.ts +4 -2
  23. package/dist/modules/Order/utils.js +224 -79
  24. package/dist/modules/Payment/cashRecommendationAlgorithm.d.ts +4 -5
  25. package/dist/modules/Payment/cashRecommendationAlgorithm.js +17 -367
  26. package/dist/modules/Product/index.d.ts +1 -1
  27. package/dist/modules/ProductList/index.d.ts +2 -1
  28. package/dist/modules/ProductList/index.js +100 -20
  29. package/dist/modules/ProductList/types.d.ts +10 -0
  30. package/dist/modules/Rules/index.js +50 -16
  31. package/dist/server/index.d.ts +7 -0
  32. package/dist/server/index.js +45 -3
  33. package/dist/server/modules/order/index.js +6 -0
  34. package/dist/server/modules/order/types.d.ts +9 -0
  35. package/dist/server/utils/small-ticket.d.ts +1 -0
  36. package/dist/server/utils/small-ticket.js +142 -14
  37. package/dist/solution/BaseSales/index.d.ts +15 -1
  38. package/dist/solution/BaseSales/index.js +1240 -877
  39. package/dist/solution/BaseSales/types.d.ts +2 -2
  40. package/dist/solution/BookingByStep/index.d.ts +1 -1
  41. package/dist/solution/BookingTicket/index.d.ts +1 -0
  42. package/dist/solution/BookingTicket/index.js +37 -16
  43. package/dist/solution/BookingTicket/utils/orderCustomer.js +3 -2
  44. package/dist/solution/RegisterAndLogin/config.d.ts +9 -3
  45. package/dist/solution/RegisterAndLogin/config.js +95 -40
  46. package/dist/solution/RegisterAndLogin/index.js +4 -1
  47. package/dist/solution/ScanOrder/index.d.ts +1 -0
  48. package/dist/solution/ScanOrder/index.js +31 -27
  49. package/dist/solution/ScanOrder/utils.d.ts +1 -0
  50. package/dist/solution/ScanOrder/utils.js +2 -0
  51. package/dist/solution/ShopDiscount/index.d.ts +1 -0
  52. package/dist/solution/ShopDiscount/index.js +59 -22
  53. package/dist/solution/ShopDiscount/utils.d.ts +4 -2
  54. package/dist/solution/ShopDiscount/utils.js +40 -21
  55. package/dist/solution/UnifiedBookingSales/index.d.ts +15 -2
  56. package/dist/solution/UnifiedBookingSales/index.js +777 -510
  57. package/dist/solution/UnifiedBookingSales/types.d.ts +14 -1
  58. package/dist/solution/VenueBooking/index.d.ts +1 -0
  59. package/dist/solution/VenueBooking/index.js +8 -4
  60. package/lib/model/strategy/adapter/itemRule/adapter.d.ts +4 -1
  61. package/lib/model/strategy/adapter/itemRule/adapter.js +73 -4
  62. package/lib/model/strategy/adapter/itemRule/evaluator.d.ts +8 -1
  63. package/lib/model/strategy/adapter/itemRule/evaluator.js +23 -1
  64. package/lib/model/strategy/adapter/itemRule/type.d.ts +44 -0
  65. package/lib/model/strategy/adapter/itemRule/type.js +19 -1
  66. package/lib/model/strategy/adapter/walletPass/evaluator.d.ts +2 -0
  67. package/lib/model/strategy/adapter/walletPass/evaluator.js +2 -0
  68. package/lib/modules/Customer/index.js +1 -0
  69. package/lib/modules/Discount/availability.d.ts +7 -0
  70. package/lib/modules/Discount/availability.js +43 -0
  71. package/lib/modules/Discount/index.d.ts +1 -3
  72. package/lib/modules/Discount/index.js +10 -131
  73. package/lib/modules/Discount/types.d.ts +6 -0
  74. package/lib/modules/Order/index.d.ts +41 -9
  75. package/lib/modules/Order/index.js +456 -69
  76. package/lib/modules/Order/salesNotes.d.ts +31 -0
  77. package/lib/modules/Order/salesNotes.js +382 -0
  78. package/lib/modules/Order/types.d.ts +105 -8
  79. package/lib/modules/Order/types.js +5 -1
  80. package/lib/modules/Order/utils.d.ts +4 -2
  81. package/lib/modules/Order/utils.js +134 -3
  82. package/lib/modules/Payment/cashRecommendationAlgorithm.d.ts +4 -5
  83. package/lib/modules/Payment/cashRecommendationAlgorithm.js +9 -354
  84. package/lib/modules/Product/index.d.ts +1 -1
  85. package/lib/modules/ProductList/index.d.ts +2 -1
  86. package/lib/modules/ProductList/index.js +47 -2
  87. package/lib/modules/ProductList/types.d.ts +10 -0
  88. package/lib/modules/Rules/index.js +42 -5
  89. package/lib/server/index.d.ts +7 -0
  90. package/lib/server/index.js +39 -3
  91. package/lib/server/modules/order/index.js +6 -0
  92. package/lib/server/modules/order/types.d.ts +9 -0
  93. package/lib/server/utils/small-ticket.d.ts +1 -0
  94. package/lib/server/utils/small-ticket.js +136 -12
  95. package/lib/solution/BaseSales/index.d.ts +15 -1
  96. package/lib/solution/BaseSales/index.js +192 -22
  97. package/lib/solution/BaseSales/types.d.ts +2 -2
  98. package/lib/solution/BookingByStep/index.d.ts +1 -1
  99. package/lib/solution/BookingTicket/index.d.ts +1 -0
  100. package/lib/solution/BookingTicket/index.js +23 -5
  101. package/lib/solution/BookingTicket/utils/orderCustomer.js +2 -1
  102. package/lib/solution/RegisterAndLogin/config.d.ts +9 -3
  103. package/lib/solution/RegisterAndLogin/config.js +49 -8
  104. package/lib/solution/RegisterAndLogin/index.js +4 -1
  105. package/lib/solution/ScanOrder/index.d.ts +1 -0
  106. package/lib/solution/ScanOrder/index.js +5 -1
  107. package/lib/solution/ScanOrder/utils.d.ts +1 -0
  108. package/lib/solution/ScanOrder/utils.js +1 -0
  109. package/lib/solution/ShopDiscount/index.d.ts +1 -0
  110. package/lib/solution/ShopDiscount/index.js +29 -3
  111. package/lib/solution/ShopDiscount/utils.d.ts +4 -2
  112. package/lib/solution/ShopDiscount/utils.js +39 -23
  113. package/lib/solution/UnifiedBookingSales/index.d.ts +15 -2
  114. package/lib/solution/UnifiedBookingSales/index.js +125 -1
  115. package/lib/solution/UnifiedBookingSales/types.d.ts +14 -1
  116. package/lib/solution/VenueBooking/index.d.ts +1 -0
  117. package/lib/solution/VenueBooking/index.js +5 -1
  118. package/package.json +1 -1
@@ -1,7 +1,7 @@
1
1
  var _excluded = ["custom_product_bundle_map_id"],
2
2
  _excluded2 = ["unique_identification_number"],
3
3
  _excluded3 = ["num", "surcharge_fee", "discount_amount", "discount_type", "discountway", "product_discount_reason", "discount_per", "production_code"],
4
- _excluded4 = ["_extend", "relation_id", "table_form_id", "resource_id", "summary", "lastOrderInfo", "paid_amount", "shop_id", "shop_note", "shop_service_type", "start_time", "customer", "discount_list", "order_meta_list", "tax_fee", "total_amount", "total_refund_amount", "create_date", "holder_id", "payment_status"],
4
+ _excluded4 = ["_extend", "relation_id", "table_form_id", "resource_id", "summary", "lastOrderInfo", "paid_amount", "shop_id", "shop_note", "shop_service_type", "start_time", "customer", "discount_list", "order_meta_list", "tax_fee", "total_amount", "total_refund_amount", "create_date", "holder_id", "payment_status", "notes"],
5
5
  _excluded5 = ["collect_pax", "table_occupancy_duration", "cart_settlement_key", "cart_settlement_snapshot", "legal_currency_snapshot"];
6
6
  function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
7
7
  function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
@@ -9,21 +9,29 @@ function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableTo
9
9
  function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
10
10
  function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
11
11
  function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
12
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
12
13
  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; }
13
14
  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; }
14
15
  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; }
15
16
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
16
17
  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); }
17
- function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
18
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
19
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
18
20
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
19
21
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
22
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
23
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
20
24
  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); }
21
25
  import dayjs from 'dayjs';
26
+ import customParseFormat from 'dayjs/plugin/customParseFormat';
22
27
  import Decimal from 'decimal.js';
23
28
  import { getProductHolderConfig } from "../Holder/utils";
24
29
  import { buildProductLineFingerprint, createEmptySummary } from "../../solution/ScanOrder/utils";
25
30
  import { createUuidV4 } from "./utils/orderCollectionIdentity";
31
+ import { encodeSalesNotes } from "./salesNotes";
32
+ dayjs.extend(customParseFormat);
26
33
  var POINT_CARD_SNAPSHOT_TAG = 'point_card';
34
+ var VIRTUAL_CURRENCY_SNAPSHOT_TAG = 'virtual_currency';
27
35
  function isPlainObject(value) {
28
36
  return Boolean(value) && _typeof(value) === 'object' && !Array.isArray(value);
29
37
  }
@@ -62,6 +70,106 @@ export function buildPointCardSnapshotFromWalletPassList(value) {
62
70
  return result;
63
71
  }, []);
64
72
  }
73
+ function normalizeSnapshotNameMap(value) {
74
+ if (typeof value === 'string' || typeof value === 'number') {
75
+ var normalizedText = String(value).trim();
76
+ return normalizedText ? {
77
+ original: normalizedText
78
+ } : {};
79
+ }
80
+ if (!isPlainObject(value)) return {};
81
+ return Object.entries(value).reduce(function (result, _ref) {
82
+ var _ref2 = _slicedToArray(_ref, 2),
83
+ locale = _ref2[0],
84
+ text = _ref2[1];
85
+ if (!locale.trim()) return result;
86
+ if (typeof text !== 'string' && typeof text !== 'number') return result;
87
+ var normalizedText = String(text).trim();
88
+ if (normalizedText) result[locale] = normalizedText;
89
+ return result;
90
+ }, {});
91
+ }
92
+ function buildVirtualCurrencySnapshotName(value) {
93
+ var _value$amount_format;
94
+ if (!isPlainObject(value)) return {};
95
+ var amountFormat = String((_value$amount_format = value.amount_format) !== null && _value$amount_format !== void 0 ? _value$amount_format : '').trim();
96
+ var configuredName;
97
+ if (amountFormat === '{{amount}} {{unit}}') {
98
+ configuredName = value.unit_label;
99
+ } else if (amountFormat === '{{amount}} {{sym}}') {
100
+ configuredName = value.symbol;
101
+ } else {
102
+ return {};
103
+ }
104
+ var configuredNameMap = normalizeSnapshotNameMap(configuredName);
105
+ var shortNameMap = normalizeSnapshotNameMap(value.short_name);
106
+
107
+ // The configured unit/symbol is resolved before short_name. If it already
108
+ // carries a global fallback, keep it authoritative so (for example)
109
+ // short_name.en cannot mask unit_label.original. When it only has explicit
110
+ // locale entries, merge short_name so other receipt locales can still fall
111
+ // back after the configured value has no match.
112
+ var hasConfiguredGlobalFallback = ['original', 'auto', 'default', 'en'].some(function (locale) {
113
+ return Boolean(configuredNameMap[locale]);
114
+ });
115
+ if (hasConfiguredGlobalFallback) return configuredNameMap;
116
+ return _objectSpread(_objectSpread({}, shortNameMap), configuredNameMap);
117
+ }
118
+ export function normalizeVirtualCurrencySnapshotItem(value) {
119
+ var _value$product_name2, _value$par_value2, _value$used_par_value2;
120
+ if (!isPlainObject(value)) return null;
121
+ var id = normalizeSnapshotScalar(value.id);
122
+ if (id === undefined) return null;
123
+ if (String(value.tag || '').trim().toLowerCase() !== VIRTUAL_CURRENCY_SNAPSHOT_TAG) {
124
+ return null;
125
+ }
126
+ var snapshot = {
127
+ id: id,
128
+ tag: 'virtual_currency',
129
+ product_name: String((_value$product_name2 = value.product_name) !== null && _value$product_name2 !== void 0 ? _value$product_name2 : ''),
130
+ par_value: String((_value$par_value2 = value.par_value) !== null && _value$par_value2 !== void 0 ? _value$par_value2 : ''),
131
+ used_par_value: String((_value$used_par_value2 = value.used_par_value) !== null && _value$used_par_value2 !== void 0 ? _value$used_par_value2 : ''),
132
+ name: normalizeSnapshotNameMap(value.name)
133
+ };
134
+ var productId = normalizeSnapshotScalar(value.product_id);
135
+ if (productId !== undefined) {
136
+ snapshot.product_id = productId;
137
+ }
138
+ return snapshot;
139
+ }
140
+ function normalizeVirtualCurrencySnapshotList(value) {
141
+ if (!Array.isArray(value)) return [];
142
+ return value.reduce(function (result, item) {
143
+ var normalized = normalizeVirtualCurrencySnapshotItem(item);
144
+ if (normalized) result.push(normalized);
145
+ return result;
146
+ }, []);
147
+ }
148
+ export function buildVirtualCurrencySnapshotFromList(value) {
149
+ if (!Array.isArray(value)) return [];
150
+ return value.reduce(function (result, item) {
151
+ var _item$tag, _item$product_name, _item$par_value, _item$used_par_value;
152
+ if (!isPlainObject(item)) return result;
153
+ var id = normalizeSnapshotScalar(item.id);
154
+ if (id === undefined) return result;
155
+ var sourceTag = String((_item$tag = item.tag) !== null && _item$tag !== void 0 ? _item$tag : '').trim().toLowerCase();
156
+ if (sourceTag !== VIRTUAL_CURRENCY_SNAPSHOT_TAG) return result;
157
+ var snapshot = {
158
+ id: id,
159
+ tag: 'virtual_currency',
160
+ product_name: String((_item$product_name = item.product_name) !== null && _item$product_name !== void 0 ? _item$product_name : ''),
161
+ par_value: String((_item$par_value = item.par_value) !== null && _item$par_value !== void 0 ? _item$par_value : ''),
162
+ used_par_value: String((_item$used_par_value = item.used_par_value) !== null && _item$used_par_value !== void 0 ? _item$used_par_value : ''),
163
+ name: buildVirtualCurrencySnapshotName(item.virtual_currency_display)
164
+ };
165
+ var productId = normalizeSnapshotScalar(item.product_id);
166
+ if (productId !== undefined) {
167
+ snapshot.product_id = productId;
168
+ }
169
+ result.push(snapshot);
170
+ return result;
171
+ }, []);
172
+ }
65
173
  export function normalizeOrderMetaList(value) {
66
174
  if (value === undefined) return undefined;
67
175
  if (!isPlainObject(value)) return undefined;
@@ -69,6 +177,9 @@ export function normalizeOrderMetaList(value) {
69
177
  if (Object.prototype.hasOwnProperty.call(value, 'point_cards_snapshot')) {
70
178
  normalized.point_cards_snapshot = buildPointCardSnapshotFromWalletPassList(value.point_cards_snapshot);
71
179
  }
180
+ if (Object.prototype.hasOwnProperty.call(value, 'virtual_currency_snapshot')) {
181
+ normalized.virtual_currency_snapshot = normalizeVirtualCurrencySnapshotList(value.virtual_currency_snapshot);
182
+ }
72
183
  if (Object.keys(normalized).length > 0) return normalized;
73
184
  return {};
74
185
  }
@@ -96,13 +207,13 @@ export function composeLinePrice(params) {
96
207
  _step;
97
208
  try {
98
209
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
99
- var _ref, _item$num;
210
+ var _ref3, _item$num;
100
211
  var item = _step.value;
101
212
  // markdown(减价)按带符号净额取减;markup/原价维持相加。
102
213
  var signedUnit = getBundleSignedUnit(item, {
103
214
  useOriginal: useOriginalBundle
104
215
  });
105
- var rawNum = (_ref = (_item$num = item === null || item === void 0 ? void 0 : item.num) !== null && _item$num !== void 0 ? _item$num : item === null || item === void 0 ? void 0 : item.quantity) !== null && _ref !== void 0 ? _ref : 1;
216
+ var rawNum = (_ref3 = (_item$num = item === null || item === void 0 ? void 0 : item.num) !== null && _item$num !== void 0 ? _item$num : item === null || item === void 0 ? void 0 : item.quantity) !== null && _ref3 !== void 0 ? _ref3 : 1;
106
217
  var num = new Decimal(Number(rawNum) || 0);
107
218
  total = total.plus(signedUnit.times(num));
108
219
  }
@@ -166,12 +277,12 @@ function getSafeOrderProductNum(num) {
166
277
  return Math.floor(parsedNum);
167
278
  }
168
279
  function getOrderProductDepositUnitTotal(product) {
169
- var _ref2;
280
+ var _ref4;
170
281
  var metadata = product.metadata || {};
171
282
  var paymentPrice = metadata.main_product_attached_bundle_payment_price;
172
283
  var mainSellingPrice = metadata.main_product_selling_price;
173
284
  var fallbackPrice = product.selling_price;
174
- return new Decimal(Number((_ref2 = paymentPrice !== null && paymentPrice !== void 0 ? paymentPrice : mainSellingPrice) !== null && _ref2 !== void 0 ? _ref2 : fallbackPrice) || 0);
285
+ return new Decimal(Number((_ref4 = paymentPrice !== null && paymentPrice !== void 0 ? paymentPrice : mainSellingPrice) !== null && _ref4 !== void 0 ? _ref4 : fallbackPrice) || 0);
175
286
  }
176
287
  function normalizeDepositProtocols(protocols) {
177
288
  if (!Array.isArray(protocols)) return [];
@@ -220,13 +331,13 @@ function handleOrderProductDeposit(params) {
220
331
  };
221
332
  }
222
333
  function resolveOrderProductDepositSource(product, runtimeOrigin) {
223
- var _ref3, _record$custom_deposi, _ref4, _record$variant;
334
+ var _ref5, _record$custom_deposi, _ref6, _record$variant;
224
335
  var record = product;
225
336
  var origin = record._origin || runtimeOrigin || {};
226
337
  var originProduct = origin.product || {};
227
338
  return _objectSpread(_objectSpread(_objectSpread(_objectSpread({}, originProduct), origin), record), {}, {
228
- custom_deposit_data: (_ref3 = (_record$custom_deposi = record.custom_deposit_data) !== null && _record$custom_deposi !== void 0 ? _record$custom_deposi : origin.custom_deposit_data) !== null && _ref3 !== void 0 ? _ref3 : originProduct.custom_deposit_data,
229
- variant: (_ref4 = (_record$variant = record.variant) !== null && _record$variant !== void 0 ? _record$variant : origin.variant) !== null && _ref4 !== void 0 ? _ref4 : originProduct.variant
339
+ custom_deposit_data: (_ref5 = (_record$custom_deposi = record.custom_deposit_data) !== null && _record$custom_deposi !== void 0 ? _record$custom_deposi : origin.custom_deposit_data) !== null && _ref5 !== void 0 ? _ref5 : originProduct.custom_deposit_data,
340
+ variant: (_ref6 = (_record$variant = record.variant) !== null && _record$variant !== void 0 ? _record$variant : origin.variant) !== null && _ref6 !== void 0 ? _ref6 : originProduct.variant
230
341
  });
231
342
  }
232
343
  function getOrderProductDeposit(product, runtimeOrigin) {
@@ -378,12 +489,12 @@ export function isMarkdownBundle(bundle) {
378
489
  * - markup(加价)/原价子商品:维持 `+(bundle_selling_price ?? price)`,行为不变。
379
490
  */
380
491
  export function getBundleSignedUnit(bundle, options) {
381
- var _options$useOriginal, _ref11, _bundle$original_pric2, _bundle$bundle_sellin;
492
+ var _options$useOriginal, _ref13, _bundle$original_pric2, _bundle$bundle_sellin;
382
493
  if (!bundle || _typeof(bundle) !== 'object') return new Decimal(0);
383
494
  var useOriginal = (_options$useOriginal = options === null || options === void 0 ? void 0 : options.useOriginal) !== null && _options$useOriginal !== void 0 ? _options$useOriginal : false;
384
495
  if (isMarkdownBundle(bundle)) {
385
- var _ref5, _ref6, _ref7, _bundle$original_pric, _ref8, _ref9, _ref10, _bundle$custom_price;
386
- var catalog = useOriginal ? (_ref5 = (_ref6 = (_ref7 = (_bundle$original_pric = bundle.original_price) !== null && _bundle$original_pric !== void 0 ? _bundle$original_pric : bundle.product_price) !== null && _ref7 !== void 0 ? _ref7 : bundle.custom_price) !== null && _ref6 !== void 0 ? _ref6 : bundle.base_price) !== null && _ref5 !== void 0 ? _ref5 : bundle.price : (_ref8 = (_ref9 = (_ref10 = (_bundle$custom_price = bundle.custom_price) !== null && _bundle$custom_price !== void 0 ? _bundle$custom_price : bundle.product_price) !== null && _ref10 !== void 0 ? _ref10 : bundle.original_price) !== null && _ref9 !== void 0 ? _ref9 : bundle.base_price) !== null && _ref8 !== void 0 ? _ref8 : bundle.price;
496
+ var _ref7, _ref8, _ref9, _bundle$original_pric, _ref10, _ref11, _ref12, _bundle$custom_price;
497
+ var catalog = useOriginal ? (_ref7 = (_ref8 = (_ref9 = (_bundle$original_pric = bundle.original_price) !== null && _bundle$original_pric !== void 0 ? _bundle$original_pric : bundle.product_price) !== null && _ref9 !== void 0 ? _ref9 : bundle.custom_price) !== null && _ref8 !== void 0 ? _ref8 : bundle.base_price) !== null && _ref7 !== void 0 ? _ref7 : bundle.price : (_ref10 = (_ref11 = (_ref12 = (_bundle$custom_price = bundle.custom_price) !== null && _bundle$custom_price !== void 0 ? _bundle$custom_price : bundle.product_price) !== null && _ref12 !== void 0 ? _ref12 : bundle.original_price) !== null && _ref11 !== void 0 ? _ref11 : bundle.base_price) !== null && _ref10 !== void 0 ? _ref10 : bundle.price;
387
498
  if (catalog !== undefined && catalog !== null && catalog !== '') {
388
499
  var raw = new Decimal(Number(catalog) || 0);
389
500
  // 负值表示价格已是「带符号净额」(如 cart/changePrice 产出的 -3.7),直接取用不再扣 option,
@@ -394,7 +505,7 @@ export function getBundleSignedUnit(bundle, options) {
394
505
  // 仅剩净额(无毛价)兜底:直接取负,不再扣 option
395
506
  return new Decimal(Number(bundle.bundle_selling_price) || 0).abs().negated();
396
507
  }
397
- var rawPrice = useOriginal ? (_ref11 = (_bundle$original_pric2 = bundle.original_price) !== null && _bundle$original_pric2 !== void 0 ? _bundle$original_pric2 : bundle.product_price) !== null && _ref11 !== void 0 ? _ref11 : bundle.price : (_bundle$bundle_sellin = bundle.bundle_selling_price) !== null && _bundle$bundle_sellin !== void 0 ? _bundle$bundle_sellin : bundle.price;
508
+ var rawPrice = useOriginal ? (_ref13 = (_bundle$original_pric2 = bundle.original_price) !== null && _bundle$original_pric2 !== void 0 ? _bundle$original_pric2 : bundle.product_price) !== null && _ref13 !== void 0 ? _ref13 : bundle.price : (_bundle$bundle_sellin = bundle.bundle_selling_price) !== null && _bundle$bundle_sellin !== void 0 ? _bundle$bundle_sellin : bundle.price;
398
509
  return new Decimal(Number(rawPrice) || 0);
399
510
  }
400
511
 
@@ -622,14 +733,37 @@ export function resolveEffectivePerUnitDiscount(product) {
622
733
  if (!Number.isFinite(originalPrice) || !Number.isFinite(finalPrice)) return fromList;
623
734
  return fromList + (originalPrice - finalPrice);
624
735
  }
625
- export function createDefaultOrderRulesHooks() {
736
+ export function createDefaultOrderRulesHooks(getBookings) {
737
+ var getProductStartDate = function getProductStartDate(product) {
738
+ var _ref14, _product$metadata$uni, _product$metadata2, _ref15, _product$booking_uid, _product$metadata3, _product$metadata4, _product$metadata5, _product$metadata6;
739
+ var productUid = String((_ref14 = (_product$metadata$uni = (_product$metadata2 = product.metadata) === null || _product$metadata2 === void 0 ? void 0 : _product$metadata2.unique_identification_number) !== null && _product$metadata$uni !== void 0 ? _product$metadata$uni : product.unique_identification_number) !== null && _ref14 !== void 0 ? _ref14 : '');
740
+ var bookingUid = String((_ref15 = (_product$booking_uid = product.booking_uid) !== null && _product$booking_uid !== void 0 ? _product$booking_uid : (_product$metadata3 = product.metadata) === null || _product$metadata3 === void 0 ? void 0 : _product$metadata3.booking_uid) !== null && _ref15 !== void 0 ? _ref15 : '');
741
+ // 每次读取当前 bookings,覆盖改期、订单回显以及直接调用 Rules 的选券入口。
742
+ var bookings = (getBookings === null || getBookings === void 0 ? void 0 : getBookings()) || [];
743
+ var booking = bookings.find(function (item) {
744
+ var _ref16, _item$product_uid, _item$metadata3;
745
+ return productUid && String((_ref16 = (_item$product_uid = item === null || item === void 0 ? void 0 : item.product_uid) !== null && _item$product_uid !== void 0 ? _item$product_uid : item === null || item === void 0 || (_item$metadata3 = item.metadata) === null || _item$metadata3 === void 0 ? void 0 : _item$metadata3.product_uid) !== null && _ref16 !== void 0 ? _ref16 : '') === productUid;
746
+ }) || bookings.find(function (item) {
747
+ var _ref17, _item$metadata$unique, _item$metadata4;
748
+ return bookingUid && String((_ref17 = (_item$metadata$unique = item === null || item === void 0 || (_item$metadata4 = item.metadata) === null || _item$metadata4 === void 0 ? void 0 : _item$metadata4.unique_identification_number) !== null && _item$metadata$unique !== void 0 ? _item$metadata$unique : item === null || item === void 0 ? void 0 : item.booking_uid) !== null && _ref17 !== void 0 ? _ref17 : '') === bookingUid;
749
+ });
750
+ if (booking) {
751
+ // 严格解析并保留 Invalid Date,让公共时间校验拒绝缺失/非法时间,避免回退到当前时间。
752
+ return dayjs("".concat(booking.start_date, " ").concat(booking.start_time), ['YYYY-MM-DD HH:mm', 'YYYY-MM-DD HH:mm:ss', 'YYYY-MM-DD H:mm', 'YYYY-MM-DD H:mm:ss'], true);
753
+ }
754
+ if (getBookings && (bookingUid || product.booking_id || (_product$metadata4 = product.metadata) !== null && _product$metadata4 !== void 0 && _product$metadata4.booking_id)) {
755
+ return dayjs('');
756
+ }
757
+ var legacyStartDate = ((_product$metadata5 = product.metadata) === null || _product$metadata5 === void 0 ? void 0 : _product$metadata5.start_date) || ((_product$metadata6 = product.metadata) === null || _product$metadata6 === void 0 ? void 0 : _product$metadata6.startDate);
758
+ return legacyStartDate ? dayjs(legacyStartDate) : undefined;
759
+ };
626
760
  var toUnitPriceString = function toUnitPriceString(totalLike, num) {
627
761
  var effectiveNum = Number(num) > 0 ? Number(num) : 1;
628
762
  return new Decimal(Number(totalLike) || 0).dividedBy(effectiveNum).toDecimalPlaces(2).toString();
629
763
  };
630
764
  var getBundleIdentity = function getBundleIdentity(bundle) {
631
- var _ref12, _bundle$bundle_id, _ref13, _ref14, _bundle$bundle_produc, _ref15, _ref16, _bundle$bundle_varian, _ref17, _bundle$bundle_group_;
632
- return [(_ref12 = (_bundle$bundle_id = bundle.bundle_id) !== null && _bundle$bundle_id !== void 0 ? _bundle$bundle_id : bundle.id) !== null && _ref12 !== void 0 ? _ref12 : '', (_ref13 = (_ref14 = (_bundle$bundle_produc = bundle.bundle_product_id) !== null && _bundle$bundle_produc !== void 0 ? _bundle$bundle_produc : bundle._bundle_product_id) !== null && _ref14 !== void 0 ? _ref14 : bundle.product_id) !== null && _ref13 !== void 0 ? _ref13 : '', (_ref15 = (_ref16 = (_bundle$bundle_varian = bundle.bundle_variant_id) !== null && _bundle$bundle_varian !== void 0 ? _bundle$bundle_varian : bundle.variant_id) !== null && _ref16 !== void 0 ? _ref16 : bundle.product_variant_id) !== null && _ref15 !== void 0 ? _ref15 : 0, (_ref17 = (_bundle$bundle_group_ = bundle.bundle_group_id) !== null && _bundle$bundle_group_ !== void 0 ? _bundle$bundle_group_ : bundle.group_id) !== null && _ref17 !== void 0 ? _ref17 : ''].join('|');
765
+ var _ref18, _bundle$bundle_id, _ref19, _ref20, _bundle$bundle_produc, _ref21, _ref22, _bundle$bundle_varian, _ref23, _bundle$bundle_group_;
766
+ return [(_ref18 = (_bundle$bundle_id = bundle.bundle_id) !== null && _bundle$bundle_id !== void 0 ? _bundle$bundle_id : bundle.id) !== null && _ref18 !== void 0 ? _ref18 : '', (_ref19 = (_ref20 = (_bundle$bundle_produc = bundle.bundle_product_id) !== null && _bundle$bundle_produc !== void 0 ? _bundle$bundle_produc : bundle._bundle_product_id) !== null && _ref20 !== void 0 ? _ref20 : bundle.product_id) !== null && _ref19 !== void 0 ? _ref19 : '', (_ref21 = (_ref22 = (_bundle$bundle_varian = bundle.bundle_variant_id) !== null && _bundle$bundle_varian !== void 0 ? _bundle$bundle_varian : bundle.variant_id) !== null && _ref22 !== void 0 ? _ref22 : bundle.product_variant_id) !== null && _ref21 !== void 0 ? _ref21 : 0, (_ref23 = (_bundle$bundle_group_ = bundle.bundle_group_id) !== null && _bundle$bundle_group_ !== void 0 ? _bundle$bundle_group_ : bundle.group_id) !== null && _ref23 !== void 0 ? _ref23 : ''].join('|');
633
767
  };
634
768
  var mergeRulesBundlePrices = function mergeRulesBundlePrices(currentBundle, rulesBundle) {
635
769
  if (!Array.isArray(rulesBundle)) return rulesBundle;
@@ -639,7 +773,7 @@ export function createDefaultOrderRulesHooks() {
639
773
  currentByIdentity.set(getBundleIdentity(bundle), bundle);
640
774
  });
641
775
  return rulesBundle.map(function (bundle) {
642
- var _bundle$price_type_ex2, _ref18, _ref19, _current$price, _ref20, _ref21, _ref22, _current$original_pri;
776
+ var _bundle$price_type_ex2, _ref24, _ref25, _current$price, _ref26, _ref27, _ref28, _current$original_pri;
643
777
  if (!bundle || _typeof(bundle) !== 'object') return bundle;
644
778
  var current = currentByIdentity.get(getBundleIdentity(bundle));
645
779
  if (!current) return bundle;
@@ -648,8 +782,8 @@ export function createDefaultOrderRulesHooks() {
648
782
  } : {});
649
783
  var isProductPriceBundle = ((_bundle$price_type_ex2 = bundle.price_type_ext) !== null && _bundle$price_type_ex2 !== void 0 ? _bundle$price_type_ex2 : current.price_type_ext) === 'product_price';
650
784
  if (!isProductPriceBundle) return bundleWithDisplayFields;
651
- var sourcePrice = (_ref18 = (_ref19 = (_current$price = current.price) !== null && _current$price !== void 0 ? _current$price : current.custom_price) !== null && _ref19 !== void 0 ? _ref19 : current.original_price) !== null && _ref18 !== void 0 ? _ref18 : current.bundle_selling_price;
652
- var originalPrice = (_ref20 = (_ref21 = (_ref22 = (_current$original_pri = current.original_price) !== null && _current$original_pri !== void 0 ? _current$original_pri : current.product_price) !== null && _ref22 !== void 0 ? _ref22 : current.price) !== null && _ref21 !== void 0 ? _ref21 : current.custom_price) !== null && _ref20 !== void 0 ? _ref20 : sourcePrice;
785
+ var sourcePrice = (_ref24 = (_ref25 = (_current$price = current.price) !== null && _current$price !== void 0 ? _current$price : current.custom_price) !== null && _ref25 !== void 0 ? _ref25 : current.original_price) !== null && _ref24 !== void 0 ? _ref24 : current.bundle_selling_price;
786
+ var originalPrice = (_ref26 = (_ref27 = (_ref28 = (_current$original_pri = current.original_price) !== null && _current$original_pri !== void 0 ? _current$original_pri : current.product_price) !== null && _ref28 !== void 0 ? _ref28 : current.price) !== null && _ref27 !== void 0 ? _ref27 : current.custom_price) !== null && _ref26 !== void 0 ? _ref26 : sourcePrice;
653
787
  return _objectSpread(_objectSpread(_objectSpread(_objectSpread({}, bundleWithDisplayFields), sourcePrice !== undefined ? {
654
788
  price: sourcePrice
655
789
  } : {}), originalPrice !== undefined ? {
@@ -661,7 +795,7 @@ export function createDefaultOrderRulesHooks() {
661
795
  };
662
796
  return {
663
797
  getProduct: function getProduct(product) {
664
- var _product$metadata2, _product$metadata3, _product$metadata4, _product$metadata5, _product$metadata6, _metadataAny$_promoti;
798
+ var _product$metadata7, _product$metadata8, _product$metadata9, _metadataAny$_promoti;
665
799
  // source_product_price 是权威源;兜底链:source → mainSelling − options(反推)→ 行 selling_price
666
800
  var metadataAny = product.metadata || {};
667
801
  var optionSum = sumOptionUnitPrice(getProductSkuOptions(product));
@@ -688,7 +822,7 @@ export function createDefaultOrderRulesHooks() {
688
822
  // 否则同 SKU 不同小料会在 calcDiscount 重组时互相覆盖。
689
823
  // 不透明 identity 契约下,normalizeOrderProduct / hydrate 已保证唯一值存在;
690
824
  // 留 fingerprint 分支仅作 Rules 单测里直接传裸 product 时的兜底。
691
- _id: (_product$metadata2 = product.metadata) !== null && _product$metadata2 !== void 0 && _product$metadata2.unique_identification_number ? "".concat(product.product_id, "_").concat(product.product_variant_id, "_").concat(product.metadata.unique_identification_number) : "".concat(product.product_id, "_").concat(product.product_variant_id, "_").concat(buildProductLineFingerprint(getProductSkuOptions(product), product.product_bundle)),
825
+ _id: (_product$metadata7 = product.metadata) !== null && _product$metadata7 !== void 0 && _product$metadata7.unique_identification_number ? "".concat(product.product_id, "_").concat(product.product_variant_id, "_").concat(product.metadata.unique_identification_number) : "".concat(product.product_id, "_").concat(product.product_variant_id, "_").concat(buildProductLineFingerprint(getProductSkuOptions(product), product.product_bundle)),
692
826
  // Rules 内部 getProductTotalPrice / getProductOriginTotalPrice 会各自再叠加 bundle + option,
693
827
  // 所以这里必须喂 source-level(不含 option、不含 bundle、不含折扣)单价,避免双加 option。
694
828
  price: sourcePrice,
@@ -700,23 +834,23 @@ export function createDefaultOrderRulesHooks() {
700
834
  num: product.num || 1,
701
835
  discount_list: product.discount_list || [],
702
836
  bundle: product.product_bundle || [],
703
- booking_id: ((_product$metadata3 = product.metadata) === null || _product$metadata3 === void 0 ? void 0 : _product$metadata3.booking_id) || null,
837
+ booking_id: ((_product$metadata8 = product.metadata) === null || _product$metadata8 === void 0 ? void 0 : _product$metadata8.booking_id) || null,
704
838
  isClient: false,
705
839
  // 勿写死 false:否则 Rules 不会走 total≠origin_total 的手动价推断,
706
840
  // 无券时会把 bundle 价还原成 original_price(手动改价套餐会从 20 回到 30)。
707
841
  isManualDiscount: resolveRulesManualDiscountFlag(metadataAny),
708
- holder_id: (_product$metadata4 = product.metadata) === null || _product$metadata4 === void 0 ? void 0 : _product$metadata4.holder_id,
709
- startDate: ((_product$metadata5 = product.metadata) === null || _product$metadata5 === void 0 ? void 0 : _product$metadata5.start_date) || ((_product$metadata6 = product.metadata) === null || _product$metadata6 === void 0 ? void 0 : _product$metadata6.startDate),
842
+ holder_id: (_product$metadata9 = product.metadata) === null || _product$metadata9 === void 0 ? void 0 : _product$metadata9.holder_id,
843
+ startDate: getProductStartDate(product),
710
844
  main_product_selling_price: metadataAny.main_product_selling_price !== undefined ? new Decimal(Number(metadataAny.main_product_selling_price) || 0).minus(optionSum).toDecimalPlaces(2).toString() : undefined,
711
845
  inPromotion: ((_metadataAny$_promoti = metadataAny._promotion) === null || _metadataAny$_promoti === void 0 ? void 0 : _metadataAny$_promoti.inPromotion) === true,
712
846
  _promotion: metadataAny._promotion
713
847
  };
714
848
  },
715
849
  setProduct: function setProduct(product, values) {
716
- var _ref23, _values$quantity, _ref24, _metadataAny$source_p, _values$discount_list, _values$quantity2;
717
- var nextNum = Number((_ref23 = (_values$quantity = values.quantity) !== null && _values$quantity !== void 0 ? _values$quantity : product.num) !== null && _ref23 !== void 0 ? _ref23 : 1) || 1;
850
+ var _ref29, _values$quantity, _ref30, _metadataAny$source_p, _values$discount_list, _values$quantity2;
851
+ var nextNum = Number((_ref29 = (_values$quantity = values.quantity) !== null && _values$quantity !== void 0 ? _values$quantity : product.num) !== null && _ref29 !== void 0 ? _ref29 : 1) || 1;
718
852
  var metadataAny = product.metadata || {};
719
- var existedSource = (_ref24 = (_metadataAny$source_p = metadataAny.source_product_price) !== null && _metadataAny$source_p !== void 0 ? _metadataAny$source_p : product.selling_price) !== null && _ref24 !== void 0 ? _ref24 : '0';
853
+ var existedSource = (_ref30 = (_metadataAny$source_p = metadataAny.source_product_price) !== null && _metadataAny$source_p !== void 0 ? _metadataAny$source_p : product.selling_price) !== null && _ref30 !== void 0 ? _ref30 : '0';
720
854
  var nextOptions = getProductSkuOptions(product);
721
855
  var optionSum = sumOptionUnitPrice(nextOptions);
722
856
 
@@ -926,7 +1060,7 @@ function formatSubmitBundleItems(bundle) {
926
1060
  var formatOptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
927
1061
  if (!Array.isArray(bundle)) return [];
928
1062
  return bundle.map(function (b) {
929
- var _ref25, _rawBundle$price, _rawBundle$surcharge_, _rawBundle$num, _rawBundle$is_charge_, _rawBundle$bundle_var, _rawBundle$quantity, _rawBundle$extension_, _rawBundle$extension_2, _ref26, _rawBundle$price_type, _ref27, _rawBundle$price_type2, _rawBundle$bundle_gro, _rawBundle$bundle_id, _rawBundle$bundle_pro;
1063
+ var _ref31, _rawBundle$price, _rawBundle$surcharge_, _rawBundle$num, _rawBundle$is_charge_, _rawBundle$bundle_var, _rawBundle$quantity, _rawBundle$extension_, _rawBundle$extension_2, _ref32, _rawBundle$price_type, _ref33, _rawBundle$price_type2, _rawBundle$bundle_gro, _rawBundle$bundle_id, _rawBundle$bundle_pro;
930
1064
  var rawBundle = b && _typeof(b) === 'object' ? b : {};
931
1065
  var existedMetadata = rawBundle.metadata && _typeof(rawBundle.metadata) === 'object' ? rawBundle.metadata : {};
932
1066
  var _customProductBundleMapId = existedMetadata.custom_product_bundle_map_id,
@@ -937,7 +1071,7 @@ function formatSubmitBundleItems(bundle) {
937
1071
  var sellingPrice = formatOptions.virtualSettlementMode ? '0.00' : getBundleSellingMagnitude(rawBundle).toFixed(2);
938
1072
  // payment 价由整单折扣均摊层产出;缺省(无折扣)时与 selling 净额同义。
939
1073
  var paymentPrice = formatOptions.virtualSettlementMode ? '0.00' : rawBundle.bundle_payment_price !== undefined && rawBundle.bundle_payment_price !== null && rawBundle.bundle_payment_price !== '' ? toMoneyString(rawBundle.bundle_payment_price) : sellingPrice;
940
- var priceValue = formatOptions.virtualSettlementMode ? 0 : (_ref25 = (_rawBundle$price = rawBundle.price) !== null && _rawBundle$price !== void 0 ? _rawBundle$price : rawBundle.custom_price) !== null && _ref25 !== void 0 ? _ref25 : rawBundle.bundle_selling_price;
1074
+ var priceValue = formatOptions.virtualSettlementMode ? 0 : (_ref31 = (_rawBundle$price = rawBundle.price) !== null && _rawBundle$price !== void 0 ? _rawBundle$price : rawBundle.custom_price) !== null && _ref31 !== void 0 ? _ref31 : rawBundle.bundle_selling_price;
941
1075
  var relationSurchargeIds = Array.isArray(rawBundle.relation_surcharge_ids) ? rawBundle.relation_surcharge_ids : Array.isArray(existedMetadata.relation_surcharge_ids) ? existedMetadata.relation_surcharge_ids : [];
942
1076
  var surchargeFee = toMoneyString((_rawBundle$surcharge_ = rawBundle.surcharge_fee) !== null && _rawBundle$surcharge_ !== void 0 ? _rawBundle$surcharge_ : existedMetadata.surcharge_fee);
943
1077
  var productDiscountDifference = toBundleNumber(existedMetadata.product_discount_difference, 0);
@@ -956,8 +1090,8 @@ function formatSubmitBundleItems(bundle) {
956
1090
  extension_id: (_rawBundle$extension_ = rawBundle.extension_id) !== null && _rawBundle$extension_ !== void 0 ? _rawBundle$extension_ : 0,
957
1091
  extension_type: (_rawBundle$extension_2 = rawBundle.extension_type) !== null && _rawBundle$extension_2 !== void 0 ? _rawBundle$extension_2 : 'normal',
958
1092
  price: priceValue,
959
- price_type: (_ref26 = (_rawBundle$price_type = rawBundle.price_type) !== null && _rawBundle$price_type !== void 0 ? _rawBundle$price_type : rawBundle.custom_price_type) !== null && _ref26 !== void 0 ? _ref26 : '',
960
- price_type_ext: (_ref27 = (_rawBundle$price_type2 = rawBundle.price_type_ext) !== null && _rawBundle$price_type2 !== void 0 ? _rawBundle$price_type2 : rawBundle.custom_price_type_ext) !== null && _ref27 !== void 0 ? _ref27 : '',
1093
+ price_type: (_ref32 = (_rawBundle$price_type = rawBundle.price_type) !== null && _rawBundle$price_type !== void 0 ? _rawBundle$price_type : rawBundle.custom_price_type) !== null && _ref32 !== void 0 ? _ref32 : '',
1094
+ price_type_ext: (_ref33 = (_rawBundle$price_type2 = rawBundle.price_type_ext) !== null && _rawBundle$price_type2 !== void 0 ? _rawBundle$price_type2 : rawBundle.custom_price_type_ext) !== null && _ref33 !== void 0 ? _ref33 : '',
961
1095
  bundle_selling_price: sellingPrice,
962
1096
  bundle_payment_price: paymentPrice,
963
1097
  option: formatSubmitOptionItems(rawBundle.option, formatOptions),
@@ -993,11 +1127,11 @@ function formatSubmitBundleItems(bundle) {
993
1127
  * 法币仅做字段/metadata 裁剪;虚拟币在出站前再次执行零加价与固定单价断言。
994
1128
  */
995
1129
  function normalizeSubmitProduct(product) {
996
- var _ref29, _submitProduct$bundle, _rawMetadata$product_, _rawMetadata$selected, _rawMetadata$selected2, _submitProduct$produc, _submitProduct$paymen;
1130
+ var _ref35, _submitProduct$bundle, _rawMetadata$product_, _rawMetadata$selected, _rawMetadata$selected2, _submitProduct$produc, _submitProduct$paymen;
997
1131
  var formatOptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
998
- var _ref28 = product,
999
- _runtimeUid = _ref28.unique_identification_number,
1000
- submitProduct = _objectWithoutProperties(_ref28, _excluded2);
1132
+ var _ref34 = product,
1133
+ _runtimeUid = _ref34.unique_identification_number,
1134
+ submitProduct = _objectWithoutProperties(_ref34, _excluded2);
1001
1135
  var num = submitProduct.num,
1002
1136
  _productSurchargeFee = submitProduct.surcharge_fee,
1003
1137
  _deprecatedDiscountAmount = submitProduct.discount_amount,
@@ -1014,7 +1148,7 @@ function normalizeSubmitProduct(product) {
1014
1148
  // 兼容历史 BigSale 编辑链路:bundle_edit 曾被写入 metadata,
1015
1149
  // 出站时需提升到商品顶层;套餐未编辑时也必须显式提交 0。
1016
1150
  var hasProductBundle = Array.isArray(submitProduct.product_bundle) && submitProduct.product_bundle.length > 0;
1017
- var bundleEdit = (_ref29 = (_submitProduct$bundle = submitProduct.bundle_edit) !== null && _submitProduct$bundle !== void 0 ? _submitProduct$bundle : rawMetadata.bundle_edit) !== null && _ref29 !== void 0 ? _ref29 : hasProductBundle ? 0 : undefined;
1151
+ var bundleEdit = (_ref35 = (_submitProduct$bundle = submitProduct.bundle_edit) !== null && _submitProduct$bundle !== void 0 ? _submitProduct$bundle : rawMetadata.bundle_edit) !== null && _ref35 !== void 0 ? _ref35 : hasProductBundle ? 0 : undefined;
1018
1152
  var cleanMetadata = {};
1019
1153
  if (rawMetadata.unique_identification_number) {
1020
1154
  cleanMetadata.unique_identification_number = rawMetadata.unique_identification_number;
@@ -1183,6 +1317,7 @@ export function createDefaultTempOrder(params) {
1183
1317
  request_unique_idempotency_token: '',
1184
1318
  vouchers: [],
1185
1319
  products: [],
1320
+ notes: [],
1186
1321
  bookings: [],
1187
1322
  payments: [],
1188
1323
  surcharges: [],
@@ -1192,7 +1327,11 @@ export function createDefaultTempOrder(params) {
1192
1327
  holder: null,
1193
1328
  metadata: {},
1194
1329
  _extend: {
1195
- productsByUid: {}
1330
+ productsByUid: {},
1331
+ salesNotesState: {
1332
+ loaded: true,
1333
+ dirty: false
1334
+ }
1196
1335
  }
1197
1336
  };
1198
1337
  }
@@ -1240,7 +1379,7 @@ export function resolveSubmitOrderType(params) {
1240
1379
  return 'virtual';
1241
1380
  }
1242
1381
  export function buildSubmitPayload(params) {
1243
- var _tempOrder$metadata2, _tempOrder$customer_i, _tempOrder$country_ca, _tempOrder$phone, _tempOrder$email, _tempOrder$order_numb, _tempOrder$shop_order, _tempOrder$shop_full_, _ref31, _tempOrder$is_price_i, _tempOrder$is_deposit, _enhancedPayload$summ;
1382
+ var _tempOrder$metadata2, _tempOrder$customer_i, _tempOrder$country_ca, _tempOrder$phone, _tempOrder$email, _tempOrder$order_numb, _tempOrder$shop_order, _tempOrder$shop_full_, _ref37, _tempOrder$is_price_i, _tempOrder$is_deposit, _tempOrder$_extend, _enhancedPayload$summ;
1244
1383
  var tempOrder = params.tempOrder,
1245
1384
  cacheId = params.cacheId,
1246
1385
  _params$now = params.now,
@@ -1254,28 +1393,29 @@ export function buildSubmitPayload(params) {
1254
1393
  var scheduleDate = tempOrder.schedule_date || tempOrder.created_at || formatDateTime(now);
1255
1394
  var bookingUuid = createUuidV4();
1256
1395
  var virtualSettlementMode = ((_tempOrder$metadata2 = tempOrder.metadata) === null || _tempOrder$metadata2 === void 0 || (_tempOrder$metadata2 = _tempOrder$metadata2.currency_settlement_config) === null || _tempOrder$metadata2 === void 0 ? void 0 : _tempOrder$metadata2.settlement_type) === 'virtual_currency';
1257
- var _ref30 = tempOrder,
1258
- _extend = _ref30._extend,
1259
- _relationId = _ref30.relation_id,
1260
- _tableFormId = _ref30.table_form_id,
1261
- _resourceId = _ref30.resource_id,
1262
- _summary = _ref30.summary,
1263
- _lastOrderInfo = _ref30.lastOrderInfo,
1264
- _paidAmount = _ref30.paid_amount,
1265
- _shopId = _ref30.shop_id,
1266
- _shopNote = _ref30.shop_note,
1267
- _shopServiceType = _ref30.shop_service_type,
1268
- _startTime = _ref30.start_time,
1269
- _customer = _ref30.customer,
1270
- _discountList = _ref30.discount_list,
1271
- _orderMetaList = _ref30.order_meta_list,
1272
- _rootTaxFee = _ref30.tax_fee,
1273
- _totalAmount = _ref30.total_amount,
1274
- _totalRefundAmount = _ref30.total_refund_amount,
1275
- _createDate = _ref30.create_date,
1276
- _holderId = _ref30.holder_id,
1277
- _paymentStatus = _ref30.payment_status,
1278
- tempOrderRest = _objectWithoutProperties(_ref30, _excluded4);
1396
+ var _ref36 = tempOrder,
1397
+ _extend = _ref36._extend,
1398
+ _relationId = _ref36.relation_id,
1399
+ _tableFormId = _ref36.table_form_id,
1400
+ _resourceId = _ref36.resource_id,
1401
+ _summary = _ref36.summary,
1402
+ _lastOrderInfo = _ref36.lastOrderInfo,
1403
+ _paidAmount = _ref36.paid_amount,
1404
+ _shopId = _ref36.shop_id,
1405
+ _shopNote = _ref36.shop_note,
1406
+ _shopServiceType = _ref36.shop_service_type,
1407
+ _startTime = _ref36.start_time,
1408
+ _customer = _ref36.customer,
1409
+ _discountList = _ref36.discount_list,
1410
+ _orderMetaList = _ref36.order_meta_list,
1411
+ _rootTaxFee = _ref36.tax_fee,
1412
+ _totalAmount = _ref36.total_amount,
1413
+ _totalRefundAmount = _ref36.total_refund_amount,
1414
+ _createDate = _ref36.create_date,
1415
+ _holderId = _ref36.holder_id,
1416
+ _paymentStatus = _ref36.payment_status,
1417
+ _notes = _ref36.notes,
1418
+ tempOrderRest = _objectWithoutProperties(_ref36, _excluded4);
1279
1419
  var resolvedBusinessCode = businessCode !== null && businessCode !== void 0 ? businessCode : tempOrder.business_code;
1280
1420
  var normalizedOrderMetaList = normalizeOrderMetaList(tempOrder.order_meta_list);
1281
1421
  var submitType = resolveSubmitOrderType({
@@ -1286,7 +1426,7 @@ export function buildSubmitPayload(params) {
1286
1426
  tempOrderBusinessCode: tempOrder.business_code,
1287
1427
  bookings: tempOrder.bookings
1288
1428
  });
1289
- var payload = _objectSpread(_objectSpread(_objectSpread({}, tempOrderRest), {}, {
1429
+ var payload = _objectSpread(_objectSpread(_objectSpread(_objectSpread({}, tempOrderRest), {}, {
1290
1430
  customer_id: (_tempOrder$customer_i = tempOrder.customer_id) !== null && _tempOrder$customer_i !== void 0 ? _tempOrder$customer_i : 1,
1291
1431
  customer_name: tempOrder.customer_name || 'Walk-In',
1292
1432
  country_calling_code: String((_tempOrder$country_ca = tempOrder.country_calling_code) !== null && _tempOrder$country_ca !== void 0 ? _tempOrder$country_ca : ''),
@@ -1300,7 +1440,7 @@ export function buildSubmitPayload(params) {
1300
1440
  type: submitType,
1301
1441
  business_code: resolvedBusinessCode,
1302
1442
  sales_channel: tempOrder.sales_channel || 'my_pisel',
1303
- order_sales_channel: (_ref31 = channel !== null && channel !== void 0 ? channel : tempOrder.order_sales_channel) !== null && _ref31 !== void 0 ? _ref31 : 'online_store',
1443
+ order_sales_channel: (_ref37 = channel !== null && channel !== void 0 ? channel : tempOrder.order_sales_channel) !== null && _ref37 !== void 0 ? _ref37 : 'online_store',
1304
1444
  status: tempOrder.status || 'normal'
1305
1445
  }, params.includePaymentStatus !== false ? {
1306
1446
  payment_status: tempOrder.payment_status || 'payment_processing'
@@ -1328,15 +1468,20 @@ export function buildSubmitPayload(params) {
1328
1468
  // holder: tempOrder.holder || null,
1329
1469
  summary: summary || tempOrder.summary || createEmptySummary(),
1330
1470
  metadata: function () {
1331
- var _ref32 = tempOrder.metadata || {},
1332
- _collectPax = _ref32.collect_pax,
1333
- _tableOccupancyDuration = _ref32.table_occupancy_duration,
1334
- _cartSettlementKey = _ref32.cart_settlement_key,
1335
- _cartSettlementSnapshot = _ref32.cart_settlement_snapshot,
1336
- _legalCurrencySnapshot = _ref32.legal_currency_snapshot,
1337
- rest = _objectWithoutProperties(_ref32, _excluded5);
1471
+ var _ref38 = tempOrder.metadata || {},
1472
+ _collectPax = _ref38.collect_pax,
1473
+ _tableOccupancyDuration = _ref38.table_occupancy_duration,
1474
+ _cartSettlementKey = _ref38.cart_settlement_key,
1475
+ _cartSettlementSnapshot = _ref38.cart_settlement_snapshot,
1476
+ _legalCurrencySnapshot = _ref38.legal_currency_snapshot,
1477
+ rest = _objectWithoutProperties(_ref38, _excluded5);
1338
1478
  return _objectSpread({}, rest);
1339
- }(),
1479
+ }()
1480
+ }, (_tempOrder$_extend = tempOrder._extend) !== null && _tempOrder$_extend !== void 0 && (_tempOrder$_extend = _tempOrder$_extend.salesNotesState) !== null && _tempOrder$_extend !== void 0 && _tempOrder$_extend.dirty ? {
1481
+ notes: encodeSalesNotes(tempOrder.notes || [], {
1482
+ allowUnresolvedOrderTarget: true
1483
+ })
1484
+ } : {}), {}, {
1340
1485
  products: (tempOrder.products || []).map(function (product) {
1341
1486
  return normalizeSubmitProduct(product, {
1342
1487
  virtualSettlementMode: virtualSettlementMode
@@ -1468,7 +1613,7 @@ export function hasAssignedHolderId(value) {
1468
1613
  * clearTempOrderHolderAssignments(tempOrder);
1469
1614
  */
1470
1615
  export function clearTempOrderHolderAssignments(tempOrder) {
1471
- var _tempOrder$_extend;
1616
+ var _tempOrder$_extend2;
1472
1617
  var changed = false;
1473
1618
  var resetHolderField = function resetHolderField(target) {
1474
1619
  var key = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'holder_id';
@@ -1509,7 +1654,7 @@ export function clearTempOrderHolderAssignments(tempOrder) {
1509
1654
  } finally {
1510
1655
  _iterator9.f();
1511
1656
  }
1512
- var productsByUid = (_tempOrder$_extend = tempOrder._extend) === null || _tempOrder$_extend === void 0 ? void 0 : _tempOrder$_extend.productsByUid;
1657
+ var productsByUid = (_tempOrder$_extend2 = tempOrder._extend) === null || _tempOrder$_extend2 === void 0 ? void 0 : _tempOrder$_extend2.productsByUid;
1513
1658
  if (productsByUid && _typeof(productsByUid) === 'object') {
1514
1659
  for (var _i4 = 0, _Object$values = Object.values(productsByUid); _i4 < _Object$values.length; _i4++) {
1515
1660
  var entry = _Object$values[_i4];
@@ -1533,24 +1678,24 @@ export function clearTempOrderHolderAssignments(tempOrder) {
1533
1678
  * getOrderProductLineUid({ metadata: { unique_identification_number: 'line-1' } }); // 'line-1'
1534
1679
  */
1535
1680
  export function getOrderProductLineUid(product) {
1536
- var _product$metadata$uni, _product$metadata7;
1681
+ var _product$metadata$uni2, _product$metadata10;
1537
1682
  if (!product || _typeof(product) !== 'object') return null;
1538
- var uid = (_product$metadata$uni = (_product$metadata7 = product.metadata) === null || _product$metadata7 === void 0 ? void 0 : _product$metadata7.unique_identification_number) !== null && _product$metadata$uni !== void 0 ? _product$metadata$uni : product.unique_identification_number;
1683
+ var uid = (_product$metadata$uni2 = (_product$metadata10 = product.metadata) === null || _product$metadata10 === void 0 ? void 0 : _product$metadata10.unique_identification_number) !== null && _product$metadata$uni2 !== void 0 ? _product$metadata$uni2 : product.unique_identification_number;
1539
1684
  if (uid === undefined || uid === null || uid === '') return null;
1540
1685
  return String(uid);
1541
1686
  }
1542
1687
  export function getRuntimeProductOrigin(tempOrder, product) {
1543
- var _tempOrder$_extend2, _tempOrder$_extend3;
1688
+ var _tempOrder$_extend3, _tempOrder$_extend4;
1544
1689
  var uid = getOrderProductLineUid(product);
1545
- if (uid && tempOrder !== null && tempOrder !== void 0 && (_tempOrder$_extend2 = tempOrder._extend) !== null && _tempOrder$_extend2 !== void 0 && (_tempOrder$_extend2 = _tempOrder$_extend2.productsByUid) !== null && _tempOrder$_extend2 !== void 0 && (_tempOrder$_extend2 = _tempOrder$_extend2[uid]) !== null && _tempOrder$_extend2 !== void 0 && _tempOrder$_extend2.origin) {
1690
+ if (uid && tempOrder !== null && tempOrder !== void 0 && (_tempOrder$_extend3 = tempOrder._extend) !== null && _tempOrder$_extend3 !== void 0 && (_tempOrder$_extend3 = _tempOrder$_extend3.productsByUid) !== null && _tempOrder$_extend3 !== void 0 && (_tempOrder$_extend3 = _tempOrder$_extend3[uid]) !== null && _tempOrder$_extend3 !== void 0 && _tempOrder$_extend3.origin) {
1546
1691
  return tempOrder._extend.productsByUid[uid].origin;
1547
1692
  }
1548
1693
  var matchedProduct = ((tempOrder === null || tempOrder === void 0 ? void 0 : tempOrder.products) || []).find(function (item) {
1549
- var _ref33, _item$product_id, _ref34, _product$product_id;
1550
- return item === product || getOrderProductLineUid(item) === uid || String((_ref33 = (_item$product_id = item === null || item === void 0 ? void 0 : item.product_id) !== null && _item$product_id !== void 0 ? _item$product_id : item === null || item === void 0 ? void 0 : item.id) !== null && _ref33 !== void 0 ? _ref33 : '') === String((_ref34 = (_product$product_id = product === null || product === void 0 ? void 0 : product.product_id) !== null && _product$product_id !== void 0 ? _product$product_id : product === null || product === void 0 ? void 0 : product.id) !== null && _ref34 !== void 0 ? _ref34 : '');
1694
+ var _ref39, _item$product_id, _ref40, _product$product_id;
1695
+ return item === product || getOrderProductLineUid(item) === uid || String((_ref39 = (_item$product_id = item === null || item === void 0 ? void 0 : item.product_id) !== null && _item$product_id !== void 0 ? _item$product_id : item === null || item === void 0 ? void 0 : item.id) !== null && _ref39 !== void 0 ? _ref39 : '') === String((_ref40 = (_product$product_id = product === null || product === void 0 ? void 0 : product.product_id) !== null && _product$product_id !== void 0 ? _product$product_id : product === null || product === void 0 ? void 0 : product.id) !== null && _ref40 !== void 0 ? _ref40 : '');
1551
1696
  });
1552
1697
  var matchedUid = matchedProduct ? getOrderProductLineUid(matchedProduct) : '';
1553
- return matchedUid ? (tempOrder === null || tempOrder === void 0 || (_tempOrder$_extend3 = tempOrder._extend) === null || _tempOrder$_extend3 === void 0 || (_tempOrder$_extend3 = _tempOrder$_extend3.productsByUid) === null || _tempOrder$_extend3 === void 0 || (_tempOrder$_extend3 = _tempOrder$_extend3[matchedUid]) === null || _tempOrder$_extend3 === void 0 ? void 0 : _tempOrder$_extend3.origin) || null : null;
1698
+ return matchedUid ? (tempOrder === null || tempOrder === void 0 || (_tempOrder$_extend4 = tempOrder._extend) === null || _tempOrder$_extend4 === void 0 || (_tempOrder$_extend4 = _tempOrder$_extend4.productsByUid) === null || _tempOrder$_extend4 === void 0 || (_tempOrder$_extend4 = _tempOrder$_extend4[matchedUid]) === null || _tempOrder$_extend4 === void 0 ? void 0 : _tempOrder$_extend4.origin) || null : null;
1554
1699
  }
1555
1700
  export function isHolderConfigRequired(holderConfig) {
1556
1701
  if (!holderConfig || _typeof(holderConfig) !== 'object') return false;
@@ -2,10 +2,9 @@
2
2
  * 现金支付推荐算法
3
3
  *
4
4
  * 核心原理:
5
- * 1. 每个推荐金额都应该是独立的最优组合
6
- * 2. 不推荐在已有最优解基础上添加额外面额的组合
7
- * 3. 优先推荐使用不同数量币种的组合
8
- * 4. 根据组合判断去重,避免扩展组合
5
+ * 1. 第一项始终是精确应付金额
6
+ * 2. 其余推荐只能是严格大于应付金额的真实币种面额
7
+ * 3. 最多推荐三个更高面额
9
8
  */
10
9
  /**
11
10
  * 常见国家货币面额配置
@@ -13,7 +12,7 @@
13
12
  export declare const CURRENCY_DENOMINATIONS: Record<string, number[]>;
14
13
  /**
15
14
  * 最优支付金额推荐算法
16
- * 推荐通过不同数量面额组合刚好足够支付的最小金额
15
+ * 返回精确应付金额,以及最多三个更高的真实币种面额
17
16
  *
18
17
  * @param targetAmount 目标金额
19
18
  * @param denominations 币种面值数组