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.

405 lines
12 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="page-body">
<view class="page-section page-section-gap">
<map style="width: 100%; height: 100vh;position: relative;" :latitude="latitude" :longitude="longitude"
:markers="covers">
<view class="book-box">
<view class="activityBox-content flex-col">
<view class="activityBox-row" style="margin-bottom: 56rpx;">
<text class="activityBox-title">{{info.name||""}}</text>
</view>
<view class="activityBox-row">
<text class="icon-shijian iconfont"></text>
<text>可入场时间段{{info.start_time||""}}-{{info.end_time||""}}</text>
</view>
<view class="activityBox-row">
<text class="icon-huodong iconfont"></text>
<text>地址{{info.address||""}}</text>
</view>
<view class="activityBox-row flex-row align-center" style="margin-bottom: 0rpx;"
@click="openlocation">
<text class="icon-ditu-dibiao iconfont"></text>
<text>距离{{distance||"0"}}km</text>
<view class="tomap">
<text class="icon-daohang1 iconfont" style="margin-right: 0;"></text>
</view>
</view>
<view class="parkbox">
<view class="parkbox-title">可预约车位</view>
<view class="parkbox-content flex-row justify-around">
<view class="parkbox-item flex-row align-center" style="margin-right: 10rpx;"
@click="handleSelectPark(2)" :class="(currentPark==2?'parkbox-item-on':'')"
v-if="remain_big_park>0">
<view class="parkbox-item-status" v-if="currentPark==2">
<u-icon name="checkmark" color="#fff" size="20rpx"></u-icon>
</view>
<text class="iconfont icon-tingchechang1" style="font-size: 28rpx;"></text>
<view>
<text>大中:{{remain_big_park}}</text>
</view>
</view>
<view class="parkbox-item flex-col align-center"
:class="(currentPark==1?'parkbox-item-on':'')" @click="handleSelectPark(1)"
style="margin-right: 10rpx;" v-if="remain_small_park>0">
<view class="parkbox-item-status" v-if="currentPark==1">
<u-icon name="checkmark" color="#fff" size="20rpx"></u-icon>
</view>
<view class="flex-row align-center">
<text class="iconfont icon-tingchechang1"
style="font-size: 28rpx;"></text><text>小车:{{remain_small_park}}</text>
</view>
<text style="font-size: 24rpx;color: #828282;">充电桩空闲0</text>
</view>
<view class="parkbox-item flex-row align-center" style=""
@click="handleSelectPark(3)" :class="(currentPark==3?'parkbox-item-on':'')"
v-if="remain_special_park>0">
<view class="parkbox-item-status" v-if="currentPark==3">
<u-icon name="checkmark" color="#fff" size="20rpx"></u-icon>
</view>
<text class="iconfont icon-tingchechang1" style="font-size: 28rpx;"></text>
<view>
<text>残疾人车位:{{remain_special_park}}</text>
</view>
</view>
<view class="parkbox-item flex-row align-center" style=""
v-if="remain_special_park<=0&&remain_big_park<=0&&remain_small_park<=0">
<text class="iconfont icon-tingchechang1" style="font-size: 28rpx;"></text>
<view>
<text>暂无可选停车位</text>
</view>
</view>
</view>
</view>
<view class="activityBox-row" style="margin-top: 20rpx;color: #EF9525;"
@click="showSelectorder=true">
<text>选择信息:{{selectInfo.info||"暂未选择"}}</text>
</view>
</view>
</view>
<view class="footer">
<u-button type="primary" :disabled="btnDisabled" @click="tobook">预约</u-button>
</view>
</map>
</view>
</view>
<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="(item.checked?'#EF9525':'#828282')">
</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="(item.checked?'#EF9525':'#828282')">
</u-icon>
<view class="box-tiptxt" style="margin-left: 10rpx;">
活动时间{{item.activity.start_time}}
报名数量{{item.total}}</text>
</view>
</view>
</block>
</view>
<u-button type="primary" @click="handleConfirmOrder"></u-button>
</view>
</view>
</u-popup>
</view>
</template>
<script>
export default {
data() {
return {
latitude: 31.299893,
longitude: 120.626022,
userlatitude: 31.299893,
userlongitude: 120.626022,
distance: 0,
info: {},
covers: [],
currentPark: 0,
btnDisabled: false,
showSelectorder: false,
listOrder: [],
listActivtyOrder: [],
selectInfo: {
info: "",
orderType: 1,
orderid: 0,
userlatitude: 31.299893,
userlongitude: 120.626022
},
remain_big_park: 0,
remain_small_park: 0,
remain_special_park: 0
}
},
onLoad() {
var that = this;
wx.getLocation({
success(res) {
that.userlatitude = res.latitude;
that.userlongitude = res.longitude;
that.loadOrder(function(res) {
that.loadactivityOrder(function(r) {
if (res.length + r.length == 0) {
that.util.toast("您需要预约参观或者预约活动才可以停车");
that.btnDisabled = true;
} else {
that.btnDisabled = false;
that.showSelectorder = true;
}
})
});
}
})
},
methods: {
handleConfirmOrder() {
if (this.selectInfo.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.info = this.$moment(this.listOrder[index].date).format("MM月DD日") + " " + this
.listOrder[
index].time
this.selectInfo.time = this.$moment(this.listOrder[index].date + " " + this.listOrder[
index].time.split("-")[0]).format("YYYY-MM-DD HH:mm:ss");
this.selectInfo.orderid = this.orderid = this.listOrder[index].id;
} else {
this.listActivtyOrder[index].checked = true
this.selectInfo.info = this.$moment(this.listActivtyOrder[index].activity.start_time).format(
"MM月DD日 HH:mm")
this.selectInfo.time = this.$moment(this.listActivtyOrder[index].activity.start_time).format(
"YYYY-MM-DD HH:mm:ss");
this.selectInfo.orderid = this.orderid = this.listActivtyOrder[index].id;
}
this.orderType = type;
this.selectInfo.orderType = type;
this.loadInfo();
},
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)
}
})
},
handleSelectPark(type) {
this.currentPark = type;
},
openlocation() {
uni.openLocation({
latitude: this.info.latitude,
longitude: this.info.longitude,
name: this.info.name,
address: this.info.address
});
},
loadInfo() {
var that = this;
this.util.request({
api: '/api/mobile/carpark/show',
data: {
date: that.selectInfo.time,
latitude: that.userlatitude,
longitude: that.userlongitude
},
utilSuccess: function(res) {
that.info = res.detail;
that.distance = res.distance;
that.info.latitude = parseFloat(res.detail.latitude);
that.info.longitude = parseFloat(res.detail.longitude);
that.remain_big_park = res.remain_big_park;
that.remain_small_park = res.remain_small_park;
that.remain_special_park = res.remain_special_park;
var mod = {
latitude: that.info.latitude,
longitude: that.info.longitude,
width: 70,
height: 70,
iconPath: '/static/img/location.png',
id: 1
}
that.covers.push(mod);
},
utilFail: function(res) {
}
})
},
handleBook() {
uni.$u.throttle(this.tobook, 500)
},
tobook() {
if (this.selectInfo.orderid === 0) {
this.util.toast("请选择预约的活动或者预约的参观");
return false;
} else if (this.currentPark === 0) {
this.util.toast("请选择停车位");
return false;
} else {
var json = escape(JSON.stringify(this.selectInfo));
uni.navigateTo({
url: "book?bookinfo=" + json + "&id=" + this.info.id + "&currentPark=" + this.currentPark
})
}
}
}
}
</script>
<style>
@import url("@/static/css/activitybox.css");
.parkbox-item-status {
position: absolute;
right: 0;
top: 0;
background: #EF9525;
border-top-right-radius: 5rpx;
border-bottom-left-radius: 5rpx;
font-size: 20rpx;
color: #828282;
padding: 7rpx;
}
.parkbox-title {
margin-bottom: 40rpx;
margin-top: 40rpx;
font-size: 26rpx;
color: #4E4E4E;
}
.parkbox-item-on {
background: #FCF6E3 !important;
border: 2rpx solid #EF9525 !important;
}
.parkbox-item {
border: 2rpx solid #F7F6F4;
background: #F7F6F4;
border-radius: 5rpx;
padding: 28rpx 0rpx;
position: relative;
flex: 1;
display: flex;
justify-content: center;
font-size: 26rpx;
color: #EF9525;
box-sizing: border-box;
}
.book-box {
height: 50%;
position: absolute;
bottom: 108rpx;
left: 0;
background: #FFFFFF;
border-top-left-radius: 16rpx;
border-top-right-radius: 16rpx;
margin: 0rpx 2%;
width: 96%;
}
.box-tiptxt {
font-size: 30rpx;
}
.footer {
position: fixed;
bottom: 0;
left: 0;
width: 100%;
height: 108rpx;
box-sizing: border-box;
background: #FFFFFF;
box-shadow: 2rpx 3rpx 10rpx 0rpx rgba(107, 94, 77, 0.3);
padding: 21rpx 25rpx;
}
</style>