135 lines
3.9 KiB
Vue
135 lines
3.9 KiB
Vue
|
<template>
|
|||
|
<u-picker :show="show" :columns="priceColumns" keyName="price" title="请选择价位" @cancel="cancel" @confirm="confirm"
|
|||
|
@change="change" :defaultIndex="defaultIndex">
|
|||
|
<view slot="header">
|
|||
|
<view class="header">价位/人</view>
|
|||
|
</view>
|
|||
|
<view slot="footer">
|
|||
|
<u-transition :show="chooseText === '其他'" mode="fade" duration="900">
|
|||
|
<view class="other">
|
|||
|
<view class="left">*已选择其他</view>
|
|||
|
<view class="right">
|
|||
|
<text>请填需求价位:</text>
|
|||
|
<u--input type="number" class="input" v-model="value"></u--input>
|
|||
|
<text>/人</text>
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
</u-transition>
|
|||
|
</view>
|
|||
|
</u-picker>
|
|||
|
</template>
|
|||
|
|
|||
|
<script>
|
|||
|
export default {
|
|||
|
data() {
|
|||
|
return {
|
|||
|
priceColumns: [],
|
|||
|
chooseUuid: '',
|
|||
|
chooseText: '',
|
|||
|
value: null,
|
|||
|
defaultIndex: [],
|
|||
|
priceClass: 0
|
|||
|
}
|
|||
|
},
|
|||
|
props: ['show', 'priceList', 'choosePriceClass'],
|
|||
|
watch: {
|
|||
|
priceList: {
|
|||
|
immediate: true,
|
|||
|
handler(newValue) {
|
|||
|
this.priceColumns = [[...newValue, ...[{ uuid: newValue[0]?.uuid, price: '其他', priceClass: 0 }]]]
|
|||
|
// console.log('priceColumns', this.priceColumns)
|
|||
|
},
|
|||
|
},
|
|||
|
chooseText: {
|
|||
|
// immediate: true,
|
|||
|
handler(newValue) {
|
|||
|
this.chooseText = newValue
|
|||
|
|
|||
|
},
|
|||
|
},
|
|||
|
// 用来拿到PriceClass的值
|
|||
|
choosePriceClass: {
|
|||
|
handler(newValue) {
|
|||
|
this.priceClass = newValue.split('@')[0]
|
|||
|
const choose = this.priceColumns[0].find((item) => item.priceClass === +this.priceClass)
|
|||
|
console.log(choose)
|
|||
|
this.$emit("onConfirm", { value: this.value, uuid: choose.uuid, price: choose.price, priceClass: choose.priceClass });
|
|||
|
},
|
|||
|
}
|
|||
|
},
|
|||
|
methods: {
|
|||
|
cancel() {
|
|||
|
this.chooseText = '';
|
|||
|
this.defaultIndex = [];
|
|||
|
this.$emit("update:show", false);
|
|||
|
},
|
|||
|
confirm(item) {
|
|||
|
this.defaultIndex = [this.priceColumns[0]?.findIndex((n) => n.price === item.value[0].price)]
|
|||
|
if (this.chooseText === '其他') {
|
|||
|
this.$emit("onConfirm", { value: this.value, uuid: item.value[0].uuid, price: item.value[0].price, priceClass: item.value[0].priceClass });
|
|||
|
this.$emit("update:show", false);
|
|||
|
} else {
|
|||
|
this.value = null
|
|||
|
this.$emit("onConfirm", { uuid: item.value[0].uuid, price: item.value[0].price, priceClass: item.value[0].priceClass });
|
|||
|
this.$emit("update:show", false);
|
|||
|
}
|
|||
|
|
|||
|
},
|
|||
|
change(item) {
|
|||
|
if (item.value[0].price === '其他') {
|
|||
|
this.chooseText = item.value[0].price;
|
|||
|
this.chooseUuid = item.value[0].uuid
|
|||
|
} else {
|
|||
|
this.chooseText = ''
|
|||
|
}
|
|||
|
}
|
|||
|
},
|
|||
|
}
|
|||
|
</script>
|
|||
|
|
|||
|
<style lang="scss">
|
|||
|
.header {
|
|||
|
text-align: center;
|
|||
|
border-bottom: 1rpx solid #868686;
|
|||
|
border-top: 1rpx solid #868686;
|
|||
|
font-size: 36rpx;
|
|||
|
font-weight: 600;
|
|||
|
padding: 10rpx 0;
|
|||
|
width: 90%;
|
|||
|
margin: auto;
|
|||
|
color: #1936C9;
|
|||
|
}
|
|||
|
|
|||
|
.other {
|
|||
|
box-sizing: border-box;
|
|||
|
border: 1px solid #1936C9;
|
|||
|
width: 90%;
|
|||
|
padding: 20rpx 30rpx;
|
|||
|
margin: auto;
|
|||
|
display: flex;
|
|||
|
flex-direction: row;
|
|||
|
justify-content: space-between;
|
|||
|
align-items: center;
|
|||
|
border-radius: 20rpx;
|
|||
|
margin-bottom: 20rpx;
|
|||
|
|
|||
|
.left {
|
|||
|
color: #1936C9;
|
|||
|
font-weight: 600;
|
|||
|
}
|
|||
|
|
|||
|
.right {
|
|||
|
width: 380rpx;
|
|||
|
display: flex;
|
|||
|
flex-direction: row;
|
|||
|
align-items: center;
|
|||
|
justify-content: center;
|
|||
|
font-size: 24rpx;
|
|||
|
|
|||
|
.input {
|
|||
|
width: 50rpx;
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
}
|
|||
|
</style>
|