index.vue 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  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. emit('refresh','bottom');
  40. };
  41. const onCustomRefresh = () => {
  42. isRefreshing.value = true;
  43. emit('refresh','top');
  44. };
  45. //上拉刷新
  46. const handleRefreshing = (status) => {
  47. isRefreshing.value = status;
  48. }
  49. //下拉刷新
  50. const handleBottom = (value) => {
  51. loadmoreInfo.value.status = value?'loading':'nomore';
  52. }
  53. defineExpose({
  54. handleRefreshing,
  55. handleBottom
  56. });
  57. </script>
  58. <style lang="scss" scoped>
  59. .list-page {
  60. background: rgba(245, 245, 245, 1);
  61. padding: 12px;
  62. // height: 100%;
  63. // overflow-y: auto;
  64. .item {
  65. height: 120px;
  66. border-radius: 10px;
  67. background: rgba(255, 255, 255, 1);
  68. padding: 12px;
  69. }
  70. }
  71. .scroll-view-class {
  72. height: 100%;
  73. }
  74. </style>