"use client" import { getPersonProjectDashBoard } from "@/components/label/api/project" import { Button, Group, Pagination, ScrollArea, Select, Table, } from "@mantine/core" import { IconRefresh } from "@tabler/icons-react" import dayjs from "dayjs" import duration from "dayjs/plugin/duration" import { useCallback, useEffect, useMemo, useState } from "react" dayjs.extend(duration) const pageSizeOptions = [50, 100, 200] 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 PersonalProjectTable() { const [records, setRecords] = useState([]) const [loading, setLoading] = useState(false) const [page, setPage] = useState(1) const [pageSize, setPageSize] = useState(50) const totalPages = useMemo(() => { const totalItems = records.length return Math.max(1, Math.ceil(totalItems / pageSize)) }, [pageSize, records.length]) const pageRecords = useMemo(() => { const start = (page - 1) * pageSize return records.slice(start, start + pageSize) }, [page, pageSize, records]) const load = useCallback(async () => { setLoading(true) try { const res = await getPersonProjectDashBoard() setRecords(res ?? []) setPage(1) } finally { setLoading(false) } }, []) useEffect(() => { load() }, [load]) useEffect(() => { if (page > totalPages) setPage(totalPages) }, [page, totalPages]) return ( 项目ID 项目名称 所属业务 任务耗时 标注类别 {pageRecords.map((record) => ( {record.project_id ?? "-"} {record.project_name ?? "-"} {record.project_type ?? "-"} {formatDurationSeconds(record.work_time)} {record.project_label_type ?? "-"} ))}