banner.vue 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. <script setup lang="ts">
  2. import { getBanners } from '../../../core/libs/requests'
  3. import { BannerMode } from '../../../core/models/moment'
  4. import { useRouter } from '../../../core/utils/router'
  5. const props = defineProps<{ mode: BannerMode; aspect?: string }>()
  6. const router = useRouter()
  7. const { data: banners, run: setBanners } = useRequest(() => getBanners({ mode: props.mode }), {
  8. initialData: [],
  9. })
  10. const current = ref<number>(0)
  11. const swiperList = computed(() => banners.value.map((it) => it.bannerImgUrl))
  12. const handleClick = ({ index }: { index: number }) => {
  13. const banner = banners.value[index]
  14. console.log(banner)
  15. if (banner.bannerDetailsType === '2') {
  16. console.log(banner.bannerLinkUrl)
  17. // 包含htt或者https的链接直接跳转
  18. if (banner.bannerLinkUrl?.startsWith('http')) {
  19. router.push(`/pages/common/webview/index?url=${banner.bannerLinkUrl}`)
  20. } else {
  21. router.push(banner.bannerLinkUrl)
  22. }
  23. }
  24. if (banner.bannerDetailsType === '1') {
  25. router.push(`/pages/home/content/index?type=banner&id=${banner.id}`)
  26. }
  27. }
  28. function onChange(e) {
  29. // console.log(e)
  30. }
  31. onMounted(() => {
  32. setBanners()
  33. })
  34. </script>
  35. <template>
  36. <div>
  37. <wd-swiper
  38. custom-class="rounded-2xl overflow-hidden aspect-[2.71/1]"
  39. :custom-style="`aspect-ratio: ${props.aspect ?? '2.71/1'}`"
  40. width="100%"
  41. height="100%"
  42. :list="swiperList"
  43. autoplay
  44. v-model:current="current"
  45. :indicator="{ type: 'dots-bar' } as any"
  46. @click="handleClick"
  47. @change="onChange"
  48. ></wd-swiper>
  49. </div>
  50. </template>