list.vue 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. <template>
  2. <CommonTopBanner title="关注人数">
  3. <SimplePageListLoader :loader="villageUserRankListLoader">
  4. <FlexCol gap="gap.lg" padding="space.md">
  5. <Touchable
  6. v-for="(item, index) in villageUserRankListLoader.list.value"
  7. :key="item.id"
  8. direction="column"
  9. @click="goDetails(item)"
  10. >
  11. <BackgroundBox
  12. backgroundImage="https://xy.wenlvti.net/app_static/images/village/BoxDark.png"
  13. :backgroundCutBorder="[6,6,6,6]"
  14. :backgroundCutBorderSize="[10,10,10,10]"
  15. :padding="[25,25]"
  16. direction="row"
  17. justify="space-between"
  18. align="center"
  19. gap="gap.md"
  20. >
  21. <FlexRow align="center" gap="gap.lg">
  22. <Avatar
  23. :url="item.avatar"
  24. defaultAvatar="https://xy.wenlvti.net/app_static/images/village/PlaceholderVolunteerNew.png"
  25. :size="70"
  26. mode="aspectFill"
  27. radius="radius.md"
  28. />
  29. <Text :text="item.nickname" fontConfig="contentText" />
  30. </FlexRow>
  31. <FlexRow center gap="gap.md">
  32. <Tag v-if="item.isAdmin" text="管理员" size="small" />
  33. </FlexRow>
  34. </BackgroundBox>
  35. </Touchable>
  36. </FlexCol>
  37. </SimplePageListLoader>
  38. </CommonTopBanner>
  39. </template>
  40. <script setup lang="ts">
  41. import { useSimplePageListLoader } from '@/components/composeabe/loader/SimplePageListLoader';
  42. import { useLoadQuerys } from '@/components/composeabe/LoadQuerys';
  43. import { navTo } from '@/components/utils/PageAction';
  44. import FlexCol from '@/components/layout/FlexCol.vue';
  45. import BackgroundBox from '@/components/display/block/BackgroundBox.vue';
  46. import Text from '@/components/basic/Text.vue';
  47. import Avatar from '@/components/display/Avatar.vue';
  48. import Tag from '@/components/display/Tag.vue';
  49. import Image from '@/components/basic/Image.vue';
  50. import FlexRow from '@/components/layout/FlexRow.vue';
  51. import Touchable from '@/components/feedback/Touchable.vue';
  52. import CommonTopBanner from '@/common/components/CommonTopBanner.vue';
  53. import SimplePageListLoader from '@/components/loader/SimplePageListLoader.vue';
  54. import FollowVillageApi from '@/api/light/FollowVillageApi';
  55. const { querys } = useLoadQuerys({
  56. villageId: 0,
  57. }, () => {
  58. villageUserRankListLoader.reload();
  59. });
  60. const villageUserRankListLoader = useSimplePageListLoader(20, async (page, pageSize) => {
  61. return (await FollowVillageApi.getFollowedUsers({
  62. page, pageSize,
  63. villageId: querys.value.villageId
  64. }))
  65. });
  66. function goDetails(item: {
  67. id: number;
  68. }) {
  69. navTo('../volunteer/detail', { id: item.id });
  70. }
  71. </script>