Files
kh-device-client/src/components/vant/SelectPicker.vue
T

109 lines
2.1 KiB
Vue

<template>
<div>
<a-select v-bind="$attrs"
v-on="$listeners"
:placeholder="placeholder"
:open="false"
:value="value"
@click.capture.native="onOpen">
<a-select-option v-for="item in options" :key="item[valueKey]" :value="item[valueKey]">{{item[labelKey]}}</a-select-option>
</a-select>
<!-- 移动端下拉框 -->
<van-popup v-model="show"
class="select-picker"
position="bottom"
safe-area-inset-bottom>
<van-picker
:loading="loading"
:title="placeholder"
:columns="options"
show-toolbar
:value-key="labelKey"
@confirm="onConfirm"
@cancel="onCancel"
/>
</van-popup>
</div>
</template>
<script>
export default {
name: 'SelectPicker',
props: {
placeholder: {
type: String,
required: false,
default: ''
},
list: {
type: Array,
required: false,
default: () => []
},
// 显示的字段
labelKey: {
type: String,
required: false,
default: 'text'
},
// 实际的值
valueKey: {
type: String,
required: false,
default: 'id'
},
value: {
type: String,
required: false,
default: undefined
}
},
data () {
return {
show: false,
loading: false,
options: []
}
},
methods: {
// 打开下拉,并且获取下拉数据
onOpen () {
this.show = true
this.options = [
{ [this.labelKey]: '请选择', [this.valueKey]: undefined },
...this.list
]
},
// 确认
onConfirm (value) {
this.$emit('change', value[this.valueKey])
this.onCancel()
},
// 取消
onCancel () {
this.show = false
}
},
model: {
prop: 'value',
event: 'change'
}
}
</script>
<style lang="less" scoped>
@import "~@assets/less/modifyLessVars.less";
.select-picker {
/deep/.van-picker__confirm {
color: #fff;
}
/deep/.van-picker__cancel {
color: @text-color-secondary
}
/deep/.van-picker__mask {
background: transparent;
}
}
</style>