index.vue 2.3 KB

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