"use client" import { getCurrentPersonData } from "@/components/label/api/project" import { SettingContentPanel, SettingPage, SettingPanel, } from "@/components/setting/PageSurface" import { Stack, Text } from "@mantine/core" import dayjs from "dayjs" import duration from "dayjs/plugin/duration" import { useEffect, useMemo, useState } from "react" import PersonalProjectTable from "./components/PersonalProjectTable" import PersonalTaskTable from "./components/PersonalTaskTable" import classes from "./page.module.css" 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 "-" } 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]) const summaryItems = useMemo( () => [ { title: "标注工时", value: dataText.label, metaLabel: "标注数据量", metaValue: data?.label_data_size ?? 0, }, { title: "审核工时", value: dataText.review1, metaLabel: "审核数据量", metaValue: data?.review1_data_size ?? 0, }, { title: "复审工时", value: dataText.review2, metaLabel: "复审数据量", metaValue: data?.review2_data_size ?? 0, }, ], [ data?.label_data_size, data?.review1_data_size, data?.review2_data_size, dataText, ] ) return ( 个人工作台 /{" "} 个人看板
今日 {dayjs().format("DD")} {monthText(dayjs().format("MM"))} · {dayjs().format("YYYY")}
{summaryItems.map((item) => (
{item.title} {item.value}
{item.metaLabel} {item.metaValue}
))}
) }