import { View, Text } from "@tarojs/components"; import './WeekCalendarItem.scss' import { rpxToPx } from "@/utils/tools"; import { useEffect, useState } from "react"; import { ColorType } from "@/context/themes/color"; let timer export default function WeekCalendarItem(props: { data: any, isCurrentWeek: boolean }) { const [charts, setCharts] = useState([]) const [showCurrentTime, setShowCurrentTime] = useState(false) const [position, setPosition] = useState({ left: 0, top: 0 }) useEffect(() => { var array: any = [] for (var i = 0; i < 7; i++) { var start = props.data.start + 24 * 3600 * 1000 * i var end = props.data.start + (24 * 3600 * 1000) * (i + 1) var fasts: any = [] var sleeps: any = [] array.push({ start, end, fasts, sleeps }) props.data.list.map((item) => { var isFast = item.scenario == 'FAST' var range = getIntersection(start, end, item.real_start_time, item.real_end_time) if (range) { var begin = (range[0] - start) / (24 * 3600 * 1000) var height = (range[1] - range[0]) / (24 * 3600 * 1000) if (isFast) { fasts.push({ begin, height }) } else { sleeps.push({ begin, height }) } } }) } setCharts(array) return ()=>{ timer && clearInterval(timer) } }, []) useEffect(() => { if (timer) clearInterval(timer) if (props.isCurrentWeek) { timer = setInterval(()=>{ getPosition() },60000) getPosition() } setShowCurrentTime(props.isCurrentWeek) }, [props.isCurrentWeek]) function getPosition() { var now = new Date().getTime() var start = props.data.start var index = Math.floor((now - start) / (3600 * 24 * 1000)) var left = (now - start) % (3600 * 24 * 1000) var top = left / (3600 * 24 * 1000) * 400 setPosition({ left: rpxToPx(94 * index), top: rpxToPx(top) }) } function getIntersection(start1, end1, start2, end2) { // 确保 start1 小于等于 end1,start2 小于等于 end2 if (start1 > end1) { [start1, end1] = [end1, start1]; } if (start2 > end2) { [start2, end2] = [end2, start2]; } // 计算相交的时间戳 var intersectionStart = Math.max(start1, start2); var intersectionEnd = Math.min(end1, end2); // 检查是否存在相交时间戳 if (intersectionStart <= intersectionEnd) { // 返回相交的时间戳 return [intersectionStart, intersectionEnd]; } else { // 不存在相交时间戳 return null; } } return 周日 周一 周二 周三 周四 周五 周六 { showCurrentTime && } { charts.map((item, index) => { return { (item as any).fasts.length > 0 && { (item as any).fasts.map(obj => { return }) } } { (item as any).sleeps.length > 0 && { (item as any).sleeps.map(obj => { return }) } } }) } 周一 周二 周三 周四 周五 周六 周日 }