index.vue 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  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 Card from '@/components/card.vue'
  12. import SectionHeading from '@/components/section-heading.vue'
  13. import { getBadges, getCertificates } from '../../../../core/libs/requests'
  14. import { Badge } from '../../../../core/libs/models'
  15. import { NetImages } from '../../../../core/libs/net-images'
  16. const active = ref('badge')
  17. const tabs = ref([
  18. { label: '徽章', value: 'badge' },
  19. { label: '证书', value: 'certificate' },
  20. ])
  21. // 游学徽章,活动徽章,积分徽章,典藏勋章,传播徽章,打卡徽章,课程徽章
  22. const badgeTypes = ref([
  23. { label: '游学徽章', value: '游学徽章' },
  24. { label: '活动徽章', value: '活动徽章' },
  25. { label: '积分徽章', value: '积分徽章' },
  26. { label: '典藏勋章', value: '典藏勋章' },
  27. { label: '传播徽章', value: '传播徽章' },
  28. { label: '打卡徽章', value: '打卡徽章' },
  29. { label: '课程徽章', value: '课程徽章' },
  30. ])
  31. const { data: badges, run: setBadges } = useRequest(() => getBadges({}), {
  32. initialData: {},
  33. })
  34. const { data: certificates, run: setCertificates } = useRequest(() => getCertificates({}), {
  35. initialData: [],
  36. })
  37. const data = ref<{
  38. name: string
  39. quantity: number
  40. // 已获取的图片和未获取的图片
  41. image: string
  42. activedImage: string
  43. }>()
  44. const image = computed(() => (data.value.quantity ? data.value.activedImage : data.value.image))
  45. onLoad(async (query: { type: 'badge' | 'certificate'; data: string }) => {
  46. console.log(JSON.parse(query.data))
  47. if (query.type === 'badge') {
  48. const badge = JSON.parse(query.data) as Badge
  49. data.value = {
  50. name: badge.badgeName,
  51. quantity: badge.quantity,
  52. image: badge.badgeNotObtainedImage,
  53. activedImage: badge.badgeYesObtainedImage,
  54. }
  55. }
  56. })
  57. </script>
  58. <template>
  59. <div
  60. class="flex-grow bg-[#100f18] backdrop-blur-2xl flex flex-col items-center justify-between py-32 gap-4 relative"
  61. >
  62. <div class="absolute top-0 left-0 right-0">
  63. <wd-img
  64. width="100%"
  65. mode="widthFix"
  66. custom-clas="vertical-bottom"
  67. :src="NetImages.TopSpotlight"
  68. ></wd-img>
  69. </div>
  70. <div class="absolute top-20 left-0 right-0 flex flex-col items-center">
  71. <wd-img
  72. width="40%"
  73. mode="widthFix"
  74. custom-clas="vertical-bottom mx-auto"
  75. :src="NetImages.Stars"
  76. ></wd-img>
  77. </div>
  78. <NavbarEvo fixed dark transparent></NavbarEvo>
  79. <wd-img width="42%" mode="widthFix" :src="image"></wd-img>
  80. <div class="flex flex-col items-center gap-1">
  81. <div class="text-white text-[26px] font-normal font-['PingFang_SC'] uppercase">
  82. <!-- 东方研习营 -->
  83. {{ data.name }}
  84. </div>
  85. <div class="text-center text-white text-sm font-normal font-['PingFang_SC'] uppercase">
  86. <!-- 参加东方艺术设计研学营 -->
  87. {{ `参加${data.name}` }}
  88. </div>
  89. <div class="mt-6 flex items-center gap-4">
  90. <div class="w-4 h-0.25 bg-white"></div>
  91. <div class="text-center text-white text-sm font-normal font-['PingFang_SC'] uppercase">
  92. 2024年10月2日获得
  93. </div>
  94. <div class="w-4 h-0.25 bg-white"></div>
  95. </div>
  96. <div class="text-center text-white text-sm font-normal font-['PingFang_SC'] uppercase">
  97. 累计参与{{ data.quantity }}次
  98. </div>
  99. </div>
  100. <wd-button custom-class="w-[161px] h-12 bg-[#0cbe7c]! rounded-[30px]">去分享</wd-button>
  101. </div>
  102. </template>