index.tsx 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. import { defineComponent, toRefs, reactive, onMounted, ref } from 'vue'
  2. import classes from './index.module.less'
  3. import { Swiper, SwiperSlide } from 'swiper/vue'
  4. import { Navigation, Pagination, Scrollbar, A11y, Autoplay } from 'swiper'
  5. import request from '@/helpers/request'
  6. import bannerArrow from './images/bannerArrow.png'
  7. import bannerArrowAcitive from './images/bannerArrowAcitive.png'
  8. import { useRouter } from 'vue-router'
  9. export default defineComponent({
  10. name: 'banner',
  11. props: {
  12. title: {
  13. type: String,
  14. default: ''
  15. }
  16. },
  17. components: {
  18. Swiper,
  19. SwiperSlide
  20. },
  21. setup(props, conent) {
  22. const state = reactive({
  23. title: props.title,
  24. modules: [Navigation, Pagination, Scrollbar, Autoplay,A11y ],
  25. bannerList: [],
  26. leftHover: false,
  27. rightHover: false
  28. })
  29. const router = useRouter()
  30. const onSwiper = swiper => {
  31. // console.log(swiper)
  32. }
  33. const onSlideChange = () => {
  34. // console.log('slide change')
  35. }
  36. const getBannerList = async () => {
  37. try {
  38. const res = await request.get('/api-website/open/banner/list', {
  39. data: {}
  40. })
  41. state.bannerList = res.data
  42. } catch (e) {
  43. console.log(e)
  44. }
  45. }
  46. const gotoBannerInfo = (item: any) => {
  47. if (item.linkUrl.indexOf('http') != -1) {
  48. window.open(item.linkUrl)
  49. } else {
  50. router.push({ path: item.linkUrl })
  51. }
  52. }
  53. onMounted(() => {
  54. getBannerList()
  55. })
  56. return () => (
  57. <>
  58. <div class="bannerSwiper">
  59. <swiper
  60. modules={state.modules}
  61. class={[classes.mySwiper, 'mySwiper']}
  62. slides-per-view={1}
  63. space-between={0}
  64. pagination={{ clickable: true }}
  65. autoplay={{
  66. delay: 3000,
  67. disableOnInteraction: false,
  68. loop: true,
  69. pauseOnMouseEnter: true,
  70. reverseDirection: true
  71. }}
  72. navigation={{
  73. nextEl: '.myprev',
  74. prevEl: '.mynext'
  75. }}
  76. loop={true}
  77. onSwiper={onSwiper}
  78. onSlideChange={onSlideChange}
  79. >
  80. {state.bannerList.map((item: any) => {
  81. return (
  82. <>
  83. <swiper-slide>
  84. <img
  85. src={item.coverImage}
  86. alt=""
  87. class={classes.bannerImg}
  88. onClick={() => {
  89. gotoBannerInfo(item)
  90. }}
  91. />
  92. </swiper-slide>
  93. </>
  94. )
  95. })}
  96. <div
  97. class="myprev"
  98. onMouseover={() => {
  99. state.leftHover = true
  100. }}
  101. onMouseout={() => {
  102. state.leftHover = false
  103. }}
  104. >
  105. <img
  106. src={state.leftHover ? bannerArrowAcitive : bannerArrow}
  107. alt=""
  108. />
  109. </div>
  110. <div
  111. class="mynext"
  112. onMouseover={() => {
  113. state.rightHover = true
  114. }}
  115. onMouseout={() => {
  116. state.rightHover = false
  117. }}
  118. >
  119. <img
  120. src={state.rightHover ? bannerArrowAcitive : bannerArrow}
  121. alt=""
  122. />
  123. </div>
  124. </swiper>
  125. </div>
  126. </>
  127. )
  128. }
  129. })