综合办公系统
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

mescroll-more-item.vue 3.1KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. <template>
  2. <!-- 不能用v-if (i: 每个tab页的专属下标; index: 当前tab的下标; 申明在 MescrollMoreItemMixin )-->
  3. <view v-show="i === index">
  4. <!-- top="120"下拉布局往下偏移,防止被悬浮菜单遮住 -->
  5. <!-- ref动态生成: 字节跳动小程序编辑器不支持一个页面存在相同的ref (如不考虑字节跳动小程序可固定值为 ref="mescrollRef") -->
  6. <mescroll-body :ref="'mescrollRef'+i" @init="mescrollInit" top="120" :down="downOption" @down="downCallback" :up="upOption" @up="upCallback" @emptyclick="emptyClick">
  7. <!-- 数据列表 -->
  8. <good-list :list="goods"></good-list>
  9. </mescroll-body>
  10. </view>
  11. </template>
  12. <script>
  13. import MescrollMixin from "@/components/mescroll-uni/mescroll-mixins.js";
  14. import MescrollMoreItemMixin from "@/components/mescroll-uni/mixins/mescroll-more-item.js";
  15. import {apiSearch} from "@/api/mock.js"
  16. export default {
  17. mixins: [MescrollMixin,MescrollMoreItemMixin], // 注意此处还需使用MescrollMoreItemMixin (必须写在MescrollMixin后面)
  18. props:{
  19. i: Number, // 每个tab页的专属下标 (除了支付宝小程序必须在这里定义, 其他平台都可不用写, 因为已在MescrollMoreItemMixin定义)
  20. index: { // 当前tab的下标 (除了支付宝小程序必须在这里定义, 其他平台都可不用写, 因为已在MescrollMoreItemMixin定义)
  21. type: Number,
  22. default(){
  23. return 0
  24. }
  25. },
  26. tabs: { // 为了请求数据,演示用,可根据自己的项目判断是否要传
  27. type: Array,
  28. default(){
  29. return []
  30. }
  31. }
  32. },
  33. data() {
  34. return {
  35. downOption:{
  36. auto:false // 不自动加载 (mixin已处理第一个tab触发downCallback)
  37. },
  38. upOption:{
  39. auto:false, // 不自动加载
  40. // page: {
  41. // num: 0, // 当前页码,默认0,回调之前会加1,即callback(page)会从1开始
  42. // size: 10 // 每页数据的数量
  43. // },
  44. noMoreSize: 4, //如果列表已无数据,可设置列表的总数量要大于半页才显示无更多数据;避免列表数据过少(比如只有一条数据),显示无更多数据会不好看; 默认5
  45. empty:{
  46. tip: '~ 空空如也 ~', // 提示
  47. btnText: '去看看'
  48. }
  49. },
  50. goods: [] //列表数据
  51. }
  52. },
  53. methods: {
  54. /*上拉加载的回调: 其中page.num:当前页 从1开始, page.size:每页数据条数,默认10 */
  55. upCallback(page) {
  56. // this.i: 每个tab页的专属下标
  57. // this.index: 当前tab的下标
  58. let word = this.tabs[this.i].name
  59. apiSearch(page.num, page.size, word).then(curPageData=>{
  60. //联网成功的回调,隐藏下拉刷新和上拉加载的状态;
  61. this.mescroll.endSuccess(curPageData.length);
  62. //设置列表数据
  63. if(page.num == 1) this.goods = []; //如果是第一页需手动制空列表
  64. this.goods=this.goods.concat(curPageData); //追加新数据
  65. }).catch(()=>{
  66. //联网失败, 结束加载
  67. this.mescroll.endErr();
  68. })
  69. },
  70. //点击空布局按钮的回调
  71. emptyClick(){
  72. uni.showToast({
  73. title:'点击了按钮,具体逻辑自行实现'
  74. })
  75. }
  76. }
  77. }
  78. </script>