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.

447 lines
11 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="">
<u-popup :show="showDisabled" mode="center" @close="showDisabled=false" :round="10">
<view class="mpopup">
<view class="mpopup-title">
提示
</view>
<view class="mpopup-content" style="padding: 40rpx 20rpx;">
<view style="text-align: center;font-size: 32rpx;">您选择的场次不可预约</view>
</view>
</view>
</u-popup>
<view class="activityBox">
<view class="activityBox-top">
<swiper autoplay="true" :interval="4000" :duration="1000" :indicator-dots="true"
indicator-active-color="rgba(255, 255, 255, 0.7)" indicator-color="rgba(239, 149, 37, 1)"
:current="topSwiperIndex" @change="topSwiperTab">
<swiper-item v-for="(item,index) in list.banners" :key="index">
<view class="swiper-item">
<image :src="item.upload.url" mode="aspectFill"></image>
</view>
</swiper-item>
</swiper>
</view>
<view class="activityBox-content flex-col">
<view class="activityBox-row flex-row justify-between">
<text class="activityBox-title">{{isUnde(list.name)}}</text>
</view>
<view class="activityBox-row">
<text class="icon-huodong iconfont"></text>
<text>活动地址{{isUnde(list.address)}}</text>
</view>
<view class="activityBox-row flex-row align-center" @click="tothere">
<text class="icon-ditu-dibiao iconfont"></text>
<text>距离{{isUnde(list.distance)}}km</text>
<view class="tomap">
<text class="icon-daohang1 iconfont" style="margin-right: 0;"></text>
</view>
</view>
</view>
</view>
<view class="infoBox" style="padding-bottom:0;margin-bottom: 26rpx;">
<view class="activityBox-row">
<view class="infoBox-title">
<text class="infoBox-titletxt">活动场次</text>
</view>
<view class="numbers">
<view v-for="(item, index) in numbers" :key="index" @click="numChange(item)" class="numbersBox"
:class="{numbersBoxActive:item.checked}">
<view style="padding-left:50rpx;margin-bottom:10rpx">
<text style="margin-right:20rpx;font-size: 28rpx;font-weight: bold;">
{{item.label}}
</text>
</view>
<view style="padding-left:50rpx;margin-bottom:10rpx">
<text style="margin-right:20rpx">
活动时间:{{item.time}}
</text>
</view>
<view style="padding-left:50rpx;margin-bottom:10rpx">
<text v-if="list.form!=2">
限制人数:{{item.total==0?'不限':item.total}}
</text>
<text v-else>
{{item.has_total>0?"预约已满":""}}
</text>
<text style="margin-left:20rpx">
已报名数:{{item.has_total}}
</text>
</view>
<view class="book-box-row-timeitem-status" v-if="item.checked">
<u-icon name="checkmark" color="#fff" size="20rpx"></u-icon>
</view>
</view>
</view>
</view>
</view>
<view class="infoBox">
<view class="infoBox-title">
<text class="infoBox-titletxt">活动详情</text>
</view>
<view class="infoBox-content">
<u-parse v-if='showContent' :content="list.content?list.content:' '"/>
</view>
</view>
</view>
<view class="infofooter" v-if="list.orders_total==0||(list.orders_total>0&&list.total!=list.orders_total)&&isCanBook">
<u-popup :show="showNumbers" mode="bottom" @close="closeNum" :round="10" closeable>
<view class="mpopup">
<view class="mpopup-title">
场次选择
</view>
<view class="mpopup-content">
<view class="numbers">
<u-radio-group placement="column" v-model="chooseNum" @change="numChange">
<u-radio activeColor="#cf995a" v-for="(item, index) in numbers" :key="index"
:label="item.label" :disabled="item.disabled" :name="item.id">
</u-radio>
</u-radio-group>
</view>
</view>
</view>
</u-popup>
<view class="flex-row" v-if="list.status==1">
<view style="margin-right: 14rpx;flex: 1;" v-if="list.join_type==1||list.join_type==0">
<u-button type="primary" @click="tobook('team')">团体预约</u-button>
</view>
<view style="margin-left: 14rpx;flex: 1;" v-if="list.join_type==2||list.join_type==0">
<u-button type="primary" @click="tobook('user')"></u-button>
</view>
</view>
</view>
</view>
</template>
<script>
import uParse from '@/components/gaoyia-parse/parse.vue'
export default {
components: {
uParse
},
data() {
return {
id: "",
latitude: "",
longitude: "",
list: {},
topSwiperIndex: 0,
chooseNum: "",
numbers: [],
showNumbers: false,
teamType: "",
activity_number_id: "",
isCanBook:false,
showContent:false,
showDisabled:false
}
},
onLoad(options) {
var that = this;
that.id = options.id;
},
onShow(){
var that = this;
that.numbers=[];
wx.getLocation({
success(res) {
console.log(res)
that.latitude = res.latitude;
that.longitude = res.longitude;
that.loadActiveInfo()
}
})
},
// onShareAppMessage() {
// return {
// title: this.list.name,
// path: "/packages/activity/info?id=" + this.list.id,
// imageUrl: this.list.cover_upload.url
// }
// },
onShareAppMessage() {
return this.util.shareInfo
},
onShareTimeline(){
return this.util.shareInfo
},
methods: {
timeFormat(val, format) {
return this.$moment(val).format(format)
},
tothere() {
uni.openLocation({
latitude: parseFloat(this.list.latitude),
longitude: parseFloat(this.list.longitude),
name: this.list.name,
address: this.list.address
})
},
closeNum() {
this.showNumbers = false
this.chooseNum = ""
},
numChange(item) {
if (item.disabled) {
// this.util.alert("您选择的场次不可预约!");
// this.isCanBook = false
this.showDisabled = true
return;
};
var _numbers = this.numbers;
for (var mod of _numbers) {
mod.checked = false;
}
this.isCanBook = true
item.checked = true;
this.activity_number_id = item.id;
this.numbers = _numbers;
this.$forceUpdate()
},
tobook(type) {
// this.showNumbers = true
this.teamType = type;
if (this.util.isNull(this.activity_number_id)) {
uni.showToast({
icon: "none",
title: "请选择活动场次"
})
return false;
}
uni.navigateTo({
url: "book?type=" + this.teamType + "&activity_id=" + this.id + "&activity_number_id=" + this
.activity_number_id
})
},
loadActiveInfo() {
var that = this;
var nt = new Date();
this.util.request({
api: '/api/mobile/activity/show',
data: {
id: that.id,
latitude: that.latitude,
longitude: that.longitude
},
utilSuccess: function(res) {
// res.isCanBook = that.$moment(nt).isBefore(res.end_plan);
that.list = res;
that.showContent = true
let numberArr = []
let nowTime = that.getNowTime();
var i = 0;
var chkMod=null
for (var m of res.numbers) {
m.label = m.name;
m.time = that.timeFormat(m.start_time, "yyyy年MM月DD日") + " " + that
.getHm(m.start_time) + "-" + that.getHm(m.end_time);
if (that.compareDate(nowTime, m
.end_plan)) {
m.disabled = true
}
if (m.has_total == m.total && m.total != 0) {
m.disabled = true
}
if(res.form==2&&parseInt(m.has_total)>0){
m.disabled = true
}
numberArr.push(m);
if (!m.disabled) {
m.checked = i == 0;
if(chkMod===null){chkMod=m;}
i++;
}
}
if (chkMod){
that.activity_number_id = chkMod.id
that.isCanBook = true
}
that.numbers = numberArr
wx.setStorage({
key: 'activityinfo',
data: res,
success: () => {
console.log('存储成功');
}
})
},
utilFail: function(res) {
}
})
},
// 比较时间
getNowTime() {
const date = new Date();
let year = date.getFullYear();
let month = date.getMonth() + 1;
let day = date.getDate();
let hours = date.getHours()
let minutes = date.getMinutes()
let seconds = date.getSeconds()
month = month > 9 ? month : '0' + month;
day = day > 9 ? day : '0' + day;
return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
},
compareDate(d1, d2) {
let reg = new RegExp('-', 'g')
return ((new Date(d1.replace(reg, '/'))) > (new Date(d2.replace(reg, '/'))))
},
topSwiperTab(e) {
var that = this;
this.topSwiperIndex = Number(e.target.current);
},
isUnde(val) {
if (val) {
return val
} else {
return ""
}
},
getHm(val) {
if (val) {
return this.$moment(val).format("HH:mm")
} else return "";
}
}
}
</script>
<style>
@import url("@/static/css/activitybox.css");
page {
background-color: #f7f6f4;
}
.infoBox {
box-sizing: border-box;
padding: 40rpx 0rpx;
background: #FFFFFF;
margin-bottom: 40rpx;
}
.activityBox-title{
font-size: 32rpx;
font-weight:bold;
}
.activityBox-row{
font-size: 28rpx;
}
.infoBox-title {
border-left: 3px solid #cf995a;
font-size: 32rpx;
}
.infoBox-titletxt {
font-size: 30rpx;
color: #4E4E4E;
margin-left: 21rpx;
}
/* .infoBox-content {
padding: 37rpx 26rpx;
box-sizing: border-box;
font-size: 30rpx;
color: #828282;
margin-bottom: 100rpx;
} */
.infofooter {
position: fixed;
width: 100%;
left: 0;
bottom: 0;
background: #FFFFFF;
box-shadow: 2px 3px 10px 0px rgba(107, 94, 77, 0.3);
padding: 22rpx 25rpx;
box-sizing: border-box;
/* background: linear-gradient(0deg, #ffffff 85%, #E4C8A2); */
}
.mpopup {
margin-top: 0rpx;
min-height: 200rpx
}
.mpopup-title {
padding: 20rpx 0
}
.numbers {
/* min-height: 300rpx; */
padding: 31rpx 24rpx;
padding-bottom: 13rpx;
}
.numbers .u-radio {
margin-bottom: 10rpx
}
swiper {
height: 333rpx
}
swiper image {
width: 100%;
height: 333rpx;
}
.colortext {
color: #D98012
}
.numbersBox {
border: #F7F6F4 1px solid;
border-radius: 5px;
background-color: #F7F6F4;
padding: 10px;
margin-bottom: 10px;
}
.numbersBoxActive {
border: #D98012 1px solid;
background-color: #FCF6E3;
position: relative;
}
.book-box-row-timeitem-status {
position: absolute;
right: 0;
top: 0;
background: #cf995a;
border-top-right-radius: 5rpx;
border-bottom-left-radius: 5rpx;
font-size: 20rpx;
color: #828282;
padding: 7rpx;
}
.infoBox-content{
font-size: 28rpx;
padding:0 60rpx;
background: #fff;
padding-top: 30rpx;
/* border-radius: 30rpx 30rpx 0 0; */
padding-bottom:180rpx;
}
.infoBox-content img{
width:100%;
margin:10rpx 0;
}
.wxParse{
line-height: 2.3;
}
</style>