swiper-recommend.vue 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. <script lang='ts' setup>
  2. import { Swiper, SwiperSlide } from 'swiper/vue'
  3. import { Navigation, Pagination } from 'swiper/modules'
  4. import { getGoodsRecommendListApi } from '~/api/model/goods'
  5. import { useUserStore } from '@/stores/modules/user'
  6. // import "swiper/css/pagination"
  7. import 'swiper/css'
  8. import 'swiper/css/navigation'
  9. const swiperVertical = ref<any>(null)
  10. const modules = [Navigation, Pagination]
  11. const goodsRecommendList = ref<any>([])
  12. const userStore = useUserStore()
  13. const { userInfo } = storeToRefs(userStore)
  14. async function getGoodsRecommendList() {
  15. try {
  16. const params = {
  17. fcId: userInfo.value.purchaseCategory,
  18. pageNo: 1,
  19. pageSize: 20,
  20. }
  21. const data: any = await getGoodsRecommendListApi(params)
  22. goodsRecommendList.value = data.records
  23. }
  24. catch (error) {
  25. console.log('error', error)
  26. }
  27. }
  28. function onVerticalSwiper(swiper: any) {
  29. swiperVertical.value = swiper
  30. }
  31. function onClickLeft() {
  32. swiperVertical.value.slidePrev()
  33. }
  34. function onClickRight() {
  35. swiperVertical.value.slideNext()
  36. }
  37. getGoodsRecommendList()
  38. </script>
  39. <template>
  40. <div class="w-1146px">
  41. <div v-if="goodsRecommendList.length" class="m-auto pos-relative px-66px">
  42. <div
  43. v-if="goodsRecommendList.length"
  44. class="pos-absolute cursor-pointer left-10px top-200px w-28px h-28px transform-translate-y--50% cursor-not-allowed !cursor-pointer flex justify-center items-center"
  45. @click="onClickLeft()"
  46. >
  47. <img src="~/assets/images/arrow_left.png" alt="" class="w-26px h-26px" srcset="">
  48. </div>
  49. <div
  50. v-if="goodsRecommendList.length"
  51. class="pos-absolute cursor-pointer right-10px top-200px w-28px h-28px transform-translate-y--50% cursor-not-allowed !cursor-pointer flex justify-center items-center"
  52. @click="onClickRight()"
  53. >
  54. <img src="~/assets/images/arrow_right.png" alt="" class="w-26px h-26px" srcset="">
  55. </div>
  56. <Swiper
  57. :slides-per-view="4"
  58. :space-between="25"
  59. :modules="modules"
  60. :loop="true"
  61. :navigation="false"
  62. :pagination="true"
  63. class="pos-relative"
  64. @swiper="onVerticalSwiper"
  65. >
  66. <SwiperSlide v-for="(item, index) in goodsRecommendList" :key="index">
  67. <common-goods-item :item w="w-250px" h="h-250px" />
  68. </SwiperSlide>
  69. </Swiper>
  70. </div>
  71. <div v-else>
  72. <common-empty />
  73. </div>
  74. </div>
  75. </template>
  76. <style lang='less' scoped>
  77. </style>