wangfukang 2 days ago
parent
commit
a1a4577dc7
  1. 82
      package2/group/groupBuySingle.vue

82
package2/group/groupBuySingle.vue

@ -672,7 +672,7 @@
<text style="font-size: 30rpx;font-weight: 700;">立即出餐</text> <text style="font-size: 30rpx;font-weight: 700;">立即出餐</text>
</view> </view>
<view style="color: #777;width: 500rpx;"> <view style="color: #777;width: 500rpx;">
{{nowMake === false ? '选择用餐时间,系统会在用餐前30分钟通知商家并打印小票' : '拼团成功后立即出餐'}} {{nowMake === true ? '请选择到店用餐时间' : (nowMake === false ? '可到店后再安排出餐' : '请选择是否现在备餐')}}
</view> </view>
<view class="now-make-options"> <view class="now-make-options">
<view class="now-make-option" @tap="checkNowMake(true)"> <view class="now-make-option" @tap="checkNowMake(true)">
@ -688,7 +688,7 @@
否 否
</view> </view>
</view> </view>
<view class="pickup-time-row" v-if="nowMake === false" @tap="openPickupTimePicker"> <view class="pickup-time-row" v-if="nowMake === true" @tap="openPickupTimePicker">
<text>用餐时间</text> <text>用餐时间</text>
<text :class="{'pickup-time-placeholder': !pickupTime}">{{pickupTime || '选择时间 >'}}</text> <text :class="{'pickup-time-placeholder': !pickupTime}">{{pickupTime || '选择时间 >'}}</text>
</view> </view>
@ -725,7 +725,7 @@
</view> </view>
</view> </view>
<view class="btn pay-confirm-btn" @tap="wxPayment"> <view class="btn pay-confirm-btn" @tap="wxPayment">
确认付款{{nowMake === true && groupdeliveryType == 2 && !isStoreGroupOrder ? '-即刻出餐' : ''}} 确认付款
</view> </view>
</view> </view>
</view> </view>
@ -738,7 +738,7 @@
<view class="now-make-popup-title">是否立即出餐</view> <view class="now-make-popup-title">是否立即出餐</view>
<view class="now-make-popup-desc">请选择是否需要商家在成团后立即出餐。</view> <view class="now-make-popup-desc">请选择是否需要商家在成团后立即出餐。</view>
<view class="now-make-popup-tip"> <view class="now-make-popup-tip">
选择“否”后需要预约用餐时间,系统会在用餐前30分钟通知商家并打印小票 选择“是”后请选择到店用餐时间,成团后商家会按这个时间为你备餐。选择“否”可到店后再安排出餐
</view> </view>
<view class="now-make-popup-actions"> <view class="now-make-popup-actions">
<view class="now-make-popup-cancel" @tap="confirmNowMake(false)">否</view> <view class="now-make-popup-cancel" @tap="confirmNowMake(false)">否</view>
@ -746,6 +746,19 @@
</view> </view>
</view> </view>
</uni-popup> </uni-popup>
<uni-popup ref="pickupTimeConfirmPopup" type="center" background-color="transparent">
<view class="now-make-popup">
<view class="now-make-popup-title">确认用餐时间</view>
<view class="now-make-popup-time">{{pendingPickupTime}}</view>
<view class="now-make-popup-tip">
确认后,成团后商家会按这个时间为你备餐
</view>
<view class="now-make-popup-actions">
<view class="now-make-popup-cancel" @tap="cancelPickupTimeConfirm">取消</view>
<view class="now-make-popup-confirm" @tap="confirmPickupTime">确认</view>
</view>
</view>
</uni-popup>
<!-- 参团成功提示弹出层 --> <!-- 参团成功提示弹出层 -->
<uni-popup ref="tishiPopup" background-color="transparent" @change="onTishiPopupChange"> <uni-popup ref="tishiPopup" background-color="transparent" @change="onTishiPopupChange">
<view v-if="!isPindan && isStoreGroupOrder" class="group-face-tip-popup" @tap.stop> <view v-if="!isPindan && isStoreGroupOrder" class="group-face-tip-popup" @tap.stop>
@ -927,6 +940,7 @@
productId: '', productId: '',
nowMake: null, nowMake: null,
pickupTime: '', pickupTime: '',
pendingPickupTime: '',
pickupTimeContent: [], pickupTimeContent: [],
isPack: 0, isPack: 0,
productItem: [], productItem: [],
@ -1525,8 +1539,10 @@
checkNowMake(value) { checkNowMake(value) {
this.nowMake = value; this.nowMake = value;
if (value === false) { if (value === false) {
this.openPickupTimePicker(); this.pickupTime = '';
return;
} }
this.openPickupTimePicker();
}, },
openNowMakePopup() { openNowMakePopup() {
this.$refs.nowMakePopup.open('center'); this.$refs.nowMakePopup.open('center');
@ -1535,30 +1551,44 @@
this.nowMake = value; this.nowMake = value;
this.$refs.nowMakePopup.close(); this.$refs.nowMakePopup.close();
this.$nextTick(() => { this.$nextTick(() => {
if (value === false) { if (value === true) {
this.openPickupTimePicker(); this.openPickupTimePicker();
return; return;
} }
this.pickupTime = '';
this.wxPayment(); this.wxPayment();
}); });
}, },
needsPickupAppointment() { needsPickupAppointment() {
return this.groupdeliveryType == 2 && !this.isStoreGroupOrder && this.nowMake === false; return this.groupdeliveryType == 2 && !this.isStoreGroupOrder && this.nowMake === true;
}, },
openPickupTimePicker() { openPickupTimePicker() {
this.generatePickupTimes(); this.generatePickupTimes();
this.$refs.pickupTimeModel.open(); this.$refs.pickupTimeModel.open();
}, },
pickupTimeCallback(val) { pickupTimeCallback(val) {
this.pickupTime = val.timestr; this.pendingPickupTime = val.timestr;
this.$refs.pickupTimeModel.close(); this.$refs.pickupTimeModel.close();
this.$nextTick(() => {
this.$refs.pickupTimeConfirmPopup.open('center');
});
},
cancelPickupTimeConfirm() {
this.pendingPickupTime = '';
this.$refs.pickupTimeConfirmPopup.close();
},
confirmPickupTime() {
if (!this.pendingPickupTime) return;
this.pickupTime = this.pendingPickupTime;
this.pendingPickupTime = '';
this.$refs.pickupTimeConfirmPopup.close();
}, },
getPickupLeadMinutes() { getPickupLeadMinutes() {
const cookingTime = Number(this.shopItem.shopTakeaway && this.shopItem.shopTakeaway.cookingTime ? this.shopItem.shopTakeaway.cookingTime : 0); const cookingTime = Number(this.shopItem.shopTakeaway && this.shopItem.shopTakeaway.cookingTime ? this.shopItem.shopTakeaway.cookingTime : 0);
return !isNaN(cookingTime) && cookingTime > 0 ? cookingTime : 30; return !isNaN(cookingTime) && cookingTime > 0 ? cookingTime : 30;
}, },
getNextPickupSlot(date) { getNextPickupSlot(date) {
const interval = 20; const interval = 10;
const slot = new Date(date); const slot = new Date(date);
slot.setSeconds(0, 0); slot.setSeconds(0, 0);
const remainder = slot.getMinutes() % interval; const remainder = slot.getMinutes() % interval;
@ -1591,7 +1621,7 @@
return fallbackEndTime; return fallbackEndTime;
} }
endTime.setHours(parts[0], parts[1], 0, 0); endTime.setHours(parts[0], parts[1], 0, 0);
endTime.setMinutes(endTime.getMinutes() + 20); endTime.setMinutes(endTime.getMinutes() + 10);
return endTime > fallbackEndTime ? fallbackEndTime : endTime; return endTime > fallbackEndTime ? fallbackEndTime : endTime;
}, },
generatePickupTimes() { generatePickupTimes() {
@ -1602,11 +1632,15 @@
earliestTime.setMinutes(earliestTime.getMinutes() + this.getPickupLeadMinutes()); earliestTime.setMinutes(earliestTime.getMinutes() + this.getPickupLeadMinutes());
const todayStartTime = this.getNextPickupSlot(earliestTime); const todayStartTime = this.getNextPickupSlot(earliestTime);
const todayEndTime = this.getPickupAppointmentEndTime(today); const todayEndTime = this.getPickupAppointmentEndTime(today);
const currentTime = this.formatClockTime(now);
const timelist = []; const timelist = [];
const cursor = new Date(todayStartTime); const cursor = new Date(todayStartTime);
while (cursor <= todayEndTime) { while (cursor <= todayEndTime) {
timelist.push({ timestr: this.formatClockTime(cursor) }); timelist.push({ timestr: this.formatClockTime(cursor) });
cursor.setMinutes(cursor.getMinutes() + 20); cursor.setMinutes(cursor.getMinutes() + 10);
}
if (!timelist.length || timelist[0].timestr !== currentTime) {
timelist.unshift({ timestr: currentTime });
} }
this.pickupTimeContent = [{ this.pickupTimeContent = [{
id: 'today', id: 'today',
@ -1619,12 +1653,11 @@
let [h, m] = this.pickupTime.split(':'); let [h, m] = this.pickupTime.split(':');
let targetHour = parseInt(h); let targetHour = parseInt(h);
let targetMinute = parseInt(m); let targetMinute = parseInt(m);
let d = new Date(); if (isNaN(targetHour) || isNaN(targetMinute)) return null;
if (targetHour < d.getHours() || (targetHour === d.getHours() && targetMinute <= d.getMinutes())) { const now = new Date();
d.setDate(d.getDate() + 1); const target = new Date();
} target.setHours(targetHour, targetMinute, 0, 0);
d.setHours(targetHour, targetMinute, 0, 0); return this.formatDateTimeValue(target.getTime() <= now.getTime() ? now : target);
return this.formatDateTimeValue(d);
}, },
toNumber(value) { toNumber(value) {
let amount = parseFloat(value); let amount = parseFloat(value);
@ -2404,7 +2437,6 @@
payload.isPack = this.isPack; payload.isPack = this.isPack;
if (this.nowMake === true) { if (this.nowMake === true) {
payload.userRequireMake = 1; payload.userRequireMake = 1;
} else if (this.nowMake === false) {
payload.userRequireMakeTime = this.getPickupMakeTime(); payload.userRequireMakeTime = this.getPickupMakeTime();
} }
} }
@ -2845,6 +2877,11 @@
this.openNowMakePopup(); this.openNowMakePopup();
return; return;
} }
if (this.needsPickupAppointment() && !this.pickupTime) {
this.tui.toast('请选择用餐时间');
this.openPickupTimePicker();
return;
}
if (!this.currentOrderId || !this.backendTotalAmount) { if (!this.currentOrderId || !this.backendTotalAmount) {
if (this.pendingPaySpecChoices) { if (this.pendingPaySpecChoices) {
this.createFTFJoinOrder(this.pendingPaySpecChoices, true); this.createFTFJoinOrder(this.pendingPaySpecChoices, true);
@ -3418,6 +3455,15 @@
text-align: center; text-align: center;
} }
.now-make-popup-time {
margin-top: 18rpx;
color: #00231C;
font-size: 48rpx;
font-weight: 900;
line-height: 64rpx;
text-align: center;
}
.now-make-popup-desc { .now-make-popup-desc {
margin-top: 12rpx; margin-top: 12rpx;
color: #6f7f79; color: #6f7f79;

Loading…
Cancel
Save