baseListPage.js 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. // README WISEWOODS 重写requestData 返回分页数据即可 格式规定(code msg data:{total, rows实际列表数据})
  2. // 配合loadmore 可以实现 下拉刷新和加载更多的逻辑 + 视图显示
  3. const orgainPage = Page; // 保存原本的Page对象
  4. const basePage = function (page) {
  5. // 生成初始data,如果页面已经有该值不在重新赋值
  6. if (typeof page.data.rows === 'undefined') {
  7. page.data.rows = [];
  8. }
  9. if (typeof page.total === 'undefined') {
  10. page.total = 0;
  11. }
  12. if (typeof page.pageNum === 'undefined') {
  13. page.pageNum = 1;
  14. }
  15. if (typeof page.pageSize === 'undefined') {
  16. page.pageSize = 10;
  17. }
  18. if (typeof page.data.noMore === 'undefined') {
  19. page.data.noMore = false;
  20. }
  21. if (typeof page.data.isRefresh === 'undefined') {
  22. page.data.isRefresh = false;
  23. }
  24. if (typeof page.data.isLoading === 'undefined') {
  25. page.data.isLoading = false;
  26. }
  27. if (typeof page.data.disableLoadMore === 'undefined') {
  28. page.data.disableLoadMore = false;
  29. }
  30. const orgainOnLoad = page.onLoad;
  31. page.onLoad = async function (o) {
  32. if (orgainOnLoad) {
  33. await orgainOnLoad.call(this, o);
  34. }
  35. // 执行的初始事件 start
  36. // T 在页面里noInit设置为true 可以让baseListPage的初始化不进行
  37. if (!this.noInit){
  38. await resetData(this);
  39. }
  40. // 执行的初始事件 end
  41. }
  42. const orgainOnPullDownRefresh = page.onPullDownRefresh;
  43. page.onPullDownRefresh = async function () {
  44. if (orgainOnPullDownRefresh) {
  45. await orgainOnPullDownRefresh.call(this);
  46. }
  47. // 执行的初始事件 start
  48. await resetData(this);
  49. // 执行的初始事件 end
  50. }
  51. const orgainOnReachBottom = page.onReachBottom;
  52. page.onReachBottom = async function () {
  53. if (orgainOnReachBottom) {
  54. await orgainOnReachBottom.call(this);
  55. }
  56. if (this.data.disableLoadMore) {
  57. return;
  58. }
  59. // 执行的初始事件 start
  60. if (this.data.isRefresh || this.data.isLoading) {
  61. return;
  62. }
  63. if (this.data.noMore) {
  64. // toast('没有更多了')
  65. return;
  66. }
  67. this.setData({
  68. isLoading: true
  69. })
  70. // this.data.isLoading = true;
  71. this.pageNum++;
  72. await getData(this);
  73. // 执行的初始事件 end
  74. }
  75. page.getData = getData;
  76. page.resetData = resetData;
  77. page.changeResetData = changeResetData;
  78. return orgainPage(page);
  79. };
  80. async function getData(page) {
  81. try {
  82. const res = await page.requestData();
  83. if (page.pageNum == 1) {
  84. page.total = res.data.total;
  85. page.setData({
  86. rows: res.data.rows,
  87. })
  88. } else {
  89. const newArr = [...page.data.rows].concat(res.data.rows)
  90. page.setData({
  91. rows: newArr
  92. })
  93. }
  94. if (page.data.rows.length >= page.total || res.data.rows.length < page.pageSize) {
  95. // page.data.noMore = true;
  96. page.setData({
  97. noMore: true
  98. })
  99. // page.data.noMore = true;
  100. // if (page.pageNum != 1){
  101. // toast('没有更多了')
  102. // }
  103. }
  104. // page.data.isLoading = false;
  105. // page.data.isRefresh = false;
  106. page.setData({
  107. isLoading: false,
  108. isRefresh: false,
  109. })
  110. wx.stopPullDownRefresh();
  111. } catch (e) {
  112. page.setData({
  113. isLoading: false,
  114. isRefresh: false,
  115. })
  116. wx.stopPullDownRefresh();
  117. throw e
  118. }
  119. }
  120. async function resetData(page) {
  121. if (page.data.isRefresh || page.data.isLoading) {
  122. return;
  123. }
  124. page.setData({
  125. noMore: false,
  126. isRefresh: true,
  127. rows: []
  128. })
  129. // page.data.noMore = false;
  130. // page.data.isRefresh = true;
  131. // page.data.rows = [];
  132. page.pageNum = 1;
  133. await getData(page);
  134. }
  135. /**
  136. * 针对页面tab布局切换tab同享同一个区域列表 需要增加一个进度防止快速切换导致bug
  137. * @param page
  138. */
  139. async function changeResetData(page) {
  140. wx.showLoading({
  141. title: '加载中...',
  142. mask: true
  143. });
  144. await resetData(page);
  145. wx.hideLoading();
  146. }
  147. export default basePage;