index.vue 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. <template>
  2. <scroll-view refresher-enabled :refresher-triggered="isRefreshing" @refresherrefresh="onCustomRefresh"
  3. class="scroll-view-class" @scrolltolower="scrolltolower" scroll-y>
  4. <view class="list-page">
  5. <view v-for="(item, index) in data" :key="index">
  6. <ListItem :data="item" v-if="userType === 2"/>
  7. <UserItem :data="item" v-else/>
  8. </view>
  9. <up-loadmore style="margin-top: 40rpx;" :status="loadmoreInfo.status"
  10. :loadmoreText="loadmoreInfo.loadingText" :loadingText="loadmoreInfo.loadmoreText"
  11. :nomoreText="loadmoreInfo.nomoreText" @loadmore="handleLoadmore" />
  12. </view>
  13. </scroll-view>
  14. </template>
  15. <script setup>
  16. import ListItem from './listItem.vue';
  17. import UserItem from './userItem.vue';
  18. import { ref } from 'vue';
  19. const props = defineProps({
  20. data: {
  21. type: Array,
  22. default: [],
  23. },
  24. type: {
  25. type: String,
  26. default: 'ordinary', // ordinary: 普通 ranking: 排行
  27. }
  28. });
  29. const emit = defineEmits(['refresh']);
  30. const userType = uni.getStorageSync('userType') //读取本地存储
  31. const isRefreshing = ref(false)
  32. const loadmoreInfo = ref({
  33. status: 'loadmore',
  34. loadingText: '努力加载中...',
  35. loadmoreText: '点击加载更多~',
  36. nomoreText: '已经到底啦~'
  37. })
  38. const scrolltolower = () => {
  39. console.log('底部');
  40. emit('refresh','bottom');
  41. };
  42. const onCustomRefresh = () => {
  43. console.log('下拉刷新');
  44. isRefreshing.value = true;
  45. emit('refresh','top');
  46. };
  47. //上拉刷新
  48. const handleRefreshing = (status) => {
  49. isRefreshing.value = status;
  50. }
  51. //下拉刷新
  52. const handleBottom = (value) => {
  53. loadmoreInfo.value.status = value?'loading':'nomore';
  54. }
  55. defineExpose({
  56. handleRefreshing,
  57. handleBottom
  58. });
  59. </script>
  60. <style lang="scss" scoped>
  61. .list-page {
  62. background: rgba(245, 245, 245, 1);
  63. padding: 12px;
  64. // height: 100%;
  65. // overflow-y: auto;
  66. .item {
  67. height: 120px;
  68. border-radius: 10px;
  69. background: rgba(255, 255, 255, 1);
  70. padding: 12px;
  71. }
  72. }
  73. .scroll-view-class {
  74. height: 100%;
  75. }
  76. </style>