@pisell/private-materials 6.3.132 → 6.3.133
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/lowcode/assets-daily.json +11 -11
- package/build/lowcode/assets-dev.json +2 -2
- package/build/lowcode/assets-prod.json +11 -11
- package/build/lowcode/meta.js +1 -1
- package/build/lowcode/render/default/view.js +1 -1
- package/build/lowcode/view.js +1 -1
- package/es/components/venueBooking/components/Content/index.js +2 -2
- package/es/components/venueBooking/components/Header/index.js +1 -1
- package/es/components/venueBooking/components/VenueSelection/components/CourtFilter.js +1 -17
- package/es/components/venueBooking/components/VenueSelection/components/TimeGrid.js +11 -18
- package/es/components/venueBooking/components/VenueSelection/index.js +1 -1
- package/es/components/venueBooking/context.js +49 -20
- package/es/components/venueBooking/locales.d.ts +5 -0
- package/es/components/venueBooking/locales.js +5 -0
- package/lib/components/venueBooking/components/Content/index.js +2 -2
- package/lib/components/venueBooking/components/Header/index.js +1 -1
- package/lib/components/venueBooking/components/VenueSelection/components/CourtFilter.js +1 -10
- package/lib/components/venueBooking/components/VenueSelection/components/TimeGrid.js +8 -7
- package/lib/components/venueBooking/components/VenueSelection/index.js +1 -1
- package/lib/components/venueBooking/context.js +20 -5
- package/lib/components/venueBooking/locales.d.ts +5 -0
- package/lib/components/venueBooking/locales.js +5 -0
- package/package.json +1 -1
- package/es/components/appointmentBooking/components/Form/index.d.ts +0 -4
- package/es/components/appointmentBooking/components/Services/index.d.ts +0 -4
- package/es/components/appointmentBooking/deposit/components/PolicyModal/index.d.ts +0 -4
- package/es/components/appointmentBooking/hooks.d.ts +0 -107
- package/es/components/appointmentBooking/utils.d.ts +0 -227
- package/es/components/booking/components/footer/utils.d.ts +0 -47
- package/es/components/booking/components/reloadResourceModal/index.d.ts +0 -9
- package/es/components/booking/components/voucher/index.d.ts +0 -4
- package/es/components/booking/info/service/editService/constants.d.ts +0 -1
- package/es/components/booking/info/service/editService/index.d.ts +0 -7
- package/es/components/booking/info/service2/utils.d.ts +0 -248
- package/es/components/booking/info2/index.d.ts +0 -12
- package/es/components/booking/info2/service/addService/index.d.ts +0 -12
- package/es/components/booking/locales.d.ts +0 -1489
- package/es/components/booking/model.d.ts +0 -120
- package/es/components/eftposPay/amount.d.ts +0 -21
- package/es/components/eftposPay/app.d.ts +0 -11
- package/es/components/eftposPay/component/fail/failCustom.d.ts +0 -4
- package/es/components/eftposPay/component/fail/index.d.ts +0 -4
- package/es/components/eftposPay/component/fail/network.d.ts +0 -9
- package/es/components/eftposPay/component/fail/unknow.d.ts +0 -10
- package/es/components/eftposPay/component/manual/index.d.ts +0 -10
- package/es/components/eftposPay/component/signature/index.d.ts +0 -9
- package/es/components/eftposPay/device.d.ts +0 -24
- package/es/components/eftposPay/index.d.ts +0 -5
- package/es/components/eftposPay/linkly/hooks/normal.d.ts +0 -30
- package/es/components/eftposPay/linkly/hooks/useTimeQuery.d.ts +0 -4
- package/es/components/eftposPay/linkly/index.d.ts +0 -3
- package/es/components/eftposPay/pay.d.ts +0 -21
- package/es/components/eftposPay/payo/config.d.ts +0 -13
- package/es/components/eftposPay/payo/hooks.d.ts +0 -10
- package/es/components/eftposPay/payo/payment.d.ts +0 -66
- package/es/components/eftposPay/tip.d.ts +0 -10
- package/es/components/eftposPay/tyro/index.d.ts +0 -9
- package/es/components/eftposPay/utils/payLog.d.ts +0 -81
- package/es/components/eftposPay/windcave/receiptAction.d.ts +0 -23
- package/es/components/eftposPay/windcave/windcave.d.ts +0 -7
- package/es/components/kioskSkuDetail/index.d.ts +0 -39
- package/es/components/kioskSkuDetail/locales.d.ts +0 -48
- package/es/components/pay/toC/PaymentMethods/GlobePayAliPayH5/index.d.ts +0 -10
- package/es/components/pay/toC/PaymentMethods/GlobePayPaypalH5/index.d.ts +0 -10
- package/es/components/pay/toC/PaymentMethods/GlobePayWxH5/index.d.ts +0 -10
- package/es/components/pay/toC/PaymentMethods/MWCreditCard/TDSPay/index.d.ts +0 -16
- package/es/components/pay/toC/PaymentMethods/MWCreditCard/index.d.ts +0 -15
- package/es/components/pay/toC/PaymentMethods/MWCreditCard/tds2.d.ts +0 -83
- package/es/components/pay/toC/PaymentMethods/SuperPayAliPayH5/index.d.ts +0 -10
- package/es/components/pay/toC/PaymentMethods/SuperPayWxPayH5/index.d.ts +0 -10
- package/es/components/pay/toC/PaymentMethods/WalletPass/List/index.d.ts +0 -22
- package/es/components/pay/toC/PaymentMethods/WalletPass/index.d.ts +0 -25
- package/es/components/pay/toC/PaymentMethods/WalletPass/utils.d.ts +0 -16
- package/es/components/pay/toC/PaymentMethods/index.d.ts +0 -9
- package/es/components/pay/toC/index.d.ts +0 -3
- package/es/components/pay/toC/locales.d.ts +0 -631
- package/es/components/pay/toC/payGroup.d.ts +0 -59
- package/es/components/pay/toC/serve.d.ts +0 -87
- package/es/components/pay/toC/utils.d.ts +0 -65
- package/es/components/ruleSetting/locales.d.ts +0 -78
- package/es/components/ticketBooking/components/addServiceVariant/addService.d.ts +0 -10
- package/es/components/ticketBooking/components/ticketBooking/index.d.ts +0 -5
- package/es/components/ticketBooking/components/timeBar/index.d.ts +0 -13
- package/es/components/ticketBooking/index.d.ts +0 -8
- package/es/components/venueBooking/components/Cart/index.d.ts +0 -28
- package/es/components/venueBooking/components/Footer/index.d.ts +0 -8
- package/es/index.d.ts +0 -87
- package/es/plus/skuOptionsSelection/components/NormalCard/index.d.ts +0 -6
- package/es/plus/skuOptionsSelection/components/OptionsCard/OptionItemCard.d.ts +0 -4
- package/es/plus/skuOptionsSelection/components/OptionsModal/index.d.ts +0 -16
- package/es/plus/skuOptionsSelection/index.d.ts +0 -5
- package/es/plus/skuOptionsSelection/locales.d.ts +0 -58
- package/es/plus/skuOptionsSelection/types.d.ts +0 -458
- package/es/plus/skuOptionsSelection/utils/transformBundleGroup.d.ts +0 -19
- package/es/plus/skuOptionsSelection/utils/transformOptionGroup.d.ts +0 -1
- package/es/plus/skuOptionsSelection/utils/transformSelectorValueToValue.d.ts +0 -4
- package/es/plus/skuOptionsSelection/utils/transformValueToSelectorValue.d.ts +0 -4
- package/es/plus/skuOptionsSelection/utils/transformVariantGroup.d.ts +0 -1
- package/es/pro/Cards/components/SKUCard/index.d.ts +0 -5
- package/es/pro/Login2.0/components/phoneValidation.d.ts +0 -17
- package/lib/components/appointmentBooking/components/Form/index.d.ts +0 -4
- package/lib/components/appointmentBooking/components/Services/index.d.ts +0 -4
- package/lib/components/appointmentBooking/deposit/components/PolicyModal/index.d.ts +0 -4
- package/lib/components/appointmentBooking/hooks.d.ts +0 -107
- package/lib/components/appointmentBooking/utils.d.ts +0 -227
- package/lib/components/booking/components/footer/utils.d.ts +0 -47
- package/lib/components/booking/components/reloadResourceModal/index.d.ts +0 -9
- package/lib/components/booking/components/voucher/index.d.ts +0 -4
- package/lib/components/booking/info/service/editService/constants.d.ts +0 -1
- package/lib/components/booking/info/service/editService/index.d.ts +0 -7
- package/lib/components/booking/info/service2/utils.d.ts +0 -248
- package/lib/components/booking/info2/index.d.ts +0 -12
- package/lib/components/booking/info2/service/addService/index.d.ts +0 -12
- package/lib/components/booking/locales.d.ts +0 -1489
- package/lib/components/booking/model.d.ts +0 -120
- package/lib/components/eftposPay/amount.d.ts +0 -21
- package/lib/components/eftposPay/app.d.ts +0 -11
- package/lib/components/eftposPay/component/fail/failCustom.d.ts +0 -4
- package/lib/components/eftposPay/component/fail/index.d.ts +0 -4
- package/lib/components/eftposPay/component/fail/network.d.ts +0 -9
- package/lib/components/eftposPay/component/fail/unknow.d.ts +0 -10
- package/lib/components/eftposPay/component/manual/index.d.ts +0 -10
- package/lib/components/eftposPay/component/signature/index.d.ts +0 -9
- package/lib/components/eftposPay/device.d.ts +0 -24
- package/lib/components/eftposPay/index.d.ts +0 -5
- package/lib/components/eftposPay/linkly/hooks/normal.d.ts +0 -30
- package/lib/components/eftposPay/linkly/hooks/useTimeQuery.d.ts +0 -4
- package/lib/components/eftposPay/linkly/index.d.ts +0 -3
- package/lib/components/eftposPay/pay.d.ts +0 -21
- package/lib/components/eftposPay/payo/config.d.ts +0 -13
- package/lib/components/eftposPay/payo/hooks.d.ts +0 -10
- package/lib/components/eftposPay/payo/payment.d.ts +0 -66
- package/lib/components/eftposPay/tip.d.ts +0 -10
- package/lib/components/eftposPay/tyro/index.d.ts +0 -9
- package/lib/components/eftposPay/utils/payLog.d.ts +0 -81
- package/lib/components/eftposPay/windcave/receiptAction.d.ts +0 -23
- package/lib/components/eftposPay/windcave/windcave.d.ts +0 -7
- package/lib/components/kioskSkuDetail/index.d.ts +0 -39
- package/lib/components/kioskSkuDetail/locales.d.ts +0 -48
- package/lib/components/pay/toC/PaymentMethods/GlobePayAliPayH5/index.d.ts +0 -10
- package/lib/components/pay/toC/PaymentMethods/GlobePayPaypalH5/index.d.ts +0 -10
- package/lib/components/pay/toC/PaymentMethods/GlobePayWxH5/index.d.ts +0 -10
- package/lib/components/pay/toC/PaymentMethods/MWCreditCard/TDSPay/index.d.ts +0 -16
- package/lib/components/pay/toC/PaymentMethods/MWCreditCard/index.d.ts +0 -15
- package/lib/components/pay/toC/PaymentMethods/MWCreditCard/tds2.d.ts +0 -83
- package/lib/components/pay/toC/PaymentMethods/SuperPayAliPayH5/index.d.ts +0 -10
- package/lib/components/pay/toC/PaymentMethods/SuperPayWxPayH5/index.d.ts +0 -10
- package/lib/components/pay/toC/PaymentMethods/WalletPass/List/index.d.ts +0 -22
- package/lib/components/pay/toC/PaymentMethods/WalletPass/index.d.ts +0 -25
- package/lib/components/pay/toC/PaymentMethods/WalletPass/utils.d.ts +0 -16
- package/lib/components/pay/toC/PaymentMethods/index.d.ts +0 -9
- package/lib/components/pay/toC/index.d.ts +0 -3
- package/lib/components/pay/toC/locales.d.ts +0 -631
- package/lib/components/pay/toC/payGroup.d.ts +0 -59
- package/lib/components/pay/toC/serve.d.ts +0 -87
- package/lib/components/pay/toC/utils.d.ts +0 -65
- package/lib/components/ruleSetting/locales.d.ts +0 -78
- package/lib/components/ticketBooking/components/addServiceVariant/addService.d.ts +0 -10
- package/lib/components/ticketBooking/components/ticketBooking/index.d.ts +0 -5
- package/lib/components/ticketBooking/components/timeBar/index.d.ts +0 -13
- package/lib/components/ticketBooking/index.d.ts +0 -8
- package/lib/components/venueBooking/components/Cart/index.d.ts +0 -28
- package/lib/components/venueBooking/components/Footer/index.d.ts +0 -8
- package/lib/index.d.ts +0 -87
- package/lib/plus/skuOptionsSelection/components/NormalCard/index.d.ts +0 -6
- package/lib/plus/skuOptionsSelection/components/OptionsCard/OptionItemCard.d.ts +0 -4
- package/lib/plus/skuOptionsSelection/components/OptionsModal/index.d.ts +0 -16
- package/lib/plus/skuOptionsSelection/index.d.ts +0 -5
- package/lib/plus/skuOptionsSelection/locales.d.ts +0 -58
- package/lib/plus/skuOptionsSelection/types.d.ts +0 -458
- package/lib/plus/skuOptionsSelection/utils/transformBundleGroup.d.ts +0 -19
- package/lib/plus/skuOptionsSelection/utils/transformOptionGroup.d.ts +0 -1
- package/lib/plus/skuOptionsSelection/utils/transformSelectorValueToValue.d.ts +0 -4
- package/lib/plus/skuOptionsSelection/utils/transformValueToSelectorValue.d.ts +0 -4
- package/lib/plus/skuOptionsSelection/utils/transformVariantGroup.d.ts +0 -1
- package/lib/pro/Cards/components/SKUCard/index.d.ts +0 -5
- package/lib/pro/Login2.0/components/phoneValidation.d.ts +0 -17
|
@@ -49,7 +49,7 @@ export default function Content() {
|
|
|
49
49
|
};
|
|
50
50
|
}, []);
|
|
51
51
|
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("style", null, "\n @keyframes slideLeft { from { opacity: 0; transform: translateX(34px); } to { opacity: 1; transform: translateX(0); } }\n @keyframes slideRight { from { opacity: 0; transform: translateX(-34px); } to { opacity: 1; transform: translateX(0); } }\n @keyframes fadeIn { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: translateY(0); } }\n /* \u9AA8\u67B6\u5C4F\u5149\u6761\uFF1A\u4ECE\u5DE6\u5230\u53F3\u626B\u8FC7\u8425\u9020\u6570\u636E\u52A0\u8F7D\u611F */\n @keyframes vbShimmer { 0% { transform: translateX(-100%); } 100% { transform: translateX(100%); } }\n .vb-skeleton-shimmer {\n position: absolute;\n inset: 0;\n background: linear-gradient(90deg, transparent 0%, rgba(255, 255, 255, 0.6) 50%, transparent 100%);\n animation: vbShimmer 1.4s ease-in-out infinite;\n pointer-events: none;\n }\n\n /* \u4F5C\u7528\u57DF reset\uFF1A\u4FEE\u590D\u5BBF\u4E3B\u73AF\u5883 preflight: false \u5BFC\u81F4\u6D4F\u89C8\u5668\u9ED8\u8BA4\u6837\u5F0F\u6CC4\u5165 */\n .venue-booking-scope *,\n .venue-booking-scope *::before,\n .venue-booking-scope *::after {\n box-sizing: border-box;\n }\n .venue-booking-scope {\n --vb-primary: var(--theme-color, #ea1018);\n --vb-primary-light: color-mix(in srgb, var(--vb-primary) 12%, #fff);\n --vb-grid-sticky-top: 0px;\n font-size: 16px;\n line-height: 1.5;\n }\n .venue-booking-scope .vb-primary-text { color: var(--vb-primary); }\n .venue-booking-scope button {\n border: none;\n outline: none;\n background: transparent;\n font: inherit;\n color: inherit;\n padding: 0;\n cursor: pointer;\n }\n /* \u4EC5\u91CD\u7F6E\u65E0 class \u7684\u539F\u751F\u8F93\u5165\u6846\uFF0C\u907F\u514D\u8986\u76D6 Tailwind \u7EC4\u4EF6\u663E\u5F0F\u8FB9\u6846 */\n .venue-booking-scope input:not([class]),\n .venue-booking-scope textarea:not([class]) {\n border: none;\n outline: none;\n font: inherit;\n color: inherit;\n }\n\n /* \u8D2D\u7269\u8F66\u5185 Promotion \u533A\u5757\uFF1A\u7F29\u5C0F\u6807\u9898\u5B57\u53F7\uFF0C\u4E0E SubTotal \u7EDF\u4E00\u4E3A 16px */\n .venue-booking-scope .pisell-lowcode__appointment-booking-voucher-container .voucher-title .voucher-title-left {\n font-size: 16px;\n font-weight: 600;\n line-height: 24px;\n }\n .venue-booking-scope .pisell-lowcode__appointment-booking-voucher-container .voucher-title .voucher-title-right {\n font-size: 14px;\n font-weight: 500;\n }\n\n /* \u684C\u9762\u7AEF embedded-footer \u7C98\u5728\u4FA7\u8FB9\u680F\u5E95\u90E8 */\n .venue-booking-scope .pisell-venue-booking-cart-embedded-footer {\n position: sticky;\n bottom: 0;\n z-index: 5;\n background: #fff;\n border-radius: 0 0 28px 28px;\n }\n "), /*#__PURE__*/React.createElement("main", {
|
|
52
|
-
className: "mx-auto max-w-[1500px]
|
|
52
|
+
className: "mx-auto max-w-[1500px] md:px-6 md:pt-6 lg:pb-12 h-full overscroll-none"
|
|
53
53
|
}, /*#__PURE__*/React.createElement("div", {
|
|
54
54
|
className: "space-y-2 md:space-y-4",
|
|
55
55
|
style: {
|
|
@@ -76,6 +76,6 @@ export default function Content() {
|
|
|
76
76
|
onNext: handlePrimaryAction,
|
|
77
77
|
confirmLoading: isSubmittingOrder
|
|
78
78
|
})))), /*#__PURE__*/React.createElement("div", {
|
|
79
|
-
className: "sticky bottom-0 z-
|
|
79
|
+
className: "sticky bottom-0 z-41 block lg:hidden"
|
|
80
80
|
}, /*#__PURE__*/React.createElement(Footer, null))));
|
|
81
81
|
}
|
|
@@ -146,7 +146,7 @@ export default function Header() {
|
|
|
146
146
|
});
|
|
147
147
|
return /*#__PURE__*/React.createElement("div", {
|
|
148
148
|
ref: cardRef,
|
|
149
|
-
className: "relative
|
|
149
|
+
className: "relative bg-white p-3 md:rounded-[24px] md:p-4 ring-1 ring-black/6 shadow-[0_10px_30px_rgba(20,20,20,0.04)]"
|
|
150
150
|
}, /*#__PURE__*/React.createElement(Modal, {
|
|
151
151
|
open: confirmOpen,
|
|
152
152
|
onCancel: function onCancel() {
|
|
@@ -11,7 +11,6 @@ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len
|
|
|
11
11
|
*/
|
|
12
12
|
import React, { useMemo } from 'react';
|
|
13
13
|
import { locales } from '@pisell/utils';
|
|
14
|
-
import { Iconfont } from '@pisell/materials';
|
|
15
14
|
import { useVenueBookingContext } from "../../../context";
|
|
16
15
|
export default function CourtFilter() {
|
|
17
16
|
var _useVenueBookingConte = useVenueBookingContext(),
|
|
@@ -40,22 +39,7 @@ export default function CourtFilter() {
|
|
|
40
39
|
})));
|
|
41
40
|
return /*#__PURE__*/React.createElement("div", {
|
|
42
41
|
className: "mt-4 grid gap-3 md:mt-5 xl:grid-cols-[1fr_auto] xl:items-center"
|
|
43
|
-
}, /*#__PURE__*/React.createElement("div", {
|
|
44
|
-
className: "flex items-center gap-3 rounded-[18px] border border-black/8 bg-[#fafafa] px-4 py-3"
|
|
45
|
-
}, /*#__PURE__*/React.createElement(Iconfont, {
|
|
46
|
-
type: "pisell2-search-lg",
|
|
47
|
-
style: {
|
|
48
|
-
fontSize: 16,
|
|
49
|
-
color: '#a1a1aa'
|
|
50
|
-
}
|
|
51
|
-
}), /*#__PURE__*/React.createElement("input", {
|
|
52
|
-
value: search,
|
|
53
|
-
onChange: function onChange(e) {
|
|
54
|
-
return setSearch(e.target.value);
|
|
55
|
-
},
|
|
56
|
-
placeholder: String(locales.getText('pisell2.venue.search.placeholder') || '搜索场地'),
|
|
57
|
-
className: "w-full border-0 bg-transparent text-sm outline-none placeholder:text-zinc-400"
|
|
58
|
-
})), courtTypes.length > 1 ? /*#__PURE__*/React.createElement("div", {
|
|
42
|
+
}, courtTypes.length > 1 ? /*#__PURE__*/React.createElement("div", {
|
|
59
43
|
className: "flex flex-wrap gap-2"
|
|
60
44
|
}, filterOptions.map(function (opt) {
|
|
61
45
|
return /*#__PURE__*/React.createElement("button", {
|
|
@@ -277,7 +277,9 @@ export default function TimeGrid() {
|
|
|
277
277
|
style: {
|
|
278
278
|
color: 'var(--vb-primary)'
|
|
279
279
|
}
|
|
280
|
-
}, locales.getText('pisell2.venue.label.few.left') || '即将满') : null
|
|
280
|
+
}, locales.getText('pisell2.venue.label.few.left') || '即将满') : null, !timeMeta.soldOut && !timeMeta.fewLeft && !headerTag ? /*#__PURE__*/React.createElement("div", {
|
|
281
|
+
className: "mt-1 text-[10px] font-bold text-zinc-500"
|
|
282
|
+
}, locales.getText('pisell2.venue.label.bookable') || '充足') : null);
|
|
281
283
|
}))), /*#__PURE__*/React.createElement("div", {
|
|
282
284
|
ref: scrollTableRef,
|
|
283
285
|
onScroll: syncHeader,
|
|
@@ -295,21 +297,12 @@ export default function TimeGrid() {
|
|
|
295
297
|
className: "grid border-b border-black/6",
|
|
296
298
|
style: tableGridStyle
|
|
297
299
|
}, /*#__PURE__*/React.createElement("div", {
|
|
298
|
-
className: "sticky left-0 z-10 border-r border-black/6 px-2 py-
|
|
300
|
+
className: "sticky left-0 z-10 border-r border-black/6 px-2 py-2 shadow-[10px_0_16px_-14px_rgba(0,0,0,0.2)] md:px-4 ".concat(courtMeta.soldOut ? 'bg-zinc-50' : 'bg-white')
|
|
299
301
|
}, /*#__PURE__*/React.createElement("div", {
|
|
300
302
|
className: "flex items-start justify-between gap-2"
|
|
301
303
|
}, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", {
|
|
302
304
|
className: "text-[13px] font-extrabold leading-5 md:text-[15px] ".concat(courtMeta.soldOut ? 'text-zinc-400' : 'text-zinc-900')
|
|
303
|
-
}, resource.resourceName),
|
|
304
|
-
className: "mt-1 text-[11px] md:text-xs ".concat(courtMeta.soldOut ? 'text-zinc-400' : 'text-zinc-500')
|
|
305
|
-
}, resource.productTitle), courtMeta.soldOut ? /*#__PURE__*/React.createElement("div", {
|
|
306
|
-
className: "mt-1 text-[11px] font-semibold text-zinc-500"
|
|
307
|
-
}, locales.getText('pisell2.venue.label.sold.out') || '已满') : null, !courtMeta.soldOut && courtMeta.fewLeft ? /*#__PURE__*/React.createElement("div", {
|
|
308
|
-
className: "mt-1 text-[12px] font-bold",
|
|
309
|
-
style: {
|
|
310
|
-
color: 'var(--vb-primary)'
|
|
311
|
-
}
|
|
312
|
-
}, locales.getText('pisell2.venue.label.few.left') || '即将满') : null))), resource.slots.map(function (slot, slotIndex) {
|
|
305
|
+
}, resource.resourceName)))), resource.slots.map(function (slot, slotIndex) {
|
|
313
306
|
var isAvailable = slot.status === 'available';
|
|
314
307
|
// unavailable:该时段不提供服务(如非营业时段);occupied/past 同样不可选
|
|
315
308
|
var isUnavailable = slot.status === 'occupied' || slot.status === 'past' || slot.status === 'unavailable';
|
|
@@ -328,7 +321,7 @@ export default function TimeGrid() {
|
|
|
328
321
|
return handleSlotClick(resource.resourceId, slot);
|
|
329
322
|
},
|
|
330
323
|
disabled: isUnavailable,
|
|
331
|
-
className: "px-1 py-
|
|
324
|
+
className: "px-1 py-2 text-center transition md:px-2 ".concat(isUnavailable ? 'cursor-not-allowed bg-zinc-100 text-zinc-400' : selected ? 'text-white' : 'bg-white hover:bg-[#fff6f6]'),
|
|
332
325
|
style: _objectSpread({
|
|
333
326
|
borderLeft: isHourBoundary(timeLabel) ? '1px solid rgba(0,0,0,0.08)' : '1px solid rgba(0,0,0,0.03)',
|
|
334
327
|
borderBottom: '1px solid rgba(0,0,0,0.04)'
|
|
@@ -340,9 +333,9 @@ export default function TimeGrid() {
|
|
|
340
333
|
}, /*#__PURE__*/React.createElement("div", {
|
|
341
334
|
className: "text-lg font-bold leading-none"
|
|
342
335
|
}, "\xD7")) : selected ? /*#__PURE__*/React.createElement("div", {
|
|
343
|
-
className: "space-y-
|
|
336
|
+
className: "space-y-0.5"
|
|
344
337
|
}, /*#__PURE__*/React.createElement("div", {
|
|
345
|
-
className: "text-[11px] font-bold uppercase tracking-wide text-white/90"
|
|
338
|
+
className: "text-[11px] font-bold uppercase tracking-wide leading-4 text-white/90"
|
|
346
339
|
}, locales.getText('pisell2.venue.label.selected') || '已选'), /*#__PURE__*/React.createElement(PisellText.Amount, {
|
|
347
340
|
value: Number(slot.price || 0),
|
|
348
341
|
symbol: symbol,
|
|
@@ -350,16 +343,16 @@ export default function TimeGrid() {
|
|
|
350
343
|
showCurrencySymbol: true,
|
|
351
344
|
className: "text-sm font-extrabold text-white"
|
|
352
345
|
})) : /*#__PURE__*/React.createElement("div", {
|
|
353
|
-
className: "space-y-
|
|
346
|
+
className: "space-y-0.5"
|
|
354
347
|
}, /*#__PURE__*/React.createElement(PisellText.Amount, {
|
|
355
348
|
value: Number(slot.price || 0),
|
|
356
349
|
symbol: symbol,
|
|
357
350
|
precision: 2,
|
|
358
351
|
showCurrencySymbol: true,
|
|
359
352
|
hideDecimalForWholeNumbers: false,
|
|
360
|
-
className: "text-[13px] font-normal ".concat(priceClass, " md:text-sm")
|
|
353
|
+
className: "text-[13px] font-normal leading-4 ".concat(priceClass, " md:text-sm")
|
|
361
354
|
}), tag ? /*#__PURE__*/React.createElement("div", {
|
|
362
|
-
className: "inline-flex rounded-full px-1.5 py-0
|
|
355
|
+
className: "inline-flex rounded-full px-1.5 py-0 text-[8px] font-semibold leading-4 ring-1 md:text-[9px] ".concat(tag.className)
|
|
363
356
|
}, tagText) : null));
|
|
364
357
|
}));
|
|
365
358
|
}))));
|
|
@@ -52,7 +52,7 @@ export default function VenueSelection() {
|
|
|
52
52
|
navigateWeek(7);
|
|
53
53
|
}
|
|
54
54
|
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
|
|
55
|
-
className: "rounded-[24px] bg-white p-3 shadow-[0_10px_40px_rgba(20,20,20,0.06)] ring-1 ring-black/6 md:rounded-[28px] md:p-6"
|
|
55
|
+
className: "rounded-b-[24px] bg-white p-3 shadow-[0_10px_40px_rgba(20,20,20,0.06)] ring-1 ring-black/6 md:rounded-[28px] md:p-6"
|
|
56
56
|
}, /*#__PURE__*/React.createElement("div", {
|
|
57
57
|
className: "flex flex-col gap-2 xl:flex-row xl:items-center xl:justify-between"
|
|
58
58
|
}, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("h2", {
|
|
@@ -57,6 +57,19 @@ function getWeekRange(anchor) {
|
|
|
57
57
|
};
|
|
58
58
|
}
|
|
59
59
|
|
|
60
|
+
/**
|
|
61
|
+
* 把 startDate 夹紧到今天:避免把已过去的日期传给 OS。
|
|
62
|
+
* 若整段范围都已过去(endDate < 今天),返回 null 表示该段不需要请求。
|
|
63
|
+
*/
|
|
64
|
+
function clampRangeToToday(startDate, endDate) {
|
|
65
|
+
var todayKey = formatDateKey(dayjs());
|
|
66
|
+
if (endDate < todayKey) return null;
|
|
67
|
+
return {
|
|
68
|
+
startDate: startDate < todayKey ? todayKey : startDate,
|
|
69
|
+
endDate: endDate
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
|
|
60
73
|
/**
|
|
61
74
|
* 从 submitOrder 异常中提取可读错误文案(优先规则校验提示)
|
|
62
75
|
*/
|
|
@@ -299,7 +312,7 @@ export function VenueBookingProvider(_ref) {
|
|
|
299
312
|
*/
|
|
300
313
|
var fetchWeekData = useCallback( /*#__PURE__*/function () {
|
|
301
314
|
var _ref3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(startDate, endDate) {
|
|
302
|
-
var summary, currentDateKey, grid;
|
|
315
|
+
var clamped, summary, raw, currentDateKey, grid;
|
|
303
316
|
return _regeneratorRuntime().wrap(function _callee2$(_context2) {
|
|
304
317
|
while (1) switch (_context2.prev = _context2.next) {
|
|
305
318
|
case 0:
|
|
@@ -311,27 +324,36 @@ export function VenueBookingProvider(_ref) {
|
|
|
311
324
|
case 2:
|
|
312
325
|
setIsWeekLoading(true);
|
|
313
326
|
_context2.prev = 3;
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
327
|
+
// 把区间起点夹紧到今天,避免把已过去的日期传给 OS;整段已过去时直接跳过 OS 请求
|
|
328
|
+
clamped = clampRangeToToday(startDate, endDate);
|
|
329
|
+
summary = [];
|
|
330
|
+
if (!clamped) {
|
|
331
|
+
_context2.next = 11;
|
|
332
|
+
break;
|
|
333
|
+
}
|
|
334
|
+
_context2.next = 9;
|
|
335
|
+
return fetchResourceAvailability(venueBookingModule, clamped.startDate, clamped.endDate);
|
|
336
|
+
case 9:
|
|
337
|
+
raw = getDateRangeSummary(venueBookingModule, clamped.startDate, clamped.endDate);
|
|
338
|
+
summary = Array.isArray(raw) ? raw : [];
|
|
339
|
+
case 11:
|
|
318
340
|
currentDateKey = formatDateKey(anchorDateRef.current);
|
|
319
341
|
grid = getTimeSlotGrid(venueBookingModule, currentDateKey);
|
|
320
342
|
setViewModel(function (prev) {
|
|
321
343
|
return _objectSpread(_objectSpread({}, prev), {}, {
|
|
322
|
-
dateSummary:
|
|
344
|
+
dateSummary: summary,
|
|
323
345
|
timeSlotGrid: grid
|
|
324
346
|
});
|
|
325
347
|
});
|
|
326
|
-
case
|
|
327
|
-
_context2.prev =
|
|
348
|
+
case 14:
|
|
349
|
+
_context2.prev = 14;
|
|
328
350
|
setIsWeekLoading(false);
|
|
329
|
-
return _context2.finish(
|
|
330
|
-
case
|
|
351
|
+
return _context2.finish(14);
|
|
352
|
+
case 17:
|
|
331
353
|
case "end":
|
|
332
354
|
return _context2.stop();
|
|
333
355
|
}
|
|
334
|
-
}, _callee2, null, [[3,,
|
|
356
|
+
}, _callee2, null, [[3,, 14, 17]]);
|
|
335
357
|
}));
|
|
336
358
|
return function (_x2, _x3) {
|
|
337
359
|
return _ref3.apply(this, arguments);
|
|
@@ -360,27 +382,34 @@ export function VenueBookingProvider(_ref) {
|
|
|
360
382
|
MAX_FORWARD_WEEKS = 8;
|
|
361
383
|
fallbackSummary = [];
|
|
362
384
|
_loop = /*#__PURE__*/_regeneratorRuntime().mark(function _loop() {
|
|
363
|
-
var probeDate, _getWeekRange, startDate, endDate, weekSummary, candidateDate, grid;
|
|
385
|
+
var probeDate, _getWeekRange, startDate, endDate, clamped, weekSummary, candidateDate, grid;
|
|
364
386
|
return _regeneratorRuntime().wrap(function _loop$(_context3) {
|
|
365
387
|
while (1) switch (_context3.prev = _context3.next) {
|
|
366
388
|
case 0:
|
|
367
389
|
probeDate = fromDate.add(weekOffset * 7, 'day');
|
|
368
|
-
_getWeekRange = getWeekRange(probeDate), startDate = _getWeekRange.startDate, endDate = _getWeekRange.endDate;
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
390
|
+
_getWeekRange = getWeekRange(probeDate), startDate = _getWeekRange.startDate, endDate = _getWeekRange.endDate; // 夹紧到今天再请求 OS:当前周会从今天开始,未来周不受影响;整段已过去则跳过
|
|
391
|
+
clamped = clampRangeToToday(startDate, endDate);
|
|
392
|
+
if (clamped) {
|
|
393
|
+
_context3.next = 5;
|
|
394
|
+
break;
|
|
395
|
+
}
|
|
396
|
+
return _context3.abrupt("return", 0);
|
|
397
|
+
case 5:
|
|
398
|
+
_context3.next = 7;
|
|
399
|
+
return fetchResourceAvailability(venueBookingModule, clamped.startDate, clamped.endDate);
|
|
400
|
+
case 7:
|
|
401
|
+
weekSummary = getDateRangeSummary(venueBookingModule, clamped.startDate, clamped.endDate);
|
|
373
402
|
if (weekOffset === 0) fallbackSummary = Array.isArray(weekSummary) ? weekSummary : [];
|
|
374
403
|
candidateDate = findNearestAvailableDate({
|
|
375
404
|
summary: Array.isArray(weekSummary) ? weekSummary : [],
|
|
376
405
|
preferredDate: weekOffset === 0 ? fromDate : probeDate.startOf('week')
|
|
377
406
|
});
|
|
378
407
|
if (candidateDate) {
|
|
379
|
-
_context3.next =
|
|
408
|
+
_context3.next = 12;
|
|
380
409
|
break;
|
|
381
410
|
}
|
|
382
411
|
return _context3.abrupt("return", 0);
|
|
383
|
-
case
|
|
412
|
+
case 12:
|
|
384
413
|
setAnchorDate(candidateDate);
|
|
385
414
|
setMonthCursor(candidateDate.startOf('month'));
|
|
386
415
|
grid = getTimeSlotGrid(venueBookingModule, formatDateKey(candidateDate));
|
|
@@ -393,7 +422,7 @@ export function VenueBookingProvider(_ref) {
|
|
|
393
422
|
return _context3.abrupt("return", {
|
|
394
423
|
v: void 0
|
|
395
424
|
});
|
|
396
|
-
case
|
|
425
|
+
case 17:
|
|
397
426
|
case "end":
|
|
398
427
|
return _context3.stop();
|
|
399
428
|
}
|
|
@@ -41,6 +41,7 @@ declare const _default: {
|
|
|
41
41
|
'pisell2.venue.label.selected': string;
|
|
42
42
|
'pisell2.venue.label.sold.out': string;
|
|
43
43
|
'pisell2.venue.label.few.left': string;
|
|
44
|
+
'pisell2.venue.label.bookable': string;
|
|
44
45
|
'pisell2.venue.label.off.peak': string;
|
|
45
46
|
'pisell2.venue.label.peak': string;
|
|
46
47
|
'pisell2.venue.label.promo': string;
|
|
@@ -161,6 +162,7 @@ declare const _default: {
|
|
|
161
162
|
'pisell2.venue.label.selected': string;
|
|
162
163
|
'pisell2.venue.label.sold.out': string;
|
|
163
164
|
'pisell2.venue.label.few.left': string;
|
|
165
|
+
'pisell2.venue.label.bookable': string;
|
|
164
166
|
'pisell2.venue.label.off.peak': string;
|
|
165
167
|
'pisell2.venue.label.peak': string;
|
|
166
168
|
'pisell2.venue.label.promo': string;
|
|
@@ -281,6 +283,7 @@ declare const _default: {
|
|
|
281
283
|
'pisell2.venue.label.selected': string;
|
|
282
284
|
'pisell2.venue.label.sold.out': string;
|
|
283
285
|
'pisell2.venue.label.few.left': string;
|
|
286
|
+
'pisell2.venue.label.bookable': string;
|
|
284
287
|
'pisell2.venue.label.off.peak': string;
|
|
285
288
|
'pisell2.venue.label.peak': string;
|
|
286
289
|
'pisell2.venue.label.promo': string;
|
|
@@ -401,6 +404,7 @@ declare const _default: {
|
|
|
401
404
|
'pisell2.venue.label.selected': string;
|
|
402
405
|
'pisell2.venue.label.sold.out': string;
|
|
403
406
|
'pisell2.venue.label.few.left': string;
|
|
407
|
+
'pisell2.venue.label.bookable': string;
|
|
404
408
|
'pisell2.venue.label.off.peak': string;
|
|
405
409
|
'pisell2.venue.label.peak': string;
|
|
406
410
|
'pisell2.venue.label.promo': string;
|
|
@@ -521,6 +525,7 @@ declare const _default: {
|
|
|
521
525
|
'pisell2.venue.label.selected': string;
|
|
522
526
|
'pisell2.venue.label.sold.out': string;
|
|
523
527
|
'pisell2.venue.label.few.left': string;
|
|
528
|
+
'pisell2.venue.label.bookable': string;
|
|
524
529
|
'pisell2.venue.label.off.peak': string;
|
|
525
530
|
'pisell2.venue.label.peak': string;
|
|
526
531
|
'pisell2.venue.label.promo': string;
|
|
@@ -41,6 +41,7 @@ export default {
|
|
|
41
41
|
'pisell2.venue.label.selected': 'Selected',
|
|
42
42
|
'pisell2.venue.label.sold.out': 'Sold out',
|
|
43
43
|
'pisell2.venue.label.few.left': 'Few left',
|
|
44
|
+
'pisell2.venue.label.bookable': 'Bookable',
|
|
44
45
|
'pisell2.venue.label.off.peak': 'Off-Peak',
|
|
45
46
|
'pisell2.venue.label.peak': 'Peak',
|
|
46
47
|
'pisell2.venue.label.promo': 'Promo',
|
|
@@ -161,6 +162,7 @@ export default {
|
|
|
161
162
|
'pisell2.venue.label.selected': '已选',
|
|
162
163
|
'pisell2.venue.label.sold.out': '已满',
|
|
163
164
|
'pisell2.venue.label.few.left': '即将满',
|
|
165
|
+
'pisell2.venue.label.bookable': '充足',
|
|
164
166
|
'pisell2.venue.label.off.peak': '非高峰',
|
|
165
167
|
'pisell2.venue.label.peak': '高峰',
|
|
166
168
|
'pisell2.venue.label.promo': '促销',
|
|
@@ -281,6 +283,7 @@ export default {
|
|
|
281
283
|
'pisell2.venue.label.selected': '已選',
|
|
282
284
|
'pisell2.venue.label.sold.out': '已滿',
|
|
283
285
|
'pisell2.venue.label.few.left': '即將滿',
|
|
286
|
+
'pisell2.venue.label.bookable': '充足',
|
|
284
287
|
'pisell2.venue.label.off.peak': '非高峰',
|
|
285
288
|
'pisell2.venue.label.peak': '高峰',
|
|
286
289
|
'pisell2.venue.label.promo': '促銷',
|
|
@@ -401,6 +404,7 @@ export default {
|
|
|
401
404
|
'pisell2.venue.label.selected': '選択済み',
|
|
402
405
|
'pisell2.venue.label.sold.out': '満席',
|
|
403
406
|
'pisell2.venue.label.few.left': '残りわずか',
|
|
407
|
+
'pisell2.venue.label.bookable': '予約可',
|
|
404
408
|
'pisell2.venue.label.off.peak': 'オフピーク',
|
|
405
409
|
'pisell2.venue.label.peak': 'ピーク',
|
|
406
410
|
'pisell2.venue.label.promo': 'プロモ',
|
|
@@ -521,6 +525,7 @@ export default {
|
|
|
521
525
|
'pisell2.venue.label.selected': 'Selecionado',
|
|
522
526
|
'pisell2.venue.label.sold.out': 'Esgotado',
|
|
523
527
|
'pisell2.venue.label.few.left': 'Poucas vagas',
|
|
528
|
+
'pisell2.venue.label.bookable': 'Disponível',
|
|
524
529
|
'pisell2.venue.label.off.peak': 'Fora de pico',
|
|
525
530
|
'pisell2.venue.label.peak': 'Pico',
|
|
526
531
|
'pisell2.venue.label.promo': 'Promoção',
|
|
@@ -131,7 +131,7 @@ function Content() {
|
|
|
131
131
|
background: #fff;
|
|
132
132
|
border-radius: 0 0 28px 28px;
|
|
133
133
|
}
|
|
134
|
-
`), /* @__PURE__ */ import_react.default.createElement("main", { className: "mx-auto max-w-[1500px]
|
|
134
|
+
`), /* @__PURE__ */ import_react.default.createElement("main", { className: "mx-auto max-w-[1500px] md:px-6 md:pt-6 lg:pb-12 h-full overscroll-none" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "space-y-2 md:space-y-4", style: { minHeight: "100%" } }, /* @__PURE__ */ import_react.default.createElement("div", { ref: stepHeaderRef, className: "sticky top-0 z-40" }, /* @__PURE__ */ import_react.default.createElement(import_Header.default, null)), /* @__PURE__ */ import_react.default.createElement("div", { className: "grid max-w-full gap-2 md:gap-4 lg:grid-cols-[minmax(0,1fr)_390px] xl:grid-cols-[minmax(0,1fr)_420px]" }, /* @__PURE__ */ import_react.default.createElement("section", { className: "min-w-0 space-y-3 overscroll-none md:space-y-5" }, stepRegistry[currentStep]), /* @__PURE__ */ import_react.default.createElement(
|
|
135
135
|
"aside",
|
|
136
136
|
{
|
|
137
137
|
className: "hidden lg:block sticky self-start z-10 rounded-[28px] bg-white shadow-[0_10px_40px_rgba(20,20,20,0.06)] ring-1 ring-black/6",
|
|
@@ -150,5 +150,5 @@ function Content() {
|
|
|
150
150
|
confirmLoading: isSubmittingOrder
|
|
151
151
|
}
|
|
152
152
|
)
|
|
153
|
-
))), /* @__PURE__ */ import_react.default.createElement("div", { className: "sticky bottom-0 z-
|
|
153
|
+
))), /* @__PURE__ */ import_react.default.createElement("div", { className: "sticky bottom-0 z-41 block lg:hidden" }, /* @__PURE__ */ import_react.default.createElement(import_Footer.default, null))));
|
|
154
154
|
}
|
|
@@ -104,7 +104,7 @@ function Header() {
|
|
|
104
104
|
"div",
|
|
105
105
|
{
|
|
106
106
|
ref: cardRef,
|
|
107
|
-
className: "relative
|
|
107
|
+
className: "relative bg-white p-3 md:rounded-[24px] md:p-4 ring-1 ring-black/6 shadow-[0_10px_30px_rgba(20,20,20,0.04)]"
|
|
108
108
|
},
|
|
109
109
|
/* @__PURE__ */ import_react.default.createElement(
|
|
110
110
|
import_antd.Modal,
|
|
@@ -34,7 +34,6 @@ __export(CourtFilter_exports, {
|
|
|
34
34
|
module.exports = __toCommonJS(CourtFilter_exports);
|
|
35
35
|
var import_react = __toESM(require("react"));
|
|
36
36
|
var import_utils = require("@pisell/utils");
|
|
37
|
-
var import_materials = require("@pisell/materials");
|
|
38
37
|
var import_context = require("../../../context");
|
|
39
38
|
function CourtFilter() {
|
|
40
39
|
const { search, setSearch, filter, setFilter, viewModel } = (0, import_context.useVenueBookingContext)();
|
|
@@ -47,15 +46,7 @@ function CourtFilter() {
|
|
|
47
46
|
{ label: import_utils.locales.getText("pisell2.venue.filter.all") || "全部", value: "ALL" },
|
|
48
47
|
...courtTypes.map((type) => ({ label: type, value: type }))
|
|
49
48
|
];
|
|
50
|
-
return /* @__PURE__ */ import_react.default.createElement("div", { className: "mt-4 grid gap-3 md:mt-5 xl:grid-cols-[1fr_auto] xl:items-center" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "flex
|
|
51
|
-
"input",
|
|
52
|
-
{
|
|
53
|
-
value: search,
|
|
54
|
-
onChange: (e) => setSearch(e.target.value),
|
|
55
|
-
placeholder: String(import_utils.locales.getText("pisell2.venue.search.placeholder") || "搜索场地"),
|
|
56
|
-
className: "w-full border-0 bg-transparent text-sm outline-none placeholder:text-zinc-400"
|
|
57
|
-
}
|
|
58
|
-
)), courtTypes.length > 1 ? /* @__PURE__ */ import_react.default.createElement("div", { className: "flex flex-wrap gap-2" }, filterOptions.map((opt) => /* @__PURE__ */ import_react.default.createElement(
|
|
49
|
+
return /* @__PURE__ */ import_react.default.createElement("div", { className: "mt-4 grid gap-3 md:mt-5 xl:grid-cols-[1fr_auto] xl:items-center" }, courtTypes.length > 1 ? /* @__PURE__ */ import_react.default.createElement("div", { className: "flex flex-wrap gap-2" }, filterOptions.map((opt) => /* @__PURE__ */ import_react.default.createElement(
|
|
59
50
|
"button",
|
|
60
51
|
{
|
|
61
52
|
key: opt.value,
|
|
@@ -231,7 +231,8 @@ function TimeGrid() {
|
|
|
231
231
|
},
|
|
232
232
|
headerTag && !timeMeta.soldOut ? /* @__PURE__ */ import_react.default.createElement("span", { className: `inline-flex rounded-full px-1.5 py-0.5 text-[8px] font-semibold ring-1 md:text-[9px] ${headerTag.className}` }, headerTag.text) : null,
|
|
233
233
|
timeMeta.soldOut ? /* @__PURE__ */ import_react.default.createElement("div", { className: "mt-1 text-[10px] font-bold text-zinc-400" }, import_utils.locales.getText("pisell2.venue.label.sold.out") || "已满") : null,
|
|
234
|
-
!timeMeta.soldOut && timeMeta.fewLeft ? /* @__PURE__ */ import_react.default.createElement("div", { className: "mt-1 text-[10px] font-bold", style: { color: "var(--vb-primary)" } }, import_utils.locales.getText("pisell2.venue.label.few.left") || "即将满") : null
|
|
234
|
+
!timeMeta.soldOut && timeMeta.fewLeft ? /* @__PURE__ */ import_react.default.createElement("div", { className: "mt-1 text-[10px] font-bold", style: { color: "var(--vb-primary)" } }, import_utils.locales.getText("pisell2.venue.label.few.left") || "即将满") : null,
|
|
235
|
+
!timeMeta.soldOut && !timeMeta.fewLeft && !headerTag ? /* @__PURE__ */ import_react.default.createElement("div", { className: "mt-1 text-[10px] font-bold text-zinc-500" }, import_utils.locales.getText("pisell2.venue.label.bookable") || "充足") : null
|
|
235
236
|
);
|
|
236
237
|
})
|
|
237
238
|
)
|
|
@@ -245,7 +246,7 @@ function TimeGrid() {
|
|
|
245
246
|
},
|
|
246
247
|
/* @__PURE__ */ import_react.default.createElement("div", { className: "w-full", key: grid.date }, visibleResources.map((resource) => {
|
|
247
248
|
const courtMeta = (0, import_utils2.getResourceCourtMeta)(resource);
|
|
248
|
-
return /* @__PURE__ */ import_react.default.createElement("div", { key: `${resource.resourceId}-${grid.date}`, className: "grid border-b border-black/6", style: tableGridStyle }, /* @__PURE__ */ import_react.default.createElement("div", { className: `sticky left-0 z-10 border-r border-black/6 px-2 py-
|
|
249
|
+
return /* @__PURE__ */ import_react.default.createElement("div", { key: `${resource.resourceId}-${grid.date}`, className: "grid border-b border-black/6", style: tableGridStyle }, /* @__PURE__ */ import_react.default.createElement("div", { className: `sticky left-0 z-10 border-r border-black/6 px-2 py-2 shadow-[10px_0_16px_-14px_rgba(0,0,0,0.2)] md:px-4 ${courtMeta.soldOut ? "bg-zinc-50" : "bg-white"}` }, /* @__PURE__ */ import_react.default.createElement("div", { className: "flex items-start justify-between gap-2" }, /* @__PURE__ */ import_react.default.createElement("div", null, /* @__PURE__ */ import_react.default.createElement("div", { className: `text-[13px] font-extrabold leading-5 md:text-[15px] ${courtMeta.soldOut ? "text-zinc-400" : "text-zinc-900"}` }, resource.resourceName)))), resource.slots.map((slot, slotIndex) => {
|
|
249
250
|
const isAvailable = slot.status === "available";
|
|
250
251
|
const isUnavailable = slot.status === "occupied" || slot.status === "past" || slot.status === "unavailable";
|
|
251
252
|
const selected = isAvailable && (0, import_hooks.isSlotSelected)(
|
|
@@ -265,14 +266,14 @@ function TimeGrid() {
|
|
|
265
266
|
key: `${resource.resourceId}-${slot.startTime}`,
|
|
266
267
|
onClick: () => handleSlotClick(resource.resourceId, slot),
|
|
267
268
|
disabled: isUnavailable,
|
|
268
|
-
className: `px-1 py-
|
|
269
|
+
className: `px-1 py-2 text-center transition md:px-2 ${isUnavailable ? "cursor-not-allowed bg-zinc-100 text-zinc-400" : selected ? "text-white" : "bg-white hover:bg-[#fff6f6]"}`,
|
|
269
270
|
style: {
|
|
270
271
|
borderLeft: (0, import_utils2.isHourBoundary)(timeLabel) ? "1px solid rgba(0,0,0,0.08)" : "1px solid rgba(0,0,0,0.03)",
|
|
271
272
|
borderBottom: "1px solid rgba(0,0,0,0.04)",
|
|
272
273
|
...selected && !isUnavailable ? { backgroundColor: "var(--vb-primary)" } : null
|
|
273
274
|
}
|
|
274
275
|
},
|
|
275
|
-
isUnavailable ? /* @__PURE__ */ import_react.default.createElement("div", { className: "flex flex-col items-center justify-center gap-1 text-zinc-400" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "text-lg font-bold leading-none" }, "×")) : selected ? /* @__PURE__ */ import_react.default.createElement("div", { className: "space-y-
|
|
276
|
+
isUnavailable ? /* @__PURE__ */ import_react.default.createElement("div", { className: "flex flex-col items-center justify-center gap-1 text-zinc-400" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "text-lg font-bold leading-none" }, "×")) : selected ? /* @__PURE__ */ import_react.default.createElement("div", { className: "space-y-0.5" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "text-[11px] font-bold uppercase tracking-wide leading-4 text-white/90" }, import_utils.locales.getText("pisell2.venue.label.selected") || "已选"), /* @__PURE__ */ import_react.default.createElement(
|
|
276
277
|
import_materials.PisellText.Amount,
|
|
277
278
|
{
|
|
278
279
|
value: Number(slot.price || 0),
|
|
@@ -281,7 +282,7 @@ function TimeGrid() {
|
|
|
281
282
|
showCurrencySymbol: true,
|
|
282
283
|
className: "text-sm font-extrabold text-white"
|
|
283
284
|
}
|
|
284
|
-
)) : /* @__PURE__ */ import_react.default.createElement("div", { className: "space-y-
|
|
285
|
+
)) : /* @__PURE__ */ import_react.default.createElement("div", { className: "space-y-0.5" }, /* @__PURE__ */ import_react.default.createElement(
|
|
285
286
|
import_materials.PisellText.Amount,
|
|
286
287
|
{
|
|
287
288
|
value: Number(slot.price || 0),
|
|
@@ -289,9 +290,9 @@ function TimeGrid() {
|
|
|
289
290
|
precision: 2,
|
|
290
291
|
showCurrencySymbol: true,
|
|
291
292
|
hideDecimalForWholeNumbers: false,
|
|
292
|
-
className: `text-[13px] font-normal ${priceClass} md:text-sm`
|
|
293
|
+
className: `text-[13px] font-normal leading-4 ${priceClass} md:text-sm`
|
|
293
294
|
}
|
|
294
|
-
), tag ? /* @__PURE__ */ import_react.default.createElement("div", { className: `inline-flex rounded-full px-1.5 py-0
|
|
295
|
+
), tag ? /* @__PURE__ */ import_react.default.createElement("div", { className: `inline-flex rounded-full px-1.5 py-0 text-[8px] font-semibold leading-4 ring-1 md:text-[9px] ${tag.className}` }, tagText) : null)
|
|
295
296
|
);
|
|
296
297
|
}));
|
|
297
298
|
}))
|
|
@@ -57,7 +57,7 @@ function VenueSelection() {
|
|
|
57
57
|
function goNextWeek() {
|
|
58
58
|
navigateWeek(7);
|
|
59
59
|
}
|
|
60
|
-
return /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, /* @__PURE__ */ import_react.default.createElement("div", { className: "rounded-[24px] bg-white p-3 shadow-[0_10px_40px_rgba(20,20,20,0.06)] ring-1 ring-black/6 md:rounded-[28px] md:p-6" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "flex flex-col gap-2 xl:flex-row xl:items-center xl:justify-between" }, /* @__PURE__ */ import_react.default.createElement("div", null, /* @__PURE__ */ import_react.default.createElement("h2", { className: "text-2xl font-extrabold leading-tight text-zinc-900 md:text-[30px]" }, import_utils.locales.getText("pisell2.venue.step1.title") || "选择场地"), /* @__PURE__ */ import_react.default.createElement("p", { className: "mt-1 text-xs leading-5 text-zinc-500 md:mt-2 md:text-sm md:leading-6" }, import_utils.locales.getText("pisell2.venue.step1.subtitle") || "仅显示可用时段和价格。")), /* @__PURE__ */ import_react.default.createElement(import_DateNavigator.default, { onPrevWeek: goPrevWeek, onNextWeek: goNextWeek })), /* @__PURE__ */ import_react.default.createElement("div", { className: "mt-3 md:mt-5" }, /* @__PURE__ */ import_react.default.createElement(import_DayTabs.default, { onPrevWeek: goPrevWeek, onNextWeek: goNextWeek })), /* @__PURE__ */ import_react.default.createElement(import_CourtFilter.default, null)), /* @__PURE__ */ import_react.default.createElement(
|
|
60
|
+
return /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, /* @__PURE__ */ import_react.default.createElement("div", { className: "rounded-b-[24px] bg-white p-3 shadow-[0_10px_40px_rgba(20,20,20,0.06)] ring-1 ring-black/6 md:rounded-[28px] md:p-6" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "flex flex-col gap-2 xl:flex-row xl:items-center xl:justify-between" }, /* @__PURE__ */ import_react.default.createElement("div", null, /* @__PURE__ */ import_react.default.createElement("h2", { className: "text-2xl font-extrabold leading-tight text-zinc-900 md:text-[30px]" }, import_utils.locales.getText("pisell2.venue.step1.title") || "选择场地"), /* @__PURE__ */ import_react.default.createElement("p", { className: "mt-1 text-xs leading-5 text-zinc-500 md:mt-2 md:text-sm md:leading-6" }, import_utils.locales.getText("pisell2.venue.step1.subtitle") || "仅显示可用时段和价格。")), /* @__PURE__ */ import_react.default.createElement(import_DateNavigator.default, { onPrevWeek: goPrevWeek, onNextWeek: goNextWeek })), /* @__PURE__ */ import_react.default.createElement("div", { className: "mt-3 md:mt-5" }, /* @__PURE__ */ import_react.default.createElement(import_DayTabs.default, { onPrevWeek: goPrevWeek, onNextWeek: goNextWeek })), /* @__PURE__ */ import_react.default.createElement(import_CourtFilter.default, null)), /* @__PURE__ */ import_react.default.createElement(
|
|
61
61
|
"div",
|
|
62
62
|
{
|
|
63
63
|
ref: tableSectionRef,
|
|
@@ -60,6 +60,14 @@ function getWeekRange(anchor) {
|
|
|
60
60
|
endDate: (0, import_utils2.formatDateKey)(days[days.length - 1])
|
|
61
61
|
};
|
|
62
62
|
}
|
|
63
|
+
function clampRangeToToday(startDate, endDate) {
|
|
64
|
+
const todayKey = (0, import_utils2.formatDateKey)((0, import_dayjs.default)());
|
|
65
|
+
if (endDate < todayKey) return null;
|
|
66
|
+
return {
|
|
67
|
+
startDate: startDate < todayKey ? todayKey : startDate,
|
|
68
|
+
endDate
|
|
69
|
+
};
|
|
70
|
+
}
|
|
63
71
|
function getSubmitOrderErrorMessage(error) {
|
|
64
72
|
const firstFailure = Array.isArray(error == null ? void 0 : error.failures) ? error.failures[0] : null;
|
|
65
73
|
const failureTips = String((firstFailure == null ? void 0 : firstFailure.validationMessage) || "").trim();
|
|
@@ -147,13 +155,18 @@ function VenueBookingProvider({ entryContext, children }) {
|
|
|
147
155
|
if (!venueBookingModule) return;
|
|
148
156
|
setIsWeekLoading(true);
|
|
149
157
|
try {
|
|
150
|
-
|
|
151
|
-
|
|
158
|
+
const clamped = clampRangeToToday(startDate, endDate);
|
|
159
|
+
let summary = [];
|
|
160
|
+
if (clamped) {
|
|
161
|
+
await (0, import_hooks.fetchResourceAvailability)(venueBookingModule, clamped.startDate, clamped.endDate);
|
|
162
|
+
const raw = (0, import_hooks.getDateRangeSummary)(venueBookingModule, clamped.startDate, clamped.endDate);
|
|
163
|
+
summary = Array.isArray(raw) ? raw : [];
|
|
164
|
+
}
|
|
152
165
|
const currentDateKey = (0, import_utils2.formatDateKey)(anchorDateRef.current);
|
|
153
166
|
const grid = (0, import_hooks.getTimeSlotGrid)(venueBookingModule, currentDateKey);
|
|
154
167
|
setViewModel((prev) => ({
|
|
155
168
|
...prev,
|
|
156
|
-
dateSummary:
|
|
169
|
+
dateSummary: summary,
|
|
157
170
|
timeSlotGrid: grid
|
|
158
171
|
}));
|
|
159
172
|
} finally {
|
|
@@ -169,8 +182,10 @@ function VenueBookingProvider({ entryContext, children }) {
|
|
|
169
182
|
for (let weekOffset = 0; weekOffset <= MAX_FORWARD_WEEKS; weekOffset++) {
|
|
170
183
|
const probeDate = fromDate.add(weekOffset * 7, "day");
|
|
171
184
|
const { startDate, endDate } = getWeekRange(probeDate);
|
|
172
|
-
|
|
173
|
-
|
|
185
|
+
const clamped = clampRangeToToday(startDate, endDate);
|
|
186
|
+
if (!clamped) continue;
|
|
187
|
+
await (0, import_hooks.fetchResourceAvailability)(venueBookingModule, clamped.startDate, clamped.endDate);
|
|
188
|
+
const weekSummary = (0, import_hooks.getDateRangeSummary)(venueBookingModule, clamped.startDate, clamped.endDate);
|
|
174
189
|
if (weekOffset === 0) fallbackSummary = Array.isArray(weekSummary) ? weekSummary : [];
|
|
175
190
|
const candidateDate = findNearestAvailableDate({
|
|
176
191
|
summary: Array.isArray(weekSummary) ? weekSummary : [],
|
|
@@ -41,6 +41,7 @@ declare const _default: {
|
|
|
41
41
|
'pisell2.venue.label.selected': string;
|
|
42
42
|
'pisell2.venue.label.sold.out': string;
|
|
43
43
|
'pisell2.venue.label.few.left': string;
|
|
44
|
+
'pisell2.venue.label.bookable': string;
|
|
44
45
|
'pisell2.venue.label.off.peak': string;
|
|
45
46
|
'pisell2.venue.label.peak': string;
|
|
46
47
|
'pisell2.venue.label.promo': string;
|
|
@@ -161,6 +162,7 @@ declare const _default: {
|
|
|
161
162
|
'pisell2.venue.label.selected': string;
|
|
162
163
|
'pisell2.venue.label.sold.out': string;
|
|
163
164
|
'pisell2.venue.label.few.left': string;
|
|
165
|
+
'pisell2.venue.label.bookable': string;
|
|
164
166
|
'pisell2.venue.label.off.peak': string;
|
|
165
167
|
'pisell2.venue.label.peak': string;
|
|
166
168
|
'pisell2.venue.label.promo': string;
|
|
@@ -281,6 +283,7 @@ declare const _default: {
|
|
|
281
283
|
'pisell2.venue.label.selected': string;
|
|
282
284
|
'pisell2.venue.label.sold.out': string;
|
|
283
285
|
'pisell2.venue.label.few.left': string;
|
|
286
|
+
'pisell2.venue.label.bookable': string;
|
|
284
287
|
'pisell2.venue.label.off.peak': string;
|
|
285
288
|
'pisell2.venue.label.peak': string;
|
|
286
289
|
'pisell2.venue.label.promo': string;
|
|
@@ -401,6 +404,7 @@ declare const _default: {
|
|
|
401
404
|
'pisell2.venue.label.selected': string;
|
|
402
405
|
'pisell2.venue.label.sold.out': string;
|
|
403
406
|
'pisell2.venue.label.few.left': string;
|
|
407
|
+
'pisell2.venue.label.bookable': string;
|
|
404
408
|
'pisell2.venue.label.off.peak': string;
|
|
405
409
|
'pisell2.venue.label.peak': string;
|
|
406
410
|
'pisell2.venue.label.promo': string;
|
|
@@ -521,6 +525,7 @@ declare const _default: {
|
|
|
521
525
|
'pisell2.venue.label.selected': string;
|
|
522
526
|
'pisell2.venue.label.sold.out': string;
|
|
523
527
|
'pisell2.venue.label.few.left': string;
|
|
528
|
+
'pisell2.venue.label.bookable': string;
|
|
524
529
|
'pisell2.venue.label.off.peak': string;
|
|
525
530
|
'pisell2.venue.label.peak': string;
|
|
526
531
|
'pisell2.venue.label.promo': string;
|
|
@@ -61,6 +61,7 @@ var locales_default = {
|
|
|
61
61
|
"pisell2.venue.label.selected": "Selected",
|
|
62
62
|
"pisell2.venue.label.sold.out": "Sold out",
|
|
63
63
|
"pisell2.venue.label.few.left": "Few left",
|
|
64
|
+
"pisell2.venue.label.bookable": "Bookable",
|
|
64
65
|
"pisell2.venue.label.off.peak": "Off-Peak",
|
|
65
66
|
"pisell2.venue.label.peak": "Peak",
|
|
66
67
|
"pisell2.venue.label.promo": "Promo",
|
|
@@ -181,6 +182,7 @@ var locales_default = {
|
|
|
181
182
|
"pisell2.venue.label.selected": "已选",
|
|
182
183
|
"pisell2.venue.label.sold.out": "已满",
|
|
183
184
|
"pisell2.venue.label.few.left": "即将满",
|
|
185
|
+
"pisell2.venue.label.bookable": "充足",
|
|
184
186
|
"pisell2.venue.label.off.peak": "非高峰",
|
|
185
187
|
"pisell2.venue.label.peak": "高峰",
|
|
186
188
|
"pisell2.venue.label.promo": "促销",
|
|
@@ -301,6 +303,7 @@ var locales_default = {
|
|
|
301
303
|
"pisell2.venue.label.selected": "已選",
|
|
302
304
|
"pisell2.venue.label.sold.out": "已滿",
|
|
303
305
|
"pisell2.venue.label.few.left": "即將滿",
|
|
306
|
+
"pisell2.venue.label.bookable": "充足",
|
|
304
307
|
"pisell2.venue.label.off.peak": "非高峰",
|
|
305
308
|
"pisell2.venue.label.peak": "高峰",
|
|
306
309
|
"pisell2.venue.label.promo": "促銷",
|
|
@@ -421,6 +424,7 @@ var locales_default = {
|
|
|
421
424
|
"pisell2.venue.label.selected": "選択済み",
|
|
422
425
|
"pisell2.venue.label.sold.out": "満席",
|
|
423
426
|
"pisell2.venue.label.few.left": "残りわずか",
|
|
427
|
+
"pisell2.venue.label.bookable": "予約可",
|
|
424
428
|
"pisell2.venue.label.off.peak": "オフピーク",
|
|
425
429
|
"pisell2.venue.label.peak": "ピーク",
|
|
426
430
|
"pisell2.venue.label.promo": "プロモ",
|
|
@@ -541,6 +545,7 @@ var locales_default = {
|
|
|
541
545
|
"pisell2.venue.label.selected": "Selecionado",
|
|
542
546
|
"pisell2.venue.label.sold.out": "Esgotado",
|
|
543
547
|
"pisell2.venue.label.few.left": "Poucas vagas",
|
|
548
|
+
"pisell2.venue.label.bookable": "Disponível",
|
|
544
549
|
"pisell2.venue.label.off.peak": "Fora de pico",
|
|
545
550
|
"pisell2.venue.label.peak": "Pico",
|
|
546
551
|
"pisell2.venue.label.promo": "Promoção",
|