import Box from '@/components/layout/Box' import './AllRings.scss' import { PageContainer, View, Text, Image } from '@tarojs/components' import { useEffect, useState } from 'react' import Modal from '@/components/layout/Modal.weapp' import { rpxToPx } from '@/utils/tools' import { ColorType } from '@/context/themes/color' import Rings from "@/features/trackTimeDuration/components/Rings"; import { bigRingRadius, getBgRing, getCommon, getDot, ringWidth, smallRingRadius, thirdRingRadius } from '../trackTimeDuration/hooks/RingData' import { RealRing } from '@/features/trackTimeDuration/components/Rings' import { useSelector } from 'react-redux' import { useTranslation } from 'react-i18next' import { TimeFormatter } from '@/utils/time_format' import '@/utils/ring_card.scss'; import DayNightRing from './DayNightRing' // import GradientText from '@/components/basic/GradientText' let sunriseA = new Date() sunriseA.setHours(6) sunriseA.setMinutes(0) sunriseA.setSeconds(0) sunriseA.setMilliseconds(0) const sunsetA = new Date() sunsetA.setHours(18) sunsetA.setMinutes(0) sunsetA.setSeconds(0) sunsetA.setMilliseconds(0) const sunriseB = new Date() sunriseB.setHours(6) sunriseB.setMinutes(0) sunriseB.setSeconds(0) sunriseB.setMilliseconds(0) let GradientText if (process.env.TARO_ENV == 'rn') { GradientText = require('@/components/basic/GradientText').default } export default function AllDayRings(props: { schedule: any }) { const [authInfo, setAuthInfo] = useState(global.locationDetail ? global.locationDetail : null) const [showRing, setShowRing] = useState(false) const user = useSelector((state: any) => state.user); const ring = useSelector((state: any) => state.ring); const [schedule] = useState(props.schedule) const { t } = useTranslation() useEffect(() => { setAuthInfo(global.locationDetail) }, [global.locationDetail]) global.tapShowDay = () => { setShowRing(true) } function getFoodTime() { if (ring.schedule) { return [ring.schedule.fast.end_time, ring.schedule.fast.start_time] } var obj; (schedule as any).map(item => { if (item.name == 'FAST') { obj = item } }) if (!obj) { console.log('报错', schedule) return ['16:00', '08:00']; } return [obj.schedule.fast.end_time, obj.schedule.fast.start_time] } function getActivityTime() { if (ring.schedule) { return [ring.schedule.sleep.end_time, ring.schedule.sleep.start_time] } var obj; (schedule as any).map(item => { if (item.name == 'SLEEP') { obj = item } }) return [obj.schedule.sleep.end_time, obj.schedule.sleep.start_time] } function bigRing() { var common = getCommon(null, true) common.radius = bigRingRadius; common.lineWidth = ringWidth; var bgRing = getBgRing() const targetRing: RealRing = { color: (ring.current_record && ring.current_record.scenario == 'SLEEP') ? ColorType.activity + '66' : ColorType.food + '66', startArc: 0, durationArc: 2 } var list = getFoodTime() var start; var end; if (ring.current_record && ring.current_record.scenario == 'SLEEP') { var list2 = getActivityTime() start = parseInt(list2[0].split(':')[0]) * 60 + parseInt(list2[0].split(':')[1]) end = parseInt(list2[1].split(':')[0]) * 60 + parseInt(list2[1].split(':')[1]) if (ring.current_record.status != 'WAIT_FOR_START') { var startDate = new Date(ring.current_record.sleep.target_start_time) var endDate = new Date(ring.current_record.sleep.target_end_time) end = startDate.getHours() * 60 + startDate.getMinutes() start = endDate.getHours() * 60 + endDate.getMinutes() } } else { start = parseInt(list[0].split(':')[0]) * 60 + parseInt(list[0].split(':')[1]) end = parseInt(list[1].split(':')[0]) * 60 + parseInt(list[1].split(':')[1]) if (ring.current_record && ring.current_record.status != 'WAIT_FOR_START') { var startDate = new Date(ring.current_record.fast.target_start_time) var endDate = new Date(ring.current_record.fast.target_end_time) end = startDate.getHours() * 60 + startDate.getMinutes() start = endDate.getHours() * 60 + endDate.getMinutes() } } if (end < start) { end += 24 * 60 } var duration = end - start targetRing.startArc = (start * 60) / (24 * 3600) * 2 * Math.PI - Math.PI / 2.0; targetRing.durationArc = (duration * 60) / (24 * 3600) * 2 * Math.PI; var currentDot = getDot(null, false) var date = new Date() var minutes = date.getHours() * 60 + date.getMinutes() if (minutes < start) { minutes += 1440 } currentDot.color = ColorType.food var now = new Date() var t = now.getHours() * 60 + now.getMinutes() var duration2 = t - start if (duration2 < 0) { duration2 += 24 * 60 } let realRing: RealRing = { color: ColorType.food, startArc: (start * 60) / (24 * 3600) * 2 * Math.PI - Math.PI / 2.0, durationArc: (duration2 * 60) / (24 * 3600) * 2 * Math.PI } if (ring.current_record && ring.current_record.scenario == 'SLEEP') { realRing.color = ColorType.activity currentDot.color = ColorType.activity } if (!user.isLogin) { currentDot = null realRing = null } if (ring.current_record.status == 'ONGOING1') { realRing = null } return } function smallRing() { var common = getCommon(null, false) common.radius = smallRingRadius; common.lineWidth = ringWidth; var bgRing = getBgRing() const realRingBig: RealRing = { color: ColorType.activity + '66', startArc: 0, durationArc: 2 } var list = getActivityTime() var start = parseInt(list[0].split(':')[0]) * 60 + parseInt(list[0].split(':')[1]) var end = parseInt(list[1].split(':')[0]) * 60 + parseInt(list[1].split(':')[1]) if (ring.current_record) { if (ring.current_record.scenario == 'SLEEP') { if (ring.current_record.status == 'ONGOING') { var startDate = new Date(ring.current_record.sleep.target_start_time) var endDate = new Date(ring.current_record.sleep.target_end_time) end = startDate.getHours() * 60 + startDate.getMinutes() start = endDate.getHours() * 60 + endDate.getMinutes() } } else { if (ring.current_record.status == 'ONGOING2') { var startDate = new Date(ring.current_record.sleep.target_start_time) var endDate = new Date(ring.current_record.sleep.target_end_time) end = startDate.getHours() * 60 + startDate.getMinutes() start = endDate.getHours() * 60 + endDate.getMinutes() } else if (ring.current_record.status == 'ONGOING3') { //睡眠已完成时,睡眠小于24小时,使用真实的real_end_time-real_start_time //大于24小时,使用real_end_time+sleep_duration if (ring.current_record.sleep.real_end_time - ring.current_record.sleep.real_start_time < 24 * 3600 * 1000) { var startDate = new Date(ring.current_record.sleep.real_start_time) var endDate = new Date(ring.current_record.sleep.real_end_time) end = startDate.getHours() * 60 + startDate.getMinutes() start = endDate.getHours() * 60 + endDate.getMinutes() } else { var startDate = new Date(ring.current_record.sleep.real_end_time) var durationTemp = end - start//ring.current_record.sleep.target_end_time-ring.current_record.sleep.target_start_time if (durationTemp < 0) { durationTemp += 24 * 60 } var endDate = new Date(startDate.getTime() + durationTemp * 60 * 1000) start = startDate.getHours() * 60 + startDate.getMinutes() end = endDate.getHours() * 60 + endDate.getMinutes() } } } } if (end < start) { end += 24 * 60 } var duration = end - start realRingBig.startArc = (start * 60) / (24 * 3600) * 2 * Math.PI - Math.PI / 2.0; realRingBig.durationArc = (duration * 60) / (24 * 3600) * 2 * Math.PI; var currentDot = getDot(null, false) var date = new Date() var minutes = date.getHours() * 60 + date.getMinutes() if (minutes < start) { minutes += 1440 } currentDot.color = ColorType.activity var now = new Date() var t = now.getHours() * 60 + now.getMinutes() var duration2 = t - start if (duration2 < 0) { duration2 += 24 * 60 } let realRing: RealRing = { color: ColorType.activity, startArc: (start * 60) / (24 * 3600) * 2 * Math.PI - Math.PI / 2.0, durationArc: (duration2 * 60) / (24 * 3600) * 2 * Math.PI } if (!user.isLogin) { currentDot = null realRing = null } if (ring.current_record.status == 'ONGOING2') { realRing = null } return } function dayRing() { return } function rings() { return { bigRing() } { ring.current_record && ring.current_record.scenario == 'FAST_SLEEP' && { smallRing() } } { { dayRing() } } } function dayDuration() { return global.sunriseDuration } function eatDuration() { var list = getFoodTime() var start = parseInt(list[0].split(':')[0]) * 60 + parseInt(list[0].split(':')[1]) var end = parseInt(list[1].split(':')[0]) * 60 + parseInt(list[1].split(':')[1]) if (ring.current_record && ring.current_record.status != 'WAIT_FOR_START' && ring.current_record.scenario != 'SLEEP') { var startDate = new Date(ring.current_record.fast.target_start_time) var endDate = new Date(ring.current_record.fast.target_end_time) end = startDate.getHours() * 60 + startDate.getMinutes() start = endDate.getHours() * 60 + endDate.getMinutes() } if (end < start) { end += 24 * 60 } var duration = (end - start) * 60 * 1000 return TimeFormatter.calculateTimeDifference(new Date().getTime(), new Date().getTime() + duration); } function activityDuration() { var list = getActivityTime() var start = parseInt(list[0].split(':')[0]) * 3600 + parseInt(list[0].split(':')[1]) * 60 var end = parseInt(list[1].split(':')[0]) * 3600 + parseInt(list[1].split(':')[1]) * 60 if (ring.current_record) { if (ring.current_record.scenario == 'SLEEP') { if (ring.current_record.status == 'ONGOING') { var startDate = new Date(ring.current_record.sleep.target_start_time) var endDate = new Date(ring.current_record.sleep.target_end_time) end = startDate.getHours() * 3600 + startDate.getMinutes() * 60 + startDate.getSeconds() start = endDate.getHours() * 3600 + endDate.getMinutes() * 60 + endDate.getSeconds() } } else { if (ring.current_record.status == 'ONGOING2') { var startDate = new Date(ring.current_record.sleep.target_start_time) var endDate = new Date(ring.current_record.sleep.target_end_time) end = startDate.getHours() * 3600 + startDate.getMinutes() * 60 + startDate.getSeconds() start = endDate.getHours() * 3600 + endDate.getMinutes() * 60 + endDate.getSeconds() } else if (ring.current_record.status == 'ONGOING3') { //睡眠已完成时,睡眠小于24小时,使用真实的real_end_time-real_start_time //大于24小时,使用real_end_time+sleep_duration if (ring.current_record.sleep.real_end_time - ring.current_record.sleep.real_start_time < 24 * 3600 * 1000) { var startDate = new Date(ring.current_record.sleep.real_start_time) var endDate = new Date(ring.current_record.sleep.real_end_time) end = startDate.getHours() * 3600 + startDate.getMinutes() * 60 + startDate.getSeconds() start = endDate.getHours() * 3600 + endDate.getMinutes() * 60 + endDate.getSeconds() } else { var startDate = new Date(ring.current_record.sleep.real_end_time) var durationTemp = start - end//ring.current_record.sleep.target_end_time-ring.current_record.sleep.target_start_time if (durationTemp < 0) { durationTemp += 24 * 3600 } var endDate = new Date(startDate.getTime() + durationTemp * 1000) end = startDate.getHours() * 3600 + startDate.getMinutes() * 60 + startDate.getSeconds() start = endDate.getHours() * 3600 + endDate.getMinutes() * 60 + endDate.getSeconds() debugger console.log('active', end, start, durationTemp) } } } } if (end < start) { end += 24 * 3600 } var duration = (end - start) * 1000 return TimeFormatter.calculateTimeDifference(new Date().getTime(), new Date().getTime() + duration); } function popDetail() { return { rings() } {t('feature.common.day')} {dayDuration()} { ring.current_record && ring.current_record.scenario != 'SLEEP' && 进食 } { ring.current_record && ring.current_record.scenario != 'SLEEP' && {eatDuration()} } { ring.current_record && ring.current_record.scenario != 'FAST' && 活动 } { ring.current_record && ring.current_record.scenario != 'FAST' && {activityDuration()} } } function modalContent() { return { setShowRing(false) }} confirm={() => { }}> {popDetail()} } return { showRing && modalContent() } // return // // // {/* {t('feature.day_night.show_all_rings')} */} // { // process.env.TARO_ENV == 'weapp' ? {t('feature.day_night.show_all_rings')} : // {t('feature.day_night.show_all_rings')} // } // // { // showRing && modalContent() // } // }