|
@@ -330,10 +330,12 @@ Component({
|
|
|
console.log('今天状态检查:', {
|
|
|
isInOpenRange,
|
|
|
todayStatus,
|
|
|
+ openStart,
|
|
|
+ openEnd,
|
|
|
activityData: this.data.activityData
|
|
|
});
|
|
|
|
|
|
- // 只有今天可以选择时才默认选中(今天状态为'今天'表示可约)
|
|
|
+ // 如果今天在开放的时间段内,则默认选中今天
|
|
|
if (isInOpenRange && (todayStatus === '今天' || todayStatus === '已开放')) {
|
|
|
this.setData({
|
|
|
selectedDate: today
|
|
@@ -350,39 +352,35 @@ Component({
|
|
|
|
|
|
console.log('默认选中今天:', today, '状态:', todayStatus);
|
|
|
} else {
|
|
|
- // 今天不可选择时,如果有活动数据且活动开始时间在未来,选择活动开始时间
|
|
|
- if (this.data.activityData && this.data.activityData.startTime) {
|
|
|
- const activityStartDate = new Date(this.data.activityData.startTime);
|
|
|
- activityStartDate.setHours(0, 0, 0, 0);
|
|
|
+ // 如果开放的时间段在未来,则选择时间段的第一天
|
|
|
+ if (openStart > today) {
|
|
|
+ const firstAvailableDate = new Date(openStart);
|
|
|
+ const firstDateStatus = this.getDateStatus(firstAvailableDate, false, false, true);
|
|
|
|
|
|
- // 检查活动开始时间是否在未来且在活动时间范围内
|
|
|
- if (activityStartDate >= today && this.isDateInOpenRange(activityStartDate, openStart, openEnd)) {
|
|
|
- const startDateStatus = this.getDateStatus(activityStartDate, false, false, true);
|
|
|
- if (startDateStatus === '已开放') {
|
|
|
- this.setData({
|
|
|
- selectedDate: activityStartDate
|
|
|
- });
|
|
|
-
|
|
|
- // 更新日历显示以反映选中状态
|
|
|
- this.updateDayClasses();
|
|
|
-
|
|
|
- // 触发自定义事件,向父组件传递默认选择的日期
|
|
|
- this.triggerEvent('datechange', {
|
|
|
- date: activityStartDate,
|
|
|
- dateString: this.formatDate(activityStartDate)
|
|
|
- });
|
|
|
-
|
|
|
- console.log('默认选中活动开始时间:', activityStartDate);
|
|
|
- return;
|
|
|
- }
|
|
|
+ if (firstDateStatus === '已开放' || firstDateStatus === '今天') {
|
|
|
+ this.setData({
|
|
|
+ selectedDate: firstAvailableDate
|
|
|
+ });
|
|
|
+
|
|
|
+ // 更新日历显示以反映选中状态
|
|
|
+ this.updateDayClasses();
|
|
|
+
|
|
|
+ // 触发自定义事件,向父组件传递默认选择的日期
|
|
|
+ this.triggerEvent('datechange', {
|
|
|
+ date: firstAvailableDate,
|
|
|
+ dateString: this.formatDate(firstAvailableDate)
|
|
|
+ });
|
|
|
+
|
|
|
+ console.log('默认选中开放时间段的第一天:', firstAvailableDate, '状态:', firstDateStatus);
|
|
|
+ return;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- // 今天不可选择且没有合适的活动开始时间时,确保selectedDate为null
|
|
|
+ // 如果都不满足条件,确保selectedDate为null
|
|
|
this.setData({
|
|
|
selectedDate: null
|
|
|
});
|
|
|
- console.log('今天不可选择,不默认选中。状态:', todayStatus);
|
|
|
+ console.log('无合适的默认日期可选择');
|
|
|
}
|
|
|
},
|
|
|
|
|
@@ -403,19 +401,39 @@ Component({
|
|
|
const { startTime, endTime } = this.data.activityData;
|
|
|
if (!startTime || !endTime) return;
|
|
|
|
|
|
+ const today = new Date();
|
|
|
+ today.setHours(0, 0, 0, 0);
|
|
|
+
|
|
|
const startDate = new Date(startTime);
|
|
|
const endDate = new Date(endTime);
|
|
|
+ startDate.setHours(0, 0, 0, 0);
|
|
|
+ endDate.setHours(23, 59, 59, 999);
|
|
|
+
|
|
|
+ let targetYear, targetMonth;
|
|
|
+
|
|
|
+ // 判断今天是否在时间段内
|
|
|
+ const isTodayInRange = this.isDateInOpenRange(today, startDate, endDate);
|
|
|
+
|
|
|
+ if (isTodayInRange) {
|
|
|
+ // 如果今天在时间段内,跳转到今天所在的月份
|
|
|
+ targetYear = today.getFullYear();
|
|
|
+ targetMonth = today.getMonth() + 1;
|
|
|
+ console.log('今天在活动时间段内,跳转到今天所在月份:', targetYear, targetMonth);
|
|
|
+ } else {
|
|
|
+ // 如果今天不在时间段内,跳转到开放时间段第一天所在的月份
|
|
|
+ targetYear = startDate.getFullYear();
|
|
|
+ targetMonth = startDate.getMonth() + 1;
|
|
|
+ console.log('今天不在活动时间段内,跳转到开放时间段第一天所在月份:', targetYear, targetMonth);
|
|
|
+ }
|
|
|
|
|
|
- // 如果开始时间不在当前月份,跳转到开始时间所在月份
|
|
|
const currentYear = this.data.currentYear;
|
|
|
const currentMonth = this.data.currentMonth;
|
|
|
- const startYear = startDate.getFullYear();
|
|
|
- const startMonth = startDate.getMonth() + 1;
|
|
|
|
|
|
- if (startYear !== currentYear || startMonth !== currentMonth) {
|
|
|
+ // 如果目标月份不是当前月份,则跳转
|
|
|
+ if (targetYear !== currentYear || targetMonth !== currentMonth) {
|
|
|
this.setData({
|
|
|
- currentYear: startYear,
|
|
|
- currentMonth: startMonth
|
|
|
+ currentYear: targetYear,
|
|
|
+ currentMonth: targetMonth
|
|
|
}, () => {
|
|
|
this.initCalendar();
|
|
|
this.initDefaultDate();
|