142 lines
3.4 KiB
Vue
142 lines
3.4 KiB
Vue
<!-- 拼团活动参团记录卡片 -->
|
|
<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 "@/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>
|