index.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. // pages/index/activity/activity.js
  2. const { museumApi } = require('../../../utils/api.js');
  3. const { navigateToWebview, urlImg } = require('../../../utils/util.js');
  4. Page({
  5. data: {
  6. exhibitionList: [], // 展览列表
  7. loading: false,
  8. urlImg: urlImg,
  9. currentPage: 1,
  10. pageSize: 10,
  11. hasMore: true,
  12. loadingMore: false
  13. },
  14. onLoad() {
  15. this.getExhibitionList(true);
  16. },
  17. onPullDownRefresh() {
  18. this.getExhibitionList(true);
  19. },
  20. // 页面滚动到底部时触发
  21. onReachBottom() {
  22. if (this.data.hasMore && !this.data.loadingMore) {
  23. this.loadMore();
  24. }
  25. },
  26. /**
  27. * 获取展览列表
  28. */
  29. async getExhibitionList(isRefresh = false, params = {}) {
  30. const page = isRefresh ? 1 : this.data.currentPage;
  31. if (isRefresh) {
  32. this.setData({ loading: true });
  33. } else {
  34. this.setData({ loadingMore: true });
  35. }
  36. try {
  37. const response = await museumApi.getExhibitionList({
  38. pageNum: page,
  39. pageSize: this.data.pageSize,
  40. status: 1,
  41. ...params
  42. });
  43. console.log('展览数据:', response);
  44. // 获取展览数据并进行筛选
  45. let exhibitionList = response.records || response.list || response.data || response || [];
  46. // 筛选有效的展览数据 - 确保有exhibitId和title
  47. exhibitionList = exhibitionList.filter(item => {
  48. return item && item.exhibitId && item.webSite;
  49. });
  50. if (isRefresh) {
  51. // 刷新时替换数据
  52. this.setData({
  53. exhibitionList,
  54. currentPage: 1,
  55. hasMore: exhibitionList.length >= this.data.pageSize
  56. });
  57. } else {
  58. // 加载更多时追加数据
  59. this.setData({
  60. exhibitionList: [...this.data.exhibitionList, ...exhibitionList],
  61. hasMore: exhibitionList.length >= this.data.pageSize
  62. });
  63. }
  64. return response;
  65. } catch (error) {
  66. console.error('获取展览数据失败:', error);
  67. wx.showToast({
  68. title: '加载失败',
  69. icon: 'none'
  70. });
  71. if (isRefresh) {
  72. this.setData({ exhibitionList: [] });
  73. }
  74. } finally {
  75. this.setData({
  76. loading: false,
  77. loadingMore: false
  78. });
  79. if (isRefresh) {
  80. wx.stopPullDownRefresh();
  81. }
  82. }
  83. },
  84. // 加载更多数据
  85. loadMore() {
  86. const nextPage = this.data.currentPage + 1;
  87. this.setData({ currentPage: nextPage });
  88. this.getExhibitionList(false);
  89. },
  90. // 返回首页
  91. goBack() {
  92. wx.navigateBack();
  93. },
  94. // 展览项点击事件
  95. viewExhibition(e) {
  96. const item = e.currentTarget.dataset.item;
  97. console.log('查看展览详情:', item);
  98. wx.navigateTo({
  99. url: `/pages/exhibition/activeDetails/index?isFrom=weixin&id=${item.exhibitId}&type=exhibition`
  100. });
  101. },
  102. // 组件:线上观展点击
  103. viewExhibition(e) {
  104. const item = e.currentTarget.dataset.item;
  105. if (item) {
  106. console.log('跳转到线上观展:', item.webSite);
  107. navigateToWebview(item.webSite, 'open');
  108. } else {
  109. console.log('webSite为空');
  110. }
  111. },
  112. });