45 lines
		
	
	
		
			966 B
		
	
	
	
		
			Vue
		
	
	
			
		
		
	
	
			45 lines
		
	
	
		
			966 B
		
	
	
	
		
			Vue
		
	
	
| <!-- 装修图文组件:图片轮播 -->
 | ||
| <template>
 | ||
|   <su-swiper
 | ||
|     :list="imgList"
 | ||
|     :dotStyle="data.indicator === 'dot' ? 'long' : 'tag'"
 | ||
|     imageMode="scaleToFill"
 | ||
|     dotCur="bg-mask-40"
 | ||
|     :seizeHeight="300"
 | ||
|     :autoplay="data.autoplay"
 | ||
|     :interval="data.interval * 1000"
 | ||
|     :mode="data.type"
 | ||
|   />
 | ||
| </template>
 | ||
| 
 | ||
| <script setup>
 | ||
|   import { computed } from 'vue';
 | ||
|   import sheep from '@/sheep';
 | ||
| 
 | ||
|   // 轮播图
 | ||
|   const props = defineProps({
 | ||
|     data: {
 | ||
|       type: Object,
 | ||
|       default: () => ({}),
 | ||
|     },
 | ||
|     styles: {
 | ||
|       type: Object,
 | ||
|       default: () => ({}),
 | ||
|     },
 | ||
|   });
 | ||
| 
 | ||
|   const imgList = computed(() =>
 | ||
|       props.data.items.map((item) => {
 | ||
|         const src = item.type === 'img' ? item.imgUrl : item.videoUrl;
 | ||
|         return {
 | ||
|           ...item,
 | ||
|           type: item.type === 'img' ? 'image' : 'video',
 | ||
|           src: sheep.$url.cdn(src),
 | ||
|           poster: sheep.$url.cdn(item.imgUrl),
 | ||
|         };
 | ||
|       }),
 | ||
|   );
 | ||
| </script>
 | ||
| 
 | ||
| <style></style>
 |