Files
aishangjia-uniapp/sub_pages/checkout/checkout.vue
2023-08-08 20:02:22 +08:00

365 lines
7.4 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view class="search">
<view class="house">
<view class="list">
<view class="item">
<image class="image" :src="form.files[0].url">
</image>
<view class="info">
<view class="title">{{ form.houseTitle }}</view>
<view class="desc"><text>{{ form.extent }}|{{ form.toward }}</text></view>
<view class="price">{{ form.monthlyRent }}/</view>
</view>
</view>
</view>
</view>
<u-gap></u-gap>
<!-- 提交表单 -->
<view class="user-card">
<u--form :model="form" ref="uForm" :rules="rules" labelPosition="top" :labelStyle="{paddingLeft: '10rpx'}"
label-width="200rpx">
<!-- 表单组件 -->
<view class="form-wrapper">
<u-cell-group :border="false">
<u-form-item prop="realName">
<u-cell title="姓名" :isLink="true">
<u-input slot="value" class="input" v-model="form.realName" inputAlign="right"
maxlength="30" :border="false" placeholder="请输入姓名" />
</u-cell>
</u-form-item>
<u-form-item prop="phone">
<u-cell title="联系电话" :isLink="true">
<u-input slot="value" class="input" v-model="form.phone" inputAlign="right"
maxlength="30" :border="false" placeholder="请填写联系电话" />
</u-cell>
</u-form-item>
<u-form-item prop="expirationTime">
<u-cell title="预约看房时间" :isLink="true" @click="showExpirationTime = true">
<u-input slot="value" class="input" v-model="expirationTime" inputAlign="right"
maxlength="30" :border="false" placeholder="请选择看房时间" />
</u-cell>
</u-form-item>
</u-cell-group>
</view>
</block>
</u--form>
</view>
<view class="float">
<view class="release">
<u-button text="提交预约" type="primary" shape="circle" @click="handleSubmit"></u-button>
</view>
</view>
<!-- 组件 -->
<u-calendar :show="showExpirationTime" @confirm="confirmexpirationTime"></u-calendar>
<!-- <u-datetime-picker ref="datetimePicker" :show="showExpirationTime" v-model="expirationTime" mode="date" @close="closeexpirationTime"
@confirm="confirmexpirationTime" @cancel="closeexpirationTime" :closeOnClickOverlay="true">
</u-datetime-picker> -->
</view>
</template>
<script>
import store from '@/store'
import {
fileUrl
} from '@/config.js'
import {
dateFormat
} from '@/utils/util.js'
import * as HouseInfoApi from '@/api/house-info.js'
import * as HouseReservationApi from '@/api/house-reservation.js'
import * as DictApi from '@/api/dict.js'
export default {
data() {
return {
select: [],
bgColor: '#ffffff',
showExpirationTime: false,
form: {
name: '',
phone: '',
expirationTime: ''
},
// 生日
expirationTime: '',
// 验证规则
rules: {
'name': {
type: 'string',
required: true,
message: '请填写您的姓名',
trigger: ['blur', 'change']
},
'phone': {
type: 'string',
required: true,
message: '请填写您的手机号码',
trigger: ['blur', 'change']
},
'expirationTime': {
type: 'string',
required: true,
message: '请选择预约看房时间',
trigger: ['blur', 'change']
},
},
}
},
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
this.houseId = options.id
this.getHouseInfo()
},
// 必须要在onReady生命周期因为onLoad生命周期组件可能尚未创建完毕
onReady() {
// this.$refs.uForm.setRules(this.rules)
// 微信小程序需要用此写法
// this.$refs.datetimePicker.setFormatter(this.formatter)
},
methods: {
getHouseInfo() {
const app = this
const {
houseId
} = this
HouseInfoApi.getHouseInfo(houseId).then(res => {
app.form = res.data
app.form.files = JSON.parse(res.data.files) || []
app.form.houseLabel = JSON.parse(res.data.houseLabel) || []
// app.form.supporting = JSON.parse(res.data.supporting) || []
}).catch(err => {
app.$error(err.message)
})
},
onSearch() {
this.$push('/sub_pages/member/member', this.where)
},
onBadge(id) {
this.bgColor = '#ff0000'
},
confirmexpirationTime(e) {
this.expirationTime = e[0]
this.form.expirationTime = e[0] + ' 00:00:00'
this.showExpirationTime = false
},
closeexpirationTime() {
this.showExpirationTime = false
},
// 确认修改
async handleSubmit() {
const app = this
const { form } = this
if (app.disabled === true) return
this.$refs.uForm.validate().then(() => {
HouseReservationApi.addHouseReservation(app.form).then(result => {
app.$toast(result.message)
}).catch(err => {
uni.$u.toast(err.message)
})
}).catch(errors => {
// uni.$u.toast('校验失败')
})
},
}
}
</script>
<style>
page {
background: #f7f8fa;
}
</style>
<style lang="scss" scoped>
.container {}
.search-wrapper {
display: flex;
height: 64rpx;
padding: 20rpx;
background-color: #FFFFFF;
}
// 搜索输入框
.search-input {
width: 80%;
background: #fff;
height: 72rpx;
line-height: 72rpx;
border-radius: 10rpx 0 0 10rpx;
box-sizing: border-box;
overflow: hidden;
.search-input-wrapper {
display: flex;
.left {
display: flex;
width: 60rpx;
justify-content: center;
align-items: center;
.search-icon {
display: block;
color: #b4b4b4;
font-size: 28rpx;
}
}
.right {
flex: 1;
input {
font-size: 28rpx;
height: 72rpx;
line-height: 72rpx;
display: flex;
align-items: center;
.input-placeholder {
color: #aba9a9;
}
}
}
}
}
// 搜索按钮
.search-button {
width: 20%;
box-sizing: border-box;
.button {
height: 64rpx;
font-size: 28rpx;
border-radius: 0 10rpx 10rpx 0;
background: $main-bg;
color: $main-text;
display: flex;
justify-content: center;
align-items: center;
}
}
// 订单合计
.order-total {
margin: 10rpx auto;
font-size: 26rpx;
vertical-align: bottom;
text-align: right;
height: 50rpx;
padding-top: 10rpx;
display: flex;
justify-content: center;
.pay-btn {
display: flex;
.btn {
margin-right: 16rpx;
}
}
.total-price {
display: flex;
align-items: center;
}
.unit {
margin-left: 8rpx;
margin-right: -2rpx;
font-size: 26rpx;
}
.money {
font-size: 28rpx;
color: #ff0000;
}
}
.house {
margin: 30rpx auto;
width: 680rpx;
.btn {
width: 150rpx;
margin: 40rpx 0;
}
.list {
width: 680rpx;
margin: auto;
.item {
border-radius: 30rpx 30rpx 0 0;
box-shadow: 0 3rpx 10rpx 0px #999999;
background-color: #FFFFFF;
margin: 50rpx auto;
position: relative;
.badge {
position: absolute;
left: 30rpx;
top: 30rpx;
}
.image {
width: 680rpx;
height: 360rpx;
border-radius: 30rpx 30rpx 0 0;
}
.info {
padding: 20rpx 20rpx;
display: flex;
flex-direction: column;
.title {
font-size: 40rpx;
}
.desc {
color: #999999;
font-size: 28rpx;
}
.price {
color: #ff0000;
font-size: 30rpx;
}
}
}
}
}
.user-card {
width: 660rpx;
background-color: #FFFFFF;
border-radius: 15rpx;
margin: auto;
padding: 20rpx;
z-index: 100;
}
.float {
width: 750rpx;
display: flex;
justify-content: center;
position: fixed;
bottom: 100rpx;
.release {
width: 500rpx;
opacity: 0.9;
}
}
</style>