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.

519 lines
14 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<view>
<view class="box-content">
<view class="box-card">
<!-- <view class="box-tip justify-between">
<text class="box-tiptxt">已选{{selectInfo}}</text>
</view> -->
<u--form labelPosition="top" labelWidth="120px" :model="form" ref="form">
<u-form-item label="预约入场时间" labelPosition="top" borderBottom>
<view style="color: #EF9525;font-size: 24rpx;display: flex;" @click="showSelecttime=true">
<!-- {{selectInfo}} -->
<text>{{(form.time?timeFormat(formTime, 'yyyy年MM月DD日 HH:mm'):'请选择入场时间>')}}</text>
<u-icon name="arrow-down" color="#000"></u-icon>
</view>
<u-datetime-picker
:minDate="minDate"
:maxDate="maxDate"
:show="showSelecttime" closeOnClickOverlay @close="cancelTime"
@cancel="cancelTime" @confirm="confirmTime" v-model="form.time" mode="datetime">
</u-datetime-picker>
</u-form-item>
<u-form-item label="车牌号码" labelPosition="top" borderBottom ref="plate">
<plate @listenPlateChange="plateChange" :defaultPlate="plateNumber" />
</u-form-item>
<u-form-item label="手机号" labelPosition="top" borderBottom ref="mobile">
<u--input readonly placeholder="请输入手机号" v-model="form.mobile" border="surround" clearable>
</u--input>
</u-form-item>
</u--form>
<view class="box-tip box-tipgray flex-row align-center" @click="handleChange">
<u-icon :name="(form.checkUser?'checkmark-circle-fill':'checkmark-circle')" color="#EF9525">
</u-icon>
<view class="box-tiptxt" style="margin-left: 10rpx;">请认真阅读、知悉并遵守<text @click.stop="openNotice"
style="color: #EF9525;">《本馆停车须知》</text></view>
</view>
</view>
</view>
<view class="page-bottom">
<u-button type="primary" @click="submitOrder">确定</u-button>
</view>
<u-popup :show="showInfo" mode="bottom" @close="closeInfo" :round="10" closeable>
<view class="mpopup" :style="[{height:maxheight}]">
<view class="mpopup-title">
{{notice.name}}
</view>
<view class="mpopup-content" style="margin-top: 60rpx;">
<scroll-view scroll-y="true" style="line-height: 50rpx;font-size: 32rpx;text-indent: 2em;"
:style="[{height:scrollheight}]">
<rich-text :nodes="notice.value"></rich-text>
</scroll-view>
<view style="margin-top: 40rpx;"></view>
<u-button type="primary" @click="closeInfo">知道了</u-button>
</view>
</view>
</u-popup>
<u-popup :show="showSelectorder" mode="bottom" :closeOnClickOverlay="false" @close="closeorder" :round="10">
<view class="mpopup">
<view class="mpopup-title">
选择预约的活动或者预约的参观
</view>
<view class="mpopup-content" style="padding: 40rpx 20rpx;">
<view v-if="listOrder.length!=0">
<view class="mpopup-title" style="text-align: left;padding: 20rpx 0;font-size: 14px;">
预约的参观
</view>
<block v-for="(item,index) in listOrder" :key="index">
<view class="box-tip flex-row align-center" @click="handleSelectOrder(index,1)"
style="margin-bottom: 20rpx;">
<u-icon :name="(item.checked?'checkmark-circle-fill':'checkmark-circle')"
color="#EF9525">
</u-icon>
<view class="box-tiptxt" style="margin-left: 10rpx;">
{{$u.timeFormat(new Date(item.date), 'mm月dd日')}}
{{item.time}}丨{{item.details_count}} 位观众</text>
</view>
</view>
</block>
</view>
<view v-if="listActivtyOrder.length!=0">
<view class="mpopup-title" style="text-align: left;padding: 20rpx 0;font-size: 14px;">
预约的活动
</view>
<block v-for="(item,index) in listActivtyOrder" :key="index">
<view class="box-tip flex-row align-center" @click="handleSelectOrder(index,2)"
style="margin-bottom: 20rpx;">
<u-icon :name="(item.checked?'checkmark-circle-fill':'checkmark-circle')"
color="#EF9525">
</u-icon>
<view class="box-tiptxt" style="margin-left: 10rpx;">
活动时间{{item.number}}
报名数量{{item.total}}</text>
</view>
</view>
</block>
</view>
<u-button type="primary" @click="handleConfirmOrder"></u-button>
</view>
</view>
</u-popup>
<u-popup :show="successshow" customStyle="width:600rpx;height:300rpx;text-align:center" :round="10"
mode="center" width="600rpx" height="150rpx">
<view class="">
<view class="successBox">
<!-- <u-icon name="checkmark-circle" size="90" color="#EF9525"></u-icon> -->
<view class="h3">您已经预约成功</view>
<view class="p">即将跳转到车位预约 {{time}} s</view>
</view>
<view class="pinkBtn" @click="goHome"></view>
</view>
</u-popup>
</view>
</template>
<script>
import {
plate
} from '@/components/plate/index.vue'
export default {
name: "index",
components: {
plate
},
data() {
return {
successshow: false,
time: 3,
showInfo: false,
showSelectorder: false,
maxheight: "",
scrollheight: "",
selectInfo: "--",
showSelecttime: false,
plateNumber: ['苏', 'E', '', '', '', '', ''],
t: null,
timer: null,
form: {
plate: "",
mobile: "",
time: '',
car_park_id: "",
checkUser: false,
car_type: 1,
type: "1",
car_park_id: 0,
activity_order_id: "",
visit_order_id: ""
},
formTime: Number(new Date()),
minDate:'',
maxDate:'',
listOrder: [],
listActivtyOrder: [],
orderType: 1,
orderid: "",
bookinfo: {},
notice: {}
}
},
onLoad(options) {
let that = this;
that.showInfo = true;
if (!that.util.isNull(options.id)) {
this.form.car_park_id = parseInt(options.id);
}
if (!that.util.isNull(options.currentPark)) {
this.form.type = options.currentPark;
}
// if (!that.util.isNull(options.bookinfo)) {
// let bookinfo = JSON.parse(unescape(options.bookinfo));
// this.bookinfo = bookinfo;
// this.form.time = bookinfo.time;
// this.formTime = bookinfo.time;
// this.orderType = bookinfo.orderType;
// this.selectInfo = bookinfo.info;
// if (this.orderType == 2)
// this.form.activity_order_id = bookinfo.orderid
// else
// this.form.visit_order_id = bookinfo.orderid
// this.orderid = bookinfo.orderid
// }
that.form.time = this.$moment(this.$moment().format('YYYY-MM-DD HH:mm:ss')).valueOf()
that.formTime = this.$moment(this.$moment().format('YYYY-MM-DD HH:mm:ss')).valueOf()
console.log(that.form.time)
this.minDate = this.$moment(this.$moment().format('YYYY-MM-DD HH:mm:ss')).valueOf()
this.maxDate = this.$moment(this.$moment().add('days',6).format('YYYY-MM-DD') + ' 16:00:00').valueOf()
console.log("this.minDate",this.minDate,this.maxDate)
that.loadConfigInfo();
that.util.getUserInfo(function(r) {
that.form.mobile = r.mobile;
}, true);
that.maxheight = wx.getSystemInfoSync().windowHeight * 0.6 + "px"
that.scrollheight = wx.getSystemInfoSync().windowHeight * 0.6 * 0.7 + "px"
},
onShow() {
},
onHide() {
clearInterval(this.t)
clearTimeout(this.timer)
},
onUnload() {
clearInterval(this.t)
clearTimeout(this.timer)
},
methods: {
timeFormat(val, format) {
return this.$moment(val).format(format)
},
goHome() {
uni.switchTab({
url: "/pages/index/index"
})
},
loadConfigInfo() {
var that = this;
this.util.request({
api: '/api/mobile/other/config-show',
data: {
tag: "car_park_notice"
},
utilSuccess: function(res) {
that.notice = res;
that.notice.value = that.notice.value.replace(/\<p/gi, "<p class='richp'");
},
utilFail: function(res) {
uni.showToast({
icon: "none",
title: res,
duration: 2000
})
}
})
},
openNotice() {
this.showInfo = true;
},
closeInfo() {
this.showInfo = false;
},
handleConfirmOrder() {
if (this.orderid === 0) {
this.util.toast("请选择预约的活动或者预约的参观");
return false;
}
this.showSelectorder = false;
},
handleSelectOrder(index, type) {
for (var m of this.listActivtyOrder) {
m.checked = false;
}
for (var m of this.listOrder) {
m.checked = false;
}
if (type == 1) {
this.listOrder[index].checked = true;
this.selectInfo = this.$moment(this.listOrder[index].date).format("MM月DD日") + " " + this.listOrder[
index].time
this.form.time = this.$moment(this.listOrder[index].date + " " + this.listOrder[
index].time.split("-")[0]).format("YYYY-MM-DD HH:mm:ss");
this.form.visit_order_id = this.orderid = this.listOrder[index].id;
} else {
this.listActivtyOrder[index].checked = true
this.selectInfo = this.$moment(this.listActivtyOrder[index].activity.start_time).format("MM月DD日 HH:mm")
this.form.time = this.$moment(this.listActivtyOrder[index].activity.start_time).format(
"YYYY-MM-DD HH:mm:ss");
this.form.activity_order_id = this.orderid = this.listActivtyOrder[index].id;
}
this.orderType = type;
},
openselectorder() {
this.showSelectorder = true;
},
closeorder() {
this.showSelectorder = false;
},
loadOrder(cb) {
var that = this;
this.util.request({
api: '/api/mobile/user/my-visit-order',
data: {
status: 1
},
utilSuccess: function(res) {
for (var mod of res) {
mod.checked = false;
}
that.listOrder = res;
cb(res)
},
utilFail: function(res) {
this.util.toast(res)
}
})
},
loadactivityOrder(cb) {
var that = this;
this.util.request({
api: '/api/mobile/user/my-activity-order',
data: {
status: 1
},
utilSuccess: function(res) {
for (var mod of res) {
mod.checked = false;
}
that.listActivtyOrder = res;
cb(res);
},
utilFail: function(res) {
this.util.toast(res)
}
})
},
confirmTime(e) {
console.log(e)
this.form.time = e.value
this.formTime = e.value
let choosetime = parseInt(this.$moment(this.form.time).format("HH"))
let chooseMin = parseInt(this.$moment(this.form.time).format("mm"))
// let nowtime = parseInt(this.$moment().format("HH"))
// console.log(chooseMin)
if(choosetime<9 || choosetime>16 || (choosetime==16 && chooseMin>0)){
this.util.toast("请选择正确的入场时间");
return false;
}
this.showSelecttime = false;
},
cancelTime() {
this.showSelecttime = false;
},
plateChange(val) {
this.form.plate = val.join("")
},
handleChange() {
this.form.checkUser = !this.form.checkUser;
},
handleSelectTime() {
this.showSelecttime = true;
},
submitOrder() {
// if (this.util.isNull(this.orderid)) {
// this.util.toast("请选择参观预约或者活动预约");
// return false;
// }
if(this.$moment(this.form.time).format("HH")<9 || this.$moment(this.form.time).format("HH")>16){
this.util.toast("请选择正确的入场时间");
return false;
}
if (this.form.plate.length != 7 && this.form.plate.length != 8) {
this.util.toast("请正确填写车牌号");
return false;
}
if (this.util.isNull(this.form.mobile)) {
uni.showToast({
icon: "none",
title: "请填写手机号"
})
return false;
} else if (!uni.$u.test.mobile(this.form.mobile)) {
uni.showToast({
icon: "none",
title: "请正确填写手机号"
})
return false;
}
if (!this.form.checkUser) {
this.util.toast("请阅读预约通知");
return false;
}
this.form.time = this.timeFormat(this.form.time, 'yyyy-MM-DD HH:mm')
console.log(this.form.time)
// return
var that = this;
this.util.request({
api: '/api/mobile/carpark/order',
data: this.form,
method: "POST",
utilSuccess: function(res) {
that.successshow = true;
that.t = setInterval(function() {
if (that.time > 0)
that.time = that.time - 1;
}, 1000)
that.timer = setTimeout(function() {
uni.redirectTo({
url: '/pages/order/parkorder'
})
clearInterval(that.t);
clearTimeout(that.timer)
}, 3000)
// uni.showToast({
// icon: "none",
// title: "下单成功",
// complete() {
// uni.redirectTo({
// url: "/pages/success/success?from=park&id=" + res.id
// })
// }
// })
},
utilFail: function(res) {
that.util.toast(res);
}
})
},
}
}
</script>
<style lang="scss">
page {
background: #f7f6f4;
}
.box-tip {
background: #FCF6E3;
height: 66rpx;
line-height: 66rpx;
box-sizing: border-box;
padding: 0rpx 12rpx;
}
.box-tipgray {
background: #f7f6f4 !important;
}
.box-tiptxt {
font-size: 24rpx;
color: #828282;
}
.box-tipbtn {
font-size: 24rpx;
text-decoration: underline;
color: #EF9525;
}
.box-content {
padding: 30rpx 24rpx;
}
.box-card {
background: #FFFFFF;
border-radius: 16rpx;
padding: 31rpx 18rpx;
margin-bottom: 20rpx;
}
.page-bottom {
background: #FFFFFF;
height: 108rpx;
box-shadow: 2rpx 3rpx 10rpx 0rpx rgba(107, 94, 77, 0.3);
width: 100%;
position: fixed;
bottom: 0;
left: 0;
padding: 15rpx 25rpx;
box-sizing: border-box;
z-index: 10;
}
.successBox {
.iconfont {
color: #00CCB9;
font-size: 180rpx;
}
.h3 {
font-size: 40rpx;
font-weight: 500;
color: #333333;
margin-top: 40rpx;
}
.p {
font-size: 28rpx;
font-weight: 400;
color: #333333;
margin-top: 24rpx;
}
}
.pinkBtn {
width: 50%;
background-image: linear-gradient(45deg, #EF9525 0%, #EF9525 100%);
border-radius: 44rpx;
font-size: 30rpx;
font-weight: 500;
color: #FFFFFF;
text-align: center;
line-height: 70rpx;
margin: 30rpx auto;
}
.richp {
margin-bottom: 10rpx
}
</style>