import { cn } from "@/lib/utils" import { Skeleton } from "@/components/ui/skeleton" interface DataTableSkeletonProps { statsCount?: number toolbarButtonCount?: number rows?: number columns?: number withSearch?: boolean paginationButtonCount?: number withPadding?: boolean className?: string } /** * 通用表格页面骨架屏 * 可配置统计卡片、工具栏按钮、表格列数等 */ export function DataTableSkeleton({ statsCount = 0, toolbarButtonCount = 2, rows = 5, columns = 4, withSearch = true, paginationButtonCount = 3, withPadding = true, className, }: DataTableSkeletonProps) { const containerClass = cn( "space-y-4", withPadding && "px-4 lg:px-6", className ) const toolbarNeeded = withSearch || toolbarButtonCount > 0 return (
{statsCount > 0 && (
{Array.from({ length: statsCount }).map((_, index) => (
))}
)} {toolbarNeeded && ( <>
{withSearch && } {toolbarButtonCount > 0 && (
{Array.from({ length: toolbarButtonCount }).map((_, index) => ( ))}
)}
)}
{Array.from({ length: columns }).map((_, index) => ( ))}
{Array.from({ length: rows }).map((_, rowIndex) => (
{Array.from({ length: Math.max(columns, 3) }).map((_, colIndex) => ( ))}
))}
{Array.from({ length: paginationButtonCount }).map((_, index) => ( ))}
) }