// 调用预约API const { museumApi } = require('../../../utils/api.js'); Page({ data: { activityList: [], // 活动列表 openTime: '10:00', // 开馆时间 closeTime: '18:00', // 闭馆时间 stopCheckTime: '17:00', // 停止检票时间 noticeContent: '' // 预约须知内容 }, onLoad(options) { // 页面加载时的逻辑 this.loadActivityList(); this.loadNoticeContent(); }, onShow() { // 页面显示时的逻辑 }, // 检查活动是否已过期(按日期比较) isActivityExpired(activity) { if (!activity.endTime) return false; const today = new Date(); const activityEndDate = new Date(activity.endTime); // 只比较日期,忽略具体时间 const todayDateString = today.getFullYear() + '-' + String(today.getMonth() + 1).padStart(2, '0') + '-' + String(today.getDate()).padStart(2, '0'); const endDateString = activityEndDate.getFullYear() + '-' + String(activityEndDate.getMonth() + 1).padStart(2, '0') + '-' + String(activityEndDate.getDate()).padStart(2, '0'); // 如果活动结束日期小于今天,则认为已过期 return endDateString < todayDateString; }, // 加载活动列表 loadActivityList() { museumApi.getSocialActivityList({ pageSize: 100, status: 1, subscribe: 1 }) .then(response => { console.log('获取活动列表成功:', response); if (response && response.records) { // 过滤掉已过期的活动(结束日期小于今天) const validActivities = response.records.filter(activity => { const isExpired = this.isActivityExpired(activity); if (isExpired) { console.log('活动已过期,将被过滤:', activity.title || activity.name, activity.endTime); } return !isExpired; }); console.log(`活动过滤结果: 总数${response.records.length},有效${validActivities.length},过期${response.records.length - validActivities.length}`); this.setData({ activityList: validActivities }); this.updateTimeInfoFromActivity(validActivities); } }) .catch(error => { console.error('获取活动列表失败:', error); }); }, // 加载预约须知内容 loadNoticeContent() { console.log('获取预约须知内容'); // 调用API获取预约须知 museumApi.getSlots() .then(res => { console.log('获取预约须知成功:', res); if (res) { this.setData({ noticeContent: res.notice.rtf }); } else { console.error('获取预约须知失败:', res.message || '未知错误'); } }) .catch(err => { console.error('获取预约须知异常:', err); }); }, // 从活动数据更新时间信息 updateTimeInfoFromActivity(activityList) { // 获取当前日期的预约时段来更新时间信息 const today = new Date(); const dateString = today.getFullYear() + '-' + String(today.getMonth() + 1).padStart(2, '0') + '-' + String(today.getDate()).padStart(2, '0'); museumApi.getSlotsByDate(dateString) .then(res => { if (res && res.length > 0) { this.updateTimeInfo(res); } }) .catch(err => { console.error('获取预约时段异常:', err); }); }, // 判断时间段是否为下午(大于等于14:00) isAfternoonTime(timeStr) { // 时间格式如:"10:00-14:00" 或 "14:00-18:00" const startTime = timeStr.split('-')[0].trim(); const hour = parseInt(startTime.split(':')[0]); return hour >= 14; }, // 更新时间信息 updateTimeInfo(data) { let openTime = '10:00'; let closeTime = '18:00'; let stopCheckTime = '17:00'; if (data.length === 1) { // 只有一项数据,直接取time const timeRange = data[0].time; if (timeRange && timeRange.includes('-')) { const times = timeRange.split('-'); openTime = times[0]; closeTime = times[1]; } } else if (data.length >= 2) { // 有两项或更多数据,根据时间段判断上午下午 let morningData = null; let afternoonData = null; // 遍历数据,根据时间判断是上午还是下午 data.forEach(item => { if (this.isAfternoonTime(item.time)) { afternoonData = item; } else { morningData = item; } }); // 取上午时段的开始时间作为开馆时间 if (morningData && morningData.time.includes('-')) { openTime = morningData.time.split('-')[0]; } // 取下午时段的结束时间作为闭馆时间 if (afternoonData && afternoonData.time.includes('-')) { closeTime = afternoonData.time.split('-')[1]; } // 如果没有上午时段,用下午时段的开始时间作为开馆时间 if (!morningData && afternoonData && afternoonData.time.includes('-')) { openTime = afternoonData.time.split('-')[0]; } // 如果没有下午时段,用上午时段的结束时间作为闭馆时间 if (!afternoonData && morningData && morningData.time.includes('-')) { closeTime = morningData.time.split('-')[1]; } } // 计算停止检票时间(闭馆时间往前一个小时) stopCheckTime = this.calculateStopCheckTime(closeTime); this.setData({ openTime: openTime, closeTime: closeTime, stopCheckTime: stopCheckTime }); console.log('更新时间信息:', { openTime, closeTime, stopCheckTime }); }, // 计算停止检票时间(闭馆时间往前一个小时) calculateStopCheckTime(closeTime) { try { const [hours, minutes] = closeTime.split(':').map(Number); let stopHour = hours - 1; // 处理跨天的情况 if (stopHour < 0) { stopHour = 23; } return String(stopHour).padStart(2, '0') + ':' + String(minutes).padStart(2, '0'); } catch (error) { console.error('计算停止检票时间失败:', error); return '17:00'; // 默认值 } }, // 返回首页 goBack() { wx.switchTab({ url: '/pages/index/index' }); }, // 跳转到用户列表 goUserList() { wx.navigateTo({ url: '/pages/user/userList/index' }); }, // 跳转到活动页面 goToActivePage(e) { const activityId = e.currentTarget.dataset.activityId; console.log('跳转到活动页面,activityId:', activityId); wx.navigateTo({ url: `/pages/index/active-page/active-page?activityId=${activityId}&type=2` }); }, onShareAppMessage() { return { title: '克拉玛依博物馆 - 活动预约', path: '/pages/index/active-preview/active-preview' }; } });