src/robotaxi/pages/begin-route/components/calling-car-modules/door-trunk-control.tsx
@@ -2,6 +2,7 @@ import { View, Image } from "@tarojs/components"; import { useState, useRef, useEffect } from "react"; import { unlockVehicle, queryVehicleTrunkOpenStatus } from '../../../../api/begin-route'; import { getOrderId } from '../../../../utils/order'; import { TripStatus } from '../../constants/trip-status'; type Props = { @@ -68,7 +69,7 @@ // 解锁车门/后备箱,后备箱场景会轮询确认结果 const handleUnlock = async (doorType: 'door' | 'trunk', onSuccess?: () => void) => { const targetOrderId = orderId || Taro.getStorageSync('orderId'); const targetOrderId = getOrderId(orderId); if (!targetOrderId) return; const locationPayload = await getUnlockLocationPayload(); src/robotaxi/pages/begin-route/components/calling-car-modules/evaluation-card.tsx
@@ -2,6 +2,7 @@ import { View, Image, Text } from "@tarojs/components"; import { useState, useEffect, useRef } from "react"; import { submitOrderComment } from '../../../../api/begin-route'; import { getOrderId } from '../../../../utils/order'; import { TripStatus } from '../../constants/trip-status'; type Props = { @@ -57,7 +58,7 @@ handleOpenEvaluatePopup?.(); return; } const targetOrderId = orderId || Taro.getStorageSync('orderId'); const targetOrderId = getOrderId(orderId); if (!targetOrderId) { Taro.showToast({ title: '订单信息缺失,无法提交评价', icon: 'none' }); return; src/robotaxi/pages/begin-route/components/calling-car-modules/temperature-control.tsx
@@ -7,6 +7,7 @@ queryVehicleAirConditionerSwitch, setTemperature } from '../../../../api/begin-route'; import { getOrderId } from '../../../../utils/order'; import { TripStatus } from '../../constants/trip-status'; import { MODIFY_DESTINATION_SKIP_AC_QUERY_ON_RETURN_KEY } from '../../constants/modify-destination'; @@ -105,7 +106,7 @@ if (skipQueryOnThisCycleRef.current) { return; } const targetOrderId = orderId || Taro.getStorageSync('orderId'); const targetOrderId = getOrderId(orderId); if (!targetOrderId) { return; } @@ -126,7 +127,7 @@ if (skipQueryOnThisCycleRef.current) { return; } const targetOrderId = String(orderId || Taro.getStorageSync('orderId') || ''); const targetOrderId = getOrderId(orderId); if (!targetOrderId) { return; } @@ -150,7 +151,7 @@ clearTimeout(tempTimerRef.current); } tempTimerRef.current = setTimeout(() => { const targetOrderId = orderId || Taro.getStorageSync('orderId'); const targetOrderId = getOrderId(orderId); if (!targetOrderId) { return; } @@ -209,7 +210,7 @@ if (!canToggleSwitch) { return; } const targetOrderId = String(orderId || Taro.getStorageSync('orderId') || ''); const targetOrderId = getOrderId(orderId); if (!targetOrderId) { return; } src/robotaxi/pages/begin-route/components/calling-car-modules/use-trip-countdown.ts
@@ -2,6 +2,7 @@ import { useState, useEffect, useRef, useCallback } from 'react'; import { getRemainingSeconds, parseFlexibleEndTimeMs } from '../../../../../utils/Robotaxi-public-method'; import { getWaitTime, queryOrderFinishTime, cancelOrder, queryFareBreakdown } from '../../../../api/begin-route'; import { getOrderId } from '../../../../utils/order'; import { TripStatus } from '../../constants/trip-status'; type Props = { @@ -17,7 +18,7 @@ const PICKUP_END_TIME_KEY = 'pickupEndTime'; const FINISH_END_TIME_KEY = 'finishEndTime'; const getTargetOrderId = (orderId?: string) => orderId || Taro.getStorageSync('orderId'); const getTargetOrderId = (orderId?: string) => getOrderId(orderId); export default function useTripCountdown({ tripStatus, src/robotaxi/pages/begin-route/components/evaluate-popup.tsx
@@ -4,6 +4,7 @@ import './css-folder/evaluate-popup.less' import { getOrderCommentType, submitComplaint, submitOrderComment } from '../../../api/begin-route'; import { _ROBOTAXI_HOST } from '../../../../constants/api'; import { getOrderId } from '../../../utils/order'; type Props = { show?: boolean; @@ -64,7 +65,7 @@ }); return; } const targetOrderId = orderId || Taro.getStorageSync('orderId'); const targetOrderId = getOrderId(orderId); if (!targetOrderId) { Taro.showToast({ title: '订单信息缺失,无法提交评价', src/robotaxi/pages/begin-route/hooks/use-order-cancel.ts
@@ -1,6 +1,7 @@ import Taro from '@tarojs/taro'; import { clearOrderTripStorage } from '../../../../utils/Robotaxi-public-method'; import { cancelOrder } from '../../../api/begin-route'; import { getOrderId } from '../../../utils/order'; import { TripStatus } from '../constants/trip-status'; import { OrderActionsDeps } from './use-order-actions.shared'; @@ -71,7 +72,7 @@ * 上车倒计时超时后发起自动取消,并记录取消前真实状态供 socket 确认时复用。 */ const handlePickupTimeoutAutoCancel = () => { const targetOrderId = String(deps.orderId || Taro.getStorageSync('orderId') || ''); const targetOrderId = getOrderId(deps.orderId); deps.pendingCancelContextRef.current = { orderId: targetOrderId, tripStatus: deps.tripStatus, @@ -120,7 +121,7 @@ return; } const targetOrderId = deps.orderId || Taro.getStorageSync('orderId'); const targetOrderId = getOrderId(deps.orderId); if (!targetOrderId) { restartPlanningRoute(); return; src/robotaxi/pages/begin-route/hooks/use-order-payment.ts
@@ -1,6 +1,7 @@ import Taro from '@tarojs/taro'; import { getOrderPayment, endOrder } from '../../../api/begin-route'; import { getOrderDistance } from '../../../api/select-map-site'; import { getOrderId } from '../../../utils/order'; import { TripStatus } from '../constants/trip-status'; import { OrderActionsDeps } from './use-order-actions.shared'; @@ -21,7 +22,7 @@ /** * 读取当前订单 ID。 */ const getTargetOrderId = () => deps.orderId || Taro.getStorageSync('orderId'); const getTargetOrderId = () => getOrderId(deps.orderId); /** * 同步支付成功态。 src/robotaxi/pages/begin-route/hooks/use-web-socket-events.ts
@@ -4,6 +4,7 @@ import { queryVehicleByOrderId } from '../../../api/begin-route'; import { clearOrderTripStorage, safeParse } from '../../../../utils/Robotaxi-public-method'; import { normalizeDistanceKm, normalizeDurationSeconds } from '../../../../robotaxi/utils/format'; import { getOrderId } from '../../../utils/order'; import { toTripStatus, TripStatus } from '../constants/trip-status'; import { PENDING_CANCEL_CONTEXT_TTL_MS, PendingCancelContext } from './use-order-actions.shared'; import { normalizeSocketRouteSnapshot, normalizeSpeedMps } from './runtime-sync'; @@ -62,7 +63,7 @@ }; const resolveOrderId = (payload: any, fallbackOrderId: string) => payload?.content?.orderId || payload?.orderId || fallbackOrderId || Taro.getStorageSync('orderId'); getOrderId(payload?.content?.orderId || payload?.orderId || fallbackOrderId); // 解析“上一单乘客下车点”坐标,兼容顶层字段、content 字段与历史大小写差异。 const parseBeforeUserEndSite = (payload: any) => { @@ -242,7 +243,7 @@ ) => { const changeStatusOld = deps.tripStatusRef.current; const pendingCancelContext = getValidPendingCancelContext(deps); const currentOrderId = deps.orderId || Taro.getStorageSync('orderId') || pendingCancelContext?.orderId || ''; const currentOrderId = getOrderId(deps.orderId) || pendingCancelContext?.orderId || ''; const incomingOrderId = payload?.content?.orderId || payload?.orderId; if (!isSameOrder(incomingOrderId, currentOrderId)) { return; @@ -335,7 +336,7 @@ syncVehiclePointOnly(routeSnapshot, deps); return; } const currentOrderId = String(deps.orderId || Taro.getStorageSync('orderId') || ''); const currentOrderId = getOrderId(deps.orderId); if (routeSnapshot.vehicleMoveAlongPoints.length > 1) { writePassedRouteCache(currentOrderId, routeSnapshot.vehicleMoveAlongPoints); } @@ -395,8 +396,8 @@ }; orderUpdatePriceHandlerRef.current = (payload) => { const currentDeps = depsRef.current; const incomingOrderId = payload?.orderId || payload?.content?.orderId || Taro.getStorageSync('orderId'); const currentOrderId = currentDeps.orderId || Taro.getStorageSync('orderId'); const incomingOrderId = getOrderId(payload?.orderId || payload?.content?.orderId); const currentOrderId = getOrderId(currentDeps.orderId); if (!isSameOrder(incomingOrderId, currentOrderId)) { return; } @@ -404,8 +405,8 @@ }; orderReassignHandlerRef.current = (payload) => { const currentDeps = depsRef.current; const incomingOrderId = payload?.orderId || payload?.content?.orderId || Taro.getStorageSync('orderId'); const currentOrderId = currentDeps.orderId || Taro.getStorageSync('orderId'); const incomingOrderId = getOrderId(payload?.orderId || payload?.content?.orderId); const currentOrderId = getOrderId(currentDeps.orderId); if (!isSameOrder(incomingOrderId, currentOrderId)) { return; } @@ -413,7 +414,7 @@ const requestedOrderId = String(currentOrderId || ''); queryVehicleByOrderId({ orderId: currentOrderId }) .then((res: any) => { const latestOrderId = String((depsRef.current.orderId || Taro.getStorageSync('orderId') || '')); const latestOrderId = getOrderId(depsRef.current.orderId); if (!requestedOrderId || latestOrderId !== requestedOrderId) { return; } @@ -423,8 +424,8 @@ }; updateEndAddressStatusHandlerRef.current = (payload) => { const currentDeps = depsRef.current; const incomingOrderId = payload?.content?.orderId || Taro.getStorageSync('orderId'); const currentOrderId = currentDeps.orderId || Taro.getStorageSync('orderId'); const incomingOrderId = getOrderId(payload?.content?.orderId); const currentOrderId = getOrderId(currentDeps.orderId); if (!isSameOrder(incomingOrderId, currentOrderId)) { return; } src/robotaxi/pages/begin-route/index.tsx
@@ -51,6 +51,7 @@ import { getDistance } from '../../../utils/Robotaxi-public-method'; import { CurrentUserLocation } from './hooks/use-route-manager.shared'; import { MODIFY_DESTINATION_SESSION_KEY } from './constants/modify-destination'; import { getOrderId } from '../../utils/order'; import { _ROBOTAXI_WS_HOST } from '../../../constants/api'; @@ -835,7 +836,7 @@ pageDidShowVersion, requestRouteAndFare: routeRequestRouteAndFare }); const shareOrderId = orderId || Taro.getStorageSync('orderId') || ''; const shareOrderId = getOrderId(orderId); const onShareAppMessage = () => ({ title: `我正在使用小鹏Robotaxi,车牌号[${vehicleInfo?.plateNumber || ''}]`, src/robotaxi/pages/order/detail/index.tsx
@@ -6,6 +6,7 @@ import EvaluatePopup from '../../begin-route/components/evaluate-popup'; import { submitOrderComment } from '../../../api/begin-route'; import { formatTripDistance, formatTripDurationFromSeconds, safeParse } from '../../../../utils/Robotaxi-public-method'; import { getOrderId } from '../../../utils/order'; export default function orderDetailPage() { const router = useRouter(); @@ -229,7 +230,7 @@ handleOpenEvaluatePopup(); return; } const targetOrderId = orderId || Taro.getStorageSync('orderId'); const targetOrderId = getOrderId(orderId); if (!targetOrderId) { Taro.showToast({ title: '订单信息缺失,无法提交评价', icon: 'none' }); return; src/robotaxi/utils/order.ts
New file @@ -0,0 +1,15 @@ import Taro from '@tarojs/taro'; /** * 获取当前订单 ID,优先使用显式传入值,缺失时再从本地缓存兜底读取。 */ export function getOrderId(explicitId?: string): string { if (explicitId) { return explicitId; } try { return Taro.getStorageSync('orderId') || ''; } catch { return ''; } }