ListView.vue 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. <script setup lang="ts">
  2. import { GetContentListParams } from '@/api/CommonContent';
  3. import ProjectsContent from '@/api/inherit/ProjectsContent';
  4. import SimplePageListContentLoader from '@/components/SimplePageListContentLoader.vue';
  5. import SimplePageListContentPager from '@/components/SimplePageListContentPager.vue';
  6. import { useSimplePagerDataLoader } from '@/composeable/SimplePagerDataLoader';
  7. import { onMounted } from 'vue';
  8. import { useRoute, useRouter } from 'vue-router';
  9. const route = useRoute();
  10. const router = useRouter();
  11. const newsData = useSimplePagerDataLoader(6, async (p, s) =>
  12. await ProjectsContent.getContentList(new GetContentListParams()
  13. .setMainBodyColumnId(
  14. route.query.id ? parseInt(route.query.id as string) : ProjectsContent.mainBodyColumnId!
  15. )
  16. .setModelId(
  17. route.query.modelId ? parseInt(route.query.modelId as string) : ProjectsContent.modelId!
  18. )
  19. , p, s)
  20. );
  21. </script>
  22. <template>
  23. <main class="main-bg main-bg2 d-flex flex-col align-center justify-center">
  24. <img class="main-image-button back" src="@/assets/images/Back.png" alt="" @click="router.back()">
  25. <div class="main-box2 d-flex flex-row align-center">
  26. <div class="d-flex flex-col align-center flex-one gap-base padding-top-ll">
  27. <img class="main-image-button fill" src="@/assets/images/PlayList/Button1.png" @click="router.push('/')" alt="">
  28. <img class="main-image-button fill disabled" src="@/assets/images/PlayList/Button2.png" alt="">
  29. </div>
  30. <div class="d-flex flex-col align-center margin-left-ll flex-six h-100">
  31. <SimplePageListContentLoader :loader="newsData" class="main-list">
  32. <div
  33. v-for="(value, k) in newsData.list.value"
  34. class="main-list-box1"
  35. @click="router.push({ name: 'Player', query: { id: value.id } })"
  36. >
  37. <div>
  38. <img :src="value.image" />
  39. </div>
  40. <h6>{{ value.title }}</h6>
  41. </div>
  42. <div
  43. v-for="v of (newsData.list.value.length % 6)"
  44. class="main-list-box1"
  45. />
  46. </SimplePageListContentLoader>
  47. <SimplePageListContentPager :loader="newsData" />
  48. </div>
  49. </div>
  50. </main>
  51. </template>
  52. <style lang="scss" scoped>
  53. .main-list {
  54. position: relative;
  55. width: 100%;
  56. height: calc(100% - 20px);
  57. display: flex;
  58. flex-direction: row;
  59. justify-content: space-between;
  60. align-items: center;
  61. flex-wrap: wrap;
  62. }
  63. .main-list-box1 {
  64. position: relative;
  65. height: 48%;
  66. width: 30%;
  67. margin-bottom: 2vh;
  68. cursor: pointer;
  69. &:active {
  70. transform: scale(0.95);
  71. }
  72. > div {
  73. height: 75%;
  74. background-size: 100% 100%;
  75. background-position: center;
  76. background-image: url('@/assets/images/PlayList/Box.png');
  77. padding: 7px 10px;
  78. img {
  79. border-radius: 10px;
  80. width: 100%;
  81. height: 100%;
  82. object-fit: cover;
  83. }
  84. }
  85. h6 {
  86. margin-top: 1.5vh;
  87. margin-bottom: 0;
  88. text-align: center;
  89. color: #d75b4d;
  90. font-size: 20px;
  91. font-weight: bold;
  92. display: -webkit-box;
  93. -webkit-box-orient: vertical;
  94. -webkit-line-clamp: 2;
  95. line-clamp: 2;
  96. text-overflow: ellipsis;
  97. white-space: nowrap;
  98. overflow: hidden;
  99. }
  100. }
  101. </style>