| | |
| | | }: Props) { |
| | | const hasRouteDuration = typeof routeDuration === 'number' && Number.isFinite(routeDuration); |
| | | const durationDisplay = hasRouteDuration ? formatDurationDisplay(routeDuration) : null; // 预计耗时展示文案 |
| | | const shouldShowEndPointRow = tripData?.tripStatus !== TripStatus.VehicleArrivedPickup; // 到达上车点阶段与 begin-route 对齐,隐藏终点信息 |
| | | |
| | | if (isExpired) { |
| | | return ( |
| | |
| | | style={{ width: '100%', height: '87vh' }} |
| | | > |
| | | {renderMapOverlays()} |
| | | <View className='container'> |
| | | <View |
| | | className={`share-contact ${showReminder ? 'has-tip' : ''}`} |
| | | onClick={handleContactService} |
| | | > |
| | | <Image className='share-contact-icon' src='https://s.xiaopeng.com/xp-fe/robot-taxi/imgs/contact-service.png' /> |
| | | </View> |
| | | <View className='container-inner'> |
| | | <View catchMove onClick={(event) => event.stopPropagation()}> |
| | | <View className='calling-car'> |
| | | <Image |
| | | className='calling-car-bg' |
| | | src='https://s.xiaopeng.com/xp-fe/robot-taxi/imgs/site-top-bg-20260507.png' |
| | | /> |
| | | <View className='calling-car-head'> |
| | | {tripData?.tripStatus === TripStatus.VehicleApproaching && ( |
| | | <View className='calling-car-head-title'> |
| | | {durationDisplay ? ( |
| | | <> |
| | | 车辆还有 |
| | | <View className='calling-car-head-title-eta'>{durationDisplay.value}</View> |
| | | {durationDisplay.unit}到达上车点 |
| | | </> |
| | | ) : ( |
| | | '车辆正在前往上车点' |
| | | )} |
| | | </View> |
| | | )} |
| | | {tripData?.tripStatus === TripStatus.VehicleArrivedPickup && ( |
| | | <View className='calling-car-head-title'>车辆已到达上车点</View> |
| | | )} |
| | | {tripData?.tripStatus === TripStatus.InService && ( |
| | | <View className='calling-car-head-title'> |
| | | {/* 预计 |
| | | <View className='calling-car-head-title-eta'>{durationDisplay.value}</View> |
| | | {durationDisplay.unit}抵达目的地 */} |
| | | 乘客已上车,正在前往目的地 |
| | | </View> |
| | | )} |
| | | {tripData?.tripStatus >= TripStatus.ArrivedDestination && ( |
| | | <View className='calling-car-head-title'>已到达目的地</View> |
| | | )} |
| | | </View> |
| | | <View className='car-card'> |
| | | <View className='car-card-detail'> |
| | | <View> |
| | | <View className='car-card-detail-num'>{tripData?.plateNumber || '--'}</View> |
| | | <View className='car-card-detail-color'> |
| | | {tripData?.vehicleColor || '--'} |
| | | {/* <View className='car-card-detail-color-line'></View> |
| | | 车身编码: {tripData?.vehicleCode || '--'} */} |
| | | </View> |
| | | </View> |
| | | {tripData?.vehiclePictures && ( |
| | | <Image |
| | | className='car-card-detail-img' |
| | | src={ |
| | | safeParse(tripData?.vehiclePictures, {})?.url |
| | | || 'https://s.xiaopeng.com/xp-fe/robot-taxi/imgs/vehicle-default.png' |
| | | } |
| | | /> |
| | | </Map> |
| | | <View className='container'> |
| | | <View |
| | | className={`share-contact ${showReminder ? 'has-tip' : ''}`} |
| | | onClick={handleContactService} |
| | | > |
| | | <Image className='share-contact-icon' src='https://s.xiaopeng.com/xp-fe/robot-taxi/imgs/contact-service.png' /> |
| | | </View> |
| | | <View className='container-inner'> |
| | | <View catchMove onClick={(event) => event.stopPropagation()}> |
| | | <View className='calling-car'> |
| | | <Image |
| | | className='calling-car-bg' |
| | | src='https://s.xiaopeng.com/xp-fe/robot-taxi/imgs/site-top-bg-20260507.png' |
| | | /> |
| | | <View className='calling-car-head'> |
| | | {tripData?.tripStatus === TripStatus.VehicleApproaching && ( |
| | | <View className='calling-car-head-title'> |
| | | {durationDisplay ? ( |
| | | <> |
| | | 车辆还有 |
| | | <View className='calling-car-head-title-eta'>{durationDisplay.value}</View> |
| | | {durationDisplay.unit}到达上车点 |
| | | </> |
| | | ) : ( |
| | | '车辆正在前往上车点' |
| | | )} |
| | | </View> |
| | | <View className='car-card-line'></View> |
| | | <View className='car-card-temp'> |
| | | <View className='car-card-temp-list'> |
| | | <Image className='car-card-temp-img' src="https://s.xiaopeng.com/xp-fe/robot-taxi/imgs/share-line.png" /> |
| | | <View className='car-card-temp-row'> |
| | | <View className='car-card-temp-row-left'> |
| | | <View className='dot start'></View> |
| | | <View |
| | | className={`car-card-temp-title ${ |
| | | tripData?.tripStatus === TripStatus.InService |
| | | || tripData?.tripStatus >= TripStatus.ArrivedDestination |
| | | ? 'disabled-text' |
| | | : '' |
| | | }`} |
| | | > |
| | | 起点:{tripData?.startPointName} |
| | | </View> |
| | | )} |
| | | {tripData?.tripStatus === TripStatus.VehicleArrivedPickup && ( |
| | | <View className='calling-car-head-title'>车辆已到达上车点</View> |
| | | )} |
| | | {tripData?.tripStatus === TripStatus.InService && ( |
| | | <View className='calling-car-head-title'> |
| | | {/* 预计 |
| | | <View className='calling-car-head-title-eta'>{durationDisplay.value}</View> |
| | | {durationDisplay.unit}抵达目的地 */} |
| | | 乘客已上车,正在前往目的地 |
| | | </View> |
| | | )} |
| | | {tripData?.tripStatus >= TripStatus.ArrivedDestination && ( |
| | | <View className='calling-car-head-title'>已到达目的地</View> |
| | | )} |
| | | </View> |
| | | <View className='car-card'> |
| | | <View className='car-card-detail'> |
| | | <View> |
| | | <View className='car-card-detail-num'>{tripData?.plateNumber || '--'}</View> |
| | | <View className='car-card-detail-color'> |
| | | {tripData?.vehicleColor || '--'} |
| | | {/* <View className='car-card-detail-color-line'></View> |
| | | 车身编码: {tripData?.vehicleCode || '--'} */} |
| | | </View> |
| | | </View> |
| | | {tripData?.vehiclePictures && ( |
| | | <Image |
| | | className='car-card-detail-img' |
| | | src={ |
| | | safeParse(tripData?.vehiclePictures, {})?.url |
| | | || 'https://s.xiaopeng.com/xp-fe/robot-taxi/imgs/vehicle-default.png' |
| | | } |
| | | /> |
| | | )} |
| | | </View> |
| | | <View className='car-card-line'></View> |
| | | <View className='car-card-temp'> |
| | | <View className='car-card-temp-list'> |
| | | <Image className='car-card-temp-img' src="https://s.xiaopeng.com/xp-fe/robot-taxi/imgs/share-line.png" /> |
| | | <View className='car-card-temp-row'> |
| | | <View className='car-card-temp-row-left'> |
| | | <View className='dot start'></View> |
| | | <View |
| | | className={`car-card-temp-title ${ |
| | | tripData?.tripStatus === TripStatus.InService |
| | | || tripData?.tripStatus >= TripStatus.ArrivedDestination |
| | | ? 'disabled-text' |
| | | : '' |
| | | }`} |
| | | > |
| | | 起点:{tripData?.startPointName} |
| | | </View> |
| | | {(tripData?.tripStatus === TripStatus.InService |
| | | || tripData?.tripStatus >= TripStatus.ArrivedDestination) |
| | | && tripData?.boardingTime && ( |
| | | <View className='car-card-temp-time disabled-text'> |
| | | {tripData.boardingTime} 上车 |
| | | </View> |
| | | )} |
| | | </View> |
| | | {(tripData?.tripStatus === TripStatus.InService |
| | | || tripData?.tripStatus >= TripStatus.ArrivedDestination) |
| | | && tripData?.boardingTime && ( |
| | | <View className='car-card-temp-time disabled-text'> |
| | | {tripData.boardingTime} 上车 |
| | | </View> |
| | | )} |
| | | </View> |
| | | {shouldShowEndPointRow && ( |
| | | <View className='car-card-temp-row' style={{ marginTop: '12px' }}> |
| | | <View className='car-card-temp-row-left'> |
| | | <View className='dot end'></View> |
| | |
| | | </View> |
| | | )} |
| | | </View> |
| | | </View> |
| | | )} |
| | | </View> |
| | | </View> |
| | | </View> |
| | | </View> |
| | | </View> |
| | | </View> |
| | | </Map> |
| | | </View> |
| | | </View> |
| | | ); |
| | | } |