collection.vue 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. <route lang="json">
  2. {
  3. "style": {
  4. "navigationBarTitleText": "我的典藏",
  5. "navigationStyle": "custom"
  6. }
  7. }
  8. </route>
  9. <script setup lang="ts">
  10. import NavbarEvo from '@/components/navbar-evo.vue'
  11. import { getCollectionBadge } from '../../../../core/libs/requests'
  12. import { Collection, CollectionDetail } from '../../../../core/libs/models'
  13. import { NetImages } from '../../../../core/libs/net-images'
  14. import dayjs from 'dayjs'
  15. const id = ref<string | number>()
  16. const { data: collectionBadges, run: setCollectionBadges } = useRequest(
  17. () => getCollectionBadge({ badgeId: id.value }),
  18. {
  19. initialData: {
  20. badgeList: [],
  21. id: 0,
  22. userId: 0,
  23. quantity: 0,
  24. badgeId: 0,
  25. badgeType: '',
  26. badgeName: '',
  27. badgeNotObtainedImage: '',
  28. badgeYesObtainedImage: '',
  29. badgeDescription: '',
  30. popUp: false,
  31. userSize: '',
  32. badgeSize: '',
  33. },
  34. },
  35. )
  36. const data = ref<CollectionDetail>({
  37. badgeList: [],
  38. id: 0,
  39. userId: 0,
  40. quantity: 0,
  41. badgeId: 0,
  42. badgeType: '',
  43. badgeName: '',
  44. badgeNotObtainedImage: '',
  45. badgeYesObtainedImage: '',
  46. badgeDescription: '',
  47. popUp: false,
  48. userSize: '',
  49. badgeSize: '',
  50. })
  51. onLoad(async (query: Record<string | 'id', string>) => {
  52. if (query?.id) {
  53. id.value = query.id
  54. await setCollectionBadges()
  55. data.value = collectionBadges.value
  56. console.log('data', data.value)
  57. }
  58. })
  59. </script>
  60. <template>
  61. <div
  62. class="flex-grow bg-[#100f18] backdrop-blur-2xl flex flex-col items-center justify-between py-32 gap-4 relative"
  63. >
  64. <div class="absolute top-[-60px] left-0 right-0 rotate-[-50deg]">
  65. <wd-img
  66. width="100%"
  67. mode="widthFix"
  68. custom-clas="vertical-bottom"
  69. :src="NetImages.TopSpotlight"
  70. ></wd-img>
  71. </div>
  72. <div class="absolute top-[-60px] left-0 right-[0px] rotate-[50deg]">
  73. <wd-img
  74. width="100%"
  75. mode="widthFix"
  76. custom-clas="vertical-bottom"
  77. :src="NetImages.TopSpotlight"
  78. ></wd-img>
  79. </div>
  80. <div class="absolute top-20 left-0 right-0 flex flex-col items-center">
  81. <wd-img
  82. width="40%"
  83. mode="widthFix"
  84. custom-clas="vertical-bottom mx-auto"
  85. :src="NetImages.Stars"
  86. ></wd-img>
  87. </div>
  88. <NavbarEvo fixed dark transparent></NavbarEvo>
  89. <wd-img width="42%" mode="widthFix" :src="data.badgeImage"></wd-img>
  90. <div class="flex flex-col items-center gap-1">
  91. <div class="text-white text-[26px] font-normal font-['PingFang_SC'] uppercase">
  92. {{ data.badgeName }}
  93. </div>
  94. <div class="text-center text-white text-sm font-normal font-['PingFang_SC'] uppercase">
  95. <!-- 参加东方艺术设计研学营 -->
  96. {{ `${data.badgeDescription}` }}
  97. </div>
  98. <div class="text-[#868686] text-[16px] font-normal font-['PingFang_SC'] uppercase">
  99. 已解锁:
  100. <text class="text-white text-[18px]">{{ data.userSize }}</text>
  101. / {{ data.badgeSize }} 枚
  102. </div>
  103. <div class="mt-6 flex items-center gap-4">
  104. <div
  105. class="w-[37px] h-[1px] bg-gradient-to-l from-[#D9D9D9] to-[rgba(217, 217, 217, 0.00)]"
  106. ></div>
  107. <div class="text-center text-white text-sm font-normal font-['PingFang_SC'] uppercase">
  108. 需解锁全部徽章
  109. </div>
  110. <div
  111. class="w-[37px] h-[1px] bg-gradient-to-r from-[#D9D9D9] to-[rgba(217, 217, 217, 0.00)]"
  112. ></div>
  113. </div>
  114. <div
  115. class="text-center pt-[55px] text-white text-sm font-normal font-['PingFang_SC'] uppercase"
  116. >
  117. <div class="grid grid-cols-3 gap-y-6">
  118. <template v-for="(item, i) in data.badgeList" :key="i">
  119. <div class="w-full px-4 box-border">
  120. <wd-img width="100%" mode="widthFix" :src="item.badgeImage"></wd-img>
  121. <div
  122. class="text-center text-white text-xs font-normal font-['PingFang_SC'] leading-relaxed"
  123. >
  124. {{ item.badgeName }}
  125. </div>
  126. </div>
  127. </template>
  128. </div>
  129. </div>
  130. </div>
  131. </div>
  132. </template>