You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							234 lines
						
					
					
						
							6.0 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							234 lines
						
					
					
						
							6.0 KiB
						
					
					
				
								<template>
							 | 
						|
								  <view>
							 | 
						|
								    <!-- md卡片:竖向,一行放两个,图上内容下 -->
							 | 
						|
								    <view v-if="size === 'md'" class="md-goods-card ss-flex-col" :style="[elStyles]" @tap="onClick">
							 | 
						|
								      <view class="icon-box ss-flex">
							 | 
						|
								        <image class="icon" :src="state.liveStatus[data.status].img"></image>
							 | 
						|
								        <view class="title ss-m-l-16">{{ state.liveStatus[data.status].title }}</view>
							 | 
						|
								      </view>
							 | 
						|
								      <img class="md-img-box" :src="sheep.$url.cdn(data.feeds_img)" referrerpolicy="no-referrer">
							 | 
						|
								      <view class="md-goods-content">
							 | 
						|
								        <view class="md-goods-title ss-line-1" :style="[{ color: titleColor }]">
							 | 
						|
								          {{ data.name }}
							 | 
						|
								        </view>
							 | 
						|
								        <view class="md-goods-subtitle ss-m-t-14 ss-line-1" :style="[{ color: subTitleColor }]">
							 | 
						|
								          主播:{{ data.anchor_name }}
							 | 
						|
								        </view>
							 | 
						|
								      </view>
							 | 
						|
								    </view>
							 | 
						|
								    <!-- sl卡片:竖向型,一行放一个,图片上内容下边 -->
							 | 
						|
								    <view v-if="size === 'sl'" class="sl-goods-card ss-flex-col" :style="[elStyles]" @tap="onClick">
							 | 
						|
								      <view class="icon-box ss-flex">
							 | 
						|
								        <image class="icon" :src="state.liveStatus[data.status].img"></image>
							 | 
						|
								        <view class="title ss-m-l-16">{{ state.liveStatus[data.status].title }}</view>
							 | 
						|
								      </view>
							 | 
						|
								      <img class="sl-img-box" :src="sheep.$url.cdn(data.feeds_img)" referrerpolicy="no-referrer">
							 | 
						|
								      <view class="sl-goods-content">
							 | 
						|
								        <view class="sl-goods-title ss-line-1" :style="[{ color: titleColor }]">
							 | 
						|
								          {{ data.name }}
							 | 
						|
								        </view>
							 | 
						|
								        <view class="sl-goods-subtitle ss-m-t-14 ss-line-1" :style="[{ color: subTitleColor }]">
							 | 
						|
								          主播:{{ data.anchor_name }}
							 | 
						|
								        </view>
							 | 
						|
								      </view>
							 | 
						|
								    </view>
							 | 
						|
								  </view>
							 | 
						|
								</template>
							 | 
						|
								<script setup>
							 | 
						|
								  import { computed, reactive } from 'vue';
							 | 
						|
								  import sheep from '@/sheep';
							 | 
						|
								  /**
							 | 
						|
								   * 直播卡片
							 | 
						|
								   *
							 | 
						|
								   * @property {String} img 											- 图片
							 | 
						|
								   * @property {String} title 										- 标题
							 | 
						|
								   * @property {Number} titleWidth = 0								- 标题宽度,默认0,单位rpx
							 | 
						|
								   * @property {String} skuText 										- 规格
							 | 
						|
								   * @property {String | Number} score 								- 积分
							 | 
						|
								   * @property {String | Number} price 								- 价格
							 | 
						|
								   * @property {String | Number} originalPrice 						- 单购价
							 | 
						|
								   * @property {String} priceColor 									- 价格颜色
							 | 
						|
								   * @property {Number | String} num									- 数量
							 | 
						|
								   *
							 | 
						|
								   */
							 | 
						|
								  const props = defineProps({
							 | 
						|
								    goodsFields: {
							 | 
						|
								      type: [Array, Object],
							 | 
						|
								      default() {
							 | 
						|
								        return {};
							 | 
						|
								      },
							 | 
						|
								    },
							 | 
						|
								    tagStyle: {
							 | 
						|
								      type: Object,
							 | 
						|
								      default: {},
							 | 
						|
								    },
							 | 
						|
								    data: {
							 | 
						|
								      type: Object,
							 | 
						|
								      default: {},
							 | 
						|
								    },
							 | 
						|
								    size: {
							 | 
						|
								      type: String,
							 | 
						|
								      default: 'sl',
							 | 
						|
								    },
							 | 
						|
								    background: {
							 | 
						|
								      type: String,
							 | 
						|
								      default: '',
							 | 
						|
								    },
							 | 
						|
								    topRadius: {
							 | 
						|
								      type: Number,
							 | 
						|
								      default: 0,
							 | 
						|
								    },
							 | 
						|
								    bottomRadius: {
							 | 
						|
								      type: Number,
							 | 
						|
								      default: 0,
							 | 
						|
								    },
							 | 
						|
								    titleColor: {
							 | 
						|
								      type: String,
							 | 
						|
								      default: '#333',
							 | 
						|
								    },
							 | 
						|
								    subTitleColor: {
							 | 
						|
								      type: String,
							 | 
						|
								      default: '#999999',
							 | 
						|
								    },
							 | 
						|
								  });
							 | 
						|
								  // 组件样式
							 | 
						|
								  const elStyles = computed(() => {
							 | 
						|
								    return {
							 | 
						|
								      background: props.background,
							 | 
						|
								      'border-top-left-radius': props.topRadius + 'px',
							 | 
						|
								      'border-top-right-radius': props.topRadius + 'px',
							 | 
						|
								      'border-bottom-left-radius': props.bottomRadius + 'px',
							 | 
						|
								      'border-bottom-right-radius': props.bottomRadius + 'px',
							 | 
						|
								    };
							 | 
						|
								  });
							 | 
						|
								  const state = reactive({
							 | 
						|
								    liveStatus: {
							 | 
						|
								      101: {
							 | 
						|
								        img: sheep.$url.static('/static/img/shop/app/mplive/living.png'),
							 | 
						|
								        title: '直播中',
							 | 
						|
								      },
							 | 
						|
								      102: {
							 | 
						|
								        img: sheep.$url.static('/static/img/shop/app/mplive/start.png'),
							 | 
						|
								        title: '未开始',
							 | 
						|
								      },
							 | 
						|
								      103: {
							 | 
						|
								        img: sheep.$url.static('/static/img/shop/app/mplive/ended.png'),
							 | 
						|
								        title: '已结束',
							 | 
						|
								      },
							 | 
						|
								    },
							 | 
						|
								  });
							 | 
						|
								  const emits = defineEmits(['click', 'getHeight']);
							 | 
						|
								  const onClick = () => {
							 | 
						|
								    emits('click');
							 | 
						|
								  };
							 | 
						|
								</script>
							 | 
						|
								
							 | 
						|
								<style lang="scss" scoped>
							 | 
						|
								  // md
							 | 
						|
								  .md-goods-card {
							 | 
						|
								    overflow: hidden;
							 | 
						|
								    width: 100%;
							 | 
						|
								    height: 424rpx;
							 | 
						|
								    position: relative;
							 | 
						|
								    z-index: 1;
							 | 
						|
								    background-color: $white;
							 | 
						|
								    .icon-box {
							 | 
						|
								      position: absolute;
							 | 
						|
								      left: 20rpx;
							 | 
						|
								      top: 10rpx;
							 | 
						|
								      width: 136rpx;
							 | 
						|
								      height: 40rpx;
							 | 
						|
								      background: rgba(#000000, 0.5);
							 | 
						|
								      border-radius: 20rpx;
							 | 
						|
								      z-index: 1;
							 | 
						|
								      .icon {
							 | 
						|
								        width: 40rpx;
							 | 
						|
								        height: 40rpx;
							 | 
						|
								        border-radius: 20rpx 0px 20rpx 20rpx;
							 | 
						|
								      }
							 | 
						|
								      .title {
							 | 
						|
								        font-size: 24rpx;
							 | 
						|
								        font-weight: 500;
							 | 
						|
								        color: #ffffff;
							 | 
						|
								      }
							 | 
						|
								    }
							 | 
						|
								    .md-goods-content {
							 | 
						|
								      position: absolute;
							 | 
						|
								      left: 0;
							 | 
						|
								      bottom: 0;
							 | 
						|
								      padding: 20rpx;
							 | 
						|
								      width: 100%;
							 | 
						|
								      background: linear-gradient(360deg, rgba(0, 0, 0, 0.8) 0%, rgba(0, 0, 0, 0.02) 100%);
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    .md-img-box {
							 | 
						|
								      width: 100%;
							 | 
						|
								      height: 100%;
							 | 
						|
								      object-fit: cover;
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    .md-goods-title {
							 | 
						|
								      font-size: 26rpx;
							 | 
						|
								      color: #333;
							 | 
						|
								      width: 100%;
							 | 
						|
								    }
							 | 
						|
								    .md-goods-subtitle {
							 | 
						|
								      font-size: 24rpx;
							 | 
						|
								      font-weight: 400;
							 | 
						|
								      color: #999999;
							 | 
						|
								    }
							 | 
						|
								  }
							 | 
						|
								  .sl-goods-card {
							 | 
						|
								    overflow: hidden;
							 | 
						|
								    position: relative;
							 | 
						|
								    z-index: 1;
							 | 
						|
								    width: 100%;
							 | 
						|
								    height: 400rpx;
							 | 
						|
								    background-color: $white;
							 | 
						|
								    .icon-box {
							 | 
						|
								      position: absolute;
							 | 
						|
								      left: 20rpx;
							 | 
						|
								      top: 10rpx;
							 | 
						|
								      width: 136rpx;
							 | 
						|
								      height: 40rpx;
							 | 
						|
								      background: rgba(#000000, 0.5);
							 | 
						|
								      border-radius: 20rpx;
							 | 
						|
								      z-index: 1;
							 | 
						|
								      .icon {
							 | 
						|
								        width: 40rpx;
							 | 
						|
								        height: 40rpx;
							 | 
						|
								        border-radius: 20rpx 0px 20rpx 20rpx;
							 | 
						|
								      }
							 | 
						|
								      .title {
							 | 
						|
								        font-size: 24rpx;
							 | 
						|
								        font-weight: 500;
							 | 
						|
								        color: #ffffff;
							 | 
						|
								      }
							 | 
						|
								    }
							 | 
						|
								    .sl-goods-content {
							 | 
						|
								      position: absolute;
							 | 
						|
								      left: 0;
							 | 
						|
								      bottom: 0;
							 | 
						|
								      padding: 20rpx;
							 | 
						|
								      width: 100%;
							 | 
						|
								      background: linear-gradient(360deg, rgba(0, 0, 0, 0.8) 0%, rgba(0, 0, 0, 0.02) 100%);
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    .sl-img-box {
							 | 
						|
								      width: 100%;
							 | 
						|
								      height: 100%;
							 | 
						|
								      object-fit: cover;
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    .sl-goods-title {
							 | 
						|
								      font-size: 26rpx;
							 | 
						|
								      color: #333;
							 | 
						|
								      width: 100%;
							 | 
						|
								    }
							 | 
						|
								    .sl-goods-subtitle {
							 | 
						|
								      font-size: 24rpx;
							 | 
						|
								      font-weight: 400;
							 | 
						|
								      color: #999999;
							 | 
						|
								    }
							 | 
						|
								  }
							 | 
						|
								</style>
							 |