|                                                                                                                        |  | <template>  <view class="drop-down">    <button class="btn" plain @click="openPicker" >      <view class="flex btn-label">        <view :style="{ color }">{{ label }}</view>        <uv-icon name="arrow-down-fill" :color="color" size="14rpx"></uv-icon>      </view>    </button>
    <template v-if="popupVisible">      <view class="drop-down-overlay" @click="closePicker"></view>            <view class="card drop-down-popup" :style="popupStyle">        <view           v-for="item in options"           class="flex 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 []        }      },      label: {        type: String,        default: ''      },    },		data() {      return {        popupVisible: false,        popupStyle: {},      }    },    computed: {      isActive() {        return this.options.find(option => option.value === this.value)      },      color() {        return this.isActive ? '#6851A7' : '#808080'      }    },    methods: {      openPicker() {        console.log('openPicker', this.label)        this.popupVisible = true      },      closePicker() {        console.log('closePicker', this.label)        this.popupVisible = false      },			onSelect(val) {				const selected = this.value        const newVal = selected === val ? '' : val                this.$emit('input', newVal)        this.$emit('change', newVal)
        this.closePicker()			},    },  }</script>
<style scoped lang="scss">.drop-down {  position: relative;  clear: both;
  .btn {    // width: 213rpx;
    padding: 14rpx 0;    font-size: 22rpx;    font-weight: 600;    background: transparent;    border: none;
    &-label {      column-gap: 9rpx;    }  }
  &-overlay {    position: fixed;    width: 100vw;    height: calc(100vh - #{$navbar-height} - var(--status-bar-height) - 20rpx);    background: transparent;    bottom: 0;    left: 0;    z-index: 98;    font-size: 0;  }
  &-popup {    position: absolute;    z-index: 99;    width: 213rpx;    background: #FFFFFF;    border-radius: 15rpx;    transform: translateY(-15rpx);  }
  &-option {    color: #000000;    font-size: 24rpx;    padding: 7rpx 0;    text-align: center;
    &.is-active {      color: $uni-color;    }
    & + & {      border-top: 1rpx solid #EFEFEF;    }  }}</style>
 |