Leon 1 year ago
parent
commit
b8ef7dc8cd

+ 161 - 12
src/features/trackSomething/components/DayNightCard.tsx

@@ -9,7 +9,7 @@ import { useDispatch, useSelector } from 'react-redux'
 import { useTranslation } from 'react-i18next'
 import { TimeFormatter } from '@/utils/time_format'
 import { systemLocation } from '@/services/common'
-import { updateMember } from '@/store/day_night'
+import { setDayRingData, setNightRingData, updateMember } from '@/store/day_night'
 import Modal from '@/components/layout/Modal.weapp'
 import { rpxToPx } from '@/utils/tools'
 import { jumpPage } from '@/features/trackTimeDuration/hooks/Common'
@@ -18,6 +18,8 @@ let useNavigation;
 if (process.env.TARO_ENV == 'rn') {
     useNavigation = require("@react-navigation/native").useNavigation
 }
+
+let locationDetail;
 export default function DayNightCard(props: { isNight: boolean, switchChanged: Function }) {
     const [expand, setExpand] = useState(false)
     const user = useSelector((state: any) => state.user);
@@ -27,6 +29,10 @@ export default function DayNightCard(props: { isNight: boolean, switchChanged: F
     const [sunriseTmrTime, setSunriseTmrTime] = useState('06:00')
     const [sunsetTime, setSunsetTime] = useState('18:00')
     const [showDetailModal, setShowDetailModal] = useState(false)
+    // const [locationDetail, setLocationDetail] = useState(null)
+
+    const [nightDate, setNightDate] = useState(new Date())
+    const [dayDate, setDayDate] = useState(new Date())
     const dispatch = useDispatch();
     const { t } = useTranslation()
     let navigation;
@@ -41,12 +47,19 @@ export default function DayNightCard(props: { isNight: boolean, switchChanged: F
             })
 
             var today = new Date()
+            var yesterday = new Date(today.getTime() - 24 * 3600 * 1000)
             var tomorrow = new Date(today.getTime() + 24 * 3600 * 1000 * 3)
-            var strToday = `${today.getFullYear()}-${TimeFormatter.padZero(today.getMonth() + 1)}-${TimeFormatter.padZero(today.getDate())}`
+            var strYesterday = `${yesterday.getFullYear()}-${TimeFormatter.padZero(yesterday.getMonth() + 1)}-${TimeFormatter.padZero(yesterday.getDate())}`
             var strTomorrow = `${tomorrow.getFullYear()}-${TimeFormatter.padZero(tomorrow.getMonth() + 1)}-${TimeFormatter.padZero(tomorrow.getDate())}`
             latestLocation({
-                date_start: strToday, date_end: strTomorrow
-            }).then(data => { })
+                date_start: strYesterday, date_end: strTomorrow
+            }).then(data => {
+                setAuthInfo(data as any)
+                updateDate(data)
+                locationDetail = data
+                console.log(data)
+                // setLocationDetail(data as any)
+            })
 
         }
         getContent()
@@ -55,12 +68,130 @@ export default function DayNightCard(props: { isNight: boolean, switchChanged: F
     useEffect(() => {
         setInterval(() => {
             setCount((prevCounter) => prevCounter + 1)
+
+            if (locationDetail) {
+                var detail: any = locationDetail
+                var now = new Date()
+                if (now.getHours() == 0 && now.getMinutes() == 0 && now.getSeconds() == 0) {
+                    console.log('9527')
+                    detail.daylights.splice(0, 1)
+                }
+                locationDetail = detail
+                
+                // setLocationDetail(detail)
+                updateDate(detail)
+            }
+            else {
+                console.log('apple')
+            }
         }, 1000)
     }, [])
 
-    useDidShow(() => {
-        getContent()
-    })
+    // useDidShow(() => {
+    //     getContent()
+    // })
+
+    function updateDate(data) {
+        
+        var today = new Date()
+        // var yesterday = new Date(today.getTime() - 24 * 3600 * 1000)
+        var tomorrow = new Date(today.getTime() + 24 * 3600 * 1000)
+        // var strYesterday = `${yesterday.getFullYear()}-${TimeFormatter.padZero(yesterday.getMonth() + 1)}-${TimeFormatter.padZero(yesterday.getDate())}`
+        // var strTomorrow = `${tomorrow.getFullYear()}-${TimeFormatter.padZero(tomorrow.getMonth() + 1)}-${TimeFormatter.padZero(tomorrow.getDate())}`
+        if (data.daylights.length > 0) {
+            var yesterdayDate = new Date(data.daylights[0].date + 'T' + data.daylights[0].sunset)
+            var todaySunriseDate = new Date(data.daylights[1].date + 'T' + data.daylights[1].sunrise)
+            var todaySunsetDate = new Date(data.daylights[1].date + 'T' + data.daylights[1].sunset)
+            var tomorrowSunriseDate = new Date(data.daylights[2].date + 'T' + data.daylights[2].sunrise)
+
+            // var tomorrowSunsetDate = new Date(data.daylights[2].date + 'T' + data.daylights[2].sunset)
+            //今天凌晨日出前
+            if (yesterdayDate.getTime() < today.getTime() && today.getTime() < todaySunriseDate.getTime()) {
+                setNightDate(yesterdayDate)
+                setDayDate(today)
+                if (props.isNight) {
+                    setSunsetTime(data.daylights[0].sunset)
+                    setSunriseTmrTime(data.daylights[1].sunrise)
+                }
+                else {
+                    setSunriseTime(data.daylights[1].sunrise)
+                    setSunsetTime(data.daylights[1].sunset)
+                }
+
+                dispatch(setNightRingData({
+                    date: yesterdayDate.getTime(),
+                    sunrise: data.daylights[1].sunrise,
+                    sunset: data.daylights[0].sunset
+                }))
+                dispatch(setDayRingData({
+                    date: today.getTime(),
+                    sunrise: data.daylights[1].sunrise,
+                    sunset: data.daylights[1].sunset
+                }))
+            }
+            //今天白天(今天出日后-日落前)
+            else if (todaySunriseDate.getTime() < today.getTime() && today.getTime() < todaySunsetDate.getTime()) {
+                console.log('2')
+                setNightDate(today)
+                setDayDate(today)
+                if (props.isNight) {
+                    setSunsetTime(data.daylights[1].sunset)
+                    setSunriseTmrTime(data.daylights[2].sunrise)
+                }
+                else {
+                    setSunriseTime(data.daylights[1].sunrise)
+                    setSunsetTime(data.daylights[1].sunset)
+                }
+                dispatch(setNightRingData({
+                    date: today.getTime(),
+                    sunrise: data.daylights[2].sunrise,
+                    sunset: data.daylights[1].sunset
+                }))
+                dispatch(setDayRingData({
+                    date: today.getTime(),
+                    sunrise: data.daylights[1].sunrise,
+                    sunset: data.daylights[1].sunset
+                }))
+            }
+            //今天夜晚
+            else if (today.getTime() > todaySunsetDate.getTime() && today.getTime() < tomorrowSunriseDate.getTime()) {
+                console.log('3')
+                setNightDate(today)
+                setDayDate(tomorrow)
+                if (props.isNight) {
+                    setSunsetTime(data.daylights[1].sunset)
+                    setSunriseTmrTime(data.daylights[2].sunrise)
+                }
+                else {
+                    setSunriseTime(data.daylights[2].sunrise)
+                    setSunsetTime(data.daylights[2].sunset)
+                }
+                dispatch(setNightRingData({
+                    date: today.getTime(),
+                    sunrise: data.daylights[2].sunrise,
+                    sunset: data.daylights[1].sunset
+                }))
+                dispatch(setDayRingData({
+                    date: tomorrowSunriseDate.getTime(),
+                    sunrise: data.daylights[2].sunrise,
+                    sunset: data.daylights[2].sunset
+                }))
+            }
+        }
+        // for (var i=0;i<data.daylights.length;i++){
+        //     var obj = data[i]
+        //     var str = obj.date+' '+obj.sunrise
+        //     var date = new Date(str)
+        //     var str2 = obj.date+' '+obj.sunset
+        //     var date2 = new Date(str2)
+        //     if (date2)
+        // }
+        // data.daylights.map(item=>{
+        //     var str = item.date+' '+item.sunrise
+        //     var date = new Date(str)
+        //     debugger
+        // })
+    }
 
     async function getContent() {
         const isShow = await getStorage(props.isNight ? 'showNightRing' : 'showDayRing') || false
@@ -156,8 +287,11 @@ export default function DayNightCard(props: { isNight: boolean, switchChanged: F
 
                 systemLocation({ lat: res.latitude, lng: res.longitude, date_start: strToday, date_end: strTomorrow }).then(data => {
                     console.log(data);
-                    (data as any).latitude = res.latitude;
-                    (data as any).longitude = res.longitude;
+                    updateDate(data);
+                    locationDetail = data;
+                    // setLocationDetail(data as any);
+                    // (data as any).latitude = res.latitude;
+                    // (data as any).longitude = res.longitude;
                     setAuthInfo(data as any)
                     setSunriseTime((data as any).daylights[0].sunrise)
                     setSunriseTmrTime((data as any).daylights[1].sunrise)
@@ -410,6 +544,7 @@ export default function DayNightCard(props: { isNight: boolean, switchChanged: F
             success: function (res) {
                 if (res.confirm) {
                     clearLocation().then(res => {
+                        locationDetail = null
                         Taro.removeStorage({ key: 'gps' })
                         setAuthInfo(null)
                         setSunriseTime('06:00')
@@ -448,7 +583,7 @@ export default function DayNightCard(props: { isNight: boolean, switchChanged: F
                         <View className="cell_full" >
                             <Text className="cell_title">{t('feature.track_time_duration.third_ring.latitude')}</Text>
 
-                            <Text className="cell_value">{(authInfo as any).latitude}</Text>
+                            <Text className="cell_value">{(authInfo as any).lat}</Text>
 
 
                         </View>
@@ -458,7 +593,7 @@ export default function DayNightCard(props: { isNight: boolean, switchChanged: F
                     <View className="cell_full">
                         <Text className="cell_title" >{t('feature.track_time_duration.third_ring.longitude')}</Text>
 
-                        <Text className="cell_value">{(authInfo as any).longitude}</Text>
+                        <Text className="cell_value">{(authInfo as any).lng}</Text>
 
                     </View>
                     <View className="cell_line" style={{ height: 1 }} />
@@ -513,6 +648,20 @@ export default function DayNightCard(props: { isNight: boolean, switchChanged: F
         }
     }
 
+    function nightDurationDesc() {
+        if (nightDate.getDate() == new Date().getDate()) {
+            return `Today ${sunsetTime} - Tomorrow ${sunriseTmrTime}`
+        }
+        return `Yesterday ${sunsetTime} - Today ${sunriseTmrTime}`
+    }
+
+    function dayDurationDesc() {
+        if (dayDate.getDate() == new Date().getDate()) {
+            return `${sunriseTime} - ${sunsetTime}`
+        }
+        return `Tomorrow ${sunriseTime} - Tomorrow ${sunsetTime}`
+    }
+
 
 
     return <View style={{ color: '#fff' }}>
@@ -555,7 +704,7 @@ export default function DayNightCard(props: { isNight: boolean, switchChanged: F
                 {
                     expand && <View>
                         <View style={{ display: 'flex', flexDirection: 'column' }}>
-                            <Text className='day_night_value' style={{ color: props.isNight ? ColorType.night : ColorType.day }}>{props.isNight ? `Today ${sunsetTime} - Tomorrow ${sunriseTmrTime}` : `${sunriseTime} - ${sunsetTime}`}</Text>
+                            <Text className='day_night_value' style={{ color: props.isNight ? ColorType.night : ColorType.day }}>{props.isNight ? nightDurationDesc() : dayDurationDesc()}</Text>
                             <Text className='day_night_desc'>{props.isNight ? 'Sunset to Sunrise' : 'Sunrise to Sunset'}</Text>
                             <View style={{ display: 'flex', flexDirection: 'row', marginTop: rpxToPx(32) }}>
                                 <View style={{ display: 'flex', flexDirection: 'column', width: rpxToPx(300) }}>

+ 17 - 21
src/features/trackTimeDuration/components/Discovery.tsx

@@ -77,7 +77,7 @@ export default function Discovery() {
         })
         if (!obj) {
             console.log('报错', schedule)
-            return null;
+            return ['16:00', '08:00'];
         }
         return [obj.schedule.fast.end_time, obj.schedule.fast.start_time]
     }
@@ -195,12 +195,12 @@ export default function Discovery() {
         var sunSet = 18 * 60
 
 
-        if (dayNight.gpsInfo && user.test_user) {
-            var sunRiseObj = dayNight.gpsInfo.daylights[0].sunrise
-            var sunSetObj = dayNight.gpsInfo.daylights[0].sunset
-            sunRise = parseInt(sunRiseObj.split(':')[0]) * 60 + parseInt(sunRiseObj.split(':')[1])
-            sunSet = parseInt(sunSetObj.split(':')[0]) * 60 + parseInt(sunSetObj.split(':')[1])
-        }
+
+        var sunRiseObj = dayNight.dayRingSunrise
+        var sunSetObj = dayNight.dayRingSunset
+        sunRise = parseInt(sunRiseObj.split(':')[0]) * 60 + parseInt(sunRiseObj.split(':')[1])
+        sunSet = parseInt(sunSetObj.split(':')[0]) * 60 + parseInt(sunSetObj.split(':')[1])
+
 
         var duration = sunSet - sunRise
 
@@ -249,21 +249,17 @@ export default function Discovery() {
     }
 
     function dayDuration() {
-        if (dayNight.gpsInfo && dayNight.isMember) {
-            var sunRiseObj = dayNight.gpsInfo.daylights[0].sunrise
-            var sunSetObj = dayNight.gpsInfo.daylights[0].sunset
-            var sunRise = parseInt(sunRiseObj.split(':')[0]) * 60 + parseInt(sunRiseObj.split(':')[1])
-            var sunSet = parseInt(sunSetObj.split(':')[0]) * 60 + parseInt(sunSetObj.split(':')[1])
-            if (sunSetObj.indexOf('PM') != -1) {
-                sunSet += 12 * 60
-            }
+        var sunRiseObj = dayNight.dayRingSunrise
+        var sunSetObj = dayNight.dayRingSunset
+        var sunRise = parseInt(sunRiseObj.split(':')[0]) * 60 + parseInt(sunRiseObj.split(':')[1])
+        var sunSet = parseInt(sunSetObj.split(':')[0]) * 60 + parseInt(sunSetObj.split(':')[1])
+        if (sunSetObj.indexOf('PM') != -1) {
+            sunSet += 12 * 60
+        }
 
-            var duration = (sunSet - sunRise) * 60 * 1000
+        var duration = (sunSet - sunRise) * 60 * 1000
 
-            return TimeFormatter.calculateTimeDifference(new Date().getTime(), new Date().getTime() + duration);
-        } else {
-            return '12小时'
-        }
+        return TimeFormatter.calculateTimeDifference(new Date().getTime(), new Date().getTime() + duration);
     }
 
     function eatDuration() {
@@ -354,7 +350,7 @@ export default function Discovery() {
                                 <Text className="duration_title2">活动</Text>
                             }
                             {
-                                <Text className="duration_value2" style={{ color: ColorType.activity,marginBottom: 0 }}>{activityDuration()}</Text>
+                                <Text className="duration_value2" style={{ color: ColorType.activity, marginBottom: 0 }}>{activityDuration()}</Text>
                             }
                         </View>
                         }

+ 24 - 20
src/features/trackTimeDuration/components/IndexItem.tsx

@@ -29,6 +29,7 @@ export default function Component(props: { type: string, data: any, time: any, s
     const [stageList, setStageList] = useState([true, false, false])
     const [isStageMode, setIsStageMode] = useState(false)
     const [showDetailModal, setShowDetailModal] = useState(false)
+    const [count, setCount] = useState(0)
     let navigation;
     if (useNavigation) {
         navigation = useNavigation()
@@ -38,6 +39,11 @@ export default function Component(props: { type: string, data: any, time: any, s
         setRecord(props.data.current_record)
     }, [props.data])
 
+    useEffect(() => {
+        setCount((pre) => pre + 1)
+        debugger
+    }, [dayNight.nightRingSunrise, dayNight.nightRingSunset])
+
     useEffect(() => {
         if (props.type == 'FAST_SLEEP') {
             global.updateMixItem = (data) => {
@@ -210,15 +216,15 @@ export default function Component(props: { type: string, data: any, time: any, s
         var sunRise = 24 * 60 + 6 * 60
         var sunSet = 18 * 60
 
-        if (dayNight.gpsInfo && user.test_user) {
-            var sunRiseObj = dayNight.gpsInfo.daylights[0].sunrise
-            var sunSetObj = dayNight.gpsInfo.daylights[0].sunset
-            sunRise = 24 * 60 + parseInt(sunRiseObj.split(':')[0]) * 60 + parseInt(sunRiseObj.split(':')[1])
-            sunSet = parseInt(sunSetObj.split(':')[0]) * 60 + parseInt(sunSetObj.split(':')[1])
-            if (sunSetObj.indexOf('PM') != -1) {
-                sunSet += 12 * 60
-            }
+        // if (dayNight.gpsInfo && user.test_user) {
+        var sunRiseObj = dayNight.nightRingSunrise
+        var sunSetObj = dayNight.nightRingSunset
+        sunRise = 24 * 60 + parseInt(sunRiseObj.split(':')[0]) * 60 + parseInt(sunRiseObj.split(':')[1])
+        sunSet = parseInt(sunSetObj.split(':')[0]) * 60 + parseInt(sunSetObj.split(':')[1])
+        if (sunSetObj.indexOf('PM') != -1) {
+            sunSet += 12 * 60
         }
+        // }
         var duration = sunRise - sunSet
         realRingBig.startArc = (sunSet * 60) / (24 * 3600) * 2 * Math.PI - Math.PI / 2.0;
         realRingBig.durationArc = (duration * 60) / (24 * 3600) * 2 * Math.PI;
@@ -331,9 +337,9 @@ export default function Component(props: { type: string, data: any, time: any, s
     }
 
     function nightDuration() {
-        if (dayNight.gpsInfo && dayNight.isMember) {
-            var sunRiseObj = dayNight.gpsInfo.daylights[0].sunrise
-            var sunSetObj = dayNight.gpsInfo.daylights[0].sunset
+
+            var sunRiseObj = dayNight.nightRingSunrise
+            var sunSetObj = dayNight.nightRingSunset
             var sunRise = 24 * 60 + parseInt(sunRiseObj.split(':')[0]) * 60 + parseInt(sunRiseObj.split(':')[1])
             var sunSet = parseInt(sunSetObj.split(':')[0]) * 60 + parseInt(sunSetObj.split(':')[1])
             if (sunSetObj.indexOf('PM') != -1) {
@@ -343,9 +349,6 @@ export default function Component(props: { type: string, data: any, time: any, s
             var duration = (sunRise - sunSet) * 60 * 1000
 
             return TimeFormatter.calculateTimeDifference(new Date().getTime(), new Date().getTime() + duration);
-        } else {
-            return '12小时'
-        }
     }
 
     function fastPicker() {
@@ -426,19 +429,20 @@ export default function Component(props: { type: string, data: any, time: any, s
         marginLeft: rpxToPx(-40),
         marginRight: rpxToPx(-40),
         marginTop: rpxToPx(-40),
-        padding: rpxToPx(48), 
+        padding: rpxToPx(48),
         // backgroundColor:'pink'
     }}>
         <View className="time_operate_item1" onClick={goDetail}>
-            <View className="fast_sleep_item" style={{ marginTop: !props.showStage && global.showNightRing === true ? -6 : 0,
-            marginBottom: !props.showStage && global.showNightRing === true ? -6 : 0,
-            padding:!props.showStage && global.showNightRing === true ? 14 : 0,
-            paddingRight:0
+            <View className="fast_sleep_item" style={{
+                marginTop: !props.showStage && global.showNightRing === true ? -6 : 0,
+                marginBottom: !props.showStage && global.showNightRing === true ? -6 : 0,
+                padding: !props.showStage && global.showNightRing === true ? 14 : 0,
+                paddingRight: 0
             }}>
                 {
                     rings()
                 }
-                <View className="duration_bg2" style={{ marginLeft: !props.showStage && global.showNightRing === true ? rpxToPx(68) : rpxToPx(52),height: bigRingRadius*2,overflow:'visible'}}>
+                <View className="duration_bg2" style={{ marginLeft: !props.showStage && global.showNightRing === true ? rpxToPx(68) : rpxToPx(52), height: bigRingRadius * 2, overflow: 'visible' }}>
                     {
                         !props.showStage && global.showNightRing === true &&
                         <Text className="duration_title2">{t('feature.common.overnight')}</Text>

+ 27 - 3
src/store/day_night.tsx

@@ -10,6 +10,12 @@ interface dayNightState {
     showNightRing: boolean | false,
     isMember: boolean | false,
     gpsInfo: Object | null,
+    dayRingSunrise: string | '06:00',
+    dayRingSunset: string | '18:00',
+    nightRingSunset: string | '18:00',
+    nightRingSunrise: string | '06:00',
+    dayRingDate: any | null,
+    nightRingDate: any | null
 }
 
 const initialState: dayNightState = {
@@ -20,7 +26,13 @@ const initialState: dayNightState = {
     showDayRing: false,
     showNightRing: false,
     isMember: false,
-    gpsInfo: null
+    gpsInfo: null,
+    dayRingSunrise: '06:00',
+    dayRingSunset: '18:00',
+    dayRingDate: null,
+    nightRingSunset: '18:00',
+    nightRingSunrise: '06:00',
+    nightRingDate: null,
 }
 
 const dayNightSlice = createSlice({
@@ -33,6 +45,18 @@ const dayNightSlice = createSlice({
         showNight(state, action) {
             state.showNightRing = action.payload;
         },
+        setDayRingData(state, action) {
+            const { sunrise, sunset, date } = action.payload
+            state.dayRingDate = date;
+            state.dayRingSunrise = sunrise
+            state.dayRingSunset = sunset
+        },
+        setNightRingData(state, action) {
+            const { sunrise, sunset, date } = action.payload
+            state.nightRingDate = date;
+            state.nightRingSunrise = sunrise
+            state.nightRingSunset = sunset
+        },
         updateMember(state, action) {
             var isMember = action.payload.isMember;
             var gpsInfo = action.payload.gpsInfo;
@@ -49,11 +73,11 @@ const dayNightSlice = createSlice({
                 state.sunSet = '18:00'
                 state.sunRiseTomorrow = '06:00'
                 state.sunSetTomorrow = '18:00'
-                state.gpsInfo = gpsInfo?gpsInfo:null
+                state.gpsInfo = gpsInfo ? gpsInfo : null
             }
         },
     }
 });
 
 export default dayNightSlice.reducer;
-export const { showDay, showNight, updateMember } = dayNightSlice.actions;
+export const { showDay, showNight, updateMember, setDayRingData, setNightRingData } = dayNightSlice.actions;