import Box from '@/components/layout/Box' import './AllRings.scss' import { PageContainer, View, Text } from '@tarojs/components' import { useEffect, useState } from 'react' import Modal from '@/components/layout/Modal.weapp' import { bigRingRadius, getBgRing, getCommon, getDot, getReal, getSchedule, getTarget, ringWidth, smallRingRadius, thirdRingRadius, timeTotimestamp } from '../hooks/RingData' import { rpxToPx } from '@/utils/tools' import { ColorType } from '@/context/themes/color' import { useTranslation } from 'react-i18next' import Rings from "./Rings"; import { TimeFormatter } from '@/utils/time_format' import { useSelector } from 'react-redux' import { RealRing } from '@/features/trackTimeDuration/components/Rings' import DayNightRing from './DayNightRing' export default function AllRings(props: { data?: any, time?: any }) { const [showRing, setShowRing] = useState(false) const [record, setRecord] = useState(props.data.current_record); const user = useSelector((state: any) => state.user); const nightStore = useSelector((state: any) => state.night); const [authInfo, setAuthInfo] = useState(global.locationDetail ? global.locationDetail : null) const { t } = useTranslation() useEffect(() => { setAuthInfo(global.locationDetail) }, [global.locationDetail]) useEffect(()=>{ setRecord(props.data.current_record); },[props.data]) function tapShow() { setShowRing(true) } function durationArc(start_time: number, end_time: number) { var duration = (end_time - start_time) / 1000; return duration / (24 * 3600) * 2 * Math.PI; } const startArc = (time: number) => { var date = new Date(time); var hour = date.getHours(); var minute = date.getMinutes(); var second = date.getSeconds(); return (hour * 3600 + minute * 60 + second) / (24 * 3600) * 2 * Math.PI - Math.PI / 2.0; } function bigRing() { var common = getCommon(null, true) common.radius = bigRingRadius; common.lineWidth = ringWidth; var bgRing = getBgRing() var currentDot1 = getDot(record, true) var targetBigRing1 = getTarget(record, true) targetBigRing1.color = record.scenario == 'SLEEP' ? ColorType.sleep + '66' : ColorType.fast + '66' debugger if (record.status == 'ONGOING') { var realRing1 = getReal(record, true, false) // debugger return } if (record.status == 'WAIT_FOR_START') { var scenario = JSON.parse(JSON.stringify(props.data.scenario)) if (scenario.name == 'SLEEP') { var countduration = (props.data.current_record.sleep.target_end_time - props.data.current_record.sleep.target_start_time) / 60000 var min1 = TimeFormatter.timestringToSeconds(scenario.schedule.sleep.start_time) / 60 var min2 = TimeFormatter.timestringToSeconds(scenario.schedule.sleep.end_time) / 60 var leftMinutes = min1 < min2 ? min2 - min1 : min2 + 24 * 60 - min1 if (leftMinutes != countduration) { min2 = min1 + countduration if (min2 > 1440) { min2 -= 1440 } var hour = Math.floor(min2 / 60) var minute = min2 % 60 scenario.schedule.sleep.end_time = `${hour}:${minute}` } } else { var countduration = (props.data.current_record.fast.target_end_time - props.data.current_record.fast.target_start_time) / 60000 var min1 = TimeFormatter.timestringToSeconds(scenario.schedule.fast.start_time) / 60 var min2 = TimeFormatter.timestringToSeconds(scenario.schedule.fast.end_time) / 60 var leftMinutes = min1 < min2 ? min2 - min1 : min2 + 24 * 60 - min1 if (leftMinutes != countduration) { min2 = min1 + countduration if (min2 > 1440) { min2 -= 1440 } var hour = Math.floor(min2 / 60) var minute = min2 % 60 scenario.schedule.fast.end_time = `${hour}:${minute}` } } var realRing1 = getSchedule(scenario, scenario.name != 'SLEEP', true, true)//getSchedule(record, props.type != 'SLEEP', true) var list: any = [] if (scenario.name == 'FAST_SLEEP') { realRing1.color = ColorType.fast + '66' } else if (scenario.name == 'SLEEP') { realRing1.color = ColorType.sleep + '66' } else { realRing1.color = ColorType.fast + '66' } if (user.isLogin) { list = [] } if (!user.isLogin) { currentDot1 = null // realRing1 = null } return } var realRing1 = getReal(record, true, false) return } function smallRing() { var common = getCommon(null, false) common.radius = smallRingRadius; common.lineWidth = ringWidth; var bgRing = getBgRing() var realRing = getReal(record, false, false) if (props.data.scenario.name == 'FAST_SLEEP') { if (!record.sleep) { return null } if (record.sleep.status == 'WAIT_FOR_END') { var targetBigRing1 = getTarget(record, false) targetBigRing1.color = ColorType.sleep + '66' var currentDot = getDot(record, false) realRing.durationArc = durationArc(record.sleep.target_start_time, (new Date()).getTime()) return } else if (record.status == 'WAIT_FOR_START' || record.status == 'ONGOING1') { var scenario = JSON.parse(JSON.stringify(props.data.scenario)) if (record.status == 'WAIT_FOR_START') { realRing = getSchedule(scenario, false, true, record.status == 'WAIT_FOR_START')//getSchedule(record, false, true) } else { realRing.startArc = startArc(record.sleep.target_start_time) realRing.durationArc = durationArc(record.sleep.target_start_time, record.sleep.target_end_time) } realRing.color = ColorType.sleep + '66' var currentDot = getDot(record, false) if (!user.isLogin) { currentDot = null } return } else if (record.sleep.status == 'NOT_COMPLETED') { realRing.durationArc = 0.01 var currentDot = getDot(record, false) return } else if (record.sleep.status == 'COMPLETED') { realRing = getReal(record, false, true) var currentDot = getDot(record, false) if (record.status == 'ONGOING3') { currentDot = null // currentDot.color = '#ffffffff' } return } else if (record.sleep.status == 'ONGOING2') { var currentDot = getDot(record, false) return } return } else { var currentDot = getDot(record, false) var targetRing = getTarget(record, false) if (record.status == 'ONGOING2') { var realRing = getReal(record, false, false) return } if (record.status == 'ONGOING3') { currentDot.color = 'rgba(0, 255, 255, 0.5)' } return } } function dayRing() { return } function rings() { return { bigRing() } { props.data.scenario.name == 'FAST_SLEEP' && { smallRing() } } { { dayRing() } } } function fastDuration() { return global.fastDuration } function sleepDuration() { return global.sleepDuration } function nightDuration() { return global.sunsetDuration } function popDetail() { return { rings() } {t('feature.common.overnight')} {nightDuration()} { (props.data.scenario.name == 'FAST' || props.data.scenario.name == 'FAST_SLEEP') && {t('feature.track_time_duration.record_fast_sleep.item.fast')} } { (props.data.scenario.name == 'FAST' || props.data.scenario.name == 'FAST_SLEEP') && {fastDuration()} } { (props.data.scenario.name == 'SLEEP' || props.data.scenario.name == 'FAST_SLEEP') && {t('feature.track_time_duration.record_fast_sleep.item.sleep')} } { (props.data.scenario.name == 'SLEEP' || props.data.scenario.name == 'FAST_SLEEP') && {sleepDuration()} } } function modalContent() { if (process.env.TARO_ENV == 'weapp') { return { setShowRing(false) }} confirm={() => { }}> {popDetail()} } else if (process.env.TARO_ENV == 'rn') { return { }} onBeforeLeave={() => { }} onClick={() => { alert('b') }} onClickOverlay={() => { alert('a') }} onAfterLeave={() => { setShowRing(false) }} show={showRing} round={true} overlay={true} position='bottom' > {popDetail()} } } return 同步显示生物钟 { showRing && modalContent() } }