From 7aa8c720051fa7cde4feb4fbf2bc8291de664938 Mon Sep 17 00:00:00 2001 From: zoujing Date: Mon, 13 Apr 2026 22:33:17 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E9=85=92=E5=BA=97=E7=9A=84=E6=97=A5?= =?UTF-8?q?=E6=9C=9F=E9=80=89=E6=8B=A9=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Calender/index.vue | 57 ++++++++++++++++++++++++------- 1 file changed, 45 insertions(+), 12 deletions(-) diff --git a/src/components/Calender/index.vue b/src/components/Calender/index.vue index ce14aa8..e74c34c 100644 --- a/src/components/Calender/index.vue +++ b/src/components/Calender/index.vue @@ -50,7 +50,13 @@ {{ dateInfo.label }} {{ dateInfo.day }} - ¥{{ dateInfo.price }} + ¥{{ dateInfo.price }} @@ -253,7 +259,7 @@ const generateCalendarGrid = (year, month) => { // 填充日期 for (let day = 1; day <= daysInMonth; day++) { const dateStr = `${year}-${String(month).padStart(2, "0")}-${String( - day + day, ).padStart(2, "0")}`; const priceItem = getPriceItem(dateStr); grid.push({ @@ -344,7 +350,11 @@ const getDateCellClass = (dateInfo) => { if (dateInfo.selected) classes.push("date-cell-selected"); if (dateInfo.inRange) classes.push("date-cell-in-range"); // 标注无价格但可选的日期(用于视觉区分) - if (dateInfo.price === null || dateInfo.price === undefined || dateInfo.price === "-") { + if ( + dateInfo.price === null || + dateInfo.price === undefined || + dateInfo.price === "-" + ) { classes.push("date-cell-no-price"); } @@ -404,13 +414,19 @@ const handleRangeSelection = (dateInfo) => { if (!rangeStart.value || (rangeStart.value && rangeEnd.value)) { // 开始新的范围选择:当作为价格区间选择器时,开始日必须有价格且有库存 if (props.rangeRequirePrice) { - const hasPrice = dateInfo.price !== null && dateInfo.price !== undefined && dateInfo.price !== "-"; + const hasPrice = + dateInfo.price !== null && + dateInfo.price !== undefined && + dateInfo.price !== "-"; if (!hasPrice) { uni.showToast({ title: "所选日期不可预订,请重新选择", icon: "none" }); return; } if (dateInfo.stock !== undefined && Number(dateInfo.stock) <= 0) { - uni.showToast({ title: "所选日期库存不足,请选择其他日期", icon: "none" }); + uni.showToast({ + title: "所选日期库存不足,请选择其他日期", + icon: "none", + }); return; } } @@ -421,11 +437,16 @@ const handleRangeSelection = (dateInfo) => { return; } - // 否则为结束日期(完成选择)——结束日允许无价格(如为紧接有价日的下一天),但区间内的夜晚必须有价格 + // 否则为结束日期(完成选择) + if (rangeStart.value === dateInfo.date) { + uni.showToast({ title: "离店日期不能与入住日期相同", icon: "none" }); + return; + } + rangeEnd.value = dateInfo.date; isRangeSelecting.value = false; - // 允许选择相同日期,但确保开始日期不大于结束日期 + // 确保开始日期不大于结束日期 if (new Date(rangeStart.value) > new Date(rangeEnd.value)) { [rangeStart.value, rangeEnd.value] = [rangeEnd.value, rangeStart.value]; } @@ -433,7 +454,11 @@ const handleRangeSelection = (dateInfo) => { // 检查日期跨度是否超过28天 const daysBetween = calculateDaysBetween(rangeStart.value, rangeEnd.value); if (daysBetween > 28) { - uni.showToast({ title: "预定时间不能超过28天", icon: "none", duration: 3000 }); + uni.showToast({ + title: "预定时间不能超过28天", + icon: "none", + duration: 3000, + }); rangeStart.value = null; rangeEnd.value = null; isRangeSelecting.value = false; @@ -443,9 +468,14 @@ const handleRangeSelection = (dateInfo) => { // 如果作为价格区间选择器,验证夜晚(不包含离店日)是否都有价格/库存 if (props.rangeRequirePrice) { const nights = generateNightsRange(rangeStart.value, rangeEnd.value); - const missing = nights.find((d) => d.price === null || d.price === undefined || d.price === "-"); + const missing = nights.find( + (d) => d.price === null || d.price === undefined || d.price === "-", + ); if (missing) { - uni.showToast({ title: "所选区间包含无价格日期,请重新选择", icon: "none" }); + uni.showToast({ + title: "所选区间包含无价格日期,请重新选择", + icon: "none", + }); rangeStart.value = null; rangeEnd.value = null; return; @@ -456,7 +486,10 @@ const handleRangeSelection = (dateInfo) => { return item && item.stock !== undefined && Number(item.stock) <= 0; }); if (badStock) { - uni.showToast({ title: "所选区间包含库存不足的日期,请重新选择", icon: "none" }); + uni.showToast({ + title: "所选区间包含库存不足的日期,请重新选择", + icon: "none", + }); rangeStart.value = null; rangeEnd.value = null; return; @@ -551,7 +584,7 @@ watch( popup.value?.close(); } }, - { immediate: true } + { immediate: true }, ); // 生命周期钩子