Files
assetx/webapp/components/product/ProductDetailSkeleton.tsx
default 2ee4553b71 init: 初始化 AssetX 项目仓库
包含 webapp(Next.js 用户端)、webapp-back(Go 后端)、
antdesign(管理后台)、landingpage(营销落地页)、
数据库 SQL 和配置文件。
2026-03-27 11:26:43 +00:00

170 lines
8.1 KiB
TypeScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"use client";
import { Skeleton } from "@heroui/react";
export default function ProductDetailSkeleton() {
return (
<div className="grid grid-cols-1 md:grid-cols-3 gap-6 md:gap-8 w-full">
{/* ① Header + StatsCards — 同一卡片跨3列 */}
<div className="order-1 md:col-span-3 min-w-0">
<div className="bg-white dark:bg-gray-800 border border-[#f3f4f6] dark:border-gray-700 rounded-2xl md:rounded-3xl p-4 md:p-8 flex flex-col gap-5 md:gap-6">
{/* ProductHeader */}
<div className="flex flex-col md:flex-row md:items-center md:justify-between gap-4">
<div className="flex items-center gap-4">
<Skeleton className="w-12 h-12 md:w-16 md:h-16 rounded-2xl flex-shrink-0" />
<div className="flex flex-col gap-2">
<Skeleton className="h-6 w-28 md:w-32 rounded-lg" />
<Skeleton className="h-4 w-40 md:w-56 rounded" />
<div className="flex gap-2 mt-1">
<Skeleton className="h-5 w-16 md:w-20 rounded-full" />
<Skeleton className="h-5 w-20 md:w-24 rounded-full" />
</div>
</div>
</div>
<Skeleton className="h-8 w-full md:w-36 rounded-xl" />
</div>
{/* StatsCards — 移动端2列桌面端5列 */}
<div className="grid grid-cols-2 md:grid-cols-5 gap-4">
{[0, 1, 2, 3, 4].map((i) => (
<div key={i} className="rounded-2xl border border-[#f3f4f6] dark:border-gray-700 p-4 md:p-5 flex flex-col gap-3">
<Skeleton className="h-3 w-20 rounded" />
<Skeleton className="h-7 w-16 rounded-lg" />
</div>
))}
</div>
</div>
</div>
{/* ② 交易板 + Protocol — 移动端排第2桌面端右列 */}
<div className="order-2 md:order-3 md:col-span-1 min-w-0 flex flex-col gap-6 md:gap-8">
<div className="bg-white dark:bg-gray-800 rounded-3xl border border-[#f3f4f6] dark:border-gray-700 p-4 md:p-6 flex flex-col gap-4">
<Skeleton className="h-10 w-full rounded-xl" />
<Skeleton className="h-14 w-full rounded-2xl" />
<Skeleton className="h-14 w-full rounded-2xl" />
<Skeleton className="h-4 w-full rounded" />
<Skeleton className="h-12 w-full rounded-2xl" />
</div>
<div className="bg-white dark:bg-gray-800 rounded-3xl border border-[#f3f4f6] dark:border-gray-700 p-4 md:p-6 flex flex-col gap-4">
<Skeleton className="h-5 w-36 rounded" />
{[0, 1, 2, 3].map((i) => (
<div key={i} className="flex items-center justify-between">
<Skeleton className="h-4 w-24 rounded" />
<Skeleton className="h-4 w-4 rounded" />
</div>
))}
</div>
</div>
{/* ③ Asset Overview + APY + Description — 移动端排第3桌面端左列 */}
<div className="order-3 md:order-2 md:col-span-2 min-w-0 flex flex-col gap-6 md:gap-8">
{/* AssetOverviewCard */}
<div className="bg-white dark:bg-gray-800 rounded-3xl border border-[#f3f4f6] dark:border-gray-700 p-4 md:p-8 flex flex-col gap-5">
<div className="flex justify-between items-center">
<Skeleton className="h-5 w-28 rounded" />
<Skeleton className="h-6 w-16 rounded-full" />
</div>
<div className="grid grid-cols-2 gap-4">
{[0, 1, 2, 3].map((i) => (
<div key={i} className="flex justify-between">
<Skeleton className="h-4 w-24 rounded" />
<Skeleton className="h-4 w-16 rounded" />
</div>
))}
</div>
<Skeleton className="h-px w-full rounded" />
<Skeleton className="h-12 w-full rounded-2xl" />
</div>
{/* APYHistoryCard */}
<div className="bg-white dark:bg-gray-800 rounded-3xl border border-[#f3f4f6] dark:border-gray-700 p-4 md:p-6 flex flex-col gap-5">
<div className="flex justify-between items-center">
<Skeleton className="h-4 w-28 rounded" />
<div className="flex gap-2">
<Skeleton className="h-7 w-16 rounded-full" />
<Skeleton className="h-7 w-16 rounded-full" />
</div>
</div>
<Skeleton className="h-[140px] md:h-[160px] w-full rounded-xl" />
</div>
{/* AssetDescriptionCard */}
<div className="bg-white dark:bg-gray-800 rounded-3xl border border-[#f3f4f6] dark:border-gray-700 p-4 md:p-6 flex flex-col gap-4">
<Skeleton className="h-5 w-32 rounded" />
<div className="flex flex-col gap-2">
{[0, 1, 2, 3].map((i) => (
<Skeleton key={i} className="h-4 w-full rounded" />
))}
<Skeleton className="h-4 w-2/3 rounded" />
</div>
</div>
</div>
{/* ④ Season1Rewards — 全宽 */}
<div className="order-4 md:col-span-3 min-w-0">
<Skeleton className="h-24 md:h-28 w-full rounded-3xl" />
</div>
{/* ⑤ PerformanceAnalysis — 全宽 */}
<div className="order-5 md:col-span-3 min-w-0">
<div className="bg-white dark:bg-gray-800 rounded-3xl border border-[#f3f4f6] dark:border-gray-700 p-4 md:p-8 flex flex-col gap-5">
<div className="flex justify-between items-center">
<Skeleton className="h-5 w-40 rounded" />
<div className="flex gap-2">
<Skeleton className="h-8 w-8 rounded-lg" />
<Skeleton className="h-8 w-20 rounded-lg" />
<Skeleton className="h-8 w-8 rounded-lg" />
</div>
</div>
<div className="grid grid-cols-7 gap-1">
{Array.from({ length: 35 }).map((_, i) => (
<Skeleton key={i} className="h-8 md:h-10 w-full rounded-lg" />
))}
</div>
</div>
</div>
{/* ⑥ AssetCustodyVerification — 全宽 */}
<div className="order-6 md:col-span-3 min-w-0 flex flex-col gap-8">
<div className="flex flex-col gap-2">
<Skeleton className="h-6 w-48 rounded" />
<Skeleton className="h-4 w-80 rounded" />
</div>
<div className="bg-white dark:bg-gray-800 rounded-3xl border border-[#f3f4f6] dark:border-gray-700 p-4 md:p-8 flex flex-col gap-6">
<div className="flex flex-col md:flex-row md:items-center md:justify-between gap-2 pb-6 border-b border-[#f3f4f6] dark:border-gray-700">
<Skeleton className="h-5 w-40 rounded" />
<Skeleton className="h-4 w-48 rounded" />
</div>
<div className="hidden md:grid grid-cols-5 gap-4 pb-4 border-b border-[#f3f4f6] dark:border-gray-700">
{[0, 1, 2, 3, 4].map((i) => (
<Skeleton key={i} className="h-3 w-20 rounded" />
))}
</div>
<div className="hidden md:grid grid-cols-5 gap-4 py-4">
{[0, 1, 2, 3, 4].map((i) => (
<Skeleton key={i} className="h-5 w-full rounded" />
))}
</div>
</div>
<div className="grid grid-cols-1 md:grid-cols-3 gap-4 md:gap-6">
{[0, 1, 2].map((i) => (
<div key={i} className="bg-white dark:bg-gray-800 rounded-2xl border border-[#f3f4f6] dark:border-gray-700 p-6 flex flex-col gap-4">
<div className="flex items-start gap-4">
<Skeleton className="w-5 h-5 rounded flex-shrink-0" />
<div className="flex flex-col gap-2 flex-1">
<Skeleton className="h-4 w-32 rounded" />
<Skeleton className="h-3 w-full rounded" />
<Skeleton className="h-3 w-3/4 rounded" />
</div>
</div>
<div className="flex items-center gap-2 mt-2">
<Skeleton className="h-3 w-20 rounded" />
<Skeleton className="h-4 w-4 rounded" />
</div>
</div>
))}
</div>
</div>
</div>
);
}