SimplePageListLoader.vue 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. <template>
  2. <slot />
  3. <Loadmore
  4. v-if="loader.status.value == 'loading'
  5. || (loader.status.value == 'nomore' && !$slots.empty && props.showNoMore)"
  6. :status="loader.status.value"
  7. />
  8. <slot v-else-if="loader.status.value == 'empty'" name="empty">
  9. <Empty :description="emptyView?.text || '暂无数据'" />
  10. </slot>
  11. <Loadmore
  12. v-else-if="loader.status.value == 'error'"
  13. status="loadmore"
  14. :loadmoreText="loader.error.value"
  15. @loadmore="handleRetry"
  16. />
  17. </template>
  18. <script setup lang="ts">
  19. import type { PropType } from 'vue';
  20. import type { ISimplePageListLoader } from '../composeabe/loader/SimplePageListLoader';
  21. import Loadmore from '@/components/display/loading/Loadmore.vue';
  22. import Empty from '../feedback/Empty.vue';
  23. const props = defineProps({
  24. loader: {
  25. type: Object as PropType<ISimplePageListLoader<any, any>>,
  26. default: null,
  27. },
  28. showNoMore: {
  29. type: Boolean,
  30. default: true,
  31. },
  32. emptyView: {
  33. type: Object as PropType<{
  34. text: string;
  35. }>,
  36. default: null,
  37. },
  38. })
  39. function handleRetry() {
  40. props.loader.reload();
  41. }
  42. </script>