index.vue 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. <script setup>
  2. const props = defineProps({
  3. url: {
  4. type: String,
  5. required: true,
  6. },
  7. d: {
  8. type: Object,
  9. required: false,
  10. },
  11. })
  12. let page = 1
  13. let loading = $ref(false)
  14. let error = $ref(false)
  15. let finished = $ref(false)
  16. let refreshing = $ref(false)
  17. let list = $ref([])
  18. request({
  19. url: props.url,
  20. data: {
  21. page,
  22. ...props.d
  23. },
  24. })
  25. function onLoad() {
  26. console.log('onLoad');
  27. loading = true
  28. request({
  29. url: props.url,
  30. data: {
  31. page,
  32. ...props.d
  33. },
  34. }).then(res => {
  35. if (res.code === '0') {
  36. if (refreshing) {
  37. list = [];
  38. refreshing = false;
  39. }
  40. list = list.concat(res.data.page_data)
  41. loading = false
  42. page++
  43. if (res.data.page_now === res.data.total_page) {
  44. finished = true
  45. }
  46. } else {
  47. error = true
  48. }
  49. }).catch(err => {
  50. console.log(err)
  51. })
  52. }
  53. function onRefresh() {
  54. console.log('onRefresh');
  55. finished = false
  56. page = 1
  57. onLoad()
  58. }
  59. </script>
  60. <template>
  61. <van-pull-refresh v-model="refreshing" @refresh="onRefresh">
  62. <van-list v-model:loading="loading" v-model:error="error" error-text="请求失败,点击重新加载" :finished="finished"
  63. finished-text="没有更多了" @load="onLoad" @click.stop>
  64. <template v-for="item in list">
  65. <slot :="item"></slot>
  66. </template>
  67. </van-list>
  68. </van-pull-refresh>
  69. </template>