| | |
| | | import Taro, { useDidShow } from "@tarojs/taro" |
| | | import Taro, { useDidShow, useDidHide } from "@tarojs/taro" |
| | | import { useEffect, useState, useRef, useMemo } from 'react'; |
| | | import { View, Map, Text, Image, CoverView, CoverImage } from '@tarojs/components'; |
| | | import './index.less'; |
| | |
| | | } from '../../../robotaxi/api/begin-route'; |
| | | |
| | | export default function SelectMapSite() { |
| | | const WAITING_TIMER_START_KEY = 'waitingTimerStartAt'; |
| | | const WAITING_TIMER_ELAPSED_KEY = 'waitingTimerElapsed'; |
| | | |
| | | const [showCustomerService, setShowCustomerService] = useState(false); // 客服弹窗是否显示 |
| | | const [longitude, setLongitude] = useState<number | null>(null); // 经度 |
| | |
| | | setLongitude(s.longitude); |
| | | } |
| | | |
| | | setElapsedSeconds(0); |
| | | const cachedStartAt = Number(Taro.getStorageSync(WAITING_TIMER_START_KEY)); |
| | | const cachedElapsed = Number(Taro.getStorageSync(WAITING_TIMER_ELAPSED_KEY)); |
| | | let startAt = cachedStartAt; |
| | | if (!Number.isFinite(startAt) || startAt <= 0) { |
| | | if (Number.isFinite(cachedElapsed) && cachedElapsed >= 0) { |
| | | startAt = Date.now() - cachedElapsed * 1000; |
| | | } else { |
| | | startAt = Date.now(); |
| | | } |
| | | Taro.setStorageSync(WAITING_TIMER_START_KEY, startAt); |
| | | } |
| | | const updateElapsed = () => { |
| | | const nextElapsed = Math.max(0, Math.floor((Date.now() - startAt) / 1000)); |
| | | setElapsedSeconds(nextElapsed); |
| | | }; |
| | | updateElapsed(); |
| | | timer = setInterval(() => { |
| | | setElapsedSeconds(prev => prev + 1); |
| | | updateElapsed(); |
| | | }, 1000); |
| | | } else { |
| | | setElapsedSeconds(0); |
| | | Taro.removeStorageSync(WAITING_TIMER_START_KEY); |
| | | Taro.removeStorageSync(WAITING_TIMER_ELAPSED_KEY); |
| | | } |
| | | return () => { |
| | | if (timer) clearInterval(timer); |
| | | }; |
| | | }, [tripStatus]); |
| | | |
| | | useDidHide(() => { |
| | | const currentTripStatus = tripStatusRef.current; |
| | | if (currentTripStatus === 2 || currentTripStatus === 3) { |
| | | const startAt = Number(Taro.getStorageSync(WAITING_TIMER_START_KEY)); |
| | | if (Number.isFinite(startAt) && startAt > 0) { |
| | | const currentElapsed = Math.max(0, Math.floor((Date.now() - startAt) / 1000)); |
| | | Taro.setStorageSync(WAITING_TIMER_ELAPSED_KEY, currentElapsed); |
| | | } else { |
| | | Taro.setStorageSync(WAITING_TIMER_ELAPSED_KEY, elapsedSeconds); |
| | | } |
| | | return; |
| | | } |
| | | Taro.removeStorageSync(WAITING_TIMER_START_KEY); |
| | | Taro.removeStorageSync(WAITING_TIMER_ELAPSED_KEY); |
| | | }); |
| | | |
| | | useEffect(() => { |
| | | const storedPoints = getStoredRoutePoints(tripStatus); |
| | | applyRoutePoints(storedPoints); |