| 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/hooks/use-view-delegates.tsx | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/robotaxi/pages/share-trip/index.tsx | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/robotaxi/pages/share-trip/components/share-trip-view.tsx
@@ -36,7 +36,8 @@ goHome, handleContactService, }: Props) { const durationDisplay = formatDurationDisplay(routeDuration); // 预计耗时展示文案 const hasRouteDuration = typeof routeDuration === 'number' && Number.isFinite(routeDuration); const durationDisplay = hasRouteDuration ? formatDurationDisplay(routeDuration) : null; // 预计耗时展示文案 if (isExpired) { return ( @@ -95,9 +96,15 @@ <View className='calling-car-head'> {tripData?.tripStatus === TripStatus.VehicleApproaching && ( <View className='calling-car-head-title'> 车辆还有 <View className='calling-car-head-title-eta'>{durationDisplay.value}</View> {durationDisplay.unit}到达上车点 {durationDisplay ? ( <> 车辆还有 <View className='calling-car-head-title-eta'>{durationDisplay.value}</View> {durationDisplay.unit}到达上车点 </> ) : ( '车辆正在前往上车点' )} </View> )} {tripData?.tripStatus === TripStatus.VehicleArrivedPickup && ( src/robotaxi/pages/share-trip/hooks/use-share-trip-runtime.ts
@@ -229,7 +229,10 @@ routeResponse?.points, routeResponse?.route?.polyline, routeResponse?.polyline, routeResponse?.content?.polyline, routeResponse?.content?.points, routeResponse?.data?.polyline, routeResponse?.data?.points, ]; for (const candidate of candidates) { if (Array.isArray(candidate) && candidate.length > 0) { @@ -243,8 +246,20 @@ * 提取已服务轨迹点。 */ const extractServedPoints = (routeResponse: any) => { if (!Array.isArray(routeResponse?.servedPoints)) return []; return routeResponse.servedPoints.map(normalizePoint).filter(Boolean) as Array<{ longitude: number; latitude: number }>; const candidates = [ routeResponse?.servedPoints, routeResponse?.served, routeResponse?.content?.servedPoints, routeResponse?.content?.served, routeResponse?.data?.servedPoints, routeResponse?.data?.served, ]; for (const candidate of candidates) { if (Array.isArray(candidate) && candidate.length > 0) { return candidate.map(normalizePoint).filter(Boolean) as Array<{ longitude: number; latitude: number }>; } } return []; }; /** @@ -262,9 +277,17 @@ const syncShareRoute = (routeResponse: any, mappedStatus: TripStatus, nextStartSite: any, nextEndSite: any) => { const extractedRoutePoints = extractRoutePoints(routeResponse); const servedPoints = extractServedPoints(routeResponse); const routeMeta = routeResponse?.content?.route || routeResponse?.route || routeResponse || {}; const distance = normalizeDistanceKm(Number(routeMeta?.distance)); const duration = normalizeDurationSeconds(Number(routeMeta?.duration)); const routeMeta = routeResponse?.content?.route || routeResponse?.route || routeResponse?.content || routeResponse?.data || routeResponse || {}; const distanceValue = getFieldValue(routeMeta, ['distance']) ?? getFieldValue(routeResponse?.content, ['distance']) ?? getFieldValue(routeResponse?.data, ['distance']) ?? getFieldValue(routeResponse, ['distance']); const durationValue = getFieldValue(routeMeta, ['duration']) ?? getFieldValue(routeResponse?.content, ['duration']) ?? getFieldValue(routeResponse?.data, ['duration']) ?? getFieldValue(routeResponse, ['duration']); const distance = normalizeDistanceKm(distanceValue); const duration = normalizeDurationSeconds(durationValue); deps.setRouteDistance(distance); deps.setRouteDuration(duration); applyRoutePointsRef.current(extractedRoutePoints); src/robotaxi/pages/share-trip/hooks/use-view-delegates.tsx
@@ -21,9 +21,10 @@ }; export default function useViewDelegates(deps: Deps) { const durationDisplay = formatDurationDisplay(deps.routeDuration); const hasRouteDuration = typeof deps.routeDuration === 'number' && Number.isFinite(deps.routeDuration); const durationDisplay = hasRouteDuration ? formatDurationDisplay(deps.routeDuration) : null; const routeSummaryText = deps.routeDistance && deps.routeDuration !== null deps.routeDistance && durationDisplay ? `${durationDisplay.value}${durationDisplay.unit} ${deps.routeDistance.value}${ deps.routeDistance.unit === "m" ? "米" : "公里" }` @@ -107,9 +108,9 @@ style={{ marginLeft: "2.5px" }} className="car-time-num" > {durationDisplay.value} {durationDisplay?.value ?? '--'} </CoverView> <CoverView>{durationDisplay.unit}</CoverView> <CoverView>{durationDisplay?.unit || ''}</CoverView> </CoverView> </CoverView> )} @@ -158,9 +159,9 @@ {deps.routeDistance?.unit === "m" ? "米" : "公里"} </View> <View style={{ marginLeft: "2.5px" }} className="car-time-num"> {durationDisplay.value} {durationDisplay?.value ?? '--'} </View> <View style={{ flexShrink: 0 }}>{durationDisplay.unit}</View> <View style={{ flexShrink: 0 }}>{durationDisplay?.unit || ''}</View> </View> </View> </View> src/robotaxi/pages/share-trip/index.tsx
@@ -78,17 +78,6 @@ [tripStatus], ); // 当前状态渲染规则 const shouldShowRoute = statusRule.showRoute; // 是否展示主路线 const displayRouteDuration = useMemo(() => { if (routeDuration === null) { return null; } const normalizedDuration = Number(routeDuration); if (!Number.isFinite(normalizedDuration)) { return null; } // 分享行程统一按分钟展示,不展示秒数;不足 1 分钟时按 1 分钟兜底。 return Math.max(60, normalizedDuration); }, [routeDuration]); const isAndroid = useMemo(() => { try { @@ -134,6 +123,17 @@ statusRule, shouldShowRoute, }); // 路线状态容器 const displayRouteDuration = useMemo(() => { if (routeDuration === null) { return null; } const normalizedDuration = Number(routeDuration); if (!Number.isFinite(normalizedDuration)) { return null; } // 分享行程统一按分钟展示,不展示秒数;不足 1 分钟时按 1 分钟兜底。 return Math.max(60, normalizedDuration); }, [routeDuration]); const { mapScale, updateMapViewportPadding } = useMapViewport({ tripStatus,