123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232 |
- // 调用预约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'
- };
- }
- });
|