@pisell/pisellos 2.2.178 → 2.2.180

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 (182) hide show
  1. package/dist/modules/Customer/index.d.ts +0 -6
  2. package/dist/modules/Customer/index.js +83 -129
  3. package/dist/modules/Customer/types.d.ts +0 -2
  4. package/dist/modules/Discount/index.d.ts +4 -2
  5. package/dist/modules/Discount/index.js +93 -8
  6. package/dist/modules/Discount/types.d.ts +7 -1
  7. package/dist/modules/Order/index.d.ts +17 -87
  8. package/dist/modules/Order/index.js +501 -1357
  9. package/dist/modules/Order/types.d.ts +19 -198
  10. package/dist/modules/Order/types.js +0 -31
  11. package/dist/modules/Order/utils.d.ts +1 -50
  12. package/dist/modules/Order/utils.js +32 -261
  13. package/dist/modules/Quotation/index.d.ts +1 -0
  14. package/dist/modules/Quotation/index.js +21 -23
  15. package/dist/modules/Rules/index.d.ts +0 -4
  16. package/dist/modules/Rules/index.js +10 -26
  17. package/dist/modules/SalesSummary/index.js +2 -4
  18. package/dist/modules/SalesSummary/utils.js +7 -21
  19. package/dist/modules/Schedule/index.js +2 -6
  20. package/dist/modules/index.d.ts +0 -1
  21. package/dist/modules/index.js +1 -2
  22. package/dist/server/index.js +29 -87
  23. package/dist/server/modules/order/index.d.ts +0 -23
  24. package/dist/server/modules/order/index.js +46 -123
  25. package/dist/server/modules/order/types.d.ts +2 -0
  26. package/dist/server/modules/order/utils/filterOrders.js +6 -20
  27. package/dist/server/modules/products/index.d.ts +1 -1
  28. package/dist/server/modules/products/index.js +113 -130
  29. package/dist/server/modules/schedule/index.js +6 -13
  30. package/dist/solution/BaseSales/index.d.ts +7 -89
  31. package/dist/solution/BaseSales/index.js +375 -1494
  32. package/dist/solution/BaseSales/types.d.ts +1 -67
  33. package/dist/solution/BaseSales/types.js +1 -3
  34. package/dist/solution/BaseSales/utils/parseSalesResponse.d.ts +1 -0
  35. package/dist/solution/BaseSales/utils/parseSalesResponse.js +1 -1
  36. package/dist/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +16 -68
  37. package/dist/solution/BaseSales/utils.js +8 -46
  38. package/dist/solution/BookingByStep/index.d.ts +1 -1
  39. package/dist/solution/BookingTicket/index.d.ts +1 -133
  40. package/dist/solution/BookingTicket/index.js +175 -780
  41. package/dist/solution/BookingTicket/types.d.ts +0 -2
  42. package/dist/solution/BookingTicket/types.js +0 -3
  43. package/dist/solution/BookingTicket/utils/cartView.js +2 -4
  44. package/dist/solution/ScanOrder/index.d.ts +3 -9
  45. package/dist/solution/ScanOrder/index.js +128 -231
  46. package/dist/solution/ScanOrder/utils.js +8 -46
  47. package/dist/solution/ShopDiscount/index.d.ts +1 -0
  48. package/dist/solution/ShopDiscount/index.js +23 -18
  49. package/dist/solution/VenueBooking/index.d.ts +9 -5
  50. package/dist/solution/VenueBooking/index.js +55 -103
  51. package/dist/solution/VenueBooking/utils/slotMerge.d.ts +0 -4
  52. package/dist/solution/VenueBooking/utils/slotMerge.js +0 -10
  53. package/lib/model/strategy/adapter/promotion/index.js +0 -49
  54. package/lib/modules/Customer/index.d.ts +0 -6
  55. package/lib/modules/Customer/index.js +11 -26
  56. package/lib/modules/Customer/types.d.ts +0 -2
  57. package/lib/modules/Discount/index.d.ts +4 -2
  58. package/lib/modules/Discount/index.js +63 -8
  59. package/lib/modules/Discount/types.d.ts +7 -1
  60. package/lib/modules/Order/index.d.ts +17 -87
  61. package/lib/modules/Order/index.js +150 -677
  62. package/lib/modules/Order/types.d.ts +19 -198
  63. package/lib/modules/Order/types.js +0 -1
  64. package/lib/modules/Order/utils.d.ts +1 -50
  65. package/lib/modules/Order/utils.js +22 -229
  66. package/lib/modules/Quotation/index.d.ts +1 -0
  67. package/lib/modules/Quotation/index.js +15 -18
  68. package/lib/modules/Rules/index.d.ts +0 -4
  69. package/lib/modules/Rules/index.js +14 -22
  70. package/lib/modules/SalesSummary/index.js +2 -4
  71. package/lib/modules/SalesSummary/utils.js +7 -21
  72. package/lib/modules/Schedule/index.js +1 -3
  73. package/lib/modules/index.d.ts +0 -1
  74. package/lib/modules/index.js +1 -3
  75. package/lib/server/index.js +4 -41
  76. package/lib/server/modules/order/index.d.ts +0 -23
  77. package/lib/server/modules/order/index.js +14 -46
  78. package/lib/server/modules/order/types.d.ts +2 -0
  79. package/lib/server/modules/order/utils/filterOrders.js +4 -12
  80. package/lib/server/modules/products/index.d.ts +1 -1
  81. package/lib/server/modules/products/index.js +20 -30
  82. package/lib/server/modules/schedule/index.js +1 -2
  83. package/lib/solution/BaseSales/index.d.ts +7 -89
  84. package/lib/solution/BaseSales/index.js +22 -736
  85. package/lib/solution/BaseSales/types.d.ts +1 -67
  86. package/lib/solution/BaseSales/types.js +1 -3
  87. package/lib/solution/BaseSales/utils/parseSalesResponse.d.ts +1 -0
  88. package/lib/solution/BaseSales/utils/parseSalesResponse.js +1 -0
  89. package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +12 -71
  90. package/lib/solution/BaseSales/utils.js +6 -46
  91. package/lib/solution/BookingByStep/index.d.ts +1 -1
  92. package/lib/solution/BookingTicket/index.d.ts +1 -133
  93. package/lib/solution/BookingTicket/index.js +8 -352
  94. package/lib/solution/BookingTicket/types.d.ts +0 -2
  95. package/lib/solution/BookingTicket/types.js +0 -6
  96. package/lib/solution/BookingTicket/utils/cartView.js +2 -4
  97. package/lib/solution/ScanOrder/index.d.ts +3 -9
  98. package/lib/solution/ScanOrder/index.js +66 -147
  99. package/lib/solution/ScanOrder/utils.js +6 -46
  100. package/lib/solution/ShopDiscount/index.d.ts +1 -0
  101. package/lib/solution/ShopDiscount/index.js +4 -2
  102. package/lib/solution/VenueBooking/index.d.ts +9 -5
  103. package/lib/solution/VenueBooking/index.js +14 -50
  104. package/lib/solution/VenueBooking/utils/slotMerge.d.ts +0 -4
  105. package/lib/solution/VenueBooking/utils/slotMerge.js +0 -10
  106. package/package.json +2 -2
  107. package/dist/modules/BookingContext/index.d.ts +0 -37
  108. package/dist/modules/BookingContext/index.js +0 -436
  109. package/dist/modules/BookingContext/types.d.ts +0 -102
  110. package/dist/modules/BookingContext/types.js +0 -51
  111. package/dist/modules/BookingContext/utils/buildCacheItemFromOrderLine.d.ts +0 -16
  112. package/dist/modules/BookingContext/utils/buildCacheItemFromOrderLine.js +0 -193
  113. package/dist/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.d.ts +0 -8
  114. package/dist/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.js +0 -137
  115. package/dist/modules/BookingContext/utils/cacheItemToBookingInput.d.ts +0 -75
  116. package/dist/modules/BookingContext/utils/cacheItemToBookingInput.js +0 -215
  117. package/dist/modules/BookingContext/utils/flexible.d.ts +0 -28
  118. package/dist/modules/BookingContext/utils/flexible.js +0 -56
  119. package/dist/modules/BookingContext/utils/formatResourceList.d.ts +0 -8
  120. package/dist/modules/BookingContext/utils/formatResourceList.js +0 -38
  121. package/dist/modules/BookingContext/utils/index.d.ts +0 -11
  122. package/dist/modules/BookingContext/utils/index.js +0 -11
  123. package/dist/modules/BookingContext/utils/noResource.d.ts +0 -13
  124. package/dist/modules/BookingContext/utils/noResource.js +0 -77
  125. package/dist/modules/BookingContext/utils/productExtend.d.ts +0 -72
  126. package/dist/modules/BookingContext/utils/productExtend.js +0 -339
  127. package/dist/modules/BookingContext/utils/resourceErrors.d.ts +0 -41
  128. package/dist/modules/BookingContext/utils/resourceErrors.js +0 -74
  129. package/dist/modules/BookingContext/utils/resourceSelection.d.ts +0 -7
  130. package/dist/modules/BookingContext/utils/resourceSelection.js +0 -24
  131. package/dist/modules/BookingContext/utils/resources.d.ts +0 -80
  132. package/dist/modules/BookingContext/utils/resources.js +0 -486
  133. package/dist/modules/BookingContext/utils/serviceTimes.d.ts +0 -55
  134. package/dist/modules/BookingContext/utils/serviceTimes.js +0 -151
  135. package/dist/modules/BookingContext/utils/timeSlices.d.ts +0 -42
  136. package/dist/modules/BookingContext/utils/timeSlices.js +0 -100
  137. package/dist/modules/Order/utils/manualProductDiscount.d.ts +0 -106
  138. package/dist/modules/Order/utils/manualProductDiscount.js +0 -212
  139. package/dist/solution/BaseSales/utils/cartPromotion.d.ts +0 -275
  140. package/dist/solution/BaseSales/utils/cartPromotion.js +0 -1258
  141. package/dist/solution/BaseSales/utils/quotationPrice.d.ts +0 -7
  142. package/dist/solution/BaseSales/utils/quotationPrice.js +0 -237
  143. package/dist/solution/BookingTicket/utils/addProductDecision.d.ts +0 -113
  144. package/dist/solution/BookingTicket/utils/addProductDecision.js +0 -346
  145. package/lib/modules/BookingContext/index.d.ts +0 -37
  146. package/lib/modules/BookingContext/index.js +0 -297
  147. package/lib/modules/BookingContext/types.d.ts +0 -102
  148. package/lib/modules/BookingContext/types.js +0 -34
  149. package/lib/modules/BookingContext/utils/buildCacheItemFromOrderLine.d.ts +0 -16
  150. package/lib/modules/BookingContext/utils/buildCacheItemFromOrderLine.js +0 -207
  151. package/lib/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.d.ts +0 -8
  152. package/lib/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.js +0 -141
  153. package/lib/modules/BookingContext/utils/cacheItemToBookingInput.d.ts +0 -75
  154. package/lib/modules/BookingContext/utils/cacheItemToBookingInput.js +0 -198
  155. package/lib/modules/BookingContext/utils/flexible.d.ts +0 -28
  156. package/lib/modules/BookingContext/utils/flexible.js +0 -80
  157. package/lib/modules/BookingContext/utils/formatResourceList.d.ts +0 -8
  158. package/lib/modules/BookingContext/utils/formatResourceList.js +0 -50
  159. package/lib/modules/BookingContext/utils/index.d.ts +0 -11
  160. package/lib/modules/BookingContext/utils/index.js +0 -43
  161. package/lib/modules/BookingContext/utils/noResource.d.ts +0 -13
  162. package/lib/modules/BookingContext/utils/noResource.js +0 -90
  163. package/lib/modules/BookingContext/utils/productExtend.d.ts +0 -72
  164. package/lib/modules/BookingContext/utils/productExtend.js +0 -283
  165. package/lib/modules/BookingContext/utils/resourceErrors.d.ts +0 -41
  166. package/lib/modules/BookingContext/utils/resourceErrors.js +0 -80
  167. package/lib/modules/BookingContext/utils/resourceSelection.d.ts +0 -7
  168. package/lib/modules/BookingContext/utils/resourceSelection.js +0 -46
  169. package/lib/modules/BookingContext/utils/resources.d.ts +0 -80
  170. package/lib/modules/BookingContext/utils/resources.js +0 -377
  171. package/lib/modules/BookingContext/utils/serviceTimes.d.ts +0 -55
  172. package/lib/modules/BookingContext/utils/serviceTimes.js +0 -162
  173. package/lib/modules/BookingContext/utils/timeSlices.d.ts +0 -42
  174. package/lib/modules/BookingContext/utils/timeSlices.js +0 -124
  175. package/lib/modules/Order/utils/manualProductDiscount.d.ts +0 -106
  176. package/lib/modules/Order/utils/manualProductDiscount.js +0 -207
  177. package/lib/solution/BaseSales/utils/cartPromotion.d.ts +0 -275
  178. package/lib/solution/BaseSales/utils/cartPromotion.js +0 -836
  179. package/lib/solution/BaseSales/utils/quotationPrice.d.ts +0 -7
  180. package/lib/solution/BaseSales/utils/quotationPrice.js +0 -277
  181. package/lib/solution/BookingTicket/utils/addProductDecision.d.ts +0 -113
  182. package/lib/solution/BookingTicket/utils/addProductDecision.js +0 -318
@@ -1,151 +0,0 @@
1
- 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; }
2
- 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; }
3
- 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; }
4
- function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
5
- 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); }
6
- 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); }
7
- import dayjs from 'dayjs';
8
- import { flexibleObj, getDurationValue } from "./flexible";
9
-
10
- /**
11
- * 判断商品是否为跨日预约(duration.type === 'days')。与 info2 isMultiDayProduct 等价。
12
- */
13
- export function isMultiDayProduct(product) {
14
- var _product$duration;
15
- return (product === null || product === void 0 || (_product$duration = product.duration) === null || _product$duration === void 0 ? void 0 : _product$duration.type) === 'days';
16
- }
17
-
18
- /**
19
- * 判断 cacheItem 是否为 session 商品(extension_type ∈ session_product / session_ticket)。
20
- */
21
- export function isSessionProduct(cacheItem) {
22
- return ['session_product', 'session_ticket'].includes(cacheItem === null || cacheItem === void 0 ? void 0 : cacheItem.extension_type);
23
- }
24
-
25
- /** 从 catalog `cartDetailValue` 或 `_extend.other` 取 session 快照。 */
26
- export function getSessionFromItem(item) {
27
- var _item$cartDetailValue, _item$cartDetailValue2, _item$_extend;
28
- var session = (_item$cartDetailValue = item === null || item === void 0 || (_item$cartDetailValue2 = item.cartDetailValue) === null || _item$cartDetailValue2 === void 0 ? void 0 : _item$cartDetailValue2.session) !== null && _item$cartDetailValue !== void 0 ? _item$cartDetailValue : item === null || item === void 0 || (_item$_extend = item._extend) === null || _item$_extend === void 0 || (_item$_extend = _item$_extend.other) === null || _item$_extend === void 0 ? void 0 : _item$_extend.session;
29
- return session && _typeof(session) === 'object' ? session : null;
30
- }
31
-
32
- /**
33
- * 将 cartDetailValue.session 写入 _extend 的起止时间(与 info2 getServiceStartTimeAndEndTime 的 session 分支一致)。
34
- * 日历日优先用 ctx.date,时分取自 session.start_at / end_at 或 session.start_time / end_time。
35
- */
36
- export function applySessionTimesToExtend(item, extend, ctx) {
37
- var _extend$other$session, _extend$other, _session$start_time, _session$end_time;
38
- var session = (_extend$other$session = extend === null || extend === void 0 || (_extend$other = extend.other) === null || _extend$other === void 0 ? void 0 : _extend$other.session) !== null && _extend$other$session !== void 0 ? _extend$other$session : getSessionFromItem(item);
39
- if (!session || !isSessionProduct(item)) {
40
- return extend;
41
- }
42
- var baseDate = ctx !== null && ctx !== void 0 && ctx.date ? dayjs(ctx.date) : dayjs();
43
- var startAt = dayjs("".concat(baseDate.format('YYYY-MM-DD'), " ").concat(dayjs(session.start_at).format('HH:mm:ss')));
44
- var endAt = dayjs("".concat(baseDate.format('YYYY-MM-DD'), " ").concat(dayjs(session.end_at).format('HH:mm:ss')));
45
- var nextExtend = _objectSpread(_objectSpread({}, extend), {}, {
46
- other: _objectSpread(_objectSpread({}, extend.other || {}), {}, {
47
- session: session
48
- }),
49
- start_date: startAt,
50
- startDate: startAt,
51
- start_time: (_session$start_time = session.start_time) !== null && _session$start_time !== void 0 ? _session$start_time : dayjs(session.start_at).format('HH:mm'),
52
- end_date: endAt,
53
- endDate: endAt,
54
- end_time: (_session$end_time = session.end_time) !== null && _session$end_time !== void 0 ? _session$end_time : dayjs(session.end_at).format('HH:mm')
55
- });
56
- return _objectSpread(_objectSpread({}, nextExtend), {}, {
57
- duration: getDays({
58
- _extend: nextExtend
59
- }, 'minutes')
60
- });
61
- }
62
-
63
- /**
64
- * 是否应写入 booking(与 Product.utils isNormalProduct 对齐,并覆盖 session_ticket / cartDetailValue.session)。
65
- */
66
- export function isBookingProduct(item) {
67
- var _item$schedules, _item$scheduleIds;
68
- if (!item) return false;
69
- if (item.duration) return true;
70
- if (item !== null && item !== void 0 && (_item$schedules = item.schedules) !== null && _item$schedules !== void 0 && _item$schedules.length) return true;
71
- if (item !== null && item !== void 0 && (_item$scheduleIds = item['schedule.ids']) !== null && _item$scheduleIds !== void 0 && _item$scheduleIds.length) return true;
72
- if (isSessionProduct(item)) return true;
73
- if (getSessionFromItem(item)) return true;
74
- return false;
75
- }
76
-
77
- /**
78
- * 处理 'now' 时间占位:'now' → 当前 HH:mm;其他原样返回。
79
- * 与 info2 `getServeStartTime` 等价。
80
- */
81
- export function getServeStartTime(startTime) {
82
- if (startTime === 'now') return dayjs().format('HH:mm');
83
- return startTime || '';
84
- }
85
-
86
- /**
87
- * 计算商品的开始结束时间(统一为 dayjs 实例)。
88
- * 与 info2 `getServiceTimes` 行为等价:
89
- * - 跨日商品:startDate = start_date + start_time,endDate = _extend.end_date 原样
90
- * - session 商品:从 _extend.other.session 取 start_at / end_at
91
- * - 普通商品:startDate + duration(含 flexible 处理)
92
- */
93
- export function getServiceTimes(service) {
94
- var _service$_extend, _service$_extend2, _service$_extend6, _service$_extend7;
95
- var startDate = dayjs("".concat(dayjs(service === null || service === void 0 || (_service$_extend = service._extend) === null || _service$_extend === void 0 ? void 0 : _service$_extend.start_date).format('YYYY-MM-DD'), " ").concat(getServeStartTime(service === null || service === void 0 || (_service$_extend2 = service._extend) === null || _service$_extend2 === void 0 ? void 0 : _service$_extend2.start_time)));
96
- if (isMultiDayProduct(service)) {
97
- var _service$_extend3, _service$_extend$end_, _service$_extend4, _service$_extend5;
98
- var startTime = getServeStartTime(service === null || service === void 0 || (_service$_extend3 = service._extend) === null || _service$_extend3 === void 0 ? void 0 : _service$_extend3.start_time);
99
- var endDateRaw = (_service$_extend$end_ = service === null || service === void 0 || (_service$_extend4 = service._extend) === null || _service$_extend4 === void 0 ? void 0 : _service$_extend4.end_date) !== null && _service$_extend$end_ !== void 0 ? _service$_extend$end_ : service === null || service === void 0 || (_service$_extend5 = service._extend) === null || _service$_extend5 === void 0 ? void 0 : _service$_extend5.endDate;
100
- var endBase = dayjs(endDateRaw);
101
- // 跨日结束日保留与开始相同的时刻(如 11:24),避免 end_date 仅日期时被解析为 00:00
102
- var _endDate = endBase.isValid() ? dayjs("".concat(endBase.format('YYYY-MM-DD'), " ").concat(startTime)) : endBase;
103
- return {
104
- startDate: startDate,
105
- endDate: _endDate
106
- };
107
- }
108
- var session = service === null || service === void 0 || (_service$_extend6 = service._extend) === null || _service$_extend6 === void 0 || (_service$_extend6 = _service$_extend6.other) === null || _service$_extend6 === void 0 ? void 0 : _service$_extend6.session;
109
- if (isSessionProduct(service) && session) {
110
- return {
111
- startDate: dayjs(session.start_at),
112
- endDate: dayjs(session.end_at)
113
- };
114
- }
115
- var endDate = startDate.add(flexibleObj.getValue(service === null || service === void 0 || (_service$_extend7 = service._extend) === null || _service$_extend7 === void 0 ? void 0 : _service$_extend7.duration), 'minute');
116
- return {
117
- startDate: startDate,
118
- endDate: endDate
119
- };
120
- }
121
-
122
- /**
123
- * 跨日预约相关:把 _extend.start_date / end_date 都对齐到 dayjs startOf('day')。
124
- * 与 info2 `formatDayDate` 等价。
125
- */
126
- export function formatDayDate(_extend) {
127
- return {
128
- start_date: dayjs(_extend === null || _extend === void 0 ? void 0 : _extend.start_date).startOf('day'),
129
- end_date: dayjs(_extend === null || _extend === void 0 ? void 0 : _extend.end_date).startOf('day')
130
- };
131
- }
132
-
133
- /**
134
- * 计算跨日预约时长:
135
- * - type='days' → end - start 的天数
136
- * - type='minutes' → end - start 的分钟数
137
- * 与 info2 `getDays` 等价。
138
- */
139
- export function getDays(cacheItem, type) {
140
- var _cacheItem$_extend, _cacheItem$_extend2;
141
- if (type === 'days') {
142
- var _formatDayDate = formatDayDate(cacheItem._extend),
143
- start_date = _formatDayDate.start_date,
144
- end_date = _formatDayDate.end_date;
145
- return end_date.diff(start_date, 'day');
146
- }
147
- var startDate = dayjs(cacheItem === null || cacheItem === void 0 || (_cacheItem$_extend = cacheItem._extend) === null || _cacheItem$_extend === void 0 ? void 0 : _cacheItem$_extend.start_date);
148
- var endDate = dayjs(cacheItem === null || cacheItem === void 0 || (_cacheItem$_extend2 = cacheItem._extend) === null || _cacheItem$_extend2 === void 0 ? void 0 : _cacheItem$_extend2.end_date);
149
- return endDate.diff(startDate, type);
150
- }
151
- export { getDurationValue };
@@ -1,42 +0,0 @@
1
- import dayjs from 'dayjs';
2
- import { getDurationValue } from './flexible';
3
- export interface TimeSlice {
4
- label: string;
5
- value: string;
6
- }
7
- export interface DurationSlice {
8
- label: string;
9
- value: number;
10
- }
11
- export interface TimeSlicesResult {
12
- timeSlices: TimeSlice[];
13
- durationSlicesBasedOnTime: DurationSlice[];
14
- }
15
- /**
16
- * 把一天切成等长时间槽,输出 timeSlices(开始时间标签)与 durationSlicesBasedOnTime(基于切片的时长选项)。
17
- *
18
- * 与 info2 `sliceDayIntoFiveMinutes` 行为等价;为了不依赖 `locales`,label 输出原始时间字符串('08:00 AM' / '90'),
19
- * UI 侧需要本地化展示时可基于 value 自行包装。
20
- *
21
- * @param config booking config `basic.service_time`,{ value: minutes }
22
- * @param isDay 是否跨日预约(true 时按 1~30 天切片)
23
- */
24
- export declare function sliceDayIntoFiveMinutes(config: {
25
- value?: number;
26
- } | undefined | null, isDay?: boolean): TimeSlicesResult;
27
- /**
28
- * 取「下一个 duration 选项」:优先用 defaultValue;否则在 array 中找匹配的;找不到取第一个。
29
- * 与 info2 `findNextDuration` 等价。
30
- */
31
- export declare function findNextDuration(current: {
32
- value?: number;
33
- } | undefined, array: DurationSlice[], defaultValue?: number): number | undefined;
34
- /** 取首选 time slice:若指定 date(HH:mm)则找第一个 >= date 的;否则第一个。 */
35
- export declare function findNextSlice(params: {
36
- timeSlices: TimeSlice[];
37
- index?: number;
38
- date?: string;
39
- }): string | undefined;
40
- /** 取 endDate;duration='flexible' 时取 endDate 与店铺营业时间的较小值,否则 startDate + duration 分钟。 */
41
- export declare function getEndDate(startDate: dayjs.Dayjs, duration: string | number, endDate: any, shopOpeningHours?: string): dayjs.Dayjs;
42
- export { getDurationValue };
@@ -1,100 +0,0 @@
1
- import dayjs from 'dayjs';
2
- import { getDurationValue } from "./flexible";
3
- /**
4
- * 把一天切成等长时间槽,输出 timeSlices(开始时间标签)与 durationSlicesBasedOnTime(基于切片的时长选项)。
5
- *
6
- * 与 info2 `sliceDayIntoFiveMinutes` 行为等价;为了不依赖 `locales`,label 输出原始时间字符串('08:00 AM' / '90'),
7
- * UI 侧需要本地化展示时可基于 value 自行包装。
8
- *
9
- * @param config booking config `basic.service_time`,{ value: minutes }
10
- * @param isDay 是否跨日预约(true 时按 1~30 天切片)
11
- */
12
- export function sliceDayIntoFiveMinutes(config, isDay) {
13
- var startTime = dayjs().startOf('day');
14
- var endTime = dayjs().endOf('day');
15
- var timeSlice = config && config.value || 5;
16
- var timeSlices = [];
17
- var durationSlicesBasedOnTime = [];
18
- var currentTime = startTime;
19
- if (isDay) {
20
- var currentDay = 1;
21
- while (currentDay <= 30) {
22
- timeSlices.push({
23
- label: currentTime.format('hh:mm A'),
24
- value: currentTime.format('HH:mm')
25
- });
26
- durationSlicesBasedOnTime.push({
27
- label: String(currentDay),
28
- value: currentDay
29
- });
30
- currentDay += 1;
31
- }
32
- return {
33
- timeSlices: timeSlices,
34
- durationSlicesBasedOnTime: durationSlicesBasedOnTime
35
- };
36
- }
37
- while (currentTime.isBefore(endTime)) {
38
- timeSlices.push({
39
- label: currentTime.format('hh:mm A'),
40
- value: currentTime.format('HH:mm')
41
- });
42
- var nextTime = currentTime.add(timeSlice, 'minute');
43
- var durationValue = nextTime.diff(startTime, 'minute');
44
- durationSlicesBasedOnTime.push({
45
- label: String(durationValue),
46
- value: durationValue
47
- });
48
- currentTime = nextTime;
49
- }
50
- return {
51
- timeSlices: timeSlices,
52
- durationSlicesBasedOnTime: durationSlicesBasedOnTime
53
- };
54
- }
55
-
56
- /**
57
- * 取「下一个 duration 选项」:优先用 defaultValue;否则在 array 中找匹配的;找不到取第一个。
58
- * 与 info2 `findNextDuration` 等价。
59
- */
60
- export function findNextDuration(current, array, defaultValue) {
61
- if (defaultValue !== undefined && defaultValue !== null) return defaultValue;
62
- if (!array || array.length === 0) return undefined;
63
- for (var i = 0; i < array.length; i += 1) {
64
- if (array[i].value === (current === null || current === void 0 ? void 0 : current.value)) return array[i].value;
65
- }
66
- return array[0].value;
67
- }
68
-
69
- /** 取首选 time slice:若指定 date(HH:mm)则找第一个 >= date 的;否则第一个。 */
70
- export function findNextSlice(params) {
71
- var _timeSlices$index;
72
- var timeSlices = params.timeSlices,
73
- _params$index = params.index,
74
- index = _params$index === void 0 ? 0 : _params$index,
75
- _params$date = params.date,
76
- date = _params$date === void 0 ? '' : _params$date;
77
- var currentTimeValue = date || dayjs().format('HH:mm');
78
- for (var i = 0; i < timeSlices.length; i += 1) {
79
- if (timeSlices[i].value !== 'now' && timeSlices[i].value >= currentTimeValue) {
80
- return timeSlices[i].value;
81
- }
82
- }
83
- return (_timeSlices$index = timeSlices[index]) === null || _timeSlices$index === void 0 ? void 0 : _timeSlices$index.value;
84
- }
85
-
86
- /** 取 endDate;duration='flexible' 时取 endDate 与店铺营业时间的较小值,否则 startDate + duration 分钟。 */
87
- export function getEndDate(startDate, duration, endDate, shopOpeningHours) {
88
- if (duration === 'flexible') {
89
- var openingDate = dayjs("".concat(startDate.format('YYYY-MM-DD'), " ").concat(shopOpeningHours || '23:59'));
90
- if (dayjs(startDate).isAfter(openingDate)) {
91
- openingDate = openingDate.add(1, 'day');
92
- }
93
- if (!endDate) return openingDate;
94
- var endDateObj = dayjs(endDate);
95
- if (endDateObj.isAfter(openingDate)) return openingDate;
96
- return endDateObj;
97
- }
98
- return startDate.add(Number(duration), 'minute');
99
- }
100
- export { getDurationValue };
@@ -1,106 +0,0 @@
1
- /** 解析商品行数量(checkout 协议 product_num 语义 = 当前行 num) */
2
- export declare function resolveSafeProductNum(num?: number | null): number;
3
- /**
4
- * 将 discount_list 中 type=product 项的 product_num 同步为当前商品数量。
5
- *
6
- * @example
7
- * syncManualProductDiscountProductNum(line.discount_list, line.num);
8
- */
9
- export declare function syncManualProductDiscountProductNum(discountList: any[] | undefined | null, productNum?: number | null): any[];
10
- /** 从多源解析改价前行总价(与 cacheItem._extend.origin_total 语义一致) */
11
- export declare function resolveManualDiscountOriginTotal(sources: {
12
- originTotal?: unknown;
13
- extendOriginTotal?: unknown;
14
- originExtendOriginTotal?: unknown;
15
- sourceExtendOriginTotal?: unknown;
16
- catalogUnitPrice?: unknown;
17
- quantity?: number;
18
- }): number;
19
- /** 从 payload / extend / origin 解析手动折扣原因 */
20
- export declare function resolveManualDiscountReasonFromSources(sources: {
21
- discountReason?: unknown;
22
- extendDiscountReason?: unknown;
23
- originExtendDiscountReason?: unknown;
24
- }): string;
25
- /** 是否带手动改价标记(price_override / is_manual_discount) */
26
- export declare function hasManualProductDiscountFlag(metadata?: Record<string, any> | null): boolean;
27
- /**
28
- * normalize 兜底:手动改价但 discount_list 缺 type=product 时,按行级原价/折后价补写。
29
- *
30
- * @example
31
- * ensureManualProductDiscountList({
32
- * discountList: [],
33
- * metadata: { price_override: '5', is_manual_discount: 1 },
34
- * originalPrice: '11.00',
35
- * sellingPrice: '5.00',
36
- * quantity: 1,
37
- * });
38
- */
39
- export declare function ensureManualProductDiscountList(params: {
40
- discountList?: any[] | null;
41
- metadata?: Record<string, any> | null;
42
- originalPrice: string | number;
43
- sellingPrice: string | number;
44
- quantity?: number;
45
- }): any[];
46
- /** 商品手动折扣 discount_list 项(checkout 协议,type = product) */
47
- export interface ManualProductDiscountItem {
48
- amount: number;
49
- type: 'product';
50
- discount: {
51
- message: string;
52
- discountway: string;
53
- product_num: number;
54
- discount_per: string;
55
- discount_type: 'discount' | 'change_price';
56
- };
57
- }
58
- /**
59
- * 从 discount_list 中取手动改价项(type = product)。
60
- *
61
- * @example
62
- * const manual = findManualProductDiscountItem(product.discount_list);
63
- * manual?.discount.message; // 折扣原因
64
- */
65
- export declare function findManualProductDiscountItem(discountList?: any[] | null): ManualProductDiscountItem | undefined;
66
- /**
67
- * 解析折扣原因:优先 discount_list[type=product].discount.message。
68
- *
69
- * @example
70
- * resolveManualDiscountMessage(line.discount_list, line.metadata?.legacy_reason);
71
- */
72
- export declare function resolveManualDiscountMessage(discountList?: any[] | null, fallback?: string): string;
73
- /** 去掉 discount_list 中已有的手动改价项,避免重复叠加 */
74
- export declare function stripManualProductDiscountItems(discountList?: any[] | null): any[];
75
- /**
76
- * 由改价前后行总价构建手动折扣项;amount = |originTotal - sellingTotal|(行级差额)。
77
- *
78
- * @example
79
- * buildManualProductDiscountItem({
80
- * originTotal: 11,
81
- * sellingTotal: 4,
82
- * quantity: 1,
83
- * message: 'VIP',
84
- * });
85
- */
86
- export declare function buildManualProductDiscountItem(params: {
87
- originTotal: number;
88
- sellingTotal: number;
89
- quantity?: number;
90
- message?: string;
91
- discountway?: string;
92
- discount_per?: string;
93
- }): ManualProductDiscountItem;
94
- /**
95
- * 将手动改价项合并进 discount_list(替换已有 type=product 项)。
96
- *
97
- * @example
98
- * mergeManualProductDiscountIntoList(coupons, manualItem);
99
- */
100
- export declare function mergeManualProductDiscountIntoList(discountList: any[] | undefined | null, manualItem: ManualProductDiscountItem | null | undefined): any[];
101
- /** 是否应写入手动改价 discount_list 项 */
102
- export declare function shouldBuildManualProductDiscount(params: {
103
- hasPriceOverride?: boolean;
104
- originTotal?: number;
105
- sellingTotal?: number;
106
- }): boolean;
@@ -1,212 +0,0 @@
1
- function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
2
- function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
3
- 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."); }
4
- 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); }
5
- function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
6
- function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
7
- 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; }
8
- 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; }
9
- 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; }
10
- 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; }
11
- function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
12
- 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); }
13
- import Decimal from 'decimal.js';
14
-
15
- /** 解析商品行数量(checkout 协议 product_num 语义 = 当前行 num) */
16
- export function resolveSafeProductNum(num) {
17
- var parsed = Number(num);
18
- if (!Number.isFinite(parsed) || parsed <= 0) return 1;
19
- return Math.floor(parsed);
20
- }
21
-
22
- /**
23
- * 将 discount_list 中 type=product 项的 product_num 同步为当前商品数量。
24
- *
25
- * @example
26
- * syncManualProductDiscountProductNum(line.discount_list, line.num);
27
- */
28
- export function syncManualProductDiscountProductNum(discountList, productNum) {
29
- var quantity = resolveSafeProductNum(productNum);
30
- return (discountList || []).map(function (item) {
31
- if ((item === null || item === void 0 ? void 0 : item.type) !== 'product') return item;
32
- return _objectSpread(_objectSpread({}, item), {}, {
33
- discount: _objectSpread(_objectSpread({}, item.discount || {}), {}, {
34
- product_num: quantity
35
- })
36
- });
37
- });
38
- }
39
-
40
- /** 从多源解析改价前行总价(与 cacheItem._extend.origin_total 语义一致) */
41
- export function resolveManualDiscountOriginTotal(sources) {
42
- var _sources$quantity;
43
- var candidates = [sources.originTotal, sources.extendOriginTotal, sources.originExtendOriginTotal, sources.sourceExtendOriginTotal];
44
- for (var _i = 0, _candidates = candidates; _i < _candidates.length; _i++) {
45
- var candidate = _candidates[_i];
46
- if (candidate === undefined || candidate === null || candidate === '') continue;
47
- var parsed = Number(candidate);
48
- if (Number.isFinite(parsed)) return parsed;
49
- }
50
- var unit = Number(sources.catalogUnitPrice);
51
- var quantity = (_sources$quantity = sources.quantity) !== null && _sources$quantity !== void 0 ? _sources$quantity : 1;
52
- if (Number.isFinite(unit) && unit > 0) {
53
- return new Decimal(unit).mul(quantity).toNumber();
54
- }
55
- return NaN;
56
- }
57
-
58
- /** 从 payload / extend / origin 解析手动折扣原因 */
59
- export function resolveManualDiscountReasonFromSources(sources) {
60
- for (var _i2 = 0, _arr = [sources.discountReason, sources.extendDiscountReason, sources.originExtendDiscountReason]; _i2 < _arr.length; _i2++) {
61
- var candidate = _arr[_i2];
62
- if (candidate != null && String(candidate).trim() !== '') {
63
- return String(candidate);
64
- }
65
- }
66
- return '';
67
- }
68
-
69
- /** 是否带手动改价标记(price_override / is_manual_discount) */
70
- export function hasManualProductDiscountFlag(metadata) {
71
- if (!metadata) return false;
72
- var override = metadata.price_override;
73
- if (override !== undefined && override !== null && override !== '') {
74
- return true;
75
- }
76
- return metadata.is_manual_discount === 1 || metadata.is_manual_discount === true;
77
- }
78
-
79
- /**
80
- * normalize 兜底:手动改价但 discount_list 缺 type=product 时,按行级原价/折后价补写。
81
- *
82
- * @example
83
- * ensureManualProductDiscountList({
84
- * discountList: [],
85
- * metadata: { price_override: '5', is_manual_discount: 1 },
86
- * originalPrice: '11.00',
87
- * sellingPrice: '5.00',
88
- * quantity: 1,
89
- * });
90
- */
91
- export function ensureManualProductDiscountList(params) {
92
- var _metadata$origin, _metadata$origin2, _metadata$origin3, _metadata$origin4;
93
- var list = params.discountList || [];
94
- var quantity = resolveSafeProductNum(params.quantity);
95
- if (findManualProductDiscountItem(list)) {
96
- return syncManualProductDiscountProductNum(list, quantity);
97
- }
98
- var metadata = params.metadata || {};
99
- var originalNum = Number(params.originalPrice);
100
- var sellingNum = Number(params.sellingPrice);
101
- var shouldBuild = hasManualProductDiscountFlag(metadata) || shouldBuildManualProductDiscount({
102
- originTotal: originalNum,
103
- sellingTotal: sellingNum
104
- });
105
- if (!shouldBuild) {
106
- return list;
107
- }
108
- if (!Number.isFinite(originalNum) || !Number.isFinite(sellingNum) || originalNum === sellingNum) {
109
- return list;
110
- }
111
- var message = resolveManualDiscountMessage(list, resolveManualDiscountReasonFromSources({
112
- extendDiscountReason: (_metadata$origin = metadata.origin) === null || _metadata$origin === void 0 || (_metadata$origin = _metadata$origin._extend) === null || _metadata$origin === void 0 ? void 0 : _metadata$origin.discount_reason,
113
- originExtendDiscountReason: (_metadata$origin2 = metadata.origin) === null || _metadata$origin2 === void 0 || (_metadata$origin2 = _metadata$origin2._extend) === null || _metadata$origin2 === void 0 ? void 0 : _metadata$origin2.discount_reason
114
- }));
115
- return mergeManualProductDiscountIntoList(list, buildManualProductDiscountItem({
116
- originTotal: originalNum,
117
- sellingTotal: sellingNum,
118
- quantity: quantity,
119
- message: message,
120
- discountway: (_metadata$origin3 = metadata.origin) === null || _metadata$origin3 === void 0 || (_metadata$origin3 = _metadata$origin3._extend) === null || _metadata$origin3 === void 0 ? void 0 : _metadata$origin3.discountway,
121
- discount_per: (_metadata$origin4 = metadata.origin) === null || _metadata$origin4 === void 0 || (_metadata$origin4 = _metadata$origin4._extend) === null || _metadata$origin4 === void 0 ? void 0 : _metadata$origin4.discount_per
122
- }));
123
- }
124
-
125
- /** 商品手动折扣 discount_list 项(checkout 协议,type = product) */
126
-
127
- /**
128
- * 从 discount_list 中取手动改价项(type = product)。
129
- *
130
- * @example
131
- * const manual = findManualProductDiscountItem(product.discount_list);
132
- * manual?.discount.message; // 折扣原因
133
- */
134
- export function findManualProductDiscountItem(discountList) {
135
- return (discountList || []).find(function (item) {
136
- return (item === null || item === void 0 ? void 0 : item.type) === 'product';
137
- });
138
- }
139
-
140
- /**
141
- * 解析折扣原因:优先 discount_list[type=product].discount.message。
142
- *
143
- * @example
144
- * resolveManualDiscountMessage(line.discount_list, line.metadata?.legacy_reason);
145
- */
146
- export function resolveManualDiscountMessage(discountList, fallback) {
147
- var _findManualProductDis;
148
- var message = (_findManualProductDis = findManualProductDiscountItem(discountList)) === null || _findManualProductDis === void 0 || (_findManualProductDis = _findManualProductDis.discount) === null || _findManualProductDis === void 0 ? void 0 : _findManualProductDis.message;
149
- if (message != null && String(message).trim() !== '') {
150
- return String(message);
151
- }
152
- return fallback !== null && fallback !== void 0 ? fallback : '';
153
- }
154
-
155
- /** 去掉 discount_list 中已有的手动改价项,避免重复叠加 */
156
- export function stripManualProductDiscountItems(discountList) {
157
- return (discountList || []).filter(function (item) {
158
- return (item === null || item === void 0 ? void 0 : item.type) !== 'product';
159
- });
160
- }
161
-
162
- /**
163
- * 由改价前后行总价构建手动折扣项;amount = |originTotal - sellingTotal|(行级差额)。
164
- *
165
- * @example
166
- * buildManualProductDiscountItem({
167
- * originTotal: 11,
168
- * sellingTotal: 4,
169
- * quantity: 1,
170
- * message: 'VIP',
171
- * });
172
- */
173
- export function buildManualProductDiscountItem(params) {
174
- var _params$message, _params$discountway, _params$discount_per;
175
- var origin = new Decimal(Number(params.originTotal) || 0);
176
- var selling = new Decimal(Number(params.sellingTotal) || 0);
177
- var diff = origin.minus(selling);
178
- var quantity = resolveSafeProductNum(params.quantity);
179
- return {
180
- amount: diff.abs().toDecimalPlaces(2).toNumber(),
181
- type: 'product',
182
- discount: {
183
- message: (_params$message = params.message) !== null && _params$message !== void 0 ? _params$message : '',
184
- discountway: (_params$discountway = params.discountway) !== null && _params$discountway !== void 0 ? _params$discountway : 'num',
185
- product_num: quantity,
186
- discount_per: (_params$discount_per = params.discount_per) !== null && _params$discount_per !== void 0 ? _params$discount_per : '',
187
- discount_type: diff.isNegative() ? 'change_price' : 'discount'
188
- }
189
- };
190
- }
191
-
192
- /**
193
- * 将手动改价项合并进 discount_list(替换已有 type=product 项)。
194
- *
195
- * @example
196
- * mergeManualProductDiscountIntoList(coupons, manualItem);
197
- */
198
- export function mergeManualProductDiscountIntoList(discountList, manualItem) {
199
- var base = stripManualProductDiscountItems(discountList);
200
- if (!manualItem) return base;
201
- if (manualItem.amount === 0 && !manualItem.discount.message) return base;
202
- return [].concat(_toConsumableArray(base), [manualItem]);
203
- }
204
-
205
- /** 是否应写入手动改价 discount_list 项 */
206
- export function shouldBuildManualProductDiscount(params) {
207
- if (params.hasPriceOverride) return true;
208
- var origin = Number(params.originTotal);
209
- var selling = Number(params.sellingTotal);
210
- if (!Number.isFinite(origin) || !Number.isFinite(selling)) return false;
211
- return origin !== selling;
212
- }