hejianhao
2026-03-21 b6a7a34fa625b8000e8108961f155c8d3be0600f
feat: 添加系统优惠显示并优化地图车辆标记逻辑

- 在费用详情和费用说明页面添加系统优惠显示项
- 优化行程状态6时地图显示逻辑,隐藏定位按钮
- 调整车辆标记动画时长和z-index,提升视觉体验
- 移除多余空行,添加mt-16工具类
4个文件已修改
50 ■■■■■ 已修改文件
src/robotaxi/pages/begin-route/index.tsx 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/robotaxi/pages/expense-description/index.less 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/robotaxi/pages/expense-description/index.tsx 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/robotaxi/pages/expense-detail/index.tsx 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/robotaxi/pages/begin-route/index.tsx
@@ -110,6 +110,7 @@
  const [arriveCalloutVisible, setArriveCalloutVisible] = useState(false);
  const [distanceConfig, setDistanceConfig] = useState<any>({});
  const [mapScale, setMapScale] = useState(14);
  const [showLocationFlag, setShowLocationFlag] = useState(true);
  const markersRef = useRef<any[]>([]);
  const tripStatusRef = useRef(tripStatus); // 行程状态引用
@@ -180,6 +181,11 @@
  useEffect(() => {
    const wasHold = [4, 6].includes(lastTripStatusRef.current);
    const isHold = [4, 6].includes(tripStatus);
    if (tripStatus == 6) {
      setShowLocationFlag(false);
    } else {
      setShowLocationFlag(true);
    }
    if (!wasHold && isHold) {
      orderRouteInitializedRef.current = false;
      tripStatus6ViewportLockedRef.current = false;
@@ -922,7 +928,7 @@
      }
      // 其他状态保持原有逻辑
      setTimeout(() => {
      Taro.nextTick(() => {
        const updated = applyRoutePoints(points);
        if (updated && [4, 5, 6].includes(tripStatusRef.current)) {
          const firstPoint = points?.[0];
@@ -930,7 +936,7 @@
            updateVehicleLocationThrottled(firstPoint.latitude, firstPoint.longitude, true);
          }
        }
      }, 500);
      });
    };
    // 仅在呼叫及后续阶段允许更新车辆位置
@@ -1184,7 +1190,7 @@
      width: 40,
      height: 20,
      anchor: { x: 0.5, y: 1 },
      zIndex: 1,
      zIndex: 2,
      rotate: typeof vehicleDirection === 'number' ? vehicleDirection : 0,
      name: '车辆位置',
      customCallout: { anchorY: 70, anchorX: 0, display: 'ALWAYS' }
@@ -1363,7 +1369,7 @@
    if (!carMarkerInitialized.current) return;
    if (!vehicleLocation) return;
    const mapCtx = Taro.createMapContext('map');
    Taro.nextTick(() => {
    // Taro.nextTick(() => {
      mapCtx.translateMarker({
        markerId: vehicleMarkerId,
        destination: {
@@ -1372,13 +1378,13 @@
        },
        autoRotate: false,
        rotate: typeof vehicleDirection === 'number' ? vehicleDirection : 0,
        duration: 500,
        duration: 1000,
        fail: (err) => {
          console.log(err);
        },
      });
    });
    // });
  }, [tripStatus, vehicleLocation, vehicleDirection, vehicleMarkerId]);
  const bindSocketListeners = () => {
@@ -1979,7 +1985,7 @@
        scale={mapScale}
        markers={markers}
        polyline={polyline}
        showLocation={!!longitude}
        showLocation={!!longitude && showLocationFlag}
        onCalloutTap={handleCalloutTap}
        onRegionChange={handleRegionChange}
        style={{ width: '100%', height: '87vh' }}
src/robotaxi/pages/expense-description/index.less
@@ -114,7 +114,7 @@
    }
    .num {
      font-size: 48px;
      line-height: 40px;
      font-variation-settings: "opsz" auto;
@@ -241,4 +241,8 @@
.color-red {
  color: #FF4D4F !important;
}
.mt-16 {
  margin-top: 16px;
}
src/robotaxi/pages/expense-description/index.tsx
@@ -209,12 +209,27 @@
              <View className='price-value color-red'>-{formatMoney(fareData.couponMoney)}元</View>
            </View>
          }
          {
            (fareData.orderMoney && !fareData.couponMoney) &&
            <View className='flex-between-card mt-16'>
              <View className='price-label'>系统优惠</View>
              <View className='price-value color-red'>-{formatMoney(fareData.orderMoney)}元</View>
            </View>
          }
          {
            (fareData.orderMoney && fareData.couponMoney && fareData.orderMoney - fareData.couponMoney > 0) ?
              <View className='flex-between-card mt-16'>
                <View className='price-label'>系统优惠</View>
                <View className='price-value color-red'>-{formatMoney(fareData.orderMoney - fareData.couponMoney)}元</View>
              </View>
              : ''
          }
        </View>
        {/* 总价格 */}
        <View className='flex-card total'>
          <Text className='total-text'>总费用</Text>
          <Text className='num'>{formatMoney(fareData.orderMoney)}</Text>
          <Text className='num'>0.00</Text>
          <Text className='unit'>元</Text>
        </View>
      </View>
src/robotaxi/pages/expense-detail/index.tsx
@@ -107,6 +107,13 @@
            <View className='price-value color-red'>-{pricingCard.coupon}元</View>
          </View>
        }
        {
          (pricingCard.systemDiscount && pricingCard.systemDiscount > 0) &&
          <View className='flex-between-card'>
            <View className='price-label'>系统优惠</View>
            <View className='price-value color-red'>-{pricingCard.systemDiscountStr}元</View>
          </View>
        }
      </View>
      {/* 总价格 */}
      <View className='flex-card total'>