From 47ac0d937abec18696af0fb91ce1ca614446958b Mon Sep 17 00:00:00 2001 From: wangfukang <15630117759@163.com> Date: Tue, 30 Jun 2026 14:27:07 +0800 Subject: [PATCH] 1 --- pages/index/index.vue | 84 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 81 insertions(+), 3 deletions(-) diff --git a/pages/index/index.vue b/pages/index/index.vue index b6a4fc5..bfe0bfe 100644 --- a/pages/index/index.vue +++ b/pages/index/index.vue @@ -431,7 +431,7 @@ {{item.receiverAddress != null ? item.receiverAddress : ''}} - + @@ -452,6 +452,14 @@ v-if="item.deliveryFeeMarketplace > 0">(包含¥{{item.deliveryFeeMarketplace}}平台奖励佣金) + + + {{getMustFinishWarningText(item)}} + + + 备注:{{item.remark}} @@ -784,6 +792,8 @@ putshopArea: [], totalPages: 1, deliveryQueryVersion: 0, + deliveryNowTime: Date.now(), + deliveryTimer: null, swipeOrderLowPerf: false, swipeOrderDefaultStyle: { progress: 'transform: translate3d(0, 0, 0) scaleX(0); transition: transform 0.14s ease-out;', @@ -895,6 +905,7 @@ this.getDelivery(); }, onLoad(option) { + this.startDeliveryTimeTimer() if (option && option.tabIndex !== undefined) { const tabIndex = Number(option.tabIndex) if (!isNaN(tabIndex) && tabIndex > 0) { @@ -1193,6 +1204,47 @@ } }) }, + shouldShowReceiverPhoneIcon(item) { + return !!(item && item.workerId) + }, + parseDeliveryTime(value) { + if (!value) return NaN + if (typeof value === 'number') { + return String(value).length === 10 ? value * 1000 : value + } + const timeText = String(value).trim() + if (!timeText) return NaN + const nativeParsedTime = new Date(timeText).getTime() + if (!isNaN(nativeParsedTime)) return nativeParsedTime + const timeOnlyMatch = timeText.match(/^(\d{1,2}):(\d{1,2})(?::(\d{1,2}))?$/) + if (timeOnlyMatch) { + const currentDate = new Date(this.deliveryNowTime || Date.now()) + currentDate.setHours(Number(timeOnlyMatch[1]), Number(timeOnlyMatch[2]), Number(timeOnlyMatch[3] || 0), 0) + return currentDate.getTime() + } + const parsedTime = new Date(timeText.replace(/-/g, '/')).getTime() + return parsedTime + }, + isNearMustFinishTime(item) { + if (!item || !item.mustFinishTime) return false + const mustFinishTime = this.parseDeliveryTime(item.mustFinishTime) + if (isNaN(mustFinishTime)) return false + return mustFinishTime - this.deliveryNowTime <= 10 * 60 * 1000 + }, + getMustFinishWarningText(item) { + const mustFinishTime = this.parseDeliveryTime(item && item.mustFinishTime) + if (!isNaN(mustFinishTime) && this.deliveryNowTime > mustFinishTime) { + return '已超过用户要求送达时间,为避免纠纷,建议和用户沟通是否继续接单配送' + } + return '已经临近用户要求送达时间,为避免纠纷,建议和用户沟通是否继续接单配送。' + }, + startDeliveryTimeTimer() { + this.deliveryNowTime = Date.now() + if (this.deliveryTimer) return + this.deliveryTimer = setInterval(() => { + this.deliveryNowTime = Date.now() + }, 60 * 1000) + }, isSwipeOrderActive(item, index) { if (!item) return false return this.swipeOrder.id === item.id && this.swipeOrder.index === index && this.swipeOrder.progress > 0 @@ -2123,7 +2175,6 @@ } .order-notice-wrap { - // background: linear-gradient(180deg, rgba(255, 255, 255, 0.96) 0%, rgba(250, 255, 250, 0.72) 100%); position: relative; top:10rpx; z-index: 3; @@ -2138,7 +2189,7 @@ border: 1px solid rgba(255, 255, 255, 0.82); background: radial-gradient(circle at 88% 8%, rgba(166, 255, 234, 0.24) 0, rgba(166, 255, 234, 0) 130rpx), - linear-gradient(135deg, rgba(255, 255, 255, 0.82), rgba(247, 255, 251, 0.76)); + linear-gradient(135deg, #ffffff, #f7fffb); box-shadow: 0 20rpx 46rpx rgba(0, 35, 28, 0.09), inset 0 0 0 1px rgba(255, 255, 255, 0.68); z-index: 99; position: absolute; @@ -4055,6 +4106,33 @@ color: rgba(255, 57, 57, 1); } + .delivery-time-warning { + width: 95%; + margin: 20rpx auto 0; + padding: 18rpx 20rpx; + box-sizing: border-box; + display: flex; + align-items: center; + justify-content: space-between; + background: rgba(255, 117, 88, 0.08); + border: 1px solid rgba(255, 117, 88, 0.18); + border-radius: 20rpx; + color: rgba(255, 57, 57, 1); + font-size: 24rpx; + line-height: 36rpx; + } + + .delivery-time-warning-text { + flex: 1; + padding-right: 18rpx; + } + + .delivery-time-warning-phone { + width: 55rpx; + height: 55rpx; + flex-shrink: 0; + } + .title-sort { height: 100rpx; display: flex;