裂变星小程序-25.03.04
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.
 
 
 

117 lines
2.2 KiB

<template>
<view class="drop-down">
<button class="btn-simple" plain @click="openPicker" >
<slot>
<image src="../../static/image/record/filter.png" style="width: 30rpx; height: 30rpx; margin: 10rpx;"></image>
</slot>
</button>
<template v-if="popupVisible">
<view class="drop-down-overlay" @click="closePicker"></view>
<view class="card drop-down-popup">
<view
v-for="item in options"
class="drop-down-option"
:class="[item.value === value ? 'is-active' : '']"
:key="item.value"
@click="onSelect(item.value)"
>
<text>{{ item.label }}</text>
</view>
</view>
</template>
</view>
</template>
<script>
export default {
props: {
value: {
type: String | Number,
default: null,
},
options: {
type: Array,
default() {
return []
}
}
},
data() {
return {
popupVisible: false,
}
},
methods: {
openPicker() {
this.popupVisible = true
},
closePicker() {
this.popupVisible = false
},
onSelect(val) {
const selected = this.value
const newVal = selected === val ? null : val
this.$emit('input', newVal)
this.$emit('change', newVal)
},
},
}
</script>
<style scoped lang="scss">
.drop-down {
position: relative;
clear: both;
&-overlay {
position: fixed;
width: 100vw;
height: calc(100vh - #{$navbar-height} - var(--status-bar-height) - 20rpx);
background: transparent;
bottom: 0;
left: 0;
font-size: 0;
}
&-popup {
box-shadow: 0 2px 12px 0 rgba(0,0,0,.1);
padding: 16rpx 40rpx;
position: absolute;
z-index: 99;
right: -14rpx;
margin-top: 28rpx;
&:before {
content: ' ';
position: absolute;
top: -28rpx;
right: 14rpx;
width: 0;
height: 0;
border: 14rpx solid transparent;
border-bottom-color: #FFFFFF;
}
}
&-option {
color: #999999;
font-size: 28rpx;
white-space: nowrap;
&.is-active {
color: #1B1B1B;
font-weight: 700;
}
& + & {
margin-top: 16rpx;
}
}
}
</style>