| src/robotaxi/pages/share-trip/components/share-trip-view.tsx | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/robotaxi/pages/share-trip/hooks/use-share-trip-runtime.ts | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/robotaxi/pages/share-trip/index.tsx | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/robotaxi/pages/share-trip/components/share-trip-view.tsx
@@ -43,6 +43,7 @@ const hasRouteDuration = typeof routeDuration === 'number' && Number.isFinite(routeDuration); const durationDisplay = hasRouteDuration ? formatDurationDisplay(routeDuration) : null; // 预计耗时展示文案 const shouldShowEndPointRow = tripData?.tripStatus !== TripStatus.VehicleArrivedPickup; // 到达上车点阶段与 begin-route 对齐,隐藏终点信息 const isCanceledTrip = tripData?.tripStatus === TripStatus.CancelOnlyPickup || Number(tripData?.rawOrderStatus) === 0; if (isExpired) { return ( @@ -117,8 +118,11 @@ 乘客已上车,正在前往目的地 </View> )} {isCanceledTrip && ( <View className='calling-car-head-title'>乘客已取消行程</View> )} {tripData?.tripStatus >= TripStatus.ArrivedDestination && ( <View className='calling-car-head-title'>已到达目的地</View> !isCanceledTrip && <View className='calling-car-head-title'>已到达目的地</View> )} </View> <View className='car-card'> @@ -151,7 +155,7 @@ <View className={`car-card-temp-title ${ tripData?.tripStatus === TripStatus.InService || tripData?.tripStatus >= TripStatus.ArrivedDestination || (tripData?.tripStatus >= TripStatus.ArrivedDestination && !isCanceledTrip) ? 'disabled-text' : '' }`} @@ -160,7 +164,7 @@ </View> </View> {(tripData?.tripStatus === TripStatus.InService || tripData?.tripStatus >= TripStatus.ArrivedDestination) || (tripData?.tripStatus >= TripStatus.ArrivedDestination && !isCanceledTrip)) && tripData?.boardingTime && ( <View className='car-card-temp-time disabled-text'> {tripData.boardingTime} 上车 @@ -173,7 +177,7 @@ <View className='dot end'></View> <View className={`car-card-temp-title ${ tripData?.tripStatus >= TripStatus.ArrivedDestination tripData?.tripStatus >= TripStatus.ArrivedDestination && !isCanceledTrip ? 'disabled-text' : '' }`} @@ -182,6 +186,7 @@ </View> </View> {tripData?.tripStatus >= TripStatus.ArrivedDestination && !isCanceledTrip && tripData?.getoffTime && ( <View className='car-card-temp-time disabled-text'> {tripData.getoffTime} 到达 src/robotaxi/pages/share-trip/hooks/use-share-trip-runtime.ts
@@ -60,6 +60,16 @@ const applySmoothRouteSnapshotRef = useRef(deps.applySmoothRouteSnapshot); // 平滑快照消费函数引用 /** * 分享页把后端订单状态 0 单独识别为取消态,避免复用发布态导致误展示路线。 */ const resolveShareTripStatus = (status: any) => { if (Number(status) === 0) { return TripStatus.CancelOnlyPickup; } return mapOrderStatusToTripStatus(status) as TripStatus; }; /** * 识别“行程结束超过24小时”的接口异常。 */ const isOver24HoursExpiredError = (error: any) => { @@ -349,6 +359,25 @@ }; /** * 取消态只保留起终点 marker,并清空路线/车辆运行态。 */ const applyCanceledTripState = (nextStartSite: any, nextEndSite: any) => { deps.applyRoutePoints([]); deps.erasePassedRouteSegments([]); deps.setRouteDistance(null); deps.setRouteDuration(null); deps.setVehicleMoveAlongPoints([]); const center = getCenterPoint([ ...(nextStartSite ? [nextStartSite] : []), ...(nextEndSite ? [nextEndSite] : []), ]); if (center) { deps.setLongitude(center.longitude); deps.setLatitude(center.latitude); } }; /** * 完单后切换为订单轨迹接口,确保能拿到完整行程轨迹。 * 已到达目的地仍优先走分享实时路线接口,否则该状态下可能拿不到可绘制 polyline。 */ @@ -419,7 +448,7 @@ }; const applyShareInfo = (info: any) => { const mappedStatus = mapOrderStatusToTripStatus(info?.status) as TripStatus; const mappedStatus = resolveShareTripStatus(info?.status); const nextStartSite = buildSite(info, 'start'); const nextEndSite = buildSite(info, 'end'); const etaMinutes = Math.max( @@ -434,6 +463,7 @@ vehicleColor: info?.vehicleColor || '', vehicleCode: info?.vehicleCode || '', vehiclePictures: info?.vehiclePictures || info?.vehicleImage || '', rawOrderStatus: Number(info?.status), startPointName: info?.startPointName || nextStartSite?.name || '上车点', endPointName: info?.endPointName || nextEndSite?.name || '终点', boardingTime: formatTimeText(info?.boardingTime || info?.pickupTime), @@ -453,6 +483,11 @@ deps.setIsExpired(resolveExpiredState(info, mappedStatus)); // deps.setShowReminder(Boolean(info?.showReminder)); if (mappedStatus === TripStatus.CancelOnlyPickup) { // 取消态不展示路线,地图只保留起终点并停止后续动态联动。 applyCanceledTripState(nextStartSite, nextEndSite); } return { mappedStatus, nextStartSite, @@ -466,7 +501,7 @@ getFieldValue(routeResponse, ['tripStatus', 'orderStatus']); const parsedStatus = Number(statusValue); return Number.isFinite(parsedStatus) ? (mapOrderStatusToTripStatus(parsedStatus) as TripStatus) ? resolveShareTripStatus(parsedStatus) : null; }; @@ -530,6 +565,13 @@ } } if (mappedStatus === TripStatus.CancelOnlyPickup) { applyCanceledTripState(nextStartSite, nextEndSite); stopPolling(); errorToastShownRef.current = false; return false; } syncShareRoute(routeResponse, mappedStatus, nextStartSite, nextEndSite); if (mappedStatus >= TripStatus.ArrivedDestination) { stopPolling(); @@ -547,6 +589,10 @@ fetchInitialShareInfo() .then(async (infoState) => { if (!infoState || cancelled) return; if (infoState.mappedStatus === TripStatus.CancelOnlyPickup) { stopPolling(); return; } const shouldContinuePolling = await fetchShareTripData(); if (cancelled) return; if (shouldContinuePolling) { src/robotaxi/pages/share-trip/index.tsx
@@ -74,7 +74,7 @@ [TripStatus.ArrivedDestination]: { showPickup: false, showDropoff: true, showCar: false, showRoute: true, showWalking: false, viewport: 'order_detail', translateCar: false }, [TripStatus.TripFinished]: { showPickup: true, showDropoff: true, showCar: false, showRoute: true, showWalking: false, viewport: 'order_detail', translateCar: false }, [TripStatus.PaymentSuccess]: { showPickup: true, showDropoff: true, showCar: false, showRoute: true, showWalking: false, viewport: 'order_detail', translateCar: false }, [TripStatus.CancelOnlyPickup]: { showPickup: true, showDropoff: false, showCar: false, showRoute: false, showWalking: false, viewport: 'pickup', translateCar: false }, [TripStatus.CancelOnlyPickup]: { showPickup: true, showDropoff: true, showCar: false, showRoute: false, showWalking: false, viewport: 'order_detail', translateCar: false }, }; // 行程状态显示规则 const statusRule = useMemo(