List.vue 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. <template>
  2. <Page >
  3. <SimplePageListContentLoader class="list d-flex flex-col mt-3 flex-fill" :loader="loader">
  4. <GridList
  5. class="flex-fill"
  6. :list="loader.list.value"
  7. :defaultImage="AppCofig.defaultImage"
  8. :playAudio="detailPageName === 'Play'"
  9. @itemClick="handleClick"
  10. />
  11. <SimplePageListContentPager :loader="loader" />
  12. </SimplePageListContentLoader>
  13. </Page>
  14. </template>
  15. <script setup lang="ts">
  16. import { useSimplePagerDataLoader } from '@/composeable/SimplePagerDataLoader';
  17. import { useRoute, useRouter } from 'vue-router';
  18. import { computed, ref, watch, type PropType } from 'vue';
  19. import CommonContent, { GetContentListItem, GetContentListParams } from '@/api/CommonContent';
  20. import SimplePageListContentLoader from '@/components/SimplePageListContentLoader.vue';
  21. import SimplePageListContentPager from '@/components/SimplePageListContentPager.vue';
  22. import GridList from '@/components/small/GridList.vue';
  23. import Header from '@/components/parts/Header.vue';
  24. import AppCofig from '@/common/config/AppCofig';
  25. import Page from '@/components/parts/Page.vue';
  26. const emit = defineEmits(['itemClick']);
  27. const route = useRoute();
  28. const router = useRouter();
  29. const loader = useSimplePagerDataLoader(16, async (page, size) => {
  30. let modelId = parseInt(route.query.modelId as string)
  31. let mainBodyColumnId = parseInt(route.query.mainBodyColumnId as string) as any;
  32. if (isNaN(mainBodyColumnId))
  33. mainBodyColumnId = undefined;
  34. return CommonContent.getContentList(new GetContentListParams()
  35. .setModelId(modelId)
  36. .setMainBodyColumnId(mainBodyColumnId as number)
  37. , page, size)
  38. });
  39. const detailPageName = computed(() => {
  40. let detailPageName = route.query.detailPageName as string;
  41. if (!detailPageName)
  42. detailPageName = 'ArticleDetail';
  43. return detailPageName;
  44. })
  45. function handleClick(item: GetContentListItem) {
  46. router.push({
  47. name: detailPageName.value,
  48. query: {
  49. id: item.id,
  50. }
  51. })
  52. }
  53. </script>
  54. <style lang="scss" scoped>
  55. .list {
  56. position: absolute;
  57. top: 2rem;
  58. left: 10%;
  59. right: 10%;
  60. bottom: 2rem;
  61. }
  62. </style>