<template>
|
|
<view class="product">
|
|
<image class="product-img" :src="data.image" mode="aspectFill"></image>
|
|
<view class="flex flex-column product-info">
|
|
<view class="product-info-top">
|
|
<view class="product-name text-ellipsis-2">{{ data.name }}</view>
|
|
<view class="product-desc text-ellipsis">{{ data.desc }}</view>
|
|
</view>
|
|
<view class="flex product-info-bottom">
|
|
<view class="product-detail">
|
|
<view class="flex product-price">
|
|
<view class="product-price-val">
|
|
<text>¥</text>
|
|
<text class="highlight">{{ priceInt }}</text>
|
|
<text>{{ `${priceFrac}起` }}</text>
|
|
</view>
|
|
<view class="product-price-bef" v-if="data.originalPrice">
|
|
{{ `¥${data.originalPrice}` }}
|
|
</view>
|
|
</view>
|
|
<view class="product-registered">
|
|
{{ `${data.registered}人已报名` }}
|
|
</view>
|
|
</view>
|
|
<button class="btn">报名</button>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</template>
|
|
|
|
<script>
|
|
export default {
|
|
props: {
|
|
data: {
|
|
type: Object,
|
|
default() {
|
|
return {}
|
|
}
|
|
}
|
|
},
|
|
computed: {
|
|
priceInt() {
|
|
return parseInt(this.data.currentPrice)
|
|
},
|
|
priceFrac() {
|
|
return (this.data.currentPrice % this.priceInt).toFixed(2).slice(1)
|
|
},
|
|
},
|
|
}
|
|
</script>
|
|
|
|
<style scoped lang="scss">
|
|
.product {
|
|
height: 464rpx;
|
|
background: #FFFFFF;
|
|
border: 2rpx solid #FFFFFF;
|
|
border-radius: 32rpx;
|
|
overflow: hidden;
|
|
font-size: 0;
|
|
|
|
&-img {
|
|
width: 100%;
|
|
height: 220rpx;
|
|
}
|
|
|
|
&-info {
|
|
height: 244rpx;
|
|
padding: 16rpx 16rpx 24rpx 16rpx;
|
|
box-sizing: border-box;
|
|
justify-content: space-between;
|
|
|
|
&-top {
|
|
|
|
}
|
|
|
|
&-bottom {
|
|
width: 100%;
|
|
justify-content: space-between;
|
|
}
|
|
|
|
}
|
|
|
|
&-name {
|
|
font-size: 28rpx;
|
|
font-weight: 500;
|
|
color: #000000;
|
|
}
|
|
|
|
&-desc {
|
|
margin-top: 8rpx;
|
|
font-size: 24rpx;
|
|
color: #8B8B8B;
|
|
}
|
|
|
|
&-detail {
|
|
|
|
}
|
|
|
|
&-price {
|
|
justify-content: flex-start;
|
|
align-items: baseline;
|
|
column-gap: 6rpx;
|
|
|
|
&-val {
|
|
font-size: 24rpx;
|
|
font-weight: 500;
|
|
color: #FF4800;
|
|
|
|
.highlight {
|
|
font-size: 32rpx;
|
|
}
|
|
|
|
}
|
|
|
|
&-bef {
|
|
text-decoration: line-through;
|
|
font-size: 24rpx;
|
|
color: #8B8B8B;
|
|
}
|
|
}
|
|
|
|
&-registered {
|
|
font-size: 24rpx;
|
|
color: #8B8B8B;
|
|
}
|
|
|
|
.btn {
|
|
padding: 11rpx 16rpx;
|
|
font-size: 26rpx;
|
|
font-weight: 500;
|
|
color: #FFFFFF;
|
|
background: #00A9FF;
|
|
border-radius: 24rpx;
|
|
}
|
|
|
|
}
|
|
</style>
|