鸿宇研学生前端代码
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.
 
 
 

151 lines
3.0 KiB

<template>
<view class="flex option" :style="style">
<view
:class="['option-item', item.id === selected ? 'is-active' : '']"
v-for="item in options"
:key="item.id"
@click="selected = item.id"
>
<view class="option-item-content">
<view class="flex time">
<view class="time-val">{{ item.startDate }}</view>
<view class="time-split">-</view>
<view class="time-val">{{ item.endDate }}</view>
</view>
<view class="flex price">
<view class="price-val">
<text>¥</text>
<text class="highlight">{{ priceInt(item.priceDiscount) }}</text>
<text>{{ `${priceFrac(item.priceDiscount)}起` }}</text>
</view>
<view class="price-bef" v-if="item.priceOrigin">¥<text>{{ item.priceOrigin }}</text></view>
</view>
</view>
<view class="flex option-item-bottom">
{{ item.id === selected ? '已选择' : '点击选择' }}
</view>
</view>
</view>
</template>
<script>
export default {
props: {
value: {
type: String | Number,
default: null
},
options: {
type: Array,
default() {
return []
}
},
style: {
type: String,
default: ''
},
},
computed: {
selected: {
set(val) {
this.$emit('input', val)
},
get() {
return this.value
}
},
},
methods: {
priceInt(priceDiscount) {
return Math.floor(priceDiscount)
},
priceFrac(priceDiscount) {
let frac = priceDiscount % this.priceInt(priceDiscount)
return frac > 0 ? frac.toFixed(2).slice(1) : ''
},
},
}
</script>
<style scoped lang="scss">
.option {
width: 100%;
overflow-x: auto;
flex-wrap: nowrap;
justify-content: flex-start;
column-gap: 16rpx;
&-item {
min-width: 238rpx;
flex: none;
font-size: 0;
border: 2rpx solid #EEEEEE;
border-radius: 12rpx;
overflow: hidden;
&-content {
padding: 16rpx 12rpx;
}
&-bottom {
padding: 12rpx 0;
font-size: 28rpx;
font-weight: 500;
color: #191919;
background: #E4E7EB;
}
&.is-active {
background: #E9F8FF;
border-color: #00A9FF;
.option-item-bottom {
color: #FFFFFF;
background: #00A9FF;
}
}
}
}
.time {
column-gap: 8rpx;
&-val {
font-size: 28rpx;
font-weight: 500;
color: #000000;
}
&-split {
font-size: 24rpx;
color: #8B8B8B;
}
}
.price {
margin-top: 4rpx;
justify-content: flex-start;
align-items: baseline;
column-gap: 8rpx;
white-space: nowrap;
&-val {
font-size: 24rpx;
font-weight: 500;
color: #FF4800;
.highlight {
font-size: 32rpx;
}
}
&-bef {
text-decoration: line-through;
font-size: 24rpx;
color: #8B8B8B;
}
}
</style>