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.
 
 
 
 
 

349 lines
9.2 KiB

<template>
<view class="bg">
<view class="top-box" >
<view class="top-left">
<view class="text-overflow">{{ pInfo.title }}</view>
<view style="margin-top: 20rpx;">
<view class="left-subtitle" v-if="allSeldDate.length > 0">{{allSeldDate[seldDateIndex].date}} {{ShowDateDay(new Date(allSeldDate[seldDateIndex].date).getDay())}}</view>
<view class="left-subtitle" v-if="timesArr.length > 0">{{ timesArr[seldTimeIndex].start_time }}-{{ timesArr[seldTimeIndex].end_time }} 入园</view>
</view>
</view>
<view @click="showSkuPopup = true" v-if="this.sInfo.ticket_type != 2">修改 ></view>
</view>
<view class="num-box" v-for="(skuItem,skuIndex) in pInfo.specifications" :key="skuIndex">
<view style="display: flex;justify-content: space-between;align-items: center;">
<view class="left-title text-overflow">{{skuItem.title}}</view>
<view class="left-price">{{skuItem.price / 100}}</view>
<view class="num-right">
<view class="btn-num" v-if="!skuItem.originate_order_id && !skuItem.gp_id" :class="{no:skuItem.originate_order_id}" @click="delNumber(skuItem)" :style="{color: skuItem.buyNum > 1 ? '#fff': '', backgroundColor: skuItem.buyNum > 1 ? '#0B898E' : ''}">-</view>
<view class="num-span">{{ skuItem.buyNum }}</view>
<view class="btn-num" v-if="!skuItem.originate_order_id && !skuItem.gp_id" :class="{no:skuItem.originate_order_id}" @click="addNumber(skuItem)" style="color: #fff;background: #0B898E;">+</view>
</view>
</view>
<view class="num-subtitle text-overflow" v-if="skuItem.display_tags" @click="showNoticePopup = true">
<view class="num-span" v-for="(tagSku,tagSkuIndex) in skuItem.display_tags.split(',').slice(0, 2)" :key="tagSkuIndex">{{ tagSku }} |</view>
<view class="num-span">预订须知 ></view>
</view>
</view>
<view class="people-box" >
<view class="people-box-sku" v-for="(skuItem,skuIndex) in pInfo.specifications.filter(v=>v.buyNum>=1)" :key="skuIndex">
<view>{{skuItem.title}}</view>
<view v-for="(person,personIndex) in skuItem.selPeople" :key="personIndex">
<view v-if="person.id">123</view>
<view v-else>点击添加出行人信息</view>
</view>
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
pInfo: {specifications: []}, // 当前商品
sInfo: {sku_model: {}}, // 当前门票
minSeldDate: new Date().Format('yyyy-MM-dd'),
maxSeldDate: new Date((new Date()).getFullYear(), (new Date()).getMonth() + 3, 0).Format('yyyy-MM-dd'),
calendarParam: {
stratDate:'',endDate: '', selected: []
},
allSeldDate: [],
seldDateIndex: 0,
timesArr: [],
seldTimeIndex: 0,
buyNum: 0
}
},
onLoad(options) {
// this.getList();
uni.$on("updateDataByConnect",this.getDataByConnect)
},
onShow() {
this.handlePageData()
},
onUnload () {
uni.$off("updateDataByConnect",this.getDataByConnect)
},
methods: {
getDataByConnect(data) {
if (data.msgType == "updateTicketBookingOrder") {
uni.setStorageSync('tempData', JSON.stringify(data.data));
// this.pInfo = data.data.pInfo
// this.sInfo = data.data.sInfo
// this.minSeldDate=data.data.minSeldDate
// this.maxSeldDate = data.data.maxSeldDate
// this.calendarParam = data.data.calendarParam
// this.allSeldDate = data.data.allSeldDate
// this.seldDateIndex = data.data.seldDateIndex
// this.timesArr = data.data.timesArr
// this.seldTimeIndex = data.data.seldTimeIndex
}
},
handlePageData () {
let data = uni.getStorageSync('tempData');
try{
data = JSON.parse(data)
this.pInfo = data.pInfo
this.sInfo = data.sInfo
this.minSeldDate=data.minSeldDate
this.maxSeldDate = data.maxSeldDate
this.calendarParam = data.calendarParam
this.allSeldDate = data.allSeldDate
this.seldDateIndex = data.seldDateIndex
this.timesArr = data.timesArr
this.seldTimeIndex = data.seldTimeIndex
} catch(e){
console.log(e)
}
},
// 减少数量
delNumber(skuItem) {
if (skuItem.buyNum <= 0) {
return
}
// if(this.buyNum == this.seldPeople.length) {
// this.allSeldPeople.forEach(item => {
// if(item.id == this.seldPeople[this.seldPeople.length -1].id) {
// item.is_seld = false
// item.selected = false
// }
// })
// this.seldPeople.pop()
// }
skuItem.buyNum -= 1
skuItem.selPeople.pop()
// this.removeSeldCoupon()
},
// 增加数量
addNumber(skuItem) {
skuItem.buyNum += 1
// if(this.max_num && this.buyNum > this.max_num){
// this.buyNum = this.max_num
// this.$toast("本产品单笔限购"+this.max_num+"份")
// }
if (Array.isArray(skuItem.selPeople)) {
skuItem.selPeople.push({})
} else {
skuItem.selPeople = [{}]
}
},
// 选择时段
changeTime(item, index) {
if(item.stock_number > 0) {
this.seldTimeIndex = index
}
},
// 选择日期
clickTab(item, index) {
this.seldDateIndex = index
this.getTimes()
},
confirmCalendar (val) {
let index = this.allSeldDate.find(v=>v.date == val.fulldate)
if (index) {
this.clickTab({},index)
}
},
// 获取价格日历
getDays() {
let that = this
that.Post({
url: '',
start_date: that.minSeldDate,
end_date: that.maxSeldDate,
sku_id: that.skuInfo.id
},'https://api.cloud.sz-trip.com/api/product/product_date_price').then(function (result) {
let res = result.data
if (res) {
that.allSeldDate = res
// 初始化选择项目
for (let i = 0; i < that.allSeldDate.length; i++) {
if (that.allSeldDate[i].stock > 0) {
that.seldDateIndex = i
break;
}
// that.allSeldDate[i].price = that.sInfo.price
}
that.openPop()
that.getTimes()
}
})
},
getTimes() {
let that = this
// 判断是否是分时的,不是就不需要去请求了的
if (!that.skuInfo.sku_model.is_time_stock) {
return
}
if (that.seldDateIndex < 0) {
return;
}
that.seldTimeIndex = -1
that.Post({
url: '',
date: that.allSeldDate[that.seldDateIndex].date,
sku_id: that.allSeldDate[that.seldDateIndex].sku_id ? that.allSeldDate[that.seldDateIndex].sku_id : that.skuInfo.id
},'https://api.cloud.sz-trip.com/api/product/product_timestock_price').then(function (result) {
let res = result.data
if (res) {
that.timesArr = res
for (let i = 0; i < that.timesArr.length; i++) {
if (that.timesArr[i].stock_number > 0) {
that.seldTimeIndex = i
break;
}
}
}
})
},
}
}
</script>
<style scoped lang="scss">
*{
box-sizing: border-box;
}
.bg{
min-height: 100vh;
padding: 20rpx;
background-color: rgb(247, 247, 247);
}
.top-box {
width: 100%;
background: #FFFFFF;
border-radius: 18rpx;
padding: 20rpx;
display: flex;
justify-content: space-between;
align-items: center;
font-weight: 500;
font-size: 36rpx;
color: #0B898E;
.top-left {
display: flex;
flex-direction: column;
justify-content: space-between;
font-weight: bold;
font-size: 45rpx;
color: #000000;
flex: 1;
width: 1rpx;
.left-subtitle {
font-weight: 400;
font-size: 36rpx;
color: #666666;
}
}
}
.num-box {
width: 100%;
// height: 3.22rem;
background: #FFFFFF;
border-radius: 18rpx;
display: flex;
justify-content: space-between;
flex-direction: column;
margin: 20rpx 0;
padding: 20rpx;
.num-left {
width: 100%;
// padding: .5rem 0 .6rem .32rem;
box-sizing: border-box;
display: flex;
flex-direction: column;
justify-content: space-between;
font-weight: 400;
font-size: 27rpx;
color: #666666;
.left-title {
font-weight: bold;
font-size: 45rpx;
color: #000000;
width: 450rpx;
}
.left-price {
font-weight: 500;
font-size: 45rpx;
color: #D62828;
}
.left-price::before {
font-size: 27rpx;
content: '¥';
}
}
.num-subtitle {
font-weight: 400;
font-size: 27rpx;
color: #0B898E;
width: 100%;
display: flex;
}
.num-right {
font-weight: 500;
font-size: 36rpx;
color: #000000;
display: flex;
text-align: center;
.num-span {
width: 90rpx;
line-height: 63rpx;
}
.btn-num {
width: 63rpx;
height: 63rpx;
line-height: 63rpx;
background: rgba(135,205,147,0);
border-radius: 50%;
border: 1px solid #999999;
font-weight: 500;
font-size: 45rpx;
color: #999999;
}
}
}
.people-box{
width: 100%;
// height: 3.22rem;
.people-box-sku{
width: 100%;
background: #FFFFFF;
border-radius: 18rpx;
// display: flex;
// justify-content: space-between;
margin: 20rpx 0;
padding: 20rpx;
}
}
</style>