Commit 803fa637 authored by 潘永坪's avatar 潘永坪

组合订单开发

parent 2fc01097
......@@ -309,6 +309,14 @@
"enablePullDownRefresh": false
}
},
{
"path" : "scenicCombiOrder/scenicCombiOrder",
"style" :
{
"navigationBarTitleText" : "",
"enablePullDownRefresh" : false
}
}
]
},
......
......@@ -312,6 +312,8 @@ export default {
this.companyId=this.$commonjs.getCompanyId(option)
this.channelType = option.channelType || 0
this.merchantId = option.merchantId || ''
},
onShow() {
let token = uni.getStorageSync('token')
if (token) {
uni.getLocation({
......@@ -580,7 +582,7 @@ export default {
})
let query ='?productIdList=' + JSON.stringify(productIdList) + '&groupId=' + this.groupId + '&groupChannelId=' + this.groupChannelId + '&orderSource=3'
uni.navigateTo({
url: '/pages/scenic/scenicOrder/scenicOrder' + query
url: '/pages/scenic/scenicCombiOrder/scenicCombiOrder' + query
})
}
},
......
<template>
<view class="orderBox">
<view class="head"> </view>
<view class="middle">
<view class="middle" v-for="(item,Index) in productList" :key='item.id'>
<view class="middle-top">
<!-- --------------------------------------------产品信息部分------------------------------------- -->
<view class="middle-Product">
<view class="merchantName">
<text class="title-text">
{{ productIfo.merchantName || '' }}
{{ item.merchantName || '' }}
</text>
<text>
{{ productIfo.name || '' }}
{{ item.name || '' }}
</text>
</view>
<view @click="showBuyKnow()" class="buyKnow">
<view @click="showBuyKnow(index)" class="buyKnow">
<view>
<text v-if="productIfo.backChangeRule == 0">不可退换</text>
<text v-if="productIfo.backChangeRule == 1">可退</text>
<text v-if="productIfo.backChangeRule == 2">随时可退</text>
<text v-if="productIfo.isFetch == 1">无需取号</text>
<text v-if="item.backChangeRule == 0">不可退换</text>
<text v-if="item.backChangeRule == 1">可退</text>
<text v-if="item.backChangeRule == 2">随时可退</text>
<text v-if="item.isFetch == 1">无需取号</text>
</view>
<view>
购买须知
......@@ -28,11 +28,11 @@
</view>
</view>
<!--需要排队并且站点数大于1-->
<view class="middle-place" @click="openArea()" v-if="productIfo.isFetch == 1 && productIfo.productAreaList.length > 1 && showOpenArea">
<view class="middle-place" @click="openArea(index)" v-if="item.isFetch ==1&& item.productAreaList.length >1&&item.areaUp">
<view> 出发站点 </view>
<view>
{{ areaObj.areaName || '请选择站点' }}
{{ item.areaObj.areaName || '请选择站点' }}
</view>
<view>
......@@ -40,7 +40,7 @@
</view>
</view>
<!--需要排队并且为一个站点-->
<!-- <view class="middle-place" v-if="productIfo.isFetch == 1 && productIfo.productAreaList.length == 1 && showOpenArea" @click="getSortInfor()">
<!-- <view class="middle-place" v-if="item.isFetch == 1 && item.productAreaList.length == 1 &&item.areaUp" @click="getSortInfor()">
<view> 获取排队信息 </view>
<view>
......@@ -55,17 +55,17 @@
<view class="middle-Date">
<view class="title-text">游玩日期</view>
<view class="middle-Datelist">
<scroll-view class="date-content" scroll-x="true" :scroll-left="dateScroll" v-if="dateList.length > 0">
<view class="date-list" v-for="(item, index) of dateList" :class="{ on: active == index }" @click="dateChoose(index)" :key="index">
<view v-if="item.week">
<text v-if="item.week != '今天' && item.week != '明天' && item.week != '后天'"></text>
{{ item.week }}
<scroll-view class="date-content" scroll-x="true" :scroll-left="dateScroll" v-if="item.priceStockList&&item.priceStockList.length > 0">
<view class="date-list" v-for="(item2,index2) of item.priceStockList" :class="{ on: active == index2 }" @click="dateChoose(item,item2,index2)" :key="index2">
<view v-if="item2.week">
<text v-if="item2.week != '今天' && item2.week != '明天' && item2.week != '后天'"></text>
{{ item2.week }}
</view>
<view>
{{ item.startTime ? item.startTime.substr(5, 5) : '' }}
{{ item2.startTime ? item2.startTime.substr(5, 5) : '' }}
</view>
<view class="date-price">
¥<text style="font-weight: bold;">{{ item.sellingPrice }}</text>
¥<text style="font-weight: bold;">{{ item2.sellingPrice }}</text>
</view>
<view v-if="active == index" class="date-icon">
......@@ -74,7 +74,7 @@
</view>
</scroll-view>
<text v-else class="no-date"> 不可购买 </text>
<view class="dateMore" @click="showCalendar()">
<view class="dateMore" @click="showCalendar(index)">
<view class="date-more-content">
<view>更多</view>
<view>日期</view>
......@@ -84,29 +84,25 @@
</view>
</view>
<view class="middle-time" v-if="productIfo.productType == 3">
<view class="middle-time" v-if="item.productType == 3">
<view class="title-text"> 场次 </view>
<view class="middle-timelist">
<scroll-view class="time-content" scroll-x="true" :scroll-left="timeScroll" v-if="timeList.length> 0">
<view class="time-list" v-for="(item, index) of timeList" @click="chooseTime(index)" :class="{ on: timeActive == index }" :key="index">
<scroll-view class="time-content" scroll-x="true" :scroll-left="timeScroll" v-if="item.timeList.length> 0">
<view class="time-list" v-for="(item2,index2) of item.timeList" @click="chooseTime(item,item2,index2)" :class="{ on:item.timeActive == index2 }" :key="index2">
<view>
{{ item.startPlanTime ? item.startPlanTime.substr(0, 5) : '' }}
<text v-if="item.endPlanTime&&!item.saleOnlyShowFromDate">
-{{ item.endPlanTime ? item.endPlanTime.substr(0, 5) : '' }}
</text>
</view>
<view>
<text v-if="item.copyLast!='余票充足'&&item.copyLast!='售罄'">剩余:</text>
{{ item.last }}
{{ item2.startPlanTime ? item2.startPlanTime.substr(0, 5) : '' }}
<text v-if="item2.endPlanTime">-</text>
{{ item2.endPlanTime ? item2.endPlanTime.substr(0, 5) : '' }}
</view>
<view v-if="timeActive == index" class="date-icon">
<view> 剩余:{{ item2.last }} </view>
<view v-if="item.timeActive == index" class="date-icon">
<u-icon name="checkmark" color="#ffffff"></u-icon>
</view>
</view>
</scroll-view>
<text class="no-time" v-if="startDate && endDate && timeList.length == 0"> 该日票种已售罄,请选择其他日期 </text>
<text class="no-time" v-if="!startDate || !endDate"> 请先选游玩日期 </text>
<view class="timeMore" @click="showTime()">
<text class="no-time" v-if="item.timeList&&item.timeList.length==0"> 该日票种已售罄,请选择其他日期 </text>
<text class="no-time" v-if="!item.startDate || !item.endDate"> 请先选游玩日期 </text>
<view class="timeMore" @click="showTime(item,index)">
<view class="time-more-content">
<view>更多</view>
<view>场次</view>
......@@ -122,11 +118,11 @@
<view class="middle-Number">
<view class="title-text"> 购买数量 </view>
<view>
<u-number-box v-model="buyNum" @change='buyNumChange'>
<u-number-box v-model="item.buyNum" @change='buyNumChange'>
<view slot="minus" class="number-minus" >
<u-icon name="minus" color="#FFFFFF" size="32"></u-icon>
</view>
<text slot="input" class="number-input">{{buyNum}}</text>
<text slot="input" class="number-input">{{item.buyNum}}</text>
<view slot="plus" class="number-plus">
<u-icon name="plus" color="#FFFFFF" size="32"></u-icon>
</view>
......@@ -138,91 +134,48 @@
</view>
<!-- 有可用优惠券,并且未选中 -->
<template v-if="couponData.masterSlaveCouponList&&couponData.masterSlaveCouponList.length>0&&!chooseCouponObj">
<template v-if="item.couponData.masterSlaveCouponList&&item.couponData.masterSlaveCouponList.length>0&&!item.chooseCouponObj">
<view>
{{couponData.masterSlaveCouponList[0].couponName}}
{{item.couponData.masterSlaveCouponList[0].couponName}}
</view>
<view >
未使用优惠券
</view>
</template>
<!-- 有可用优惠券 -->
<template v-if="chooseCouponObj&&savedMoney>0">
<template v-if="item.chooseCouponObj&&item.savedMoney>0">
<view>
{{chooseCouponObj.couponName}}
{{item.chooseCouponObj.couponName}}
</view>
<view style="font-size: 32rpx;">
<text style="font-size: 24rpx;position: relative;top: 6rpx;">¥</text>
{{parseFloat(savedMoney.toFixed(2))}}
{{parseFloat(item.savedMoney.toFixed(2))}}
</view>
</template>
<!-- 可用优惠券条件-->
<template v-if="ableConpon">
<template v-if="item.ableConpon">
<view>
{{ableConpon.couponName}}
{{item.ableConpon.couponName}}
</view>
<view>
{{ableConpon.couponRule}}
{{item.ableConpon.couponRule}}
</view>
</template>
<u-icon name="arrow-right" color="#3688FF"></u-icon>
</view>
<!-- --------------------------------------------额外服务部分-------------------------------------------- -->
<view class="extraService" v-if="serviceList.length>0&&showErmai">
<checkbox-group @change="extraChange">
<view v-for="(item,index) of serviceList" :key="item.id">
<label>
<view>
<text>{{item.name}}</text>
<text style="font-size:20rpx;color: #666666;" v-if="item.deposit">(押金:¥{{item.deposit}})</text>
</view>
<view>
<text style="font-size: 24rpx;">¥</text>
<text style="font-size: 32rpx;font-weight: bold;">{{item.sellingPrice}}</text>
<checkbox class="blue" :value="JSON.stringify(item)" style="transform: scale(0.7);position: relative;left: 10rpx;" :checked="item.ifChoose" />
</view>
</label>
</view>
</checkbox-group>
</view>
<!-- -----------------------------------支付之后有额外服务,没有选额外服务的弹窗------------------------- -->
<u-popup :show="showExtraPop" :round="20" @close="showExtraPop = false" closeable>
<view class="extra-wrap">
<view style="font-weight: bold;font-size: 32rpx;">
云智能导览耳机
</view>
<view style="color: #666666;margin:40rpx 0;">
深度了解索道典故由来,周边攻略推荐
</view>
<view>
<text @click="extraNo()" class="btn" style="background: #fff;color: #333;border: 1px solid #c0c0c0;">
不需要
</text>
<text @click="extraYes()" class="btn" style="margin-left: 40rpx;">
需要
</text>
</view>
</view>
</u-popup>
</view>
<view class="middle-divider">
</view>
<!-- ---------------------------------------------游客信息-------------------------------------------- -->
<view class="middle-bottom" v-if="productIfo.tripTemplateFlag != 2">
<view class="middle-bottom" v-if="item.tripTemplateFlag != 2">
<view class="middle-visitor">
<view class="visitorTitle">
<text class="title-text"> 用户信息 </text>
<text>
需填<text class="title-bold">{{ contactNum }}</text>位出行人
需填<text class="title-bold">{{item.contactNum }}</text>位出行人
<!-- <text class="title-bold" v-if="contactNum - chooseContact.length > 0">,还需{{ contactNum - chooseContact.length }}位</text> -->
</text>
</view>
......@@ -251,40 +204,40 @@
<text style="margin-left:16rpx;">新增</text>
</view>
<view class="visitorEdit" v-show="chooseContact.length > 0">
<view class="edit-list" v-for="(item, index) of chooseContact" :key="item.id">
<view @click="delChooseContact(item, index)">
<view class="visitorEdit" v-show="item.chooseContact&&item.chooseContact.length > 0">
<view class="edit-list" v-for="(item2, index2) of item.chooseContact" :key="item2.id">
<view @click="delChooseContact(item2, index2)">
<u-icon name="close-circle" color="#3688ff" size="40"></u-icon>
</view>
<view>
{{ item.name }}
{{ item2.name }}
</view>
<view>
{{ item.credentialNumber ? item.credentialNumber.substr(0, 3) + '****' + item.credentialNumber.substr(14, 4) : '' }}
{{ item2.credentialNumber ? item2.credentialNumber.substr(0, 3) + '****' + item2.credentialNumber.substr(14, 4) : '' }}
</view>
<view @click="showEdit(item)">
<view @click="showEdit(item2)">
<u-icon name="edit-pen-fill" color="#3688ff" size="48"></u-icon>
</view>
</view>
</view>
</view>
<view class="middle-phone" v-if="productIfo.tripTemplateFlag != 2">
<view class="middle-phone" v-if="showTelephone">
<text> 联系电话: </text>
<input type="number" maxlength="11" placeholder="请输入联系电话" v-model.trim="ticketPhone" />
</view>
</view>
<!-- ---------------------------------------------产品押金部分---------------------------------------- -->
<view class="productDeposit" v-if="productIfo.deposit">
<view class="productDeposit" v-if="item.deposit">
<view>
{{ productIfo.name }}
{{ item.name }}
<text style="color: #FC6703;margin-left: 10rpx;">押金</text>
</view>
<view style="color: #FC6703"> {{ productIfo.deposit }}元 </view>
<view style="color: #FC6703"> {{ item.deposit }}元 </view>
</view>
</view>
......@@ -303,9 +256,8 @@
</view>
<view class="bottom-btn" :style="{ background: payBackground }">
<text v-if="productIfo.status == 1">已下架</text>
<text v-if="parseInt(maxBookNum) <1" style="background: #c0c0c0">暂无库存</text>
<text v-if="productIfo.status != 1 && parseInt(maxBookNum) >= 1" @click="goPay()">去支付</text>
<text v-if="orderStatus == 1">已下架</text>
<text v-if="orderStatus!= 1" @click="goPay()">去支付</text>
</view>
</view>
</view>
......@@ -323,7 +275,7 @@
:chooseCouponObj="chooseCouponObj"
></detail>
<chooseArea
v-if="showArea"
v-if="showChooseArea"
:areaList="productIfo.productAreaList"
@areaSure="areaSure"
:sortArr="sortArr"
......@@ -391,55 +343,26 @@ export default {
},
data() {
return {
defaultAreaCode: '', //默认站点
groupId:'',//组合Id
groupChannelId:'',//组合渠道Id
orderSource: '', //订单来源 1公众号平台、2公众号组合页面1、3公众号组合页面2、4胖丁伙伴app、5第三方自助机、6第三方票房窗口
thirdOpenid: '', //第三方openid
companyId: '', //公司Id
productList:[],//初始化产品数据
productIdList:[],//产品id列表入参
sortArr: [], //多个站点排号信息列表
sortIfo: '', //单个站点排号信息
sortInforPop: false, //一个站点时获取排队信息弹窗
showErmai: true, //临时的,选择了南站不显示耳麦
showArea: false, //控制选择站点显示隐藏
showOpenArea: false, //是否可以显示选择站点
chooseDate: '', //选择的日期
active: 10000, //日期下标
showChooseArea: false, //控制选择站点弹窗显示隐藏
timeActive: 10000, //时间下标,默认不选中
buyNum: 1, //订单数量
maxBookNum: 999, //最大预订数量
dateList: [], //日期列表
timeList: [], //时间列表
buyKnowData: '', //购买须知数据
editContact: '', //编辑联系人传值对象
productId: '', //产品Id
merchantId: '', //商户Id
ticketPhone: '', //联系电话
productIfo: '', //初始化产品基本信息
originalPrice: 0, //原价单价
sellingPrice: 0, //卖价单价
interfaceCode: '', //接口编号
merchantCode: '', //商户code
productCode: '', //产品code
contactTotal: [], //所有联系人列表
chooseContact: [], //选中的游客信息列表
contactNum: 1, //需要选择几位联系人数量
cruisePlanId: '', //班次Id
chooseTimeData: '', //选中的时间传给子组件
timeNumber: '', //当前时间转化为数字
startDate: '', //开始日期
endDate: '', //结束日期
startPlayTime: '', //开始时间
endPlayTime: '', //结束时间
areaObj: '', //区域组件的传值
templateList: [], //该产品联系人必须要填写的信息
timeFlag: '', //setTimeout函数
savedMoney: 0, //优惠价格
serviceList: [], //所有额外服务
chooseService: [], //选中的额外服务
extraPrice: 0, //额外服务总价格
showExtraPop: false, //控制支付时有额外服务,没有选中额外服务的弹窗显示隐藏
orderProductList: [], //额外服务,儿童票等入参
productDepositTotal: 0, //产品总押金
orderSource: '', //订单来源 1公众号平台、2公众号组合页面1、3公众号组合页面2、4胖丁伙伴app、5第三方自助机、6第三方票房窗口
thirdOpenid: '', //第三方openid
beforeBookDays: '', //需提前预定天数
companyId: '', //公司Id
docQuery: '', //元素变量
payBackground: '', //支付按钮背景颜色
dateScroll: '', //日期滚动值
......@@ -448,73 +371,85 @@ export default {
couponData:[], //所有劵数据
chooseCouponObj: '', //默认选中最优价格优惠券
ableConpon: '', //没有可用优惠券时,达到一定条件可用,显示达到的条件
orderStatus:'',//上下架状态,任何一个产品状态为下架,该状态为下架
chooseTimeList:[],//选中产品时间列表
chooseTimeData: '', //选中的时间传给子组件
moreDateIndex:0,//点击的更多日期下标
dateList:[],//点击更多日期时对应的日期列表
showTelephone:true,//用于判断是否显示输入联系人电话号码
areaIndex:0,//选择站点时对应的产品下标
contactTotal: [], //所有联系人列表
}
},
onLoad(option) {
this.companyId = option.companyId || ''
this.groupId=option.groupId||''
this.groupChannelId=option.groupChannelId||''
this.orderSource=option.orderSource||''
this.thirdOpenid=option.thirdOpenid||''
let idList=JSON.parse(option.productIdList)||[]
this.productIdList=idList.map((item)=>{
return {productId:item}
})
let times = new Date().Format('yyyy-MM-dd hh:mm:ss')
this.timeNumber = parseInt(this.$commonjs.changeTime(times)) //将当前时间转化为数字
this.companyId = option.companyId || ''
this.orderSource = option.orderSource || ''
this.thirdOpenid = option.thirdOpenid || '' //第三方openid
this.productId = option.productId || ''
this.merchantId = option.merchantId || ''
this.initData() //页面初始化数据
this.docQuery = uni.createSelectorQuery().in(this)
},
computed: {
originalTotal() {
//原价总价
if (this.chooseService.length > 0) {
//额外服务价格和押金总价格
let singleProduct = 0 //单个产品押金
this.extraPrice = 0
this.extraDepositTotal = 0 //总押金
for (let i = 0; i < this.chooseService.length; i++) {
this.extraPrice += parseFloat((this.chooseService[i].sellingPrice * this.buyNum).toFixed(2))
if (this.chooseService[i].depositType == 1) {
//等于1,押金金额跟数量没关系
singleProduct = this.chooseService[i].deposit
} else if (this.chooseService[i].depositType == 2) {
//等于2,押金单价乘购买数量
singleProduct = parseFloat((this.chooseService[i].deposit * this.buyNum).toFixed(2))
}
this.extraDepositTotal += singleProduct
let savedMoney=0
let original=0
let deposit=0
this.productDepositTotal=0
this.productList.forEach((item)=>{
original+=item.originalPrice*item.buyNum
if(item.chooseCouponObj){
if(item.chooseCouponObj.slaveList&&item.chooseCouponObj.slaveList.length>0){
savedMoney+=item.chooseCouponObj.slaveList[0].savedMoney
}else{
savedMoney+=item.chooseCouponObj.savedMoney
}
} else {
this.extraPrice = 0
this.extraDepositTotal = 0
}
if (this.productIfo.deposit) {
//如果有押金
if (this.productIfo.depositType == 1) {
//等于1,押金金额跟数量没关系
this.productDepositTotal = this.productIfo.deposit
} else if (this.productIfo.depositType == 2) {
//等于2,押金单价乘购买数量
this.productDepositTotal = parseFloat((this.productIfo.deposit * this.buyNum).toFixed(2))
}
} else {
this.productDepositTotal = 0
if(item.depositType==1){//等于1,押金金额跟数量没关系
deposit=item.deposit
}else if(item.depositType==2){//等于2,押金单价乘购买数量
deposit=item.deposit*item.buyNum
}
return parseFloat((this.originalPrice * this.buyNum + this.productDepositTotal + this.extraPrice + this.extraDepositTotal).toFixed(2)) //产品总价+产品押金+额外产品总价+额外产品押金-优惠价格
this.productDepositTotal+=deposit
})
return parseFloat((original+this.productDepositTotal).toFixed(2))||0 //产品总价+产品押金
},
sellTotal() {
//卖价总价
if (this.chooseService.length == 0) {
this.extraPrice = 0
this.extraDepositTotal = 0
let savedMoney=0
let sell=0
let deposit=0
this.productDepositTotal=0
this.productList.forEach((item)=>{
sell+=item.sellingPrice*item.buyNum
if(item.chooseCouponObj){
if(item.chooseCouponObj.slaveList&&item.chooseCouponObj.slaveList.length>0){
savedMoney+=item.chooseCouponObj.slaveList[0].savedMoney
}else{
savedMoney+=item.chooseCouponObj.savedMoney
}
}
return parseFloat(
(this.sellingPrice * this.buyNum + this.productDepositTotal + this.extraPrice + this.extraDepositTotal - this.savedMoney).toFixed(2)
) //产品总价+产品押金+额外产品总价+额外产品押金-优惠价格
if(item.depositType==1){//等于1,押金金额跟数量没关系
deposit=item.deposit
}else if(item.depositType==2){//等于2,押金单价乘购买数量
deposit=item.deposit*item.buyNum
}
this.productDepositTotal+=deposit
})
return parseFloat((sell+this.productDepositTotal-savedMoney).toFixed(2))||0
}
},
methods: {
//---获取排号信息
getSortInfor() {
//---获取排号信息---暂时未使用
getSortInfor(merchantCode) {
let data = {
areaCode: this.areaObj.areaCode,
merchantCode: this.merchantCode //商户code
merchantCode //商户code
}
uni.showLoading({
title: '加载中',
......@@ -533,79 +468,92 @@ export default {
}
})
},
//---获取子组件的传值
//---获取子组件的传值---已修改
areaSure(data) {
this.areaObj = data
if (this.areaObj.areaCode == 'cjsd_project_0001') {
//选择了南站不显示耳麦
this.showErmai = false
this.chooseService = []
//多选框状态设置成未选中
this.serviceList.forEach(item=>{
item.ifChoose=false
})
} else {
this.showErmai = true
}
this.productList[this.areaIndex].areaObj=data
},
//---展示选择站点
openArea() {
this.showArea = true
//---展示选择站点---已修改
openArea(index) {
this.areaIndex=index
this.showChooseArea = true
},
//---关闭选择站点
//---关闭选择站点---已修改
closeArea() {
this.showArea = false
this.showChooseArea = false
},
//---展示详情弹窗
//---展示详情弹窗---已修改
showDetail() {
this.$refs.detail.showPop = true
},
//---展示日历
showCalendar() {
//---展示日历---已修改
showCalendar(index) {
// if(!this.productList[index].chooseDate){//没有选择时,默认第一个日期
// this.productList[index].chooseDate=this.productList[index].priceStockList[0].startTime.substr(0,10)
// }
// this.$refs.calendar.getDefaultDate(this.productList[index].chooseDate)//日历组件选中日期
this.moreDateIndex=index
this.dateList=this.productList[index].priceStockList
this.$refs.calendar.show = true
},
//---日期选择
dateChoose(index) {
this.active = index //修改选中样式
this.maxBookNum = Math.min(this.dateList[index].surplus, this.productIfo.maxBookNum) //剩余量变化
this.originalPrice = this.dateList[index].originalPrice //原价变化
this.sellingPrice = this.dateList[index].sellingPrice //卖家变化
this.chooseDate = this.dateList[index].startTime.substr(0, 10) //日历组件选中日期
this.endDate = this.dateList[index].endTime //开始日期
this.startDate = this.dateList[index].startTime //结束日期
this.$refs.calendar.defaultDate = this.chooseDate
if (this.productIfo.productType == 3) {
//如果为班次票,点击时,请求班次票接口
this.cruisePlanId = '' //清空班次id
this.timeActive = 10000
uni.$u.throttle(this.getTimeStock, 3000)
//---日期选择---已改
dateChoose(item,item2,index) {
item.active=index//修改选中样式
item.maxBookNum=Math.min(item2.maxBookNum,item2.surplus) //剩余量变化
item.originalPrice=item2.originalPrice//产品原价为当前选中日期的原价
item.sellingPrice=item2.sellingPrice//产品卖价为当前选中日期的卖价
item.chooseDate=item2.startTime.substr(0,10)
this.$refs.calendar.getDefaultDate(item.chooseDate)//日历组件选中日期
item.endDate=item2.endTime//开始日期
item.startDate=item2.startTime//结束日期
this.chooseTimeData=''//清除之前选中的时间
if(item.productType==3){
//productType=3为场次票
item.cruisePlanId=''
item.timeActive=10000
this.timeActive=10000
uni.$u.throttle(this.getTimeStock(item), 3000)
}
this.initCoupon()
// this.computedPrice()
// this.initCoupon(Item.id,Item.buyNum,Item.sellingPrice,Item.merchantId,Index)
// this.$forceUpdate()
},
//---日历确认事件
//---日历确认事件---还未改完
dateConfig(data) {
let index = this.dateList.findIndex(item => {
return item.startTime.substr(0, 10) == data
})
this.dateChoose(index) //选中确认的日期
this.docQuery.selectAll('.date-list').boundingClientRect(data => {
this.dateScroll = (data[index].width + 4) * index
}).exec()
let index=this.moreDateIndex
let index2=this.productList[index].priceStockList.findIndex(item=>{
return item.startTime.substr(0,10)==data
})
let item=this.productList[index]
let item2=item.priceStockList[index2]
this.dateChoose(item,item2,index) //选中确认的日期
//下面需要处理
// this.docQuery.selectAll('.date-list').boundingClientRect(data => {
// this.dateScroll = (data[index].width + 4) * index
// }).exec()
},
//---展示更多时间
showTime() {
//---展示更多时间---已改好
showTime(item,index) {
this.chooseTimeList=item.timeList
this.moreTimeIndex=index
if(item.timeActive>=0){
this.timeActive=item.timeActive//组件的默认下标
}else{
this.timeActive=10000
}
this.$refs.times.showPop = true
},
//---时间选择
chooseTime(i) {
if(this.timeList[i].copyLast!='售罄'){
this.timeActive = i
this.cruisePlanId = this.timeList[i].cruisePlanId //获取班次Id
this.chooseTimeData = this.timeList[i].startPlanTime
this.maxBookNum = Math.min(this.timeList[i].last, this.productIfo.maxBookNum) //获取剩余库存
//如果为班次票,开始时间为班次时间的开始时间,结束时间为班次时间的结束时间,班次时间的结束时间为空时,结束时间为班次时间的开始时间
this.startPlayTime = this.timeList[i].startPlanTime
this.endPlayTime = this.timeList[i].endPlanTime || this.timeList[i].startPlanTime
//---时间选择---已改好,数据更新需要测试
chooseTime(item,item2,index) {
if(item2.copyLast!='售罄'){
item.timeActive=index
item.cruisePlanId=item2.cruisePlanId//获取班次Id
this.chooseTimeData=item2.startPlanTime
item.maxBookNum=Math.min(item.maxBookNum,item2.last)
//如果为场次票,开始时间为班次时间的开始时间,结束时间为班次时间的结束时间,班次时间的结束时间为空时,结束时间为班次时间的开始时间
item.startPlayTime=item2.startPlanTime
item.endPlayTime=item2.endPlanTime||item2.startPlanTime
// this.$forceUpdate()
}
},
//---时间确认事件
......@@ -697,60 +645,59 @@ export default {
this.initCoupon()
}, 1500)
},
//---展示购票须知
showBuyKnow() {
//---展示购票须知---已修改
showBuyKnow(index) {
this.buyKnowData=this.productList[index]
this.$refs.buyKnow.showPop = true
},
//---页面初始化数据,获取产品基本信息
//---页面初始化数据,获取产品基本信息---已修改
initData() {
let data = {
id: this.productId //产品id
let data={
productList:this.productIdList,//产品id列表
}
uni.showLoading({
title: '加载中',
mask:true
})
this.$request('scenic/groupGood/loadProduct', data).then(res => {
if (res.code == '00') {
this.productIfo = res.data
this.defaultAreaCode = this.productIfo.defaultAreaCode || ''
//通过默认站点找到站点数据
if (this.defaultAreaCode) {
this.productIfo.productAreaList.forEach(item => {
if (item.areaCode == this.defaultAreaCode) {
this.areaObj = {}
this.areaObj.areaCode = item.areaCode
this.areaObj.areaName = item.areaName
}
this.$request('scenic/groupGood/loadProductList', data).then(res => {
if (res.code == '00'){
this.productList=res.data||[]
this.productIdList=this.productList.map((item)=>{//id集合用于请求价格库存列表接口
return item.id
})
}
this.merchantCode = this.productIfo.merchantVo.code, //商户code
this.productId = res.data.id//产品id变化,重新赋值产品id
this.merchantId = res.data.merchantId //重新赋值商户id
this.beforeBookDays = res.data.beforeBookDays || 0 //提前预定天数
this.buyKnowData = res.data //购买须知,传给子组件
this.serviceList = res.data.loadProductResVoList //额外服务
//this.chooseService=res.data.data.loadProductResVoList//默认全部选中
if (this.productIfo.status == 1) {
//下架状态
for(let i=0;i<this.productList.length;i++){
let item=this.productList[i]
//任何一个产品需要填写游客信息,下面的联系电话必须填写
if(item.tripTemplateFlag!=2){
this.showTelephone=true
}
if(item.defaultAreaCode){
item.areaObj={}
item.areaObj.areaCode=item.areaCode
item.areaObj.areaName=item.areaName
}else{
item.areaObj={}
}
item.active=0//默认选中第一个日期
item.buyNum=1,//默认为1
item.contactTotal=[]//选中的游客信息列表
item.contactNum=1//需要选择几位联系人数量
if(item.status==1){//任何一个产品下架,该组合票为下架状态
this.orderStatus=1
this.payBackground = '#C0C0C0'
return
}
if (this.productIfo.productType != 3) {
//不为班次票时,开始时间为当前时间,结束时间为23:59:59
this.startPlayTime = new Date().Format('hh:mm:ss')
this.endPlayTime = '23:59:59'
}
if (this.productIfo.tripTemplateResList.length > 0) {
//用于判断选中的联系人信息是否填写完善
this.productIfo.tripTemplateResList.forEach(item => {
this.templateList.push(item.enumKey)
})
if(item.productType!=3){//不为班次票时,开始时间为当前时间,结束时间为23:59:59
item.startPlayTime=new Date().Format('hh:mm:ss')
item.endPlayTime='23:59:59'
}
}
this.getPriceList()
this.getDiscountPrice() //获取优惠价格
if (this.productIfo.tripTemplateFlag != 2) {
//等于2时不需要填写联系人信息和手机号码
// this.getDiscountPrice() //获取优惠价格
if (this.showTelephone) {
//需要填写联系人信息和手机号码
this.getContactList()
}
} else {
......@@ -761,90 +708,168 @@ export default {
}
})
},
//---获取产品价格库存列表
//---获取产品价格库存列表---已部分修改
getPriceList() {
let data = {
productId: this.productId //产品id
let data={
productIds:this.productIdList,//产品id集合
}
this.$request('scenic/user/product/priceStockList', data).then(res => {
this.$request('scenic/user/product/groupPriceStockList', data).then(res => {
if (res.code == '00') {
this.dateList = res.data //日期列表
if (this.dateList.length > 0) {
let time1 = this.dateList[0].startTime.substr(0, 10) + this.productIfo.bookTime //获取价格列表的第一个日期+预订最晚时间
let timeNum1 = parseInt(this.$commonjs.changeTime(time1))
let time2 = new Date().Format('yyyy-MM-dd hh:mm:ss')
let timeNum2 = parseInt(this.$commonjs.changeTime(time2)) //将当前时间转化为数字
if (timeNum2 > timeNum1) {
//所有产品的价格库存列表
let stockList=res.data
this.productList.forEach((item,index)=>{
if(item.isFetch==1&&item.productAreaList.length>1){
//多个排号点
this.areaIndex=index
this.sortUpDown(item.merchantVo.code)
}else if(item.isFetch==1&&item.productAreaList.length==1){
//只有一个排号点
item.areaObj=item.productAreaList[0]
}
//把价格列表合并到对应的产品上面
stockList.forEach(item2=>{
if(item.id==item2.productId){
item.priceStockList=item2.priceStockList||[]
}
})
})
let today = this.$commonjs.today() //今天
let tomorrow = this.$commonjs.tomorrow() //明天
let afterTomorrow = this.$commonjs.afterTomorrow() //后天
this.productList.forEach(item=>{
if(item.priceStockList.length>0){
//获取价格列表的第一个日期+预订最晚时间
let time1=item.priceStockList[0].startTime.substr(0,10)+item.bookTime
let timeNum1=parseInt(this.$commonjs.changeTime(time1))
let time2=new Date().Format('yyyy-MM-dd hh:mm:ss')
let timeNum2 =parseInt(this.$commonjs.changeTime(time2)) //将当前时间转化为数字
if(timeNum2>timeNum1){
//如果当前时间大于价格列表第一个日期+预订最晚时间,第一个价格不显示
this.dateList.splice(0, 1)
item.priceStockList.splice(0,1)
}
this.dateList.forEach((item, index) => {
item.priceStockList.forEach((item2, index) => {
//价格上面时间小于当前时间加上需预定天数之后的需删除
let date = new Date()
date.setDate(date.getDate() + this.beforeBookDays)
date.setDate(date.getDate() + item2.beforeBookDays)
let newDate = date.Format('yyyy-MM-dd')
let priceTime = this.$commonjs.changeTime(item.endTime.substr(0, 10))
let priceTime = this.$commonjs.changeTime(item2.endTime.substr(0, 10))
let newTime = this.$commonjs.changeTime(newDate)
if (priceTime < newTime) {
delete this.dateList[index]
delete item.priceStockList[index]
}
})
this.dateList = this.dateList.filter(val => {
item.priceStockList = item.priceStockList.filter(val => {
return val
})
if (this.dateList.length == 0) {
uni.showToast({
title: '没有库存',
icon: 'none'
})
this.showArea = false
if(item.priceStockList.length==0){
uni.showToast({title: '没有库存',icon: 'none'})
this.payBackground = '#C0C0C0'
return
}
if (this.productIfo.isFetch == 1) {
this.sortUpDown()
}
if (this.dateList.length == 1 && this.beforeBookDays == 0) {
//长度为1而且只能预订当天,默认选中第一个日期
//真机模拟的时候手机端不显示今天,明天后天,延迟执行
setTimeout(item => {
this.$refs.calendar.defaultDate = this.dateList[0].startTime.substr(0, 10)
}, 1000)
this.maxBookNum = Math.min(this.dateList[0].surplus, this.productIfo.maxBookNum) //剩余量
this.startDate = this.dateList[0].startTime //开始日期
this.endDate = this.dateList[0].endTime //结束日期
this.originalPrice = this.dateList[0].originalPrice //原价
this.sellingPrice = this.dateList[0].sellingPrice //卖价
this.active = 0
if (this.productIfo.productType == 3) {
//如果为班次票,请求班次票接口
this.getTimeStock()
}
this.initCoupon() //获取优惠券
item.startDate=item.priceStockList[0].startTime//开始日期
item.endDate=item.priceStockList[0].endTime//结束日期
item.originalPrice=item.priceStockList[0].originalPrice//原价
item.sellingPrice=item.priceStockList[0].sellingPrice//卖价
item.maxBookNum=Math.min(item.priceStockList[0].surplus,item.maxBookNum)//最大购买数量
item.priceStockList.forEach(item2=>{//循环单个产品的价格列表
item2.week='日一二三四五六'.charAt(new Date(item2.startTime.substr(0,10)).getDay())
if(item2.startTime.substr(0,10)==today){
item2.week='今天'
}
} else {
uni.showToast({
title: '没有库存',
icon: 'none'
})
this.showArea = false
this.payBackground = '#C0C0C0'
if(item2.startTime.substr(0,10)==tomorrow){
item2.week='明天'
}
let today = this.$commonjs.today() //今天
let tomorrow = this.$commonjs.tomorrow() //明天
let afterTomorrow = this.$commonjs.afterTomorrow() //后天
this.dateList.forEach((item, index) => {
item.week = '日一二三四五六'.charAt(new Date(item.startTime.substr(0, 10)).getDay())
if (item.startTime.substr(0, 10) == today) {
item.week = '今天'
if(item2.startTime.substr(0,10)==afterTomorrow){
item2.week='后天'
}
if (item.startTime.substr(0, 10) == tomorrow) {
item.week = '明天'
})
//如果是班次票,并且班次票价格列表不为空
if(item.productType==3&&item.priceStockList.length>0){
this.getTimeStock(item)
}
if (item.startTime.substr(0, 10) == afterTomorrow) {
item.week = '后天'
}else{
uni.showToast({title: '没有库存',icon: 'none'})
this.payBackground = '#C0C0C0'
}
})
// this.dateList = res.data //日期列表
// if (this.dateList.length > 0) {
// let time1 = this.dateList[0].startTime.substr(0, 10) + this.productIfo.bookTime //获取价格列表的第一个日期+预订最晚时间
// let timeNum1 = parseInt(this.$commonjs.changeTime(time1))
// let time2 = new Date().Format('yyyy-MM-dd hh:mm:ss')
// let timeNum2 = parseInt(this.$commonjs.changeTime(time2)) //将当前时间转化为数字
// if (timeNum2 > timeNum1) {
// //如果当前时间大于价格列表第一个日期+预订最晚时间,第一个价格不显示
// this.dateList.splice(0, 1)
// }
// this.dateList.forEach((item, index) => {
// //价格上面时间小于当前时间加上需预定天数之后的需删除
// let date = new Date()
// date.setDate(date.getDate() + this.beforeBookDays)
// let newDate = date.Format('yyyy-MM-dd')
// let priceTime = this.$commonjs.changeTime(item.endTime.substr(0, 10))
// let newTime = this.$commonjs.changeTime(newDate)
// if (priceTime < newTime) {
// delete this.dateList[index]
// }
// })
// this.dateList = this.dateList.filter(val => {
// return val
// })
// if (this.dateList.length == 0) {
// uni.showToast({
// title: '没有库存',
// icon: 'none'
// })
// this.showChooseArea = false
// this.payBackground = '#C0C0C0'
// return
// }
// if (this.productIfo.isFetch == 1) {
// this.sortUpDown()
// }
// if (this.dateList.length == 1 && this.beforeBookDays == 0) {
// //长度为1而且只能预订当天,默认选中第一个日期
// //真机模拟的时候手机端不显示今天,明天后天,延迟执行
// setTimeout(item => {
// this.$refs.calendar.defaultDate = this.dateList[0].startTime.substr(0, 10)
// }, 1000)
// this.maxBookNum = Math.min(this.dateList[0].surplus, this.productIfo.maxBookNum) //剩余量
// this.startDate = this.dateList[0].startTime //开始日期
// this.endDate = this.dateList[0].endTime //结束日期
// this.originalPrice = this.dateList[0].originalPrice //原价
// this.sellingPrice = this.dateList[0].sellingPrice //卖价
// this.active = 0
// if (this.productIfo.productType == 3) {
// //如果为班次票,请求班次票接口
// this.getTimeStock()
// }
// this.initCoupon() //获取优惠券
// }
// } else {
// uni.showToast({
// title: '没有库存',
// icon: 'none'
// })
// this.showChooseArea = false
// this.payBackground = '#C0C0C0'
// }
// let today = this.$commonjs.today() //今天
// let tomorrow = this.$commonjs.tomorrow() //明天
// let afterTomorrow = this.$commonjs.afterTomorrow() //后天
// this.dateList.forEach((item, index) => {
// item.week = '日一二三四五六'.charAt(new Date(item.startTime.substr(0, 10)).getDay())
// if (item.startTime.substr(0, 10) == today) {
// item.week = '今天'
// }
// if (item.startTime.substr(0, 10) == tomorrow) {
// item.week = '明天'
// }
// if (item.startTime.substr(0, 10) == afterTomorrow) {
// item.week = '后天'
// }
// })
} else {
uni.showToast({
title: res.message,
......@@ -853,10 +878,10 @@ export default {
}
})
},
//---排号是否上下架
sortUpDown() {
//---排号是否上下架---已修改
sortUpDown(merchantCode) {
let data = {
merchantCode: this.merchantCode //商户code
merchantCode //商户code
}
uni.showLoading({
title: '加载中',
......@@ -866,34 +891,38 @@ export default {
if (res.code == '00') {
this.sortArr = res.data.data
let data = res.data
if (this.productIfo.productAreaList.length > 1) {
this.productList.forEach(item=>{
if(item.productAreaList.length>1){
//有库存并且需要选择两个站点以上的票种,显示区域组件
for (let item in data.main) {
if (data.main[item].sceneSortStatus == '1'){
this.showArea = true
this.showOpenArea = true
for (let item2 in data.main) {
if (data.main[item2].sceneSortStatus == '1'){
//暂时下面只适应长江索道
this.showChooseArea = true
//上架
item.areaUp = true
}
}
} else if (this.productIfo.productAreaList.length == 1) {
}else if (item.productAreaList.length == 1) {
//只有一个站点时,直接选中站点(现目前还没有一个站点的景区)
for (let item in data.main) {
if (data.main[item].sceneSortStatus == '1') {
this.areaObj = this.productIfo.productAreaList[0]
this.showOpenArea = true
item.areaObj = item.productAreaList[0]
item.areaUp = true
}
}
}
})
}
})
},
//---获取班次票
getTimeStock() {
//---获取班次票---已修改
getTimeStock(item) {
let data = {
endDate: this.endDate, //结束日期
startDate: this.startDate, //开始日期
interfaceCode: this.productIfo.merchantVo.interfaceCompanyId, //接口编号
merchantCode: this.merchantCode, //商户code
productCode: this.productIfo.code //产品code
endDate: item.endDate, //结束日期
startDate: item.startDate, //开始日期
interfaceCode: item.merchantVo.interfaceCompanyId, //接口编号
merchantCode: item.merchantVo.code, //商户code
productCode: item.code //产品code
}
uni.showLoading({
title: '加载中',
......@@ -901,20 +930,21 @@ export default {
})
this.$request('distribution/distribution/getTimeStock', data).then(res => {
if (res.code == '00') {
this.timeList = res.data
this.timeList.forEach((item, index) => {
item.timeList=res.data
//增加一个时间Number字段,用于判断当前时间大于班次结束时间时,显示售罄
let text=parseFloat((item.last/item.total).toFixed(2))||0
item.timeList.forEach(item2=>{
let text=parseFloat((item2.last/item2.total).toFixed(2))||0
if(text>0.4){
item.copyLast='余票充足'
item2.copyLast='余票充足'
}else{
item.copyLast=item.last
item2.copyLast=item2.last
}
item.timeNumber = parseInt(this.$commonjs.changeTime(item.planDate.substr(0, 10) + item.endPlanTime))
if (this.timeNumber > item.timeNumber || item.last <= 0) {
item.copyLast='售罄'
item2.timeNumber=parseInt(this.$commonjs.changeTime(item2.planDate.substr(0,10)+item2.endPlanTime))
if(this.timeNumber>item2.timeNumber||item2.last<=0){
item2.copyLast='售罄'
}
})
// this.$forceUpdate()
} else {
uni.showToast({
title: res.message,
......@@ -1055,124 +1085,20 @@ export default {
showCoupon() {
this.$refs.orderCoupon.showPop=true
},
//---额外服务多选框变化
extraChange(e) {
this.chooseService=[]
//解决数据修改之后,多选框未选中bug
this.serviceList.forEach(item=>{
item.ifChoose=false
})
let value=e.detail.value
value.forEach(item=>{
this.chooseService.push(JSON.parse(item))
})
//获取选中的多选框为选中状态
this.serviceList.forEach(item=>{
this.chooseService.forEach(item2=>{
if(item.id==item2.id){
item.ifChoose=true
}
})
})
},
//---不需要享受耳麦服务
extraNo() {
this.showExtraPop = false
this.placeOrder()
},
//---需要享受耳麦服务
extraYes() {
this.showExtraPop = false
this.serviceList.forEach(item=>{
item.ifChoose=true
})
this.chooseService = this.serviceList
this.placeOrder()
},
//---点击去支付
//---下单---正在修改
goPay() {
if (this.serviceList.length == 0) {
//没有额外服务,直接支付
this.placeOrder()
}
if (this.serviceList.length > 0) {
//有额外服务,并且选择了额外服务的,直接支付
if (this.chooseService.length > 0) {
this.placeOrder()
}
}
if (this.serviceList.length > 0) {
//有额外服务,没有选中额外服务的,弹出提示框
if (this.productIfo.tripTemplateFlag != 2) {
if (!this.$commonjs.phoneReg().test(this.ticketPhone)) {
//未填写正确手机号码
uni.showToast({
title: '请填写正确的手机号码',
icon: 'none'
})
return
}
}
if (this.productIfo.tripTemplateFlag == 1) {
//实名制
if (this.chooseContact.length != this.buyNum) {
uni.showToast({
title: '需要添加' + this.buyNum + '位出行人',
icon: 'none'
})
return
}
} else if (this.productIfo.tripTemplateFlag == 0) {
//非实名制
if (this.chooseContact.length < 1) {
uni.showToast({
title: '需要添加一位出行人',
icon: 'none'
})
return
}
}
if (this.productIfo.productType == 3) {
//如果为班次票,需要选择班次
if (this.cruisePlanId == '') {
uni.showToast({
title: '该票为班次票,请选择游玩时间',
icon: 'none'
})
return
}
}
if (this.productIfo.isFetch == 1 && this.showOpenArea) {
//需要选择站点的票种,必须选择站点
if (!this.areaObj.areaCode) {
uni.showToast({
title: '请选择站点',
icon: 'none'
})
if (this.orderStatus == 1) {
//下架状态,点击无效
return
}
}
if (this.chooseService.length == 0 && this.showErmai) {
//没有购买额外服务,并且选择的北站,跳出弹窗
this.showExtraPop = true
}
if (this.chooseService.length == 0 && !this.showErmai) {
//没有购买额外服务,并且选择的南站,直接购买
this.placeOrder()
}
}
},
//---下单
placeOrder() {
if (this.dateList.length == 0) {
//价格库存为空时,点击无效
for(let i=0;i<this.productList.length;i++){
let item=this.productList[i]
//没有库存情况
if(!item.priceStockList||item.priceStockList.length==0){
return
}
if (this.productIfo.status == 1) {
//下架状态,点击无效
return
}
if (this.productIfo.tripTemplateFlag != 2) {
if (this.showTelephone) {
//需要填写电话号码
if (!this.$commonjs.phoneReg().test(this.ticketPhone) && this.productIfo.tripTemplateFlag != 2) {
//未填写正确手机号码
......@@ -1183,45 +1109,47 @@ export default {
return
}
}
if (!this.startDate || !this.endDate) {
// if (!this.startDate || !this.endDate) {
// uni.showToast({
// title: '请选择游玩日期',
// icon: 'none'
// })
// return
// }
//循环判断联系人数量,班次,站点是否填写完善
for(let i=0;i<this.productList.length;i++){
let item=this.productList[i]
if(item.tripTemplateFlag==1){//实名制
if(item.orderTouristList.length!=item.buyNum){
uni.showToast({
title: '请选择游玩日期',
title: item.merchantName+'需要添加'+item.buyNum+'位出行人',
icon: 'none'
})
return
}
if (this.productIfo.tripTemplateFlag == 1) {
//实名制
if (this.chooseContact.length != this.buyNum) {
uni.showToast({
title: '需要添加' + this.buyNum + '位出行人',
icon: 'none'
})
return
}
} else if (this.productIfo.tripTemplateFlag == 0) {
//非实名制
if (this.chooseContact.length < 1) {
if(item.tripTemplateFlag==0){//非实名制
if(item.orderTouristList.length<1){
uni.showToast({
title: '需要添加一位出行人',
title: item.merchantName+'需要添加一位出行人',
icon: 'none'
})
return
}
}
if (this.productIfo.productType == 3) {
//如果为班次票,需要选择班次
if (this.cruisePlanId == '') {
if(item.productType==3){//如果为班次票,需要选择班次
if(!item.cruisePlanId){
uni.showToast({
title: '该票为班次票,请选择游玩时间',
title: '请选择'+item.merchantName+'游玩时间',
icon: 'none'
})
return
}
}
if (this.productIfo.isFetch == 1 && this.showOpenArea) {
if (item.isFetch == 1 && item.areaUp) {
//需要选择站点的票种,必须选择站点
if (!this.areaObj.areaCode) {
if (!item.areaObj.areaCode) {
uni.showToast({
title: '请选择站点',
icon: 'none'
......@@ -1229,95 +1157,81 @@ export default {
return
}
}
}
this.preOrder()
},
//---预下单
preOrder() {
//参数游客信息组装
let orderTouristList = this.chooseContact.map((item) => {
return {
category: 0,
name: item.name,
credentialNumber: item.credentialNumber
}
})
let couponList = []
if (this.chooseCouponObj) {
if(this.chooseCouponObj.slaveList.length>0){//有从券取值从券,没有从券取值主劵
couponList=[//券列表
//获取游客信息参数
// let orderTouristList = this.chooseContact.map((item) => {
// return {
// category: 0,
// name: item.name,
// credentialNumber: item.credentialNumber
// }
// })
//获取券参数
this.productList.forEach(item=>{
if(item.chooseCouponObj){
//有从券取值从券,没有从券取值主劵
if(item.chooseCouponObj.slaveList.length>0){
item.couponList=[//券列表
{
couponId:this.chooseCouponObj.slaveCouponId,//券id
isMerchant:this.chooseCouponObj.slaveCreateSource,//是否是商户的券
myCouponId:this.chooseCouponObj.slaveId,//领取人编号
couponType:this.chooseCouponObj.couponType,//券类型
couponPrice:this.chooseCouponObj.savedMoney,//券价格
couponId:item.chooseCouponObj.slaveCouponId,//券id
isMerchant:item.chooseCouponObj.slaveCreateSource,//是否是商户的券
myCouponId:item.chooseCouponObj.slaveId,//领取人编号
couponType:item.chooseCouponObj.couponType,//券类型
couponPrice:item.chooseCouponObj.savedMoney,//券价格
}
]
}else{
couponList=[
item.couponList=[
{
couponId:this.chooseCouponObj.couponId,//券id
isMerchant:this.chooseCouponObj.createSource,//是否是商户的券
myCouponId:this.chooseCouponObj.id,//领取人编号
couponType:this.chooseCouponObj.couponType,//券类型
couponPrice:this.chooseCouponObj.savedMoney,//券价格
couponId:item.chooseCouponObj.couponId,//券id
isMerchant:item.chooseCouponObj.createSource,//是否是商户的券
myCouponId:item.chooseCouponObj.id,//领取人编号
couponType:item.chooseCouponObj.couponType,//券类型
couponPrice:item.chooseCouponObj.savedMoney,//券价格
}
]
}
}else{
item.couponList=[]
}
})
//额外服务不为空,联票购买不为空,带有儿童票,组合购买不为空,单品购买为空
if (this.chooseService.length > 0) {
this.orderProductList = this.chooseService.map((item) => {
let orderProductList=this.productList.map((item)=>{
return {
distributionPrice: item.sellingPrice, //临时用
productId: item.id, //产品Id
buyNum: this.buyNum, //购买数量
subOrderType: 0, //产品类型,网络
unitPrice: item.sellingPrice, //产品单价
merchantId: item.merchantId, //商户id
orderTouristList, //游客信息
playDate: this.startDate.substr(0, 10), //开始日期
endPlayDate: this.endDate.substr(0, 10), //结束日期
isMaster: 1, //是否主产品 1 否, 0 是
startPlayTime: this.startPlayTime, //开始时间
endPlayTime: this.endPlayTime, //结束时间
}
})
}else{
this.orderProductList=[]
}
let data = {
companyId: this.companyId, //公司Id
buyMethod: 1, // 单品购买,2套票、联票购买,3组合购买
userId: this.openid,//用户id
ticketPhone: this.ticketPhone, //联系电话
cash: 0, //现金红包
orderMoney: this.sellTotal, //订单总价 = 订单原价 - 优惠券价格 - 现金抵扣价格
orderType: 1, //订单类型,景区
orderSource:this.orderSource||1, //订单来源 1公众号平台、2公众号组合页面1、3公众号组合页面2、4胖丁伙伴app、5第三方自助机、6第三方票房窗口
orderProductList: this.orderProductList, //额外服务不为空,联票购买不为空,带有儿童票,组合购买不为空,单品购买为空
orderProductVo: //产品信息列表
{
bookTime:this.productIfo.bookTime,//最晚预定时间
earlyBookTime:this.productIfo.earlyBookTime,//最早预定时间
extendContent:'{"openid":'+'"'+this.openid+'"'+','+'"zr":'+'"'+this.thirdOpenid+'"'+'}',
productId: this.productId, //产品Id
buyNum: this.buyNum, //购买数量
subOrderType: 0, //产品类型,网络
cruisePlanId: this.cruisePlanId, //班次id
unitPrice: this.sellingPrice, //产品单价
distributionPrice: this.sellingPrice, //临时用
merchantId: this.merchantId, //商户id
orderTouristList, //游客信息
playDate: this.startDate.substr(0, 10), //开始日期
endPlayDate: this.endDate.substr(0, 10), //结束日期
isMaster: 0, //是否主产品 1 否, 0 是
startPlayTime: this.startPlayTime, //开始时间
endPlayTime: this.endPlayTime, //结束时间
productAreaCode:this.areaObj.areaCode, //选择的站点编码
couponList, //券列表
}
buyNum:item.buyNum,//购买数量
cruisePlanId:item.cruisePlanId,//班次Id
playDate:item.startDate.substr(0,10),//开始日期
endPlayDate:item.endDate.substr(0,10),//结束日期
startPlayTime:item.startPlayTime,//开始时间
endPlayTime:item.endPlayTime,//结束时间
isMaster:0,//是否主产品 1 否, 0 是
merchantId:item.merchantId,//商户id
productId:item.id,//产品Id
subOrderType:0,//产品类型,网络
unitPrice:item.sellingPrice,//产品单价
distributionPrice:item.sellingPrice,//临时用
productAreaCode:item.areaObj.areaCode||item.defaultAreaCode,//出发站点
orderTouristList:item.chooseTourist,//游客信息
couponList:item.couponList//优惠券
}
})
let data={
companyId:this.companyId,//公司Id
groupChannelId:this.groupChannelId,//组合渠道编号 ,组合订单必传
groupId:this.groupId,//组合编号 ,组合订单必传
buyMethod:3,// 单品购买,2套票、联票购买,3组合购买
userId:this.openid,//用户id
ticketPhone:this.ticketPhone,//联系电话
cash:0,//现金红包
orderMoney:this.sellTotal,//订单总价 = 订单原价 - 优惠券价格 - 现金抵扣价格
orderType:1,//订单类型,景区
orderSource:this.orderSource||1, //订单来源 1公众号平台、2公众号组合页面1、3公众号组合页面2、4胖丁伙伴app、5第三方自助机、6第三方票房窗口
orderProductList,//额外服务不为空,联票购买不为空,带有儿童票,组合购买不为空,单品购买为空
}
uni.showLoading({
title:'加载中',
......@@ -1679,27 +1593,6 @@ export default {
justify-content: space-between;
align-items: center;
}
/*额外服务部分*/
.extraService {
padding: 20rpx;
background:#DAE6F6;
margin-top: 30rpx;
border-radius: 10rpx;
}
.extraService label {
width: 100%;
display: flex;
justify-content: space-between;
align-items: center;
font-weight: bold;
color:#f45803;
}
.extra-wrap{
text-align: center;
padding-top: 100rpx;
height: 65vh;
}
/*底部部分*/
.bottom {
height: 100rpx;
......
......@@ -4,22 +4,22 @@
<view class="middle">
<view class="middle-top">
<!-- --------------------------------------------产品信息部分------------------------------------- -->
<view class="middle-Product" v-for="(item,Index) in productList" :key='item.id'>
<view class="middle-Product">
<view class="merchantName">
<text class="title-text">
{{ item.merchantName || '' }}
{{ productIfo.merchantName || '' }}
</text>
<text>
{{ item.name || '' }}
{{ productIfo.name || '' }}
</text>
</view>
<view @click="showBuyKnow(index)" class="buyKnow">
<view @click="showBuyKnow()" class="buyKnow">
<view>
<text v-if="item.backChangeRule == 0">不可退换</text>
<text v-if="item.backChangeRule == 1">可退</text>
<text v-if="item.backChangeRule == 2">随时可退</text>
<text v-if="item.isFetch == 1">无需取号</text>
<text v-if="productIfo.backChangeRule == 0">不可退换</text>
<text v-if="productIfo.backChangeRule == 1">可退</text>
<text v-if="productIfo.backChangeRule == 2">随时可退</text>
<text v-if="productIfo.isFetch == 1">无需取号</text>
</view>
<view>
购买须知
......@@ -28,11 +28,11 @@
</view>
</view>
<!--需要排队并且站点数大于1-->
<view class="middle-place" @click="openArea()" v-if="item.isFetch == 1 && item.productAreaList.length > 1 && showOpenArea">
<view class="middle-place" @click="openArea()" v-if="productIfo.isFetch == 1 && productIfo.productAreaList.length > 1 && showOpenArea">
<view> 出发站点 </view>
<view>
{{ item.areaObj.areaName || '请选择站点' }}
{{ areaObj.areaName || '请选择站点' }}
</view>
<view>
......@@ -55,17 +55,17 @@
<view class="middle-Date">
<view class="title-text">游玩日期</view>
<view class="middle-Datelist">
<scroll-view class="date-content" scroll-x="true" :scroll-left="dateScroll" v-if="item.priceStockList.length > 0">
<view class="date-list" v-for="(item2,index2) of item.priceStockList" :class="{ on: active == index2 }" @click="dateChoose(item,item2,index2)" :key="index2">
<view v-if="item2.week">
<text v-if="item2.week != '今天' && item2.week != '明天' && item2.week != '后天'"></text>
{{ item2.week }}
<scroll-view class="date-content" scroll-x="true" :scroll-left="dateScroll" v-if="dateList.length > 0">
<view class="date-list" v-for="(item, index) of dateList" :class="{ on: active == index }" @click="dateChoose(index)" :key="index">
<view v-if="item.week">
<text v-if="item.week != '今天' && item.week != '明天' && item.week != '后天'"></text>
{{ item.week }}
</view>
<view>
{{ item2.startTime ? item2.startTime.substr(5, 5) : '' }}
{{ item.startTime ? item.startTime.substr(5, 5) : '' }}
</view>
<view class="date-price">
¥<text style="font-weight: bold;">{{ item2.sellingPrice }}</text>
¥<text style="font-weight: bold;">{{ item.sellingPrice }}</text>
</view>
<view v-if="active == index" class="date-icon">
......@@ -74,7 +74,7 @@
</view>
</scroll-view>
<text v-else class="no-date"> 不可购买 </text>
<view class="dateMore" @click="showCalendar(index)">
<view class="dateMore" @click="showCalendar()">
<view class="date-more-content">
<view>更多</view>
<view>日期</view>
......@@ -87,22 +87,26 @@
<view class="middle-time" v-if="productIfo.productType == 3">
<view class="title-text"> 场次 </view>
<view class="middle-timelist">
<scroll-view class="time-content" scroll-x="true" :scroll-left="timeScroll" v-if="item.timeList.length> 0">
<view class="time-list" v-for="(item2,index2) of item.timeList" @click="chooseTime(item,item2,index2)" :class="{ on:item.timeActive == index2 }" :key="index2">
<scroll-view class="time-content" scroll-x="true" :scroll-left="timeScroll" v-if="timeList.length> 0">
<view class="time-list" v-for="(item, index) of timeList" @click="chooseTime(index)" :class="{ on: timeActive == index }" :key="index">
<view>
{{ item2.startPlanTime ? item2.startPlanTime.substr(0, 5) : '' }}
<text v-if="item2.endPlanTime">-</text>
{{ item2.endPlanTime ? item2.endPlanTime.substr(0, 5) : '' }}
{{ item.startPlanTime ? item.startPlanTime.substr(0, 5) : '' }}
<text v-if="item.endPlanTime&&!item.saleOnlyShowFromDate">
-{{ item.endPlanTime ? item.endPlanTime.substr(0, 5) : '' }}
</text>
</view>
<view>
<text v-if="item.copyLast!='余票充足'&&item.copyLast!='售罄'">剩余:</text>
{{ item.last }}
</view>
<view> 剩余:{{ item2.last }} </view>
<view v-if="item.timeActive == index" class="date-icon">
<view v-if="timeActive == index" class="date-icon">
<u-icon name="checkmark" color="#ffffff"></u-icon>
</view>
</view>
</scroll-view>
<text class="no-time" v-if="item.timeList&&item.timeList.length==0"> 该日票种已售罄,请选择其他日期 </text>
<text class="no-time" v-if="!item.startDate || !item.endDate"> 请先选游玩日期 </text>
<view class="timeMore" @click="showTime(item,index)">
<text class="no-time" v-if="startDate && endDate && timeList.length == 0"> 该日票种已售罄,请选择其他日期 </text>
<text class="no-time" v-if="!startDate || !endDate"> 请先选游玩日期 </text>
<view class="timeMore" @click="showTime()">
<view class="time-more-content">
<view>更多</view>
<view>场次</view>
......@@ -118,11 +122,11 @@
<view class="middle-Number">
<view class="title-text"> 购买数量 </view>
<view>
<u-number-box v-model="item.buyNum" @change='buyNumChange'>
<u-number-box v-model="buyNum" @change='buyNumChange'>
<view slot="minus" class="number-minus" >
<u-icon name="minus" color="#FFFFFF" size="32"></u-icon>
</view>
<text slot="input" class="number-input">{{item.buyNum}}</text>
<text slot="input" class="number-input">{{buyNum}}</text>
<view slot="plus" class="number-plus">
<u-icon name="plus" color="#FFFFFF" size="32"></u-icon>
</view>
......@@ -134,33 +138,33 @@
</view>
<!-- 有可用优惠券,并且未选中 -->
<template v-if="item.couponData.masterSlaveCouponList&&item.couponData.masterSlaveCouponList.length>0&&!item.chooseCouponObj">
<template v-if="couponData.masterSlaveCouponList&&couponData.masterSlaveCouponList.length>0&&!chooseCouponObj">
<view>
{{item.couponData.masterSlaveCouponList[0].couponName}}
{{couponData.masterSlaveCouponList[0].couponName}}
</view>
<view >
未使用优惠券
</view>
</template>
<!-- 有可用优惠券 -->
<template v-if="item.chooseCouponObj&&item.savedMoney>0">
<template v-if="chooseCouponObj&&savedMoney>0">
<view>
{{item.chooseCouponObj.couponName}}
{{chooseCouponObj.couponName}}
</view>
<view style="font-size: 32rpx;">
<text style="font-size: 24rpx;position: relative;top: 6rpx;">¥</text>
{{parseFloat(item.savedMoney.toFixed(2))}}
{{parseFloat(savedMoney.toFixed(2))}}
</view>
</template>
<!-- 可用优惠券条件-->
<template v-if="item.ableConpon">
<template v-if="ableConpon">
<view>
{{item.ableConpon.couponName}}
{{ableConpon.couponName}}
</view>
<view>
{{item.ableConpon.couponRule}}
{{ableConpon.couponRule}}
</view>
</template>
<u-icon name="arrow-right" color="#3688FF"></u-icon>
......@@ -213,12 +217,12 @@
</view>
<!-- ---------------------------------------------游客信息-------------------------------------------- -->
<view class="middle-bottom" v-if="item.tripTemplateFlag != 2">
<view class="middle-bottom" v-if="productIfo.tripTemplateFlag != 2">
<view class="middle-visitor">
<view class="visitorTitle">
<text class="title-text"> 用户信息 </text>
<text>
需填<text class="title-bold">{{item.contactNum }}</text>位出行人
需填<text class="title-bold">{{ contactNum }}</text>位出行人
<!-- <text class="title-bold" v-if="contactNum - chooseContact.length > 0">,还需{{ contactNum - chooseContact.length }}位</text> -->
</text>
</view>
......@@ -247,40 +251,40 @@
<text style="margin-left:16rpx;">新增</text>
</view>
<view class="visitorEdit" v-show="item.chooseContact.length > 0">
<view class="edit-list" v-for="(item2, index) of item.chooseContact" :key="item.id">
<view @click="delChooseContact(item2, index)">
<view class="visitorEdit" v-show="chooseContact.length > 0">
<view class="edit-list" v-for="(item, index) of chooseContact" :key="item.id">
<view @click="delChooseContact(item, index)">
<u-icon name="close-circle" color="#3688ff" size="40"></u-icon>
</view>
<view>
{{ item2.name }}
{{ item.name }}
</view>
<view>
{{ item2.credentialNumber ? item2.credentialNumber.substr(0, 3) + '****' + item2.credentialNumber.substr(14, 4) : '' }}
{{ item.credentialNumber ? item.credentialNumber.substr(0, 3) + '****' + item.credentialNumber.substr(14, 4) : '' }}
</view>
<view @click="showEdit(item2)">
<view @click="showEdit(item)">
<u-icon name="edit-pen-fill" color="#3688ff" size="48"></u-icon>
</view>
</view>
</view>
</view>
<!-- <view class="middle-phone" v-if="productIfo.tripTemplateFlag != 2">
<view class="middle-phone" v-if="productIfo.tripTemplateFlag != 2">
<text> 联系电话: </text>
<input type="number" maxlength="11" placeholder="请输入联系电话" v-model.trim="ticketPhone" />
</view> -->
</view>
</view>
<!-- ---------------------------------------------产品押金部分---------------------------------------- -->
<view class="productDeposit" v-if="item.deposit">
<view class="productDeposit" v-if="productIfo.deposit">
<view>
{{ item.name }}
{{ productIfo.name }}
<text style="color: #FC6703;margin-left: 10rpx;">押金</text>
</view>
<view style="color: #FC6703"> {{ item.deposit }}元 </view>
<view style="color: #FC6703"> {{ productIfo.deposit }}元 </view>
</view>
</view>
......@@ -299,9 +303,9 @@
</view>
<view class="bottom-btn" :style="{ background: payBackground }">
<text v-if="orderStatus == 1">已下架</text>
<text v-if="productIfo.status == 1">已下架</text>
<text v-if="parseInt(maxBookNum) <1" style="background: #c0c0c0">暂无库存</text>
<text v-if="orderStatus!= 1 && parseInt(maxBookNum) >= 1" @click="goPay()">去支付</text>
<text v-if="productIfo.status != 1 && parseInt(maxBookNum) >= 1" @click="goPay()">去支付</text>
</view>
</view>
</view>
......@@ -387,6 +391,7 @@ export default {
},
data() {
return {
defaultAreaCode: '', //默认站点
sortArr: [], //多个站点排号信息列表
sortIfo: '', //单个站点排号信息
sortInforPop: false, //一个站点时获取排队信息弹窗
......@@ -394,18 +399,34 @@ export default {
showArea: false, //控制选择站点显示隐藏
showOpenArea: false, //是否可以显示选择站点
chooseDate: '', //选择的日期
active: 10000, //日期下标
timeActive: 10000, //时间下标,默认不选中
buyNum: 1, //订单数量
maxBookNum: 999, //最大预订数量
dateList: [], //日期列表
timeList: [], //时间列表
buyKnowData: '', //购买须知数据
editContact: '', //编辑联系人传值对象
productId: '', //产品Id
merchantId: '', //商户Id
ticketPhone: '', //联系电话
productIfo: '', //初始化产品基本信息
originalPrice: 0, //原价单价
sellingPrice: 0, //卖价单价
interfaceCode: '', //接口编号
merchantCode: '', //商户code
productCode: '', //产品code
contactTotal: [], //所有联系人列表
chooseContact: [], //选中的游客信息列表
contactNum: 1, //需要选择几位联系人数量
cruisePlanId: '', //班次Id
chooseTimeData: '', //选中的时间传给子组件
timeNumber: '', //当前时间转化为数字
startDate: '', //开始日期
endDate: '', //结束日期
startPlayTime: '', //开始时间
endPlayTime: '', //结束时间
areaObj: '', //区域组件的传值
templateList: [], //该产品联系人必须要填写的信息
timeFlag: '', //setTimeout函数
savedMoney: 0, //优惠价格
......@@ -417,6 +438,7 @@ export default {
productDepositTotal: 0, //产品总押金
orderSource: '', //订单来源 1公众号平台、2公众号组合页面1、3公众号组合页面2、4胖丁伙伴app、5第三方自助机、6第三方票房窗口
thirdOpenid: '', //第三方openid
beforeBookDays: '', //需提前预定天数
companyId: '', //公司Id
docQuery: '', //元素变量
payBackground: '', //支付按钮背景颜色
......@@ -426,13 +448,6 @@ export default {
couponData:[], //所有劵数据
chooseCouponObj: '', //默认选中最优价格优惠券
ableConpon: '', //没有可用优惠券时,达到一定条件可用,显示达到的条件
productIdList:[],//产品id列表入参
productList:[],//初始化产品数据
orderStatus:'',//上下架状态,任何一个产品状态为下架,该状态为下架
chooseTimeList:[],//选中产品时间列表
chooseTimeData: '', //选中的时间传给子组件
moreDateIndex:0,//点击的更多日期下标
dateList:[],//点击更多日期时对应的日期列表
}
},
onLoad(option) {
......@@ -441,14 +456,8 @@ export default {
this.companyId = option.companyId || ''
this.orderSource = option.orderSource || ''
this.thirdOpenid = option.thirdOpenid || '' //第三方openid
this.productId = option.productId || ''
this.merchantId = option.merchantId || ''
let idList=JSON.parse(option.productIdList)
this.productIdList=idList.map((item)=>{
return {productId:item}
})
console.log(this.productIdList)
this.initData() //页面初始化数据
this.docQuery = uni.createSelectorQuery().in(this)
},
......@@ -465,7 +474,7 @@ export default {
if (this.chooseService[i].depositType == 1) {
//等于1,押金金额跟数量没关系
singleProduct = this.chooseService[i].deposit
} else if (this.chooseService[i].depositType == 2){
} else if (this.chooseService[i].depositType == 2) {
//等于2,押金单价乘购买数量
singleProduct = parseFloat((this.chooseService[i].deposit * this.buyNum).toFixed(2))
}
......@@ -551,74 +560,52 @@ export default {
showDetail() {
this.$refs.detail.showPop = true
},
//---展示日历---已修改
showCalendar(index) {
// if(!this.productList[index].chooseDate){//没有选择时,默认第一个日期
// this.productList[index].chooseDate=this.productList[index].priceStockList[0].startTime.substr(0,10)
// }
// this.$refs.calendar.getDefaultDate(this.productList[index].chooseDate)//日历组件选中日期
this.moreDateIndex=index
this.dateList=this.productList[index].priceStockList
//---展示日历
showCalendar() {
this.$refs.calendar.show = true
},
//---日期选择---已改
dateChoose(item,item2,index) {
item.active=index//修改选中样式
item.maxBookNum=Math.min(item2.maxBookNum,item2.surplus) //剩余量变化
item.originalPrice=item2.originalPrice//产品原价为当前选中日期的原价
item.sellingPrice=item2.sellingPrice//产品卖价为当前选中日期的卖价
item.chooseDate=item2.startTime.substr(0,10)
this.$refs.calendar.getDefaultDate(item.chooseDate)//日历组件选中日期
item.endDate=item2.endTime//开始日期
item.startDate=item2.startTime//结束日期
this.chooseTimeData=''//清除之前选中的时间
if(item.productType==3){
//productType=3为场次票
item.cruisePlanId=''
item.timeActive=10000
this.timeActive=10000
uni.$u.throttle(this.getTimeStock(item), 3000)
//---日期选择
dateChoose(index) {
this.active = index //修改选中样式
this.maxBookNum = Math.min(this.dateList[index].surplus, this.productIfo.maxBookNum) //剩余量变化
this.originalPrice = this.dateList[index].originalPrice //原价变化
this.sellingPrice = this.dateList[index].sellingPrice //卖家变化
this.chooseDate = this.dateList[index].startTime.substr(0, 10) //日历组件选中日期
this.endDate = this.dateList[index].endTime //开始日期
this.startDate = this.dateList[index].startTime //结束日期
this.$refs.calendar.defaultDate = this.chooseDate
if (this.productIfo.productType == 3) {
//如果为班次票,点击时,请求班次票接口
this.cruisePlanId = '' //清空班次id
this.timeActive = 10000
uni.$u.throttle(this.getTimeStock, 3000)
}
// this.computedPrice()
// this.initCoupon(Item.id,Item.buyNum,Item.sellingPrice,Item.merchantId,Index)
// this.$forceUpdate()
this.initCoupon()
},
//---日历确认事件---已改好
//---日历确认事件
dateConfig(data) {
let index=this.moreDateIndex
let index2=this.productList[index].priceStockList.findIndex(item=>{
return item.startTime.substr(0,10)==data
let index = this.dateList.findIndex(item => {
return item.startTime.substr(0, 10) == data
})
let item=this.productList[index]
let item2=item.priceStockList[index2]
this.dateChoose(item,item2,index) //选中确认的日期
this.dateChoose(index) //选中确认的日期
this.docQuery.selectAll('.date-list').boundingClientRect(data => {
this.dateScroll = (data[index].width + 4) * index
}).exec()
},
//---展示更多时间---已改好
showTime(item,index) {
this.chooseTimeList=item.timeList
this.moreTimeIndex=index
if(item.timeActive>=0){
this.timeActive=item.timeActive//组件的默认下标
}else{
this.timeActive=10000
}
//---展示更多时间
showTime() {
this.$refs.times.showPop = true
},
//---时间选择---已改好,数据更新需要测试
chooseTime(item,item2,index) {
if(item2.copyLast!='售罄'){
item.timeActive=index
item.cruisePlanId=item2.cruisePlanId//获取班次Id
this.chooseTimeData=item2.startPlanTime
item.maxBookNum=Math.min(item.maxBookNum,item2.last)
//如果为场次票,开始时间为班次时间的开始时间,结束时间为班次时间的结束时间,班次时间的结束时间为空时,结束时间为班次时间的开始时间
item.startPlayTime=item2.startPlanTime
item.endPlayTime=item2.endPlanTime||item2.startPlanTime
// this.$forceUpdate()
//---时间选择
chooseTime(i) {
if(this.timeList[i].copyLast!='售罄'){
this.timeActive = i
this.cruisePlanId = this.timeList[i].cruisePlanId //获取班次Id
this.chooseTimeData = this.timeList[i].startPlanTime
this.maxBookNum = Math.min(this.timeList[i].last, this.productIfo.maxBookNum) //获取剩余库存
//如果为班次票,开始时间为班次时间的开始时间,结束时间为班次时间的结束时间,班次时间的结束时间为空时,结束时间为班次时间的开始时间
this.startPlayTime = this.timeList[i].startPlanTime
this.endPlayTime = this.timeList[i].endPlanTime || this.timeList[i].startPlanTime
}
},
//---时间确认事件
......@@ -654,33 +641,6 @@ export default {
showContacts() {
this.$refs.contactList.showPop = true
},
//---计算价格
computedPrice(){
let savedMoney=0
let original=0
let sell=0
let deposit=0
this.productDepositTotal=0
this.productList.forEach((item)=>{
original+=item.originalPrice*item.buyNum
sell+=item.sellingPrice*item.buyNum
if(item.chooseCouponObj){
if(item.chooseCouponObj.slaveList&&item.chooseCouponObj.slaveList.length>0){
savedMoney+=item.chooseCouponObj.slaveList[0].savedMoney
}else{
savedMoney+=item.chooseCouponObj.savedMoney
}
}
if(item.depositType==1){//等于1,押金金额跟数量没关系
deposit=item.deposit
}else if(item.depositType==2){//等于2,押金单价乘购买数量
deposit=item.deposit*item.buyNum
}
this.productDepositTotal+=deposit
})
this.originalTotal=parseFloat((original+this.productDepositTotal).toFixed(2))||0 //产品总价+产品押金
this.sellTotal=parseFloat((sell+this.productDepositTotal-savedMoney).toFixed(2))||0
},
//---游客选择
visitorChoose(i) {
let chooseList = this.chooseContact
......@@ -737,58 +697,62 @@ export default {
this.initCoupon()
}, 1500)
},
//---展示购票须知---已修改
showBuyKnow(index) {
this.buyKnowData=this.productList[index]
//---展示购票须知
showBuyKnow() {
this.$refs.buyKnow.showPop = true
},
//---页面初始化数据,获取产品基本信息---已修改
//---页面初始化数据,获取产品基本信息
initData() {
let data={
productList:this.productIdList,//产品id列表
let data = {
id: this.productId //产品id
}
uni.showLoading({
title: '加载中',
mask:true
})
this.$request('scenic/groupGood/loadProductList', data).then(res => {
if (res.code == '00'){
this.productList=res.data||[]
this.productIdList=this.productList.map((item)=>{//id集合用于请求价格库存列表接口
return item.id
})
for(let i=0;i<this.productList.length;i++){
let item=this.productList[i]
if(item.defaultAreaCode){
item.areaObj={}
item.areaObj.areaCode=item.areaCode
item.areaObj.areaName=item.areaName
}else{
item.areaObj={}
}
item.active=0//默认选中第一个日期
item.buyNum=1,//默认为1
item.contactTotal=[]//选中的游客信息列表
item.contactNum=1//需要选择几位联系人数量
if(item.status==1){//任何一个产品下架,该组合票为下架状态
this.orderStatus=1
this.$request('scenic/groupGood/loadProduct', data).then(res => {
if (res.code == '00') {
this.productIfo = res.data
this.defaultAreaCode = this.productIfo.defaultAreaCode || ''
//通过默认站点找到站点数据
if (this.defaultAreaCode) {
this.productIfo.productAreaList.forEach(item => {
if (item.areaCode == this.defaultAreaCode) {
this.areaObj = {}
this.areaObj.areaCode = item.areaCode
this.areaObj.areaName = item.areaName
}
})
}
this.merchantCode = this.productIfo.merchantVo.code, //商户code
this.productId = res.data.id//产品id变化,重新赋值产品id
this.merchantId = res.data.merchantId //重新赋值商户id
this.beforeBookDays = res.data.beforeBookDays || 0 //提前预定天数
this.buyKnowData = res.data //购买须知,传给子组件
this.serviceList = res.data.loadProductResVoList //额外服务
//this.chooseService=res.data.data.loadProductResVoList//默认全部选中
if (this.productIfo.status == 1) {
//下架状态
this.payBackground = '#C0C0C0'
return
}
if(item.productType!=3){//不为班次票时,开始时间为当前时间,结束时间为23:59:59
item.startPlayTime=new Date().Format('hh:mm:ss')
item.endPlayTime='23:59:59'
if (this.productIfo.productType != 3) {
//不为班次票时,开始时间为当前时间,结束时间为23:59:59
this.startPlayTime = new Date().Format('hh:mm:ss')
this.endPlayTime = '23:59:59'
}
if (this.productIfo.tripTemplateResList.length > 0) {
//用于判断选中的联系人信息是否填写完善
this.productIfo.tripTemplateResList.forEach(item => {
this.templateList.push(item.enumKey)
})
}
this.getPriceList()
// this.getDiscountPrice() //获取优惠价格
//---待处理
// if (this.productIfo.tripTemplateFlag != 2) {
// //等于2时不需要填写联系人信息和手机号码
// this.getContactList()
// }
this.getDiscountPrice() //获取优惠价格
if (this.productIfo.tripTemplateFlag != 2) {
//等于2时不需要填写联系人信息和手机号码
this.getContactList()
}
} else {
uni.showToast({
title: res.message,
......@@ -797,168 +761,90 @@ export default {
}
})
},
//---获取产品价格库存列表---已部分修改
//---获取产品价格库存列表
getPriceList() {
let data={
productIds:this.productIdList,//产品id集合
let data = {
productId: this.productId //产品id
}
this.$request('scenic/user/product/groupPriceStockList', data).then(res => {
this.$request('scenic/user/product/priceStockList', data).then(res => {
if (res.code == '00') {
//所有产品的价格库存列表
let stockList=res.data
this.productList.forEach(item=>{
//待处理
// if(item.isFetch==1&&item.productAreaList.length>1){
// this.areaIndex=index
// this.merchantCode=this.productList[index].merchantVo.code
// this.sortUpDown()
//}else if(item.isFetch==1&&item.productAreaList.length==1){
// item.areaObj=item.productAreaList[0]
// }
//把价格列表合并到对应的产品上面
stockList.forEach(item2=>{
if(item.id==item2.productId){
item.priceStockList=item2.priceStockList||[]
}
})
})
let today = this.$commonjs.today() //今天
let tomorrow = this.$commonjs.tomorrow() //明天
let afterTomorrow = this.$commonjs.afterTomorrow() //后天
this.productList.forEach(item=>{
if(item.priceStockList.length>0){
//获取价格列表的第一个日期+预订最晚时间
let time1=item.priceStockList[0].startTime.substr(0,10)+item.bookTime
let timeNum1=parseInt(this.$commonjs.changeTime(time1))
let time2=new Date().Format('yyyy-MM-dd hh:mm:ss')
let timeNum2 =parseInt(this.$commonjs.changeTime(time2)) //将当前时间转化为数字
if(timeNum2>timeNum1){
this.dateList = res.data //日期列表
if (this.dateList.length > 0) {
let time1 = this.dateList[0].startTime.substr(0, 10) + this.productIfo.bookTime //获取价格列表的第一个日期+预订最晚时间
let timeNum1 = parseInt(this.$commonjs.changeTime(time1))
let time2 = new Date().Format('yyyy-MM-dd hh:mm:ss')
let timeNum2 = parseInt(this.$commonjs.changeTime(time2)) //将当前时间转化为数字
if (timeNum2 > timeNum1) {
//如果当前时间大于价格列表第一个日期+预订最晚时间,第一个价格不显示
item.priceStockList.splice(0,1)
this.dateList.splice(0, 1)
}
item.priceStockList.forEach((item2, index) => {
this.dateList.forEach((item, index) => {
//价格上面时间小于当前时间加上需预定天数之后的需删除
let date = new Date()
date.setDate(date.getDate() + item2.beforeBookDays)
date.setDate(date.getDate() + this.beforeBookDays)
let newDate = date.Format('yyyy-MM-dd')
let priceTime = this.$commonjs.changeTime(item2.endTime.substr(0, 10))
let priceTime = this.$commonjs.changeTime(item.endTime.substr(0, 10))
let newTime = this.$commonjs.changeTime(newDate)
if (priceTime < newTime) {
delete item.priceStockList[index]
delete this.dateList[index]
}
})
item.priceStockList = item.priceStockList.filter(val => {
this.dateList = this.dateList.filter(val => {
return val
})
if(item.priceStockList.length==0){
uni.showToast({title: '没有库存',icon: 'none'})
if (this.dateList.length == 0) {
uni.showToast({
title: '没有库存',
icon: 'none'
})
this.showArea = false
this.payBackground = '#C0C0C0'
return
}
item.startDate=item.priceStockList[0].startTime//开始日期
item.endDate=item.priceStockList[0].endTime//结束日期
item.originalPrice=item.priceStockList[0].originalPrice//原价
item.sellingPrice=item.priceStockList[0].sellingPrice//卖价
item.maxBookNum=Math.min(item.priceStockList[0].surplus,item.maxBookNum)//最大购买数量
item.priceStockList.forEach(item2=>{//循环单个产品的价格列表
item2.week='日一二三四五六'.charAt(new Date(item2.startTime.substr(0,10)).getDay())
if(item2.startTime.substr(0,10)==today){
item2.week='今天'
}
if(item2.startTime.substr(0,10)==tomorrow){
item2.week='明天'
if (this.productIfo.isFetch == 1) {
this.sortUpDown()
}
if (this.dateList.length == 1 && this.beforeBookDays == 0) {
//长度为1而且只能预订当天,默认选中第一个日期
//真机模拟的时候手机端不显示今天,明天后天,延迟执行
setTimeout(item => {
this.$refs.calendar.defaultDate = this.dateList[0].startTime.substr(0, 10)
}, 1000)
this.maxBookNum = Math.min(this.dateList[0].surplus, this.productIfo.maxBookNum) //剩余量
this.startDate = this.dateList[0].startTime //开始日期
this.endDate = this.dateList[0].endTime //结束日期
this.originalPrice = this.dateList[0].originalPrice //原价
this.sellingPrice = this.dateList[0].sellingPrice //卖价
this.active = 0
if (this.productIfo.productType == 3) {
//如果为班次票,请求班次票接口
this.getTimeStock()
}
if(item2.startTime.substr(0,10)==afterTomorrow){
item2.week='后天'
this.initCoupon() //获取优惠券
}
} else {
uni.showToast({
title: '没有库存',
icon: 'none'
})
//如果是班次票,并且班次票价格列表不为空
if(item.productType==3&&item.priceStockList.length>0){
this.getTimeStock(item)
}
}else{
uni.showToast({title: '没有库存',icon: 'none'})
this.showArea = false
this.payBackground = '#C0C0C0'
}
let today = this.$commonjs.today() //今天
let tomorrow = this.$commonjs.tomorrow() //明天
let afterTomorrow = this.$commonjs.afterTomorrow() //后天
this.dateList.forEach((item, index) => {
item.week = '日一二三四五六'.charAt(new Date(item.startTime.substr(0, 10)).getDay())
if (item.startTime.substr(0, 10) == today) {
item.week = '今天'
}
if (item.startTime.substr(0, 10) == tomorrow) {
item.week = '明天'
}
if (item.startTime.substr(0, 10) == afterTomorrow) {
item.week = '后天'
}
})
// this.dateList = res.data //日期列表
// if (this.dateList.length > 0) {
// let time1 = this.dateList[0].startTime.substr(0, 10) + this.productIfo.bookTime //获取价格列表的第一个日期+预订最晚时间
// let timeNum1 = parseInt(this.$commonjs.changeTime(time1))
// let time2 = new Date().Format('yyyy-MM-dd hh:mm:ss')
// let timeNum2 = parseInt(this.$commonjs.changeTime(time2)) //将当前时间转化为数字
// if (timeNum2 > timeNum1) {
// //如果当前时间大于价格列表第一个日期+预订最晚时间,第一个价格不显示
// this.dateList.splice(0, 1)
// }
// this.dateList.forEach((item, index) => {
// //价格上面时间小于当前时间加上需预定天数之后的需删除
// let date = new Date()
// date.setDate(date.getDate() + this.beforeBookDays)
// let newDate = date.Format('yyyy-MM-dd')
// let priceTime = this.$commonjs.changeTime(item.endTime.substr(0, 10))
// let newTime = this.$commonjs.changeTime(newDate)
// if (priceTime < newTime) {
// delete this.dateList[index]
// }
// })
// this.dateList = this.dateList.filter(val => {
// return val
// })
// if (this.dateList.length == 0) {
// uni.showToast({
// title: '没有库存',
// icon: 'none'
// })
// this.showArea = false
// this.payBackground = '#C0C0C0'
// return
// }
// if (this.productIfo.isFetch == 1) {
// this.sortUpDown()
// }
// if (this.dateList.length == 1 && this.beforeBookDays == 0) {
// //长度为1而且只能预订当天,默认选中第一个日期
// //真机模拟的时候手机端不显示今天,明天后天,延迟执行
// setTimeout(item => {
// this.$refs.calendar.defaultDate = this.dateList[0].startTime.substr(0, 10)
// }, 1000)
// this.maxBookNum = Math.min(this.dateList[0].surplus, this.productIfo.maxBookNum) //剩余量
// this.startDate = this.dateList[0].startTime //开始日期
// this.endDate = this.dateList[0].endTime //结束日期
// this.originalPrice = this.dateList[0].originalPrice //原价
// this.sellingPrice = this.dateList[0].sellingPrice //卖价
// this.active = 0
// if (this.productIfo.productType == 3) {
// //如果为班次票,请求班次票接口
// this.getTimeStock()
// }
// this.initCoupon() //获取优惠券
// }
// } else {
// uni.showToast({
// title: '没有库存',
// icon: 'none'
// })
// this.showArea = false
// this.payBackground = '#C0C0C0'
// }
// let today = this.$commonjs.today() //今天
// let tomorrow = this.$commonjs.tomorrow() //明天
// let afterTomorrow = this.$commonjs.afterTomorrow() //后天
// this.dateList.forEach((item, index) => {
// item.week = '日一二三四五六'.charAt(new Date(item.startTime.substr(0, 10)).getDay())
// if (item.startTime.substr(0, 10) == today) {
// item.week = '今天'
// }
// if (item.startTime.substr(0, 10) == tomorrow) {
// item.week = '明天'
// }
// if (item.startTime.substr(0, 10) == afterTomorrow) {
// item.week = '后天'
// }
// })
} else {
uni.showToast({
title: res.message,
......@@ -1000,14 +886,14 @@ export default {
}
})
},
//---获取班次票---已修改
getTimeStock(item) {
//---获取班次票
getTimeStock() {
let data = {
endDate: item.endDate, //结束日期
startDate: item.startDate, //开始日期
interfaceCode: item.merchantVo.interfaceCompanyId, //接口编号
merchantCode: item.merchantVo.code, //商户code
productCode: item.code //产品code
endDate: this.endDate, //结束日期
startDate: this.startDate, //开始日期
interfaceCode: this.productIfo.merchantVo.interfaceCompanyId, //接口编号
merchantCode: this.merchantCode, //商户code
productCode: this.productIfo.code //产品code
}
uni.showLoading({
title: '加载中',
......@@ -1015,21 +901,20 @@ export default {
})
this.$request('distribution/distribution/getTimeStock', data).then(res => {
if (res.code == '00') {
item.timeList=res.data
this.timeList = res.data
this.timeList.forEach((item, index) => {
//增加一个时间Number字段,用于判断当前时间大于班次结束时间时,显示售罄
item.timeList.forEach(item2=>{
let text=parseFloat((item2.last/item2.total).toFixed(2))||0
let text=parseFloat((item.last/item.total).toFixed(2))||0
if(text>0.4){
item2.copyLast='余票充足'
item.copyLast='余票充足'
}else{
item2.copyLast=item2.last
item.copyLast=item.last
}
item2.timeNumber=parseInt(this.$commonjs.changeTime(item2.planDate.substr(0,10)+item2.endPlanTime))
if(this.timeNumber>item2.timeNumber||item2.last<=0){
item2.copyLast='售罄'
item.timeNumber = parseInt(this.$commonjs.changeTime(item.planDate.substr(0, 10) + item.endPlanTime))
if (this.timeNumber > item.timeNumber || item.last <= 0) {
item.copyLast='售罄'
}
})
// this.$forceUpdate()
} else {
uni.showToast({
title: res.message,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment