sponsor-list.vue 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. <script lang="ts" setup>
  2. import { computed } from 'vue'
  3. import { isDark } from '../../composables/dark'
  4. import { useLang } from '../../composables/lang'
  5. import sponsorLocale from '../../../i18n/component/sponsor.json'
  6. import { sendEvent } from '../../../config/analytics'
  7. const onItemClick = (item: any) => {
  8. sendEvent('sp_click', item.name, 'index')
  9. }
  10. defineProps({
  11. sponsors: Array,
  12. sponsorType: String,
  13. })
  14. const lang = useLang()
  15. const sponsorLang = computed(() => sponsorLocale[lang.value])
  16. const langZhCN = 'zh-CN'
  17. const getSponsorName = sponsor => {
  18. if (lang.value === langZhCN) {
  19. return sponsor.name_cn || sponsor.name
  20. }
  21. return sponsor.name
  22. }
  23. const getSponsorSlogan = sponsor => {
  24. if (lang.value === langZhCN) {
  25. return sponsor.slogan_cn || sponsor.slogan
  26. }
  27. return sponsor.slogan
  28. }
  29. </script>
  30. <template>
  31. <h2 class="text-center mb-4 text-xl">{{ sponsorLang[sponsorType] }}</h2>
  32. <div class="grid gap-1 sponsor-list platinum">
  33. <a v-for="(sponsor, i) in sponsors" :key="i" :class="['sponsor flex px-4 rounded-md', sponsor.className]" :href="sponsor.url" target="_blank" @click="onItemClick(sponsor)">
  34. <img :class="sponsor.isDark && isDark ? 'filter invert' : ''" width="45" :src="sponsor.img" :alt="sponsor.name" />
  35. <div>
  36. <p>
  37. <span class="name">{{ getSponsorName(sponsor) }}</span>
  38. </p>
  39. <p>{{ getSponsorSlogan(sponsor) }}</p>
  40. </div>
  41. </a>
  42. </div>
  43. </template>