"use client" import { getCurrentPersonData } from "@/components/label/api/project" import { BackgroundImage, Center, Group, Paper, SimpleGrid, Stack, Text, Title, } from "@mantine/core" import dayjs from "dayjs" import duration from "dayjs/plugin/duration" import { JSX, useEffect, useMemo, useState } from "react" import { DataIcon, HourIcon, ReviewIcon } from "./components/Icon" import PersonalProjectTable from "./components/PersonalProjectTable" import PersonalTaskTable from "./components/PersonalTaskTable" import DataImage from "./resource/images/data.png" import DataLogoImage from "./resource/images/data_logo.png" import HourImage from "./resource/images/hour.png" import HourLogoImage from "./resource/images/hour_logo.png" import ReviewImage from "./resource/images/review.png" import ReviewLogoImage from "./resource/images/review_logo.png" dayjs.extend(duration) function monthText(month: string) { const list = [ "一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月", ] const idx = Number(month) - 1 return list[idx] ?? "" } function formatDurationSeconds(seconds?: number | null) { const value = seconds ?? 0 if (!value) return "-" const durationObj = dayjs.duration(value, "seconds") const hours = durationObj.hours() const minutes = durationObj.minutes() if (hours) return `${hours}小时${minutes}分钟` if (minutes) return `${minutes}分钟` return "-" } function StatCard(props: { title: string timeText: string sizeTitle: string sizeValue: number sizeColor: string background: string backgroundLogo: string Icon: () => JSX.Element }) { const { title, timeText, sizeTitle, sizeValue, sizeColor, background, backgroundLogo, Icon, } = props return (
{title} {timeText}
{sizeTitle} {sizeValue}
) } export default function PersonDashboardPage() { const [data, setData] = useState<{ label_data_size: number label_work_time: number review1_data_size: number review1_work_time: number review2_data_size: number review2_work_time: number } | null>(null) useEffect(() => { const run = async () => { const res = await getCurrentPersonData({ date: dayjs().format("YYYY-MM-DD"), }) setData(res) } run() }, []) const dataText = useMemo(() => { return { label: formatDurationSeconds(data?.label_work_time ?? 0), review1: formatDurationSeconds(data?.review1_work_time ?? 0), review2: formatDurationSeconds(data?.review2_work_time ?? 0), } }, [data]) return ( 今日
{dayjs().format("DD")} {monthText(dayjs().format("MM"))}
) }