| | |
| | | queryOrderRoute, |
| | | endOrder, |
| | | } from '../../../robotaxi/api/begin-route'; |
| | | import { getOrderActive } from '../../../robotaxi/api/home'; |
| | | import { getOrderDetail } from '../../../robotaxi/api/order'; |
| | | import { getOrderDistance } from '../../api/select-map-site'; |
| | | import { checkOtp } from '../../../utils/tools'; |
| | |
| | | const carMarkerInitialized = useRef(false); |
| | | const [fareEstimate, setFareEstimate] = useState<any>({}); // 预估费用信息 |
| | | const [routeAndFareError, setRouteAndFareError] = useState(false); |
| | | const [callSubmitting, setCallSubmitting] = useState(false); |
| | | const [vehicleLocation, setVehicleLocation] = useState<{ latitude: number, longitude: number } | null>(null); |
| | | const [vehicleDirection, setVehicleDirection] = useState<number | null>(null); |
| | | const [routeDistance, setRouteDistance] = useState<{ value: number; unit: 'km' | 'm' } | null>(null); // 路线距离 |
| | |
| | | useEffect(() => { |
| | | Taro.setStorageSync('tripStatus', tripStatus); |
| | | tripStatusRef.current = tripStatus; |
| | | if (tripStatus === 1) { |
| | | setCallSubmitting(false); |
| | | } |
| | | let timer: any = null; |
| | | let requoteTimer: any = null; |
| | | // tripStatus=1:开启发布行程停留计时,用于10分钟后提示需重新估价 |
| | |
| | | const s = Taro.getStorageSync('startSite'); |
| | | const e = Taro.getStorageSync('endSite'); |
| | | const cachedOrderId = Taro.getStorageSync('orderId'); |
| | | const cachedTripStatus = Number(Taro.getStorageSync('tripStatus')) || tripStatus; |
| | | if (s) { |
| | | setStartSite(s); |
| | | } |
| | | if (e) { |
| | | setEndSite(e); |
| | | } |
| | | const cachedTripStatusStorage = Taro.getStorageSync('tripStatus'); |
| | | const cachedTripStatus = Number(cachedTripStatusStorage) || tripStatus; |
| | | if (cachedOrderId) { |
| | | setOrderId(cachedOrderId); |
| | | queryVehicleByOrderId({ orderId: cachedOrderId }) |
| | |
| | | setVehicleInfo(res); |
| | | }) |
| | | .catch(() => { }); |
| | | } |
| | | if (cachedTripStatusStorage) { |
| | | getOrderActive() |
| | | .then((res: any) => { |
| | | if (!res) { |
| | | return; |
| | | } |
| | | const nextStartSite = { |
| | | id: res.startPointId || '', |
| | | name: res.startPointName || '', |
| | | latitude: res.startLat || 0, |
| | | longitude: res.startLon || 0, |
| | | electronicAreaId: res.xpElectronicFenceAreaId || '', |
| | | time: res.startParkingTimeLimit || 0, |
| | | }; |
| | | const nextEndSite = { |
| | | id: res.endPointId || '', |
| | | name: res.endPointName || '', |
| | | latitude: res.endLat || 0, |
| | | longitude: res.endLon || 0, |
| | | electronicAreaId: res.xpElectronicFenceAreaId || '', |
| | | time: res.endParkingTimeLimit || 0, |
| | | }; |
| | | Taro.setStorageSync('startSite', nextStartSite); |
| | | Taro.setStorageSync('endSite', nextEndSite); |
| | | setStartSite(nextStartSite); |
| | | setEndSite(nextEndSite); |
| | | }) |
| | | .catch(() => { }); |
| | | } else { |
| | | if (s) { |
| | | setStartSite(s); |
| | | } |
| | | if (e) { |
| | | setEndSite(e); |
| | | } |
| | | } |
| | | if (cachedOrderId && [4, 5, 6, 7, 8].includes(cachedTripStatus)) { |
| | | requestOrderRoute(cachedOrderId, cachedTripStatus); |
| | |
| | | |
| | | // 立即呼叫 |
| | | const callImmediately = debounce(async () => { |
| | | if (callSubmitting) { |
| | | return; |
| | | } |
| | | setCallSubmitting(true); |
| | | const otp = await checkOtp(false); |
| | | if (!otp) { |
| | | setCallSubmitting(false); |
| | | jumpTo({ url: '/pages/user/login?hideBack=1' }); |
| | | return |
| | | } |
| | |
| | | title: '请选择站点', |
| | | icon: 'none', |
| | | }) |
| | | setCallSubmitting(false); |
| | | return |
| | | } |
| | | if (routeAndFareError) { |
| | | setCallSubmitting(false); |
| | | return |
| | | } |
| | | const s = Taro.getStorageSync('startSite'); |
| | |
| | | title: '请先选择起终点', |
| | | icon: 'none', |
| | | }) |
| | | setCallSubmitting(false); |
| | | return |
| | | } |
| | | let maxDistance = distanceConfig?.maxDistance; |
| | |
| | | if (distance > maxDistance) { |
| | | setTipType('2'); |
| | | setShowTipPopup(true); |
| | | setCallSubmitting(false); |
| | | return; |
| | | } |
| | | } catch { } |
| | |
| | | if (distance < minDistance) { |
| | | setTipType('1'); |
| | | setShowTipPopup(true); |
| | | setCallSubmitting(false); |
| | | return; |
| | | } |
| | | } |
| | |
| | | } |
| | | Taro.setStorageSync('orderId', res?.orderId || ''); |
| | | } catch (error) { |
| | | setCallSubmitting(false); |
| | | return |
| | | } |
| | | setTripStatus(2); |
| | |
| | | setCancelType(4); |
| | | } catch (error) { |
| | | Taro.showToast({ |
| | | title: '取消失败,请重试', |
| | | title: '取消订单失败,请重试', |
| | | icon: 'none', |
| | | }); |
| | | return; |
| | |
| | | fareEstimate={fareEstimate} |
| | | handleOpenPassengerNotice={handleOpenPassengerNotice} |
| | | walkingTime={walkingTime} |
| | | isCallDisabled={routeAndFareError} |
| | | isCallDisabled={routeAndFareError || callSubmitting} |
| | | /> |
| | | } |
| | | {/* 发布中弹窗 */} |