around.vue 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. <template>
  2. <FlexCol padding="space.sm">
  3. <FlexRow center>
  4. <HomeTitle title="优秀村社" />
  5. <Width :width="60" />
  6. </FlexRow>
  7. <SimplePageListLoader :loader="recommendLoader">
  8. <MasonryGrid :items="recommendLoader.list.value" itemKey="id">
  9. <template #default="{ item }">
  10. <IndexCommonImageItem
  11. :title="item.name"
  12. :image="item.image"
  13. defaultImage="https://xy.wenlvti.net/app_static/images/village/PlaceholderVillage.jpg"
  14. @click="emit('selectVillage', item)"
  15. />
  16. </template>
  17. </MasonryGrid>
  18. </SimplePageListLoader>
  19. </FlexCol>
  20. </template>
  21. <script setup lang="ts">
  22. import { useSimplePageListLoader } from '@/components/composeabe/loader/SimplePageListLoader';
  23. import FlexCol from '@/components/layout/FlexCol.vue';
  24. import HomeTitle from '@/common/components/parts/HomeTitle.vue';
  25. import MasonryGrid from '@/components/layout/masonry/MasonryGrid.vue';
  26. import IndexCommonImageItem from '@/common/components/parts/IndexCommonImageItem.vue';
  27. import LightVillageApi from '@/api/light/LightVillageApi';
  28. import SimplePageListLoader from '@/components/loader/SimplePageListLoader.vue';
  29. import FlexRow from '@/components/layout/FlexRow.vue';
  30. import Width from '@/components/layout/space/Width.vue';
  31. const emit = defineEmits(['selectVillage']);
  32. const recommendLoader = useSimplePageListLoader(15, async (page, pageSize, params) => {
  33. const res = page === 1 ? await LightVillageApi.getVillageRankList({
  34. num: pageSize,
  35. }): [];
  36. return {
  37. total: res.length,
  38. list: res
  39. }
  40. });
  41. </script>