List.vue 2.2 KB

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