| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 | <!-- 拼团活动参团记录卡片 --><template>  <view v-if="state.list.length > 0" class="groupon-list detail-card ss-p-x-20">    <view class="join-activity ss-flex ss-row-between ss-m-t-30">      <!-- todo: 接口缺少总数 -->      <view class="">已有{{ state.list.length }}人参与活动</view>      <text class="cicon-forward"></text>    </view>    <view      v-for="(record, index) in state.list"      @tap="sheep.$router.go('/pages/activity/groupon/detail', { id: record.id })"      :key="index"      class="ss-m-t-40 ss-flex ss-row-between border-bottom ss-p-b-30"    >      <view class="ss-flex ss-col-center">        <image :src="sheep.$url.cdn(record.avatar)" class="user-avatar"></image>        <view class="user-nickname ss-m-l-20 ss-line-1">{{ record.nickname }}</view>      </view>      <view class="ss-flex ss-col-center">        <view class="ss-flex-col ss-col-bottom ss-m-r-20">          <view class="title ss-flex ss-m-b-14">            还差            <view class="num">{{ record.userSize - record.userCount }}人</view>            成团          </view>          <view class="end-time">{{ endTime(record.expireTime) }}</view>        </view>        <view class="">          <button class="ss-reset-button go-btn" @tap.stop="onJoinGroupon(record)"> 去参团 </button>        </view>      </view>    </view>  </view></template><script setup>  import { onMounted, reactive } from 'vue';  import sheep from '@/sheep';  import { useDurationTime } from '@/sheep/hooks/useGoods';  import CombinationApi from "@/sheep/api/promotion/combination";  const props = defineProps({    modelValue: {      type: Object,      default() {},    },  });  const state = reactive({    list: [],  });  // 去参团  const emits = defineEmits(['join']);  function onJoinGroupon(record) {    emits('join', record);  }  // 结束时间或状态  function endTime(time) {    const durationTime = useDurationTime(time);    if (durationTime.ms <= 0) {      return '该团已解散';    }    let timeText = '剩余 ';    timeText += `${durationTime.h}时`;    timeText += `${durationTime.m}分`;    timeText += `${durationTime.s}秒`;    return timeText;  }  // 初始化  onMounted(async () => {    // 查询参团记录    // status = 0 表示未成团    const { data } = await CombinationApi.getHeadCombinationRecordList(props.modelValue.id, 0 , 10);    state.list = data;  });</script><style lang="scss" scoped>  .detail-card {    background-color: $white;    margin: 14rpx 20rpx;    border-radius: 10rpx;    overflow: hidden;  }  .groupon-list {    .join-activity {      font-size: 28rpx;      font-weight: 500;      color: #999999;      .cicon-forward {        font-weight: 400;      }    }    .user-avatar {      width: 60rpx;      height: 60rpx;      background: #ececec;      border-radius: 60rpx;    }    .user-nickname {      font-size: 28rpx;      font-weight: 500;      color: #333333;      width: 160rpx;    }    .title {      font-size: 24rpx;      font-weight: 500;      color: #666666;      .num {        color: #ff6000;      }    }    .end-time {      font-size: 24rpx;      font-weight: 500;      color: #999999;    }    .go-btn {      width: 140rpx;      height: 60rpx;      background: linear-gradient(90deg, #ff6000 0%, #fe832a 100%);      border-radius: 30rpx;      color: #fff;      font-weight: 500;      font-size: 26rpx;      line-height: normal;    }  }</style>
 |