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

4 years ago
<template>
<view>
2 months ago
<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>
4 years ago
<view class="activityBox">
<view class="activityBox-top">
4 years ago
<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>
4 years ago
</swiper>
4 years ago
</view>
<view class="activityBox-content flex-col">
<view class="activityBox-row flex-row justify-between">
4 years ago
<text class="activityBox-title">{{isUnde(list.name)}}</text>
4 years ago
</view>
<view class="activityBox-row">
<text class="icon-huodong iconfont"></text>
4 years ago
<text>活动地址{{isUnde(list.address)}}</text>
4 years ago
</view>
4 years ago
<view class="activityBox-row flex-row align-center" @click="tothere">
4 years ago
<text class="icon-ditu-dibiao iconfont"></text>
4 years ago
<text>距离{{isUnde(list.distance)}}km</text>
4 years ago
<view class="tomap">
<text class="icon-daohang1 iconfont" style="margin-right: 0;"></text>
</view>
4 years ago
</view>
4 years ago
</view>
3 years ago
</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">
3 years ago
<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>
2 years ago
<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>
3 years ago
</view>
<view class="book-box-row-timeitem-status" v-if="item.checked">
<u-icon name="checkmark" color="#fff" size="20rpx"></u-icon>
3 years ago
</view>
3 years ago
</view>
3 years ago
</view>
</view>
4 years ago
</view>
<view class="infoBox">
<view class="infoBox-title">
<text class="infoBox-titletxt">活动详情</text>
</view>
2 years ago
<view class="infoBox-content">
2 years ago
<u-parse v-if='showContent' :content="list.content?list.content:' '"/>
4 years ago
</view>
</view>
3 years ago
</view>
2 years ago
<view class="infofooter" v-if="list.orders_total==0||(list.orders_total>0&&list.total!=list.orders_total)&&isCanBook">
3 years ago
<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">
2 years ago
<u-radio activeColor="#cf995a" v-for="(item, index) in numbers" :key="index"
3 years ago
:label="item.label" :disabled="item.disabled" :name="item.id">
</u-radio>
</u-radio-group>
</view>
</view>
</view>
</u-popup>
2 years ago
<view class="flex-row" v-if="list.status==1">
3 years ago
<view style="margin-right: 14rpx;flex: 1;" v-if="list.join_type==1||list.join_type==0">
4 years ago
<u-button type="primary" @click="tobook('team')"></u-button>
</view>
3 years ago
<view style="margin-left: 14rpx;flex: 1;" v-if="list.join_type==2||list.join_type==0">
4 years ago
<u-button type="primary" @click="tobook('user')"></u-button>
</view>
</view>
3 years ago
4 years ago
</view>
</view>
</template>
2 years ago
<script>
import uParse from '@/components/gaoyia-parse/parse.vue'
export default {
components: {
uParse
},
4 years ago
data() {
return {
4 years ago
id: "",
latitude: "",
longitude: "",
list: {},
4 years ago
topSwiperIndex: 0,
3 years ago
chooseNum: "",
numbers: [],
3 years ago
showNumbers: false,
teamType: "",
2 years ago
activity_number_id: "",
isCanBook:false,
2 months ago
showContent:false,
showDisabled:false
4 years ago
}
4 years ago
},
onLoad(options) {
var that = this;
2 years ago
that.id = options.id;
4 years ago
2 years ago
},
onShow(){
var that = this;
that.numbers=[];
wx.getLocation({
success(res) {
console.log(res)
that.latitude = res.latitude;
that.longitude = res.longitude;
that.loadActiveInfo()
}
})
4 years ago
},
2 years ago
// 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
3 years ago
},
4 years ago
methods: {
3 years ago
timeFormat(val, format) {
return this.$moment(val).format(format)
},
4 years ago
tothere() {
uni.openLocation({
latitude: parseFloat(this.list.latitude),
longitude: parseFloat(this.list.longitude),
name: this.list.name,
address: this.list.address
})
3 years ago
},
closeNum() {
this.showNumbers = false
this.chooseNum = ""
},
3 years ago
numChange(item) {
if (item.disabled) {
2 months ago
// this.util.alert("您选择的场次不可预约!");
// this.isCanBook = false
this.showDisabled = true
3 years ago
return;
2 years ago
};
3 years ago
var _numbers = this.numbers;
for (var mod of _numbers) {
mod.checked = false;
2 years ago
}
this.isCanBook = true
3 years ago
item.checked = true;
this.activity_number_id = item.id;
this.numbers = _numbers;
this.$forceUpdate()
4 years ago
},
4 years ago
tobook(type) {
3 years ago
// 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
3 years ago
})
4 years ago
},
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) {
2 years ago
// res.isCanBook = that.$moment(nt).isBefore(res.end_plan);
that.list = res;
that.showContent = true
3 years ago
let numberArr = []
3 years ago
let nowTime = that.getNowTime();
2 years ago
var i = 0;
var chkMod=null
3 years ago
for (var m of res.numbers) {
3 years ago
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)) {
3 years ago
m.disabled = true
}
if (m.has_total == m.total && m.total != 0) {
m.disabled = true
2 years ago
}
if(res.form==2&&parseInt(m.has_total)>0){
m.disabled = true
3 years ago
}
3 years ago
numberArr.push(m);
if (!m.disabled) {
2 years ago
m.checked = i == 0;
2 years ago
if(chkMod===null){chkMod=m;}
i++;
3 years ago
}
3 years ago
}
2 years ago
if (chkMod){
that.activity_number_id = chkMod.id
that.isCanBook = true
}
3 years ago
that.numbers = numberArr
4 years ago
wx.setStorage({
key: 'activityinfo',
data: res,
success: () => {
console.log('存储成功');
}
})
},
utilFail: function(res) {
}
4 years ago
})
3 years ago
},
// 比较时间
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, '/'))))
4 years ago
},
topSwiperTab(e) {
var that = this;
this.topSwiperIndex = Number(e.target.current);
},
isUnde(val) {
if (val) {
return val
} else {
return ""
}
3 years ago
},
getHm(val) {
if (val) {
3 years ago
return this.$moment(val).format("HH:mm")
3 years ago
} else return "";
4 years ago
}
4 years ago
}
}
</script>
<style>
@import url("@/static/css/activitybox.css");
page {
background-color: #f7f6f4;
}
.infoBox {
box-sizing: border-box;
padding: 40rpx 0rpx;
3 years ago
background: #FFFFFF;
3 years ago
margin-bottom: 40rpx;
4 years ago
}
2 years ago
.activityBox-title{
font-size: 32rpx;
2 years ago
font-weight:bold;
2 years ago
}
.activityBox-row{
font-size: 28rpx;
}
4 years ago
.infoBox-title {
2 years ago
border-left: 3px solid #cf995a;
font-size: 32rpx;
4 years ago
}
.infoBox-titletxt {
3 years ago
font-size: 30rpx;
4 years ago
color: #4E4E4E;
margin-left: 21rpx;
}
2 years ago
/* .infoBox-content {
4 years ago
padding: 37rpx 26rpx;
box-sizing: border-box;
2 years ago
font-size: 30rpx;
3 years ago
color: #828282;
3 years ago
margin-bottom: 100rpx;
2 years ago
} */
4 years ago
.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;
3 years ago
/* background: linear-gradient(0deg, #ffffff 85%, #E4C8A2); */
}
3 years ago
.mpopup {
margin-top: 0rpx;
min-height: 200rpx
}
.mpopup-title {
padding: 20rpx 0
3 years ago
}
3 years ago
3 years ago
.numbers {
/* min-height: 300rpx; */
3 years ago
padding: 31rpx 24rpx;
padding-bottom: 13rpx;
3 years ago
}
.numbers .u-radio {
3 years ago
margin-bottom: 10rpx
4 years ago
}
swiper {
height: 333rpx
}
swiper image {
width: 100%;
height: 333rpx;
}
.colortext {
color: #D98012
4 years ago
}
3 years ago
.numbersBox {
border: #F7F6F4 1px solid;
border-radius: 5px;
background-color: #F7F6F4;
padding: 10px;
margin-bottom: 10px;
}
.numbersBoxActive {
border: #D98012 1px solid;
3 years ago
background-color: #FCF6E3;
3 years ago
position: relative;
3 years ago
}
.book-box-row-timeitem-status {
position: absolute;
right: 0;
top: 0;
2 years ago
background: #cf995a;
3 years ago
border-top-right-radius: 5rpx;
border-bottom-left-radius: 5rpx;
font-size: 20rpx;
color: #828282;
padding: 7rpx;
2 years ago
}
2 years ago
.infoBox-content{
font-size: 28rpx;
2 years ago
padding:0 60rpx;
background: #fff;
padding-top: 30rpx;
/* border-radius: 30rpx 30rpx 0 0; */
padding-bottom:180rpx;
2 years ago
}
2 years ago
.infoBox-content img{
width:100%;
margin:10rpx 0;
2 years ago
2 years ago
}
.wxParse{
line-height: 2.3;
3 years ago
}
3 years ago
</style>