src/robotaxi/pages/begin-route/components/calling-car-modules/fragrance-control/index.tsx
@@ -87,6 +87,9 @@ // 正在下发的香型通道(该卡片显示 loading),空串表示无 const [applyingChannelId, setApplyingChannelId] = useState(''); const querySeqRef = useRef(0); // 记录本次接驾态周期内已查询过香氛状态的订单 ID,避免重复请求(同一订单在初始化恢复 // 流程中 tripStatus/orderId/hasPreviousOrder 会分批异步更新,触发本 effect 多次)。 const queriedOrderIdRef = useRef(''); const { animationData, shouldRender } = useBottomPopupAnimation(panelVisible); const hasScents = scents.length > 0; @@ -94,12 +97,19 @@ // 进入接驾态查询香氛状态;连环单不查询、不展示 useEffect(() => { if (tripStatus !== TripStatus.VehicleApproaching || hasPreviousOrder) { // 离开接驾态:重置去重标记,允许下次进入接驾态时重新查询一次。 queriedOrderIdRef.current = ''; return; } const targetOrderId = getOrderId(orderId); if (!targetOrderId) { return; } // 去重:同一订单在本次接驾态周期内只查询一次。 if (queriedOrderIdRef.current === targetOrderId) { return; } queriedOrderIdRef.current = targetOrderId; const snapshotSeq = ++querySeqRef.current; queryCabinFragrance(targetOrderId).then((res: any) => { if (querySeqRef.current !== snapshotSeq) { src/robotaxi/pages/begin-route/components/calling-car-modules/seat-hv-control/index.tsx
@@ -52,18 +52,28 @@ // 正在下发的按钮标识 `${position}:${kind}`(该按钮显示 loading,其余按钮置灰防重复),空串表示无 const [applyingKey, setApplyingKey] = useState(''); const querySeqRef = useRef(0); // 记录本次接驾态周期内已查询过座椅状态的订单 ID,避免重复请求(同一订单在初始化恢复 // 流程中 tripStatus/orderId/hasPreviousOrder 会分批异步更新,触发本 effect 多次)。 const queriedOrderIdRef = useRef(''); const hasSeats = seats.length > 0; // 进入接驾态且面板可见时查询座椅状态;连环单不查询、不展示 useEffect(() => { if (!active || tripStatus !== TripStatus.VehicleApproaching || hasPreviousOrder) { // 面板隐藏或离开接驾态:重置去重标记,允许下次可见/进入接驾态时重新查询一次。 queriedOrderIdRef.current = ''; return; } const targetOrderId = getOrderId(orderId); if (!targetOrderId) { return; } // 去重:同一订单在本次接驾态周期内只查询一次。 if (queriedOrderIdRef.current === targetOrderId) { return; } queriedOrderIdRef.current = targetOrderId; const snapshotSeq = ++querySeqRef.current; querySeatHv(targetOrderId).then((res: any) => { if (querySeqRef.current !== snapshotSeq) { src/robotaxi/pages/begin-route/components/calling-car-modules/temperature-control.tsx
@@ -49,6 +49,9 @@ const tempTimerRef = useRef<any>(null); const lastConfirmedTempRef = useRef<number | null>(null); const skipQueryOnThisCycleRef = useRef(false); // 记录本次接驾态周期内已查询过空调状态的订单 ID,避免同一订单在初始化过程中因 // tripStatus/orderId/hasPreviousOrder 分批异步更新而重复触发查询。 const queriedOrderIdRef = useRef(''); const userActionSeqRef = useRef(0); const calibrationSeqRef = useRef(0); const { visibleLoadingKey: acLoadingKey, startLoading, stopLoading } = useMinimumSpinLoading<'ac'>(); @@ -281,6 +284,8 @@ useEffect(() => { if (tripStatus !== TripStatus.VehicleApproaching) { // 离开接驾态:重置去重标记,允许下次进入接驾态时重新查询一次。 queriedOrderIdRef.current = ''; return; } // 连环派单场景:后端明确告知车辆仍在执行上一单(hasPreviousOrder 为 true)时, @@ -296,6 +301,12 @@ if (!targetOrderId) { return; } // 去重:同一订单在本次接驾态周期内只查询一次。tripStatus/pageDidShowVersion/hasPreviousOrder // 在页面初始化恢复流程中会分多次异步更新,但 orderId 不变时无需重复查询。 if (queriedOrderIdRef.current === targetOrderId) { return; } queriedOrderIdRef.current = targetOrderId; const storageData = getAcStorage(targetOrderId);