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