182 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Vue
		
	
	
			
		
		
	
	
			182 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Vue
		
	
	
<template>
 | 
						||
  <view>
 | 
						||
    <view>
 | 
						||
      <slot name="top"></slot>
 | 
						||
    </view>
 | 
						||
    <view
 | 
						||
      class="ss-order-card-warp ss-flex ss-col-stretch ss-row-between bg-white"
 | 
						||
      :style="[{ borderRadius: radius + 'rpx', marginBottom: marginBottom + 'rpx' }]"
 | 
						||
    >
 | 
						||
      <view class="img-box ss-m-r-24">
 | 
						||
        <image class="order-img" :src="sheep.$url.cdn(img)" mode="aspectFill"></image>
 | 
						||
      </view>
 | 
						||
      <view
 | 
						||
        class="box-right ss-flex-col ss-row-between"
 | 
						||
        :style="[{ width: titleWidth ? titleWidth + 'rpx' : '' }]"
 | 
						||
      >
 | 
						||
        <view class="title-text ss-line-2" v-if="title">{{ title }}</view>
 | 
						||
        <view v-if="skuString" class="spec-text ss-m-t-8 ss-m-b-12">{{ skuString }}</view>
 | 
						||
        <view class="groupon-box">
 | 
						||
          <slot name="groupon"></slot>
 | 
						||
        </view>
 | 
						||
        <view class="ss-flex">
 | 
						||
          <view class="ss-flex ss-col-center">
 | 
						||
            <view
 | 
						||
              class="price-text ss-flex ss-col-center"
 | 
						||
              :style="[{ color: priceColor }]"
 | 
						||
              v-if="price && Number(price) > 0"
 | 
						||
            >
 | 
						||
              ¥{{ fen2yuan(price) }}
 | 
						||
            </view>
 | 
						||
            <view v-if="num" class="total-text ss-flex ss-col-center">x {{ num }}</view>
 | 
						||
            <slot name="priceSuffix"></slot>
 | 
						||
          </view>
 | 
						||
        </view>
 | 
						||
        <view class="tool-box">
 | 
						||
          <slot name="tool"></slot>
 | 
						||
        </view>
 | 
						||
        <view>
 | 
						||
          <slot name="rightBottom"></slot>
 | 
						||
        </view>
 | 
						||
      </view>
 | 
						||
    </view>
 | 
						||
  </view>
 | 
						||
</template>
 | 
						||
 | 
						||
<script setup>
 | 
						||
  import sheep from '@/sheep';
 | 
						||
  import { computed } from 'vue';
 | 
						||
  import { fen2yuan } from '@/sheep/hooks/useGoods';
 | 
						||
  /**
 | 
						||
   * 订单卡片
 | 
						||
   *
 | 
						||
   * @property {String} img 											- 图片
 | 
						||
   * @property {String} title 										- 标题
 | 
						||
   * @property {Number} titleWidth = 0								- 标题宽度,默认0,单位rpx
 | 
						||
   * @property {String} skuText 										- 规格
 | 
						||
   * @property {String | Number} price 								- 价格
 | 
						||
   * @property {String} priceColor 									- 价格颜色
 | 
						||
   * @property {Number | String} num									- 数量
 | 
						||
   *
 | 
						||
   */
 | 
						||
  const props = defineProps({
 | 
						||
    img: {
 | 
						||
      type: String,
 | 
						||
      default: 'https://img1.baidu.com/it/u=1601695551,235775011&fm=26&fmt=auto',
 | 
						||
    },
 | 
						||
    title: {
 | 
						||
      type: String,
 | 
						||
      default: '',
 | 
						||
    },
 | 
						||
    titleWidth: {
 | 
						||
      type: Number,
 | 
						||
      default: 0,
 | 
						||
    },
 | 
						||
    skuText: {
 | 
						||
      type: [String, Array],
 | 
						||
      default: '',
 | 
						||
    },
 | 
						||
    price: {
 | 
						||
      type: [String, Number],
 | 
						||
      default: '',
 | 
						||
    },
 | 
						||
    priceColor: {
 | 
						||
      type: [String],
 | 
						||
      default: '',
 | 
						||
    },
 | 
						||
    num: {
 | 
						||
      type: [String, Number],
 | 
						||
      default: 0,
 | 
						||
    },
 | 
						||
    score: {
 | 
						||
      type: [String, Number],
 | 
						||
      default: '',
 | 
						||
    },
 | 
						||
    radius: {
 | 
						||
      type: [String],
 | 
						||
      default: '',
 | 
						||
    },
 | 
						||
    marginBottom: {
 | 
						||
      type: [String],
 | 
						||
      default: '',
 | 
						||
    },
 | 
						||
  });
 | 
						||
  const skuString = computed(() => {
 | 
						||
    if (!props.skuText) {
 | 
						||
      return '';
 | 
						||
    }
 | 
						||
    if (typeof props.skuText === 'object') {
 | 
						||
      return props.skuText.join(',');
 | 
						||
    }
 | 
						||
    return props.skuText;
 | 
						||
  });
 | 
						||
</script>
 | 
						||
 | 
						||
<style lang="scss" scoped>
 | 
						||
  .score-img {
 | 
						||
    width: 36rpx;
 | 
						||
    height: 36rpx;
 | 
						||
    margin: 0 4rpx;
 | 
						||
  }
 | 
						||
  .ss-order-card-warp {
 | 
						||
    padding: 20rpx;
 | 
						||
 | 
						||
    .img-box {
 | 
						||
      width: 164rpx;
 | 
						||
      height: 164rpx;
 | 
						||
      border-radius: 10rpx;
 | 
						||
      overflow: hidden;
 | 
						||
 | 
						||
      .order-img {
 | 
						||
        width: 164rpx;
 | 
						||
        height: 164rpx;
 | 
						||
      }
 | 
						||
    }
 | 
						||
 | 
						||
    .box-right {
 | 
						||
      flex: 1;
 | 
						||
      // width: 500rpx;
 | 
						||
      // height: 164rpx;
 | 
						||
      position: relative;
 | 
						||
 | 
						||
      .tool-box {
 | 
						||
        position: absolute;
 | 
						||
        right: 0rpx;
 | 
						||
        bottom: -10rpx;
 | 
						||
      }
 | 
						||
    }
 | 
						||
 | 
						||
    .title-text {
 | 
						||
      font-size: 28rpx;
 | 
						||
      font-weight: 500;
 | 
						||
      line-height: 40rpx;
 | 
						||
    }
 | 
						||
 | 
						||
    .spec-text {
 | 
						||
      font-size: 24rpx;
 | 
						||
      font-weight: 400;
 | 
						||
      color: $dark-9;
 | 
						||
      min-width: 0;
 | 
						||
      overflow: hidden;
 | 
						||
      text-overflow: ellipsis;
 | 
						||
      display: -webkit-box;
 | 
						||
      -webkit-line-clamp: 1;
 | 
						||
      -webkit-box-orient: vertical;
 | 
						||
    }
 | 
						||
 | 
						||
    .price-text {
 | 
						||
      font-size: 24rpx;
 | 
						||
      font-weight: 500;
 | 
						||
      font-family: OPPOSANS;
 | 
						||
    }
 | 
						||
 | 
						||
    .total-text {
 | 
						||
      font-size: 24rpx;
 | 
						||
      font-weight: 400;
 | 
						||
      line-height: 24rpx;
 | 
						||
      color: $dark-9;
 | 
						||
      margin-left: 8rpx;
 | 
						||
    }
 | 
						||
  }
 | 
						||
</style>
 |