From 13c960a2b6bb54797bdbd03aa3184af507d94a9b Mon Sep 17 00:00:00 2001
From: 卢春龙 <lucl@xiaopeng.com>
Date: 星期一, 20 四月 2026 10:42:28 +0800
Subject: [PATCH] Merge branch 'feature_pr_fix' into 'develop'
---
src/robotaxi/pages/begin-route/components/calling-car-modules/door-trunk-control.tsx | 28 ++++++++++++++++++----------
1 files changed, 18 insertions(+), 10 deletions(-)
diff --git a/src/robotaxi/pages/begin-route/components/calling-car-modules/door-trunk-control.tsx b/src/robotaxi/pages/begin-route/components/calling-car-modules/door-trunk-control.tsx
index 5168982..0fcba6e 100644
--- a/src/robotaxi/pages/begin-route/components/calling-car-modules/door-trunk-control.tsx
+++ b/src/robotaxi/pages/begin-route/components/calling-car-modules/door-trunk-control.tsx
@@ -18,15 +18,17 @@
handleOpenOverRoutePopup,
handleOpenAnnouncementsPopup
}: Props) {
- const [trunkStatus, setTrunkStatus] = useState(orderTrunkStatus);
- const [lockStatus, setLockStatus] = useState(false);
- const trunkPollTimerRef = useRef<any>(null);
- const hasShownAnnouncementsRef = useRef(false);
+ const [trunkStatus, setTrunkStatus] = useState(orderTrunkStatus); // 后备箱开关状态
+ const [lockStatus, setLockStatus] = useState(false); // 车门解锁状态
+ const trunkPollTimerRef = useRef<any>(null); // 后备箱状态轮询定时器
+ const hasShownAnnouncementsRef = useRef(false); // 安全须知是否已展示
+ // 外部后备箱状态变化时同步本地状态
useEffect(() => {
setTrunkStatus(orderTrunkStatus);
}, [orderTrunkStatus]);
+ // 组件卸载时清理轮询定时器
useEffect(() => {
return () => {
if (trunkPollTimerRef.current) {
@@ -35,6 +37,7 @@
};
}, []);
+ // 获取解锁请求所需定位参数,失败时回退到缓存上车点
const getUnlockLocationPayload = async () => {
try {
Taro.showLoading({ title: '正在获取位置...', mask: true });
@@ -57,11 +60,17 @@
return {};
};
+ // 解锁车门/后备箱,后备箱场景会轮询确认结果
const handleUnlock = async (doorType: 'door' | 'trunk', onSuccess?: () => void) => {
const targetOrderId = orderId || Taro.getStorageSync('orderId');
if (!targetOrderId) return;
const locationPayload = await getUnlockLocationPayload();
+ const isCloseAction = doorType === 'trunk' ? !!trunkStatus : false;
+ const actionLoadingText = doorType === 'trunk'
+ ? (isCloseAction ? '正在关闭后备箱' : '正在开启后备箱')
+ : '正在解锁车门';
+ Taro.showLoading({ title: actionLoadingText, mask: true });
unlockVehicle({
orderId: targetOrderId,
doorType,
@@ -69,16 +78,13 @@
}).then((res: any) => {
console.log('解锁结果:', res);
- if (!res) {
- Taro.showToast({ title: '解锁失败,请重试或联系客服', icon: 'none' });
+ if (res?.code !== 200 || !res?.data) {
+ Taro.hideLoading();
+ Taro.showToast({ title: res?.msg || '解锁失败,请重试或联系客服', icon: 'none' });
return;
}
if (doorType === 'trunk') {
- const isCloseAction = !!trunkStatus;
- const loadingText = isCloseAction ? '正在关闭后备箱' : '正在开启后备箱';
- Taro.showLoading({ title: loadingText, mask: true });
-
let pollCount = 0;
const maxPolls = 5;
const pollInterval = 2000;
@@ -149,6 +155,7 @@
}
if (doorType === 'door') {
+ Taro.hideLoading();
Taro.showToast({ title: '右侧车门已解锁', icon: 'none' });
if (!hasShownAnnouncementsRef.current) {
handleOpenAnnouncementsPopup?.();
@@ -156,6 +163,7 @@
}
}
}).catch(() => {
+ Taro.hideLoading();
Taro.showToast({ title: '解锁失败,请重试或联系客服', icon: 'none' });
});
};
--
Gitblit v1.7.1