From 429208957f30ab9eedc5533a81aaa284048d09f5 Mon Sep 17 00:00:00 2001
From: zjk <852185829@qq.com>
Date: 星期三, 29 七月 2026 21:51:54 +0800
Subject: [PATCH] Merge branch 'feature_v2.4.0' into fix-0716-blue-dev

---
 src/robotaxi/pages/begin-route/components/release-route.tsx |  126 +++++++++++++++++++++++-------------------
 1 files changed, 69 insertions(+), 57 deletions(-)

diff --git a/src/robotaxi/pages/begin-route/components/release-route.tsx b/src/robotaxi/pages/begin-route/components/release-route.tsx
index 5a258c7..3c964fe 100644
--- a/src/robotaxi/pages/begin-route/components/release-route.tsx
+++ b/src/robotaxi/pages/begin-route/components/release-route.tsx
@@ -41,7 +41,7 @@
         if (!Number.isFinite(discountAmount) || discountAmount <= 0) {
             return '0元';
         }
-        return `${parseFloat(discountAmount.toFixed(2))}元`;
+        return `-${parseFloat(discountAmount.toFixed(2))}元`;
     };
 
     useEffect(() => {
@@ -178,49 +178,50 @@
     return (
         <View className="release-route-container">
             <View
-                className='release-route-wrapper'
-                style={{ height: typeof boxHeight === 'number' ? `${boxHeight}px` : 'auto' }}
-                catchMove={isRouteSelectExpanded}
-                onTouchStart={(e) => {
-                    // 如果没有展开,禁止滑动
-                    if (!isRouteSelectExpanded) return;
-                    e.stopPropagation();
-                    handleTouchStart(e);
-                }}
-                onTouchMove={(e) => {
-                    if (!isRouteSelectExpanded) return;
-                    e.stopPropagation();
-                    handleTouchMove(e);
-                }}
-                onTouchEnd={(e) => {
-                    if (!isRouteSelectExpanded) return;
-                    e.stopPropagation();
-                    handleTouchEnd();
-                }}
+              className='release-route-wrapper'
+              style={{ height: typeof boxHeight === 'number' ? `${boxHeight}px` : 'auto' }}
+              catchMove={isRouteSelectExpanded}
+              onTouchStart={(e) => {
+                  // 如果没有展开,禁止滑动
+                  if (!isRouteSelectExpanded) return;
+                  e.stopPropagation();
+                  handleTouchStart(e);
+              }}
+              onTouchMove={(e) => {
+                  if (!isRouteSelectExpanded) return;
+                  e.stopPropagation();
+                  handleTouchMove(e);
+              }}
+              onTouchEnd={(e) => {
+                  if (!isRouteSelectExpanded) return;
+                  e.stopPropagation();
+                  handleTouchEnd();
+              }}
             >
                 <View className='release-route-content'>
                     {isRouteSelectExpanded && (
                         <RouteSelectionPanel
-                            routeOptions={routeOptions}
-                            selectedRouteIndex={selectedRouteIndex}
-                            handleSelectRoute={handleSelectRoute}
+                          routeOptions={routeOptions}
+                          selectedRouteIndex={selectedRouteIndex}
+                          handleSelectRoute={handleSelectRoute}
                         />
                     )}
                     <View className="select-site" style={{ paddingBottom: typeof bottomPaddingHeight === 'number' ? `${bottomPaddingHeight}px` : undefined }}>
-                        <Image className="site-top-bg" src='https://s.xiaopeng.com/xp-fe/robot-taxi/imgs/site-top-bg-20260507.png' />
-                        <View className="site-boarding-point">
+                        <Image className="site-top-bg" src='https://s.xiaopeng.com/xp-fe/robot-taxi/imgs/v2/top-card-bg-20260722.png' />
+                        <View className="select-site-content">
+                          <View className="site-boarding-point">
                             {/* 起点 */}
                             <View>
-                                <View onClick={() => toSeleteSitePage('start')} className="now-site">
-                                    <View className="now-site-dot"></View>
-                                    <View className="now-site-address">
-                                        <View className="now-site-address-content">
-                                            从<Text className="now-site-address-text">{startSite.name}</Text>上车
-                                        </View>
-                                        <Image className="now-site-icon" src="https://s.xiaopeng.com/xp-fe/robot-taxi/imgs/right-icon.png" />
-                                    </View>
-                                </View>
-                                {walkingTime > 0 && <View className="now-site-walk">步行{formatWalkingTime(walkingTime)}</View>}
+                              <View onClick={() => toSeleteSitePage('start')} className="now-site">
+                                  <View className="now-site-dot"></View>
+                                  <View className="now-site-address">
+                                      <View className="now-site-address-content">
+                                          从<Text className="now-site-address-text">{startSite.name}</Text>上车
+                                      </View>
+                                      <Image className="now-site-icon" src="https://s.xiaopeng.com/xp-fe/robot-taxi/imgs/v2/now-site-arrow-20260708.png" />
+                                  </View>
+                              </View>
+                              {walkingTime > 0 && <View className="now-site-walk">步行{formatWalkingTime(walkingTime)}</View>}
                             </View>
                             {/* 终点 */}
                             <View onClick={() => toSeleteSitePage('end')} className="to-site">
@@ -229,54 +230,65 @@
                                     <View className="to-site-text">{endSite.name}</View>
                                 </View>
                             </View>
-                        </View>
-                        <View className="route-content">
-                            <View className="route-content-top">
-                                <View className="route-content-txt">预估等待{fareEstimate.waitingTime || '-'}分钟</View>
-                                <View className="route-content-txt" style={{ margin: '0 4px' }}>|</View>
-                                <View className="route-content-txt">限乘{fareEstimate.maxPeopleNumber || '-'}人</View>
-                            </View>
-                            <View className="route-content-bottom">
-                                <View onClick={handleOpenPassengerNotice} className="route-content-bottom-left">
-                                    <Image className="tip-icon" src="https://s.xiaopeng.com/xp-fe/robot-taxi/imgs/tip-default-icon.png" />
-                                    <View>乘车须知</View>
-                                </View>
+                            <View className="route-content">
+                              <View className="route-content-top">
+                                  <View className="route-content-txt">预估等待{fareEstimate.waitingTime || '-'}分钟</View>
+                                  <View className="route-content-txt" style={{ margin: '0 4px' }}>|</View>
+                                  <View className="route-content-txt">限乘{fareEstimate.maxPeopleNumber || '-'}人</View>
+                              </View>
+                              <View className="route-content-bottom">
+                                  <View onClick={handleOpenPassengerNotice} className="route-content-bottom-left">
+                                      <Image className="tip-icon" src="https://s.xiaopeng.com/xp-fe/robot-taxi/imgs/v2/tip-default-icon-20260726.png" />
+                                      <View>乘车须知</View>
+                                  </View>
+                              </View>
                             </View>
                         </View>
                     </View>
+                  </View>
                 </View>
                 <View className="confirm-btn-box">
                     {
                         hasDiscountAmount &&
-                        <View className="discount-amount" onClick={onOpenCouponSelect}>
+                        <View
+                          className="discount-amount"
+                          style={{ visibility: isRouteSelectExpanded ? 'hidden' : 'visible' }}
+                          onClick={onOpenCouponSelect}
+                        >
                             <View className="flex-center">
                                 <View className="discount-amount-text">最佳优惠</View>
                                 <View className="discount-amount-desc" >已为您选择最佳优惠</View>
                             </View>
                             <View className="flex-center">
                                 <View className="discount-amount-num">{formatDiscountAmountText()}</View>
-                                <Image className="change-coupon-icon" src='https://s.xiaopeng.com/xp-fe/robot-taxi/imgs/change-coupon.png' />
+                                <Image className="change-coupon-icon" src='https://s.xiaopeng.com/xp-fe/robot-taxi/imgs/v2/golden-arrow-20260702.png' />
                             </View>
                         </View>
                     }
                     <View className="confirm-btn-box-content">
                         <View className="money-box">
                             {isOperateFree ? (
-                                <View className="route-operate-free">员工内部测试</View>
+                                <View className="route-operate-free">{selectedRoute?.freeText || "员工内部测试"}</View>
                             ) : (
                                 <View className="route-content-top-money" onClick={() => toPriceDescription()} >
-                                    <Image className="tip-icon" src="https://s.xiaopeng.com/xp-fe/robot-taxi/imgs/tip-default-icon.png" />
-                                    <View className="price-box">
-                                        <View className="price-box-text">预估</View>
-                                        <Text className="money-num">{fareEstimate.finalFareStr || '-'}</Text>
-                                        <View className="price-box-text">元</View>
+                                    <View className="forecast-text">
+                                      <Image className="tip-icon" src="https://s.xiaopeng.com/xp-fe/robot-taxi/imgs/tip-default-icon.png" />
+                                      <Text>预估</Text>
+                                    </View>
+                                    <Text className="money-num">{fareEstimate.finalFareStr || '-'}</Text>
+                                    <View className="unit-text">
+                                      元
                                     </View>
                                 </View>
                             )}
                         </View>
                         <View className="confirm-btn-wrapper">
-                            <View onClick={() => !isCallDisabled && callImmediately()} className="confirm-btn">立即呼叫</View>
-                            {isCallDisabled && <View className="confirm-btn-mask" />}
+                          <Image className="confirm-btn-bg" src="https://s.xiaopeng.com/xp-fe/robot-taxi/imgs/v2/confirm-btn-bg-20260726.png" />
+                          <View onClick={() => !isCallDisabled && callImmediately()} className="confirm-btn">
+                            <Image className="confirm-btn-icon" src="https://s.xiaopeng.com/xp-fe/robot-taxi/imgs/confirm-btn-icon-20260629.png" />
+                              立即呼叫
+                            </View>
+                          {isCallDisabled && <View className="confirm-btn-mask" />}
                         </View>
                     </View>
                 </View>

--
Gitblit v1.7.1