mescroll-one.vue 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. <template>
  2. <view>
  3. <!-- 菜单 -->
  4. <view class="top-warp">
  5. <view class="tip">每次切换菜单及时刷新列表,不缓存数据</view>
  6. <me-tabs v-model="tabIndex" :tabs="tabs" @change="tabChange"></me-tabs>
  7. </view>
  8. <!-- top="xxx"下拉布局往下偏移,防止被悬浮菜单遮住 -->
  9. <mescroll-body ref="mescrollRef" @init="mescrollInit" top="120" @down="downCallback" :up="upOption" @up="upCallback" @emptyclick="emptyClick">
  10. <!-- 数据列表 -->
  11. <good-list :list="goods"></good-list>
  12. </mescroll-body>
  13. </view>
  14. </template>
  15. <script>
  16. import MescrollMixin from "@/components/mescroll-uni/mescroll-mixins.js";
  17. import {apiSearch} from "@/api/mock.js"
  18. export default {
  19. mixins: [MescrollMixin], // 使用mixin (在main.js注册全局组件)
  20. data() {
  21. return {
  22. upOption:{
  23. // page: {
  24. // num: 0, // 当前页码,默认0,回调之前会加1,即callback(page)会从1开始
  25. // size: 10 // 每页数据的数量
  26. // },
  27. noMoreSize: 4, //如果列表已无数据,可设置列表的总数量要大于半页才显示无更多数据;避免列表数据过少(比如只有一条数据),显示无更多数据会不好看; 默认5
  28. empty:{
  29. tip: '~ 搜索无数据 ~', // 提示
  30. btnText: '去看看'
  31. }
  32. },
  33. goods: [], //列表数据
  34. tabs: ['全部', '奶粉', '面膜', '图书'],
  35. tabIndex: 0 // tab下标
  36. }
  37. },
  38. methods: {
  39. /*上拉加载的回调: 其中page.num:当前页 从1开始, page.size:每页数据条数,默认10 */
  40. upCallback(page) {
  41. //联网加载数据
  42. let keyword = this.tabs[this.tabIndex]
  43. apiSearch(page.num, page.size, keyword).then(curPageData=>{
  44. //联网成功的回调,隐藏下拉刷新和上拉加载的状态;
  45. this.mescroll.endSuccess(curPageData.length);
  46. //设置列表数据
  47. if(page.num == 1) this.goods = []; //如果是第一页需手动制空列表
  48. this.goods=this.goods.concat(curPageData); //追加新数据
  49. }).catch(()=>{
  50. //联网失败, 结束加载
  51. this.mescroll.endErr();
  52. })
  53. },
  54. //点击空布局按钮的回调
  55. emptyClick(){
  56. uni.showToast({
  57. title:'点击了按钮,具体逻辑自行实现'
  58. })
  59. },
  60. // 切换菜单
  61. tabChange() {
  62. this.goods = []// 先置空列表,显示加载进度
  63. this.mescroll.resetUpScroll() // 再刷新列表数据
  64. }
  65. }
  66. }
  67. </script>
  68. <style>
  69. .top-warp{
  70. z-index: 9990;
  71. position: fixed;
  72. top: --window-top; /* css变量 */
  73. left: 0;
  74. width: 100%;
  75. height: 120upx;
  76. background-color: white;
  77. }
  78. .top-warp .tip{
  79. font-size: 28upx;
  80. height: 60upx;
  81. line-height: 60upx;
  82. text-align: center;
  83. }
  84. </style>