banner.vue 4.44 KB
<template>
  <div class="banner" :class="'terminal' + terminal">
    <swiper class="swiper" :circular="true" :indicator-dots="false" :autoplay="true" :style="{'height':bannerHeight + 'rpx'}" @change="swiperChange">
      <swiper-item class="banner-item" v-for="(item,index) in bannerList" :key="index" :style="{backgroundImage: 'url('+item.imageUrl+')'}"  @click="jumpLink(item.jumpUrl,item.id)">
        <div class="a-link" @click="jumpLink(item.jumpUrl,item.id)"><img class="img" :src="item.imageUrl" v-show="item.imageUrl" mode="widthFix"></div>
      </swiper-item>
    </swiper>
    <view class="swiper-dots" v-if="bannerList && bannerList.length > 1">
      <text class="dot" :class="index === swiperCurrent  && 'dot-active'" v-for="(dot, index) in bannerList.length"
            :key="index"></text>
    </view>
  </div>
</template>

<script>
  import {funMixin} from '../config/mixin';
  const API = require('../../../config/api')
  const NET = require('../../../utils/request')
  export default {
    name: 'cereBanner',
    mixins: [funMixin],
    data () {
      return {
        bannerHeight: 0,
        swiperCurrent: 0,
		bannerList:[]
			  }
    },
    props: {
      terminal: {
        type: Number,
        default: 4
      },
      componentContent: {
        type: Object
      }
    },
    mounted() {
		let pagesize = {
			pageNumber: 1,
			pageSize: 10,
			type:1
			}
		NET.request2(API.cereCarouselImage, pagesize, 'POST').then(res => {
			res.data.content.map(item=>{
				 if(item.state ==1){
					 item.imageUrl ='https://zhgw-uat.028wlkj.com/cdwlMall/zsfwzxt/lb/f96559b3-949e-49f3-9db0-72dc59795b0f-0c5150bb-7419-43e2-a8b0-e57c305eb99b-%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20250110172248.jpg'
					 item.jumpUrl = ''
				 } 
				 
			})
			this.bannerList = res.data.content
			
		})
		// uni.request({
		//     url: 'http://8.130.38.56:8027/admin-server/cereCarouselImage/queryByPage', //仅为示例,并非真实接口地址。
		//     data: {
		//        pageNumber: 1, 
		//        pageSize: 10
		//     },
		//     header: {
		//         'content-type': 'application/json;charset=UTF-8' //自定义请求头信息
		//     },
		//     success: (res) => {
		//         console.log(res.data);
		      
		//     }
		// });

      this.bannerHeight = this.componentContent.height
      this.$forceUpdate() // 刷新轮播图
    },
    // computed: {
    //   bannerList: function () {
    //     console.log(this.componentContent)
    //     return this.componentContent.bannerData.filter(function (item) {
    //       return item.bannerUrl
    //     })
    //   }
    // },
    methods:{
		getCurrentTime() {
		     const now = new Date();
		     const year = now.getFullYear();
		     const month = ('0' + (now.getMonth() + 1)).slice(-2);
		     const day = ('0' + now.getDate()).slice(-2);
		     const hours = ('0' + now.getHours()).slice(-2);
		     const minutes = ('0' + now.getMinutes()).slice(-2);
		     const seconds = ('0' + now.getSeconds()).slice(-2);
					
		     return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
		   },
		jumpLink(urls,ids){
			let obj ={
				adPlacementId:ids,
				createdAt:this.getCurrentTime()
			}
			NET.request(API.bannerUpdete, obj, 'POST').then(res => {
			})
			if(urls){
					window.open(urls, '_blank');
			}
			// else{
			// 	uni.navigateTo({
			// 		url: '/pages_category_page1/goodsModule/goodsList'
			// 	});
			// }
			
		
			// uni.navigateBack({
			//   url: urls
			// });
		},
      swiperChange(e) {
        this.swiperCurrent = e.detail.current;
      }
    }
  }
</script>

<style lang="scss" scoped>
.banner{
  position: relative;
  margin-top: 20rpx;
  margin-bottom: 20rpx;
  .banner-item{
    width: 100%;
    background-repeat: no-repeat;
    background-position: center;
    background-size: auto 100%;
    img{
      display: none;
    }
  }
  &.terminal4{
    ::v-deep .el-carousel{
      height: 100%;
      .el-carousel__container{
        height: 100%;
      }
    }
    .banner-item{
      background-repeat: no-repeat;
      background-position: center;
      background-size: auto 100%;
      img{
        display: none;
      }
    }
  }

  .swiper-dots {
    display: flex;
    position: absolute;
    left: 50%;
    transform: translateX(-50%);
    bottom: 20upx;
    z-index: 200;
    .dot {
      width: 12upx;
      height: 12upx;
      background: #FFFFFF;
      border-radius: 6upx;
      opacity: 0.2;
      margin: 0 10upx;
    }

    .dot-active {
      opacity: 1;
      width: 24upx;
    }
  }

}
</style>