| | |
| | | if (!isTripStatusAllowModifyEntry) { |
| | | return false; |
| | | } |
| | | if (tripStatus !== TripStatus.InService) { |
| | | return true; |
| | | } |
| | | if (modifyDestinationSocketStatus === 0) { |
| | | return false; |
| | | } |
| | | if (tripStatus !== TripStatus.InService) { |
| | | return true; |
| | | } |
| | | if (modifyDestinationSocketStatus === 1) { |
| | | return true; |
| | |
| | | routeRequestOrderRoute(orderId, tripStatus); |
| | | } |
| | | }; |
| | | // 修改目的地资格被 socket 撤销后,统一退出预览态并提示用户 |
| | | const handleModifyDestinationSocketDisabled = () => { |
| | | const modifyDestinationSession = Taro.getStorageSync(MODIFY_DESTINATION_SESSION_KEY); |
| | | const fallbackPreviousEndSite = modifyDestinationSession?.previousEndSite || previousEndSite; |
| | | restoreModifyDestinationDisplay(fallbackPreviousEndSite, previousFareEstimate, previousRoutePoints); |
| | | openModifyDestinationFailPopup('即将到达终点,已无法修改目的地'); |
| | | }; |
| | | // 失败弹窗确认后退出修改目的地确认态,并恢复修改前路线 |
| | | const handleAcknowledgeModifyDestinationFail = () => { |
| | | setShowModifyDestinationFailPopup(false); |
| | | setModifyDestinationFailMessage(''); |
| | | const modifyDestinationSession = Taro.getStorageSync(MODIFY_DESTINATION_SESSION_KEY); |
| | | const hasActiveModifyDestinationSession = Boolean(modifyDestinationSession?.active); |
| | | if (!isModifyDestinationReviewVisible && !hasActiveModifyDestinationSession) { |
| | | return; |
| | | } |
| | | const fallbackPreviousEndSite = modifyDestinationSession?.previousEndSite; |
| | | restoreModifyDestinationDisplay(fallbackPreviousEndSite, previousFareEstimate, previousRoutePoints); |
| | | }; |
| | | // 预览态下如果后端推送“不可修改”,立即退出预览态并恢复原路线 |
| | | useEffect(() => { |
| | | if (!isModifyDestinationReviewVisible || modifyDestinationSocketStatus !== 0) { |
| | | return; |
| | | } |
| | | handleModifyDestinationSocketDisabled(); |
| | | }, [ |
| | | isModifyDestinationReviewVisible, |
| | | modifyDestinationSocketStatus, |
| | | previousEndSite, |
| | | previousFareEstimate, |
| | | previousRoutePoints, |
| | | orderId, |
| | | tripStatus |
| | | ]); |
| | | // 确认修改前进行阈值校验,命中限制或接口失败都展示失败弹窗 |
| | | const handleConfirmModifyDestinationWithGuard = async (selectedRoute?: any) => { |
| | | if (modifyDestinationSocketStatus === 0) { |
| | | handleModifyDestinationSocketDisabled(); |
| | | return; |
| | | } |
| | | const currentDistance = Number(orderRouteMetrics?.distanceMeters); |
| | | const currentDurationSeconds = Number(orderRouteMetrics?.durationSeconds); |
| | | const distanceLimit = Number(distanceConfig?.xczSyDistance); |