var util = require('../../utils/util.js'); var api = require('../../config/api.js'); var check = require('../../utils/check.js'); var app = getApp(); Page({ data: { orderId:'', payFailShow:false, choosePopup:false, noSerTimes:'', popupType:1,//1单次预约 2 选择服务频次 3选择首次预约时间 timeList:check.getTimeList(1), dateList:util.getDateList(new Date(new Date().getTime()+60*60*1000*24),1), // firstAppointList:util.getDateList(new Date(new Date().getTime()+60*60*1000*24),7), firstAppointList:[], timeIndex:0,//选中的时间段 dateIndex:2,//单次预约选中的日期 firstDateIndex:0,//首次预约时间 activeTab:1,//频次 weekIndex:0,//选中的周几 weekArrList:[ {id:1,week:'周一',num:0}, {id:2,week:'周二',num:0}, {id:3,week:'周三',num:0}, {id:4,week:'周四',num:0}, {id:5,week:'周五',num:0}, {id:6,week:'周六',num:0}, {id:0,week:'周日',num:0}, ], selectedWeekList:[], selectedDateList:[], selectTimeIndex:'null',//选中的时间段 oneTimeAppoint:'2021-04-22 周一 13:00-14:00', isNeedAppoint:false,//是否需要预约 isFinishAppoint:false,//已选择预约 isOneAppoint:true,//单次卡 appointFailTip:false,//预约失败提示 multiIndex: [0, 0, 0, 0, 0, 0], multiArray: [], array: [], year: "", month: "", day: "", startHour: "", endHour: "", orderData: "",//此时间为预计上门时间 checkedGoodsList: [], checkedAddress: {}, availableCouponLength: 0, // 可用的优惠券数量 goodsTotalPrice: 0.00, //商品总价 freightPrice: 0.00, //快递费 couponPrice: 0.00, //优惠券的价格 grouponPrice: 0.00, //团购优惠价格 orderTotalPrice: 0.00, //订单总价 actualPrice: 0.00, //实际需要支付的总价 cartId: 0, addressId: 0, couponId: 0, userCouponId: 0, message: '', grouponLinkId: 0, //参与的团购 grouponRulesId: 0, //团购规则ID nurseId:0,//安心包认证id petinfo:null,//宠物保险内容 shareId:0 }, //获取checkou信息 getCheckoutInfo: function () { let that = this; util.request(api.CartCheckout, { cartId: that.data.cartId, addressId: that.data.addressId, couponId: that.data.couponId, userCouponId: that.data.userCouponId, grouponRulesId: that.data.grouponRulesId }).then(function (res) { if (res.errno === 0) { that.setData({ checkedGoodsList: res.data.checkedGoodsList, checkedAddress: res.data.checkedAddress, availableCouponLength: res.data.availableCouponLength, actualPrice: res.data.actualPrice, couponPrice: res.data.couponPrice, grouponPrice: res.data.grouponPrice, freightPrice: res.data.freightPrice, goodsTotalPrice: res.data.goodsTotalPrice, orderTotalPrice: res.data.orderTotalPrice, addressId: res.data.addressId, couponId: res.data.couponId, userCouponId: res.data.userCouponId, grouponRulesId: res.data.grouponRulesId, isNeedAppoint: res.data.checkedGoodsList[0].goods.type===0?true:false,//0需要预约 服务类商品,1保险 2中介 3买约分离次卡 isOneAppoint:res.data.checkedGoodsList[0].goods.serviceTimes==1?true:false,//1为单次,其余为多次 popupType:res.data.checkedGoodsList[0].goods.serviceTimes==1?1:2 }); let serviceDuration=res.data.checkedGoodsList[0].goods.serviceDuration; let timeList=check.getTimeList(serviceDuration); that.setData({ timeList:timeList }); //是否为保险类商品 console.info(res.data.checkedAddress) //console.info(res.data.couponId) // var isIns=false; // res.data.checkedGoodsList.forEach(element=>{ // if(element.goods.type==1){ // isIns=true; // } // }) // if(isIns){ // //是否设置过保险信息 // var petinfo=wx.getStorageSync('petinfo'+that.data.cartId); // console.info(petinfo) // if(!petinfo){ // wx.navigateTo({ // url: '/pages/goods/pet/index?id='+that.data.cartId, // }) // }else{ // that.setData({ // petinfo:petinfo // }) // } // } } wx.hideLoading(); }); }, checkNurse(){ //是否包含安心包产品 如果含有 需要填写安心包产品内容 let that=this; let isNurse=false; var list=that.data.checkedGoodsList; for(var i=0;i{ util.showErrorToast(res.errmsg) }); }, submitInfo(){ //是否含有保姆安心包产品 var isnurse=this.checkNurse(); if(isnurse&&this.data.nurseId==0){//跳转安心包注册页 wx.navigateTo({ url: '/pages/auth/register/register', }) return; } var orderInfo={ cartId: this.data.cartId, addressId: this.data.addressId, couponId: this.data.couponId, userCouponId: this.data.userCouponId, message: this.data.message, orderDate: this.data.orderData, grouponRulesId: this.data.grouponRulesId, grouponLinkId: this.data.grouponLinkId, nurseId:this.data.nurseId, petinfo:this.data.petinfo, shareId:this.data.shareId, //预约参数信息 }; //是宠物保险 var isInsure=this.checkInstance(); if(isInsure){ //缓存order数据,在宠物保险页提交 wx.setStorageSync('orderInfo', orderInfo); wx.navigateTo({ url: '/pages/goods/pet/index?id='+this.data.cartId, }) return; } // 如果是多次卡先预估,单次卡不用预估 if(!this.data.isOneAppoint){ // this.orderAppoint(); let weeks=[]; this.data.selectedDateList.forEach(item=>{ let obj={ dayOfWeek:this.data.weekArrList[item.week].id, startTime:item.time.split('-')[0], endTime:item.time.split('-')[1] }; weeks.push(obj); }); let tempStartDate=null; if(this.data.firstAppointList.length!=0&&this.data.firstAppointList.length>=this.data.firstDateIndex){ tempStartDate=this.data.firstAppointList[this.data.firstDateIndex].date; } let params={ weeks:weeks, type:this.data.activeTab, startDate:tempStartDate,//this.data.firstAppointList[this.data.firstDateIndex].date, lng:this.data.checkedAddress.lng, lat:this.data.checkedAddress.lat, shopId:this.data.checkedAddress.shopId, goodId:this.data.checkedGoodsList[0].goodsId }; console.log(params); this.orderPay(params); }else{ let weeks=[{ dayOfWeek:(this.data.dateList[this.data.dateIndex]).id, startTime:(this.data.timeList[this.data.timeIndex].time.split('-'))[0], endTime:(this.data.timeList[this.data.timeIndex].time.split('-'))[1] }]; let params={ weeks:weeks, type:0, startDate:this.data.dateList[this.data.dateIndex].date, lng:this.data.checkedAddress.lng, lat:this.data.checkedAddress.lat, shopId:this.data.checkedAddress.shopId, goodId:this.data.checkedGoodsList[0].goodsId }; console.log(params); this.orderPay(params); } }, orderPay(orderData){ var orderInfo={ cartId: this.data.cartId, addressId: this.data.addressId, couponId: this.data.couponId, userCouponId: this.data.userCouponId, message: this.data.message, orderDate: this.data.orderData, grouponRulesId: this.data.grouponRulesId, grouponLinkId: this.data.grouponLinkId, nurseId:this.data.nurseId, petinfo:this.data.petinfo, shareId:this.data.shareId, //预约参数信息 orderDate:orderData }; util.request(api.OrderSubmit, orderInfo, 'POST').then(res => { if (res.errno === 0) { console.log(res.data.isNeedPay); if(res.data.isNeedPay==false){ console.log("跳过支付"); util.redirect('/pages/ucenter/order/order'); return; } // 下单成功,重置couponId wx.setStorageSync('couponId', 0); const orderId = res.data.orderId; this.setData({orderId:orderId}); const grouponLinkId = res.data.grouponLinkId; util.request(api.OrderPrepay, { orderId: orderId }, 'POST').then(res=>{ if (res.errno === 0) { const payParam = res.data; console.log("支付过程开始"); wx.requestPayment({ 'timeStamp': payParam.timeStamp, 'nonceStr': payParam.nonceStr, 'package': payParam.packageValue, 'signType': payParam.signType, 'paySign': payParam.paySign, 'success': res=> { console.log("支付过程成功"); if (grouponLinkId) { setTimeout(() => { wx.redirectTo({ url: '/pages/groupon/grouponDetail/grouponDetail?id=' + grouponLinkId }) }, 1000); } else { wx.redirectTo({ url: '/pages/checkout/payResult/payResult?status=1&orderId=' + orderId+'&actualPrice='+this.data.actualPrice }); } }, 'fail': res=> { console.log("支付过程失败"); // wx.redirectTo({ // url: '/pages/checkout/payResult/payResult?status=0&orderId=' + orderId // }); // 弹出支付失败 this.setData({ payFailShow:true }); }, 'complete': function (res) { console.log("支付过程结束") } }); } else { // 弹出支付失败 this.setData({ payFailShow:true }); // wx.redirectTo({ // url: '/pages/checkout/payResult/payResult?status=0&orderId=' + orderId // }); } }); } else { util.showErrorToast(res.errmsg); } }); }, surplusMonth: function (year) { var date = new Date(); var year2 = date.getFullYear() var month = date.getMonth() + 1 var day = date.getDate() var hour = date.getHours() var minute = date.getMinutes() var second = date.getSeconds() var monthDatas = []; if (year == year2) { var surplusMonth = 12 - month; monthDatas.push(month + "月") for (var i = month; i < 12; i++) { monthDatas.push(i + 1 + "月") } } else { for (var i = 0; i < 12; i++) { monthDatas.push(i + 1 + "月") } } return monthDatas; }, //天数计算 surplusDay: function (year, month, day) { var days = 31; var dayDatas = []; var date = new Date(); var year2 = date.getFullYear() var month2 = date.getMonth() + 1 switch (parseInt(month)) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: days = 31; break; //对于2月份需要判断是否为闰年 case 2: if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) { days = 29; break; } else { days = 28; break; } case 4: case 6: case 9: case 11: days = 30; break; } if (year == year2 && month == month2) { // dayDatas.push(day + "日") for (var i = day; i < days; i++) { dayDatas.push(i + 1 + "日") } } else { console.log(month + "月" + days + "天") for (var i = 0; i < days; i++) { dayDatas.push(i + 1 + "日") } } return dayDatas; }, //时间计算 surplusHour: function (year, month, day, hour) { var date = new Date(); var year2 = date.getFullYear() var month2 = date.getMonth() + 1 var day2 = date.getDate(); var hourEnd = [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21]; var hours = [ ['09时', '10时', '11时', '12时', '13时', '14时', '15时', '16时', '17时', '18时', '19时', '20时'], ['10时', '11时', '12时', '13时', '14时', '15时', '16时', '17时', '18时', '19时', '20时', '21时'] ]; return hours; }, /** * 生命周期函数--监听页面加载 */ onLoad: function (options) { let that=this; if(options.nurseId){ this.setData({ nurseId:options.nurseId }) console.info(options.shareId) if(options.shareId) this.setData({ share_id:options.shareId }) } console.info(options) console.info(this.data.nurseId) var date = new Date(); var year = date.getFullYear() var month = date.getMonth() + 1 var day = date.getDate() var hour = date.getHours() var surplusMonth = this.surplusMonth(year); console.log(surplusMonth) var surplusDay = this.surplusDay(year, month, day); console.log(surplusDay) var surplusHour = this.surplusHour(year, month, day, hour) console.log(surplusHour) //初始化picker this.setData({ multiArray: [ [year + '年', (year + 1) + '年', (year + 2) + '年'], surplusMonth, surplusDay, surplusHour[0], ['~'], surplusHour[1] ], year: year, month: month, day: day, startHour: surplusHour[0][0], endHour: surplusHour[1][0], }) }, varietiesChange: function (e) { var Varieties = this.data.array[parseInt(e.detail.value)] console.log(Varieties) this.setData({ Varieties: Varieties }) }, warehouseChange: function (e) { var Warehouse = this.data.array[parseInt(e.detail.value)] console.log(Warehouse) this.setData({ Warehouse: Warehouse }) }, //某一列的值改变时触发 bindMultiPickerColumnChange: function (e) { var date = new Date(); var year1 = date.getFullYear() var month1 = date.getMonth() + 1 var day1 = date.getDate() var hour1 = date.getHours() console.log("当前月份" + this.data.month + '修改的列为', e.detail.column, ',值为', e.detail.value); var data = { multiArray: this.data.multiArray, multiIndex: this.data.multiIndex, year: this.data.year, month: this.data.month, day: this.data.day, startHour: this.data.startHour, endHour: this.data.startHour, }; data.multiIndex[e.detail.column] = e.detail.value; switch (e.detail.column) { case 0: var yearStr = data.multiArray[e.detail.column][e.detail.value]; var year = yearStr.substring(0, yearStr.length - 1) data.year = parseInt(year); var surplusMonth = this.surplusMonth(year); data.multiArray[1] = surplusMonth; if (data.year == year1) { data.month = month1; } else { data.month = 1; } if (data.year == year1 && month1 == data.month) { data.day = day1; } else { data.day = 1; } var surplusDay = this.surplusDay(data.year, data.month, data.day); data.multiArray[2] = surplusDay; var surplusHour; if (data.year == year1 && month1 == data.month && data.day == day1) { surplusHour = this.surplusHour(data.year, data.month, data.day, hour1) } else { surplusHour = this.surplusHour(data.year, data.month, data.day, 1) } console.log(surplusHour) data.multiArray[3] = surplusHour[0]; data.multiArray[5] = surplusHour[1]; data.startHour = surplusHour[0]; data.endHour = surplusHour[1]; data.multiIndex[1] = 0; data.multiIndex[2] = 0; data.multiIndex[3] = 0; data.multiIndex[5] = 0; break; case 1: console.log('选择月份' + data.multiArray[e.detail.column][e.detail.value]); var monthStr = data.multiArray[e.detail.column][e.detail.value]; var month = monthStr.substring(0, monthStr.length - 1); data.month = month; data.day = 1; if (data.year == year1 && month1 == data.month) { data.day = day1; } else { data.day = 1; } var surplusDay = this.surplusDay(data.year, data.month, data.day); data.multiArray[2] = surplusDay; var surplusHour; if (data.year == year1 && month1 == data.month && data.day == day1) { surplusHour = this.surplusHour(data.year, data.month, data.day, hour1) } else { surplusHour = this.surplusHour(data.year, data.month, data.day, 1) } data.multiArray[3] = surplusHour[0]; data.multiArray[5] = surplusHour[1]; data.startHour = surplusHour[0]; data.endHour = surplusHour[1]; data.multiIndex[2] = 0; data.multiIndex[3] = 0; data.multiIndex[5] = 0; break; case 2: console.log('选择日' + data.multiArray[e.detail.column][e.detail.value]); var dayStr = data.multiArray[e.detail.column][e.detail.value]; var day = dayStr.substring(0, dayStr.length - 1); data.day = day; var surplusHour; if (data.year == year1 && month1 == data.month && data.day == day1) { surplusHour = this.surplusHour(data.year, data.month, data.day, hour1) } else { surplusHour = this.surplusHour(data.year, data.month, data.day, 1) } data.multiArray[3] = surplusHour[0]; data.multiArray[5] = surplusHour[1]; data.startHour = surplusHour[0]; data.endHour = surplusHour[1]; data.multiIndex[3] = 0; data.multiIndex[5] = 0; break; case 3: console.log('起始时间' + data.multiArray[e.detail.column][e.detail.value]); var hourStr = data.multiArray[e.detail.column][e.detail.value]; var hour = hourStr.substring(0, hourStr.length - 1); data.startHour = hour; console.log('起始时间' + hour + " day1:" + day1); /*var endhours2 = []; var end = ['09时', '11时', '12时', '13时', '14时', '15时', '16时', '17时', '18时', '19时', '20时', '20时']; for (var i = e.detail.value; i < end.length; i++) { endhours2.push(end[i]); } data.multiArray[5] = endhours2; */ if (e.detail.value > data.multiIndex[5]) data.multiIndex[5] = e.detail.value; break; case 5: var hourStr = data.multiArray[e.detail.column][e.detail.value]; var hour = hourStr.substring(0, hourStr.length - 1); data.endHour = hour; if (e.detail.value =2){//前三天不可预约 this.setData({ dateIndex:index }); } }, timeCheck(e){ let index=e.currentTarget.dataset.index; this.setData({ timeIndex:index }); }, weekCheck(e){ let index=e.currentTarget.dataset.index; this.setData({ weekIndex:index, // selectTimeIndex:'null' }); }, timeSelect(e){ let index=e.currentTarget.dataset.index; let time=e.currentTarget.dataset.time; if(this.data.activeTab!=2){ let weekList=this.data.weekArrList; weekList.forEach(item=>{ item.num=0; }); this.setData({ weekArrList:weekList, }); let itemData = "weekArrList[" + this.data.weekIndex + "].num"; let selectedDateList=[]; let dateItem={week:this.data.weekIndex,time:time,weekStr:this.data.weekArrList[this.data.weekIndex].week}; selectedDateList.push(dateItem); console.log(this.data); this.setData({ selectTimeIndex:index, [itemData]:1, selectedWeekList:[this.data.weekIndex], selectedDateList:selectedDateList }); console.log(this.data); }else{ // 如果选中的时间段小于2个 if(this.data.selectedDateList.length<2){ let itemData = "weekArrList[" + this.data.weekIndex + "].num"; let num=this.data.weekArrList[this.data.weekIndex].num; let selectedDateList=this.data.selectedDateList; selectedDateList.push({week:this.data.weekIndex,time:time,weekStr:this.data.weekArrList[this.data.weekIndex].week}); let selectedWeekList=this.data.selectedWeekList; if(selectedWeekList.indexOf(this.data.weekIndex)==-1){ selectedWeekList.push(this.data.weekIndex); } this.setData({ [itemData]:num+1, selectTimeIndex:index, // selectedWeekList:selectedWeekList, selectedWeekList:[this.data.weekIndex], selectedDateList:selectedDateList }); }else{ // 删除第一个 let firstTimeSelected=this.data.selectedDateList[0]; let firstWeekSelectedIndex=firstTimeSelected.week; // let firstWeekSelected=this.data.weekArrList[firstWeekSelectedIndex]; let itemDataDel = "weekArrList[" + firstWeekSelectedIndex + "].num"; let numDel=this.data.weekArrList[firstWeekSelectedIndex].num; let selectedDateListDel=this.data.selectedDateList; selectedDateListDel.shift(); this.setData({ [itemDataDel]:numDel-1, // selectTimeIndex:index, selectedDateList: selectedDateListDel }); // 加入新选中的 let itemData = "weekArrList[" + this.data.weekIndex + "].num"; let num=this.data.weekArrList[this.data.weekIndex].num; let selectedDateList=this.data.selectedDateList; selectedDateList.push({week:this.data.weekIndex,time:time,weekStr:this.data.weekArrList[this.data.weekIndex].week}); this.setData({ [itemData]:num+1, // selectTimeIndex:index, selectedDateList:selectedDateList }); let weekListNew=[]; this.data.selectedDateList.forEach(item=>{ if(weekListNew.indexOf(item.week)==-1){ weekListNew.push(item.week); } }); this.setData({ selectedWeekList:weekListNew, }); } console.log(this.data); } }, firstDateCheck(e){ let index=e.currentTarget.dataset.index; this.setData({ firstDateIndex:index }); }, onTabChange(e){ let weekList=this.data.weekArrList; weekList.forEach(item=>{ item.num=0; }); this.setData({ weekArrList:weekList, activeTab:e.detail.name, selectTimeIndex:'null', selectedWeekList:[], selectedDateList:[] }); }, showAppoint(){ this.setData({ choosePopup:true, popupType:(this.data.popupType==3?2:this.data.popupType), isFinishAppoint:false }); }, confirmTime(){ console.log(this.data.activeTab); console.log(this.data); if(this.data.popupType==1){ let date=this.data.dateList[this.data.dateIndex].date; let week=this.data.dateList[this.data.dateIndex].week; let time=this.data.timeList[this.data.timeIndex].time; console.log(week,time); this.setData({ oneTimeAppoint:date+' '+week+' '+time, choosePopup:false, isFinishAppoint:true }); }else if(this.data.popupType==2){ if(this.data.activeTab==2){ if(this.data.selectedDateList.length<1){ wx.showToast({ title: '请选择服务时间', icon: 'none', duration: 2000 }); }else if(this.data.selectedDateList.length==1){ wx.showToast({ title: '请选择第二次服务时间', icon: 'none', duration: 2000 }); }else{ // 选择频次 let futureDateList=util.getDateList(new Date(new Date().getTime()+60*60*1000*24),1); let minIndex=Math.min.apply(null, this.data.selectedWeekList); console.log(minIndex); console.log((this.data.weekArrList[minIndex]).id); let beginDate=futureDateList.filter(item=>{return (new Date(item.date)).getDay()==(this.data.weekArrList[minIndex]).id}); console.log(beginDate); let inter=7; let firstAppointList=util.getDateList(new Date(new Date(beginDate[0].date).getTime()),inter); this.setData({ popupType:3, firstAppointList:firstAppointList }) } }else{ if(this.data.selectedDateList.length==0){ wx.showToast({ title: '请选择服务时间', icon: 'none', duration: 2000 }); }else{ // 选择频次 let futureDateList=util.getDateList(new Date(new Date().getTime()+60*60*1000*24),1); let minIndex=Math.min.apply(null, this.data.selectedWeekList); console.log(minIndex); let beginDate=futureDateList.filter(item=>{return (new Date(item.date)).getDay()==(this.data.weekArrList[minIndex]).id}); console.log(beginDate); let inter=(this.data.activeTab==3?14:7); let firstAppointList=util.getDateList(new Date(new Date(beginDate[0].date).getTime()),inter); this.setData({ popupType:3, firstAppointList:firstAppointList }) } } }else if(this.data.popupType==3){ let firstTime=this.data.firstAppointList[this.data.firstDateIndex].date; console.log(firstTime); console.log(this.data.selectedDateList); this.orderAppoint(); // this.setData({ // choosePopup:false, // isFinishAppoint:true // }); } }, orderAppoint(){ // 如果是多次卡先预估,单次卡不用预估 let weeks=[]; this.data.selectedDateList.forEach(item=>{ let obj={ dayOfWeek:this.data.weekArrList[item.week].id, startTime:item.time.split('-')[0], endTime:item.time.split('-')[1] }; weeks.push(obj); }); let params={ weeks:weeks, type:this.data.activeTab, startDate:this.data.firstAppointList[this.data.firstDateIndex].date, lng:this.data.checkedAddress.lng, lat:this.data.checkedAddress.lat, shopId:this.data.checkedAddress.shopId, goodId:this.data.checkedGoodsList[0].goodsId }; util.request(api.OrderAppoint, params, "POST") .then(res=> { if (res.errno == 0) { // this.orderPay(params); this.setData({ choosePopup:false, isFinishAppoint:true, popupType:2, noSerTimes:res.data, appointFailTip:(res.data>=1?true:false) }); } else { // util.showErrorToast(res.errmsg); wx.showToast({ title: res.errmsg, icon: 'none', duration: 2000 }); } }); }, cancelPay(){ this.setData({ payFailShow:false }); }, rePay(){ util.request(api.OrderPrepay, { orderId: this.data.orderId }, 'POST').then(res=> { if (res.errno === 0) { const payParam = res.data; console.log("支付过程开始") wx.requestPayment({ 'timeStamp': payParam.timeStamp, 'nonceStr': payParam.nonceStr, 'package': payParam.packageValue, 'signType': payParam.signType, 'paySign': payParam.paySign, 'success': res=>{ console.log("支付过程成功"); this.setData({ payFailShow:false }) wx.redirectTo({ url: '/pages/checkout/payResult/payResult?status=1&orderId=' +this.data.orderId+'&actualPrice='+this.data.actualPrice }); }, 'fail': res=> { console.log("支付过程失败") this.setData({ payFailShow:false }); util.showErrorToast('支付失败'); }, 'complete': res=> { console.log("支付过程结束"); } }); } }); } });