visit-preview.js 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. const {museumApi} = require('../../../utils/api.js');
  2. Page({
  3. data: {
  4. appointmentSlots: [], // 存储预约时段数据
  5. openTime: '10:00', // 开馆时间
  6. closeTime: '18:00', // 闭馆时间
  7. stopCheckTime: '17:00', // 停止检票时间
  8. noticeContent: '' // 预约须知内容
  9. },
  10. onLoad(options) {
  11. // 页面加载时的逻辑
  12. console.log('页面加载');
  13. this.loadAppointmentSlots();
  14. this.loadNoticeContent();
  15. },
  16. // 加载预约时段数据
  17. loadAppointmentSlots() {
  18. // 获取当前日期
  19. const today = new Date();
  20. const dateString = today.getFullYear() + '-' +
  21. String(today.getMonth() + 1).padStart(2, '0') + '-' +
  22. String(today.getDate()).padStart(2, '0');
  23. console.log('获取预约时段,日期:', dateString);
  24. // 调用API获取预约时段
  25. museumApi.getSlotsByDate(dateString)
  26. .then(res => {
  27. console.log('获取预约时段成功:', res);
  28. if (res) {
  29. this.setData({
  30. appointmentSlots: res
  31. });
  32. this.updateTimeInfo(res);
  33. } else {
  34. console.error('获取预约时段失败:', res.message || '未知错误');
  35. this.setDefaultTime();
  36. wx.showToast({
  37. title: '获取预约时段失败',
  38. icon: 'none'
  39. });
  40. }
  41. })
  42. .catch(err => {
  43. console.error('获取预约时段异常:', err);
  44. this.setDefaultTime();
  45. // wx.showToast({
  46. // title: '网络异常,请稍后重试',
  47. // icon: 'none'
  48. // });
  49. });
  50. },
  51. // 加载预约须知内容
  52. loadNoticeContent() {
  53. console.log('获取预约须知内容');
  54. // 调用API获取预约须知
  55. museumApi.getSlots()
  56. .then(res => {
  57. console.log('获取预约须知成功:', res);
  58. if (res) {
  59. this.setData({
  60. noticeContent: res.notice.rtf
  61. });
  62. } else {
  63. console.error('获取预约须知失败:', res.message || '未知错误');
  64. }
  65. })
  66. .catch(err => {
  67. console.error('获取预约须知异常:', err);
  68. });
  69. },
  70. // 判断时间段是否为下午(大于等于14:00)
  71. isAfternoonTime(timeStr) {
  72. // 时间格式如:"10:00-14:00" 或 "14:00-18:00"
  73. const startTime = timeStr.split('-')[0].trim();
  74. const hour = parseInt(startTime.split(':')[0]);
  75. return hour >= 14;
  76. },
  77. // 更新时间信息
  78. updateTimeInfo(data) {
  79. let openTime = '10:00';
  80. let closeTime = '18:00';
  81. let stopCheckTime = '17:00';
  82. if (data.length === 1) {
  83. // 只有一项数据,直接取time
  84. const timeRange = data[0].time;
  85. if (timeRange && timeRange.includes('-')) {
  86. const times = timeRange.split('-');
  87. openTime = times[0];
  88. closeTime = times[1];
  89. }
  90. } else if (data.length >= 2) {
  91. // 有两项或更多数据,根据时间段判断上午下午
  92. let morningData = null;
  93. let afternoonData = null;
  94. // 遍历数据,根据时间判断是上午还是下午
  95. data.forEach(item => {
  96. if (this.isAfternoonTime(item.time)) {
  97. afternoonData = item;
  98. } else {
  99. morningData = item;
  100. }
  101. });
  102. // 取上午时段的开始时间作为开馆时间
  103. if (morningData && morningData.time.includes('-')) {
  104. openTime = morningData.time.split('-')[0];
  105. }
  106. // 取下午时段的结束时间作为闭馆时间
  107. if (afternoonData && afternoonData.time.includes('-')) {
  108. closeTime = afternoonData.time.split('-')[1];
  109. }
  110. // 如果没有上午时段,用下午时段的开始时间作为开馆时间
  111. if (!morningData && afternoonData && afternoonData.time.includes('-')) {
  112. openTime = afternoonData.time.split('-')[0];
  113. }
  114. // 如果没有下午时段,用上午时段的结束时间作为闭馆时间
  115. if (!afternoonData && morningData && morningData.time.includes('-')) {
  116. closeTime = morningData.time.split('-')[1];
  117. }
  118. }
  119. // 计算停止检票时间(闭馆时间往前一个小时)
  120. stopCheckTime = this.calculateStopCheckTime(closeTime);
  121. this.setData({
  122. openTime: openTime,
  123. closeTime: closeTime,
  124. stopCheckTime: stopCheckTime
  125. });
  126. console.log('更新时间信息:', { openTime, closeTime, stopCheckTime });
  127. },
  128. // 设置默认时间
  129. setDefaultTime() {
  130. this.setData({
  131. openTime: '10:00',
  132. closeTime: '18:00',
  133. stopCheckTime: '17:00'
  134. });
  135. },
  136. // 计算停止检票时间(闭馆时间往前一个小时)
  137. calculateStopCheckTime(closeTime) {
  138. try {
  139. const [hours, minutes] = closeTime.split(':').map(Number);
  140. let stopHour = hours - 1;
  141. // 处理跨天的情况
  142. if (stopHour < 0) {
  143. stopHour = 23;
  144. }
  145. return String(stopHour).padStart(2, '0') + ':' + String(minutes).padStart(2, '0');
  146. } catch (error) {
  147. console.error('计算停止检票时间失败:', error);
  148. return '17:00'; // 默认值
  149. }
  150. },
  151. onShow() {
  152. // 页面显示时的逻辑
  153. console.log(111111)
  154. },
  155. // 返回首页
  156. goBack() {
  157. wx.switchTab({
  158. url: '/pages/index/index'
  159. });
  160. },
  161. // 开始预约
  162. startPreview() {
  163. wx.navigateTo({
  164. url: '/pages/index/start-preview/start-preview'
  165. });
  166. },
  167. // 查看我的参观人
  168. viewMyVisitors() {
  169. wx.navigateTo({
  170. url: '/pages/user/userList/index'
  171. });
  172. },
  173. onShareAppMessage() {
  174. return {
  175. title: '克拉玛依博物馆 - 预约参观',
  176. path: '/pages/index/visitpreview/visitpreview'
  177. };
  178. }
  179. });