From ac3ff28a6530344f37820acb42f70f5ea5d448a6 Mon Sep 17 00:00:00 2001
From: hejianhao <15708179461@qq.com>
Date: 星期五, 13 三月 2026 18:24:49 +0800
Subject: [PATCH] fix(robotaxi): 修复订单状态判断和立即呼叫按钮禁用逻辑
---
src/robotaxi/pages/begin-route/components/release-route.tsx | 5 ++
src/pages/robotaxi/home/index.tsx | 2
src/robotaxi/pages/begin-route/index.tsx | 65 ++++++++++++++++++++++++++++----
src/robotaxi/pages/begin-route/components/css-folder/release-route.less | 18 ++++++--
4 files changed, 74 insertions(+), 16 deletions(-)
diff --git a/src/pages/robotaxi/home/index.tsx b/src/pages/robotaxi/home/index.tsx
index 9edfcc6..fa86c67 100644
--- a/src/pages/robotaxi/home/index.tsx
+++ b/src/pages/robotaxi/home/index.tsx
@@ -1209,7 +1209,7 @@
</View>
}
{
- [3, 4, 5, 6, 7, 8].includes(tripStatus) &&
+ [4, 5, 6, 7, 8].includes(tripStatus) &&
<View className="order-status-left">
{
orderData.vehiclePictures ?
diff --git a/src/robotaxi/pages/begin-route/components/css-folder/release-route.less b/src/robotaxi/pages/begin-route/components/css-folder/release-route.less
index c59fa4f..4c3501b 100644
--- a/src/robotaxi/pages/begin-route/components/css-folder/release-route.less
+++ b/src/robotaxi/pages/begin-route/components/css-folder/release-route.less
@@ -212,8 +212,12 @@
}
}
- .confirm-btn {
+ .confirm-btn-wrapper {
+ position: relative;
margin-top: 64px;
+ height: 88px;
+ }
+ .confirm-btn {
height: 88px;
display: flex;
justify-content: center;
@@ -224,10 +228,14 @@
letter-spacing: normal;
color: #FFFFFF;
}
- .confirm-btn-disabled {
- background: #C0C6D4;
- color: rgba(255, 255, 255, 0.9);
- pointer-events: none;
+ .confirm-btn-mask {
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ border-radius: 16px;
+ background: rgba(255, 255, 255, 0.4);
}
}
}
diff --git a/src/robotaxi/pages/begin-route/components/release-route.tsx b/src/robotaxi/pages/begin-route/components/release-route.tsx
index 6ae3cd4..cc1ad22 100644
--- a/src/robotaxi/pages/begin-route/components/release-route.tsx
+++ b/src/robotaxi/pages/begin-route/components/release-route.tsx
@@ -78,7 +78,10 @@
</View>
</View>
</View>
- <View onClick={() => !isCallDisabled && callImmediately()} className={`confirm-btn${isCallDisabled ? ' confirm-btn-disabled' : ''}`}>立即呼叫</View>
+ <View className="confirm-btn-wrapper">
+ <View onClick={() => !isCallDisabled && callImmediately()} className="confirm-btn">立即呼叫</View>
+ {isCallDisabled && <View className="confirm-btn-mask" />}
+ </View>
</View>
</View>
)
diff --git a/src/robotaxi/pages/begin-route/index.tsx b/src/robotaxi/pages/begin-route/index.tsx
index d0a3686..a96e4aa 100644
--- a/src/robotaxi/pages/begin-route/index.tsx
+++ b/src/robotaxi/pages/begin-route/index.tsx
@@ -42,6 +42,7 @@
queryOrderRoute,
endOrder,
} from '../../../robotaxi/api/begin-route';
+import { getOrderActive } from '../../../robotaxi/api/home';
import { getOrderDetail } from '../../../robotaxi/api/order';
import { getOrderDistance } from '../../api/select-map-site';
import { checkOtp } from '../../../utils/tools';
@@ -77,6 +78,7 @@
const carMarkerInitialized = useRef(false);
const [fareEstimate, setFareEstimate] = useState<any>({}); // 预估费用信息
const [routeAndFareError, setRouteAndFareError] = useState(false);
+ const [callSubmitting, setCallSubmitting] = useState(false);
const [vehicleLocation, setVehicleLocation] = useState<{ latitude: number, longitude: number } | null>(null);
const [vehicleDirection, setVehicleDirection] = useState<number | null>(null);
const [routeDistance, setRouteDistance] = useState<{ value: number; unit: 'km' | 'm' } | null>(null); // 路线距离
@@ -774,6 +776,9 @@
useEffect(() => {
Taro.setStorageSync('tripStatus', tripStatus);
tripStatusRef.current = tripStatus;
+ if (tripStatus === 1) {
+ setCallSubmitting(false);
+ }
let timer: any = null;
let requoteTimer: any = null;
// tripStatus=1:开启发布行程停留计时,用于10分钟后提示需重新估价
@@ -1152,13 +1157,8 @@
const s = Taro.getStorageSync('startSite');
const e = Taro.getStorageSync('endSite');
const cachedOrderId = Taro.getStorageSync('orderId');
- const cachedTripStatus = Number(Taro.getStorageSync('tripStatus')) || tripStatus;
- if (s) {
- setStartSite(s);
- }
- if (e) {
- setEndSite(e);
- }
+ const cachedTripStatusStorage = Taro.getStorageSync('tripStatus');
+ const cachedTripStatus = Number(cachedTripStatusStorage) || tripStatus;
if (cachedOrderId) {
setOrderId(cachedOrderId);
queryVehicleByOrderId({ orderId: cachedOrderId })
@@ -1166,6 +1166,42 @@
setVehicleInfo(res);
})
.catch(() => { });
+ }
+ if (cachedTripStatusStorage) {
+ getOrderActive()
+ .then((res: any) => {
+ if (!res) {
+ return;
+ }
+ const nextStartSite = {
+ id: res.startPointId || '',
+ name: res.startPointName || '',
+ latitude: res.startLat || 0,
+ longitude: res.startLon || 0,
+ electronicAreaId: res.xpElectronicFenceAreaId || '',
+ time: res.startParkingTimeLimit || 0,
+ };
+ const nextEndSite = {
+ id: res.endPointId || '',
+ name: res.endPointName || '',
+ latitude: res.endLat || 0,
+ longitude: res.endLon || 0,
+ electronicAreaId: res.xpElectronicFenceAreaId || '',
+ time: res.endParkingTimeLimit || 0,
+ };
+ Taro.setStorageSync('startSite', nextStartSite);
+ Taro.setStorageSync('endSite', nextEndSite);
+ setStartSite(nextStartSite);
+ setEndSite(nextEndSite);
+ })
+ .catch(() => { });
+ } else {
+ if (s) {
+ setStartSite(s);
+ }
+ if (e) {
+ setEndSite(e);
+ }
}
if (cachedOrderId && [4, 5, 6, 7, 8].includes(cachedTripStatus)) {
requestOrderRoute(cachedOrderId, cachedTripStatus);
@@ -1242,8 +1278,13 @@
// 立即呼叫
const callImmediately = debounce(async () => {
+ if (callSubmitting) {
+ return;
+ }
+ setCallSubmitting(true);
const otp = await checkOtp(false);
if (!otp) {
+ setCallSubmitting(false);
jumpTo({ url: '/pages/user/login?hideBack=1' });
return
}
@@ -1252,9 +1293,11 @@
title: '请选择站点',
icon: 'none',
})
+ setCallSubmitting(false);
return
}
if (routeAndFareError) {
+ setCallSubmitting(false);
return
}
const s = Taro.getStorageSync('startSite');
@@ -1263,6 +1306,7 @@
title: '请先选择起终点',
icon: 'none',
})
+ setCallSubmitting(false);
return
}
let maxDistance = distanceConfig?.maxDistance;
@@ -1289,6 +1333,7 @@
if (distance > maxDistance) {
setTipType('2');
setShowTipPopup(true);
+ setCallSubmitting(false);
return;
}
} catch { }
@@ -1298,6 +1343,7 @@
if (distance < minDistance) {
setTipType('1');
setShowTipPopup(true);
+ setCallSubmitting(false);
return;
}
}
@@ -1332,6 +1378,7 @@
}
Taro.setStorageSync('orderId', res?.orderId || '');
} catch (error) {
+ setCallSubmitting(false);
return
}
setTripStatus(2);
@@ -1371,7 +1418,7 @@
setCancelType(4);
} catch (error) {
Taro.showToast({
- title: '取消失败,请重试',
+ title: '取消订单失败,请重试',
icon: 'none',
});
return;
@@ -1690,7 +1737,7 @@
fareEstimate={fareEstimate}
handleOpenPassengerNotice={handleOpenPassengerNotice}
walkingTime={walkingTime}
- isCallDisabled={routeAndFareError}
+ isCallDisabled={routeAndFareError || callSubmitting}
/>
}
{/* 发布中弹窗 */}
--
Gitblit v1.7.1