149 lines
5.8 KiB
TypeScript
149 lines
5.8 KiB
TypeScript
import { DashboardShell } from "@/components/dashboard-shell"
|
|
import { DashboardHeader } from "@/components/dashboard-header"
|
|
import { Button } from "@/components/ui/button"
|
|
import { Card, CardContent, CardHeader } from "@/components/ui/card"
|
|
import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"
|
|
import { ArrowLeft } from "lucide-react"
|
|
import { Skeleton } from "@/components/ui/skeleton"
|
|
import Link from "next/link"
|
|
|
|
export default function PropDetailLoading() {
|
|
return (
|
|
<DashboardShell>
|
|
<div className="absolute top-0 right-0 w-1/2 h-48 bg-gradient-to-bl from-purple-200 via-pink-200 to-transparent opacity-20 rounded-bl-full" />
|
|
|
|
<div className="flex items-center mb-6">
|
|
<Button variant="ghost" size="sm" className="mr-4" asChild>
|
|
<Link href="/props">
|
|
<ArrowLeft className="mr-2 h-4 w-4" />
|
|
返回列表
|
|
</Link>
|
|
</Button>
|
|
<DashboardHeader heading={<Skeleton className="h-8 w-48" />} text={<Skeleton className="h-5 w-32" />}>
|
|
<div className="flex space-x-2">
|
|
<Skeleton className="h-10 w-24" />
|
|
<Skeleton className="h-10 w-32" />
|
|
</div>
|
|
</DashboardHeader>
|
|
</div>
|
|
|
|
<Tabs defaultValue="details" className="w-full">
|
|
<TabsList className="grid w-full md:w-auto grid-cols-2 md:grid-cols-3 mb-4">
|
|
<TabsTrigger value="details">道具详情</TabsTrigger>
|
|
<TabsTrigger value="batches">批次管理</TabsTrigger>
|
|
<TabsTrigger value="analytics">数据分析</TabsTrigger>
|
|
</TabsList>
|
|
|
|
<TabsContent value="details" className="space-y-6">
|
|
<div className="grid gap-6 md:grid-cols-3">
|
|
<Card className="md:col-span-1 border-none shadow-lg bg-white">
|
|
<CardHeader>
|
|
<Skeleton className="h-6 w-32" />
|
|
</CardHeader>
|
|
<CardContent className="flex justify-center">
|
|
<Skeleton className="w-full aspect-square max-w-[300px] rounded-lg" />
|
|
</CardContent>
|
|
</Card>
|
|
|
|
<Card className="md:col-span-2 border-none shadow-lg bg-gradient-to-br from-white to-purple-50">
|
|
<CardHeader>
|
|
<Skeleton className="h-6 w-32" />
|
|
</CardHeader>
|
|
<CardContent>
|
|
<div className="grid grid-cols-2 gap-4">
|
|
{Array.from({ length: 6 }).map((_, i) => (
|
|
<div key={i} className="space-y-1">
|
|
<Skeleton className="h-4 w-24" />
|
|
<Skeleton className="h-6 w-32" />
|
|
</div>
|
|
))}
|
|
</div>
|
|
|
|
<div className="mt-6">
|
|
<Skeleton className="h-4 w-24 mb-2" />
|
|
<Skeleton className="h-20 w-full" />
|
|
</div>
|
|
</CardContent>
|
|
</Card>
|
|
</div>
|
|
</TabsContent>
|
|
|
|
<TabsContent value="batches" className="space-y-6">
|
|
<Card className="border-none shadow-lg bg-gradient-to-br from-white to-blue-50">
|
|
<CardHeader className="flex flex-row items-center justify-between">
|
|
<div>
|
|
<Skeleton className="h-6 w-40" />
|
|
<Skeleton className="h-4 w-64 mt-2" />
|
|
</div>
|
|
<Skeleton className="h-10 w-32" />
|
|
</CardHeader>
|
|
<CardContent>
|
|
<div className="rounded-md border">
|
|
<div className="p-4">
|
|
<div className="flex justify-between mb-4">
|
|
{Array.from({ length: 8 }).map((_, i) => (
|
|
<Skeleton key={i} className="h-4 w-16" />
|
|
))}
|
|
</div>
|
|
{Array.from({ length: 3 }).map((_, i) => (
|
|
<div key={i} className="flex justify-between py-3 border-b">
|
|
{Array.from({ length: 8 }).map((_, j) => (
|
|
<Skeleton key={j} className="h-4 w-16" />
|
|
))}
|
|
</div>
|
|
))}
|
|
</div>
|
|
</div>
|
|
</CardContent>
|
|
</Card>
|
|
|
|
<Card className="border-none shadow-lg bg-white">
|
|
<CardHeader>
|
|
<Skeleton className="h-6 w-32" />
|
|
<Skeleton className="h-4 w-48 mt-2" />
|
|
</CardHeader>
|
|
<CardContent>
|
|
<div className="flex flex-wrap gap-4">
|
|
<Skeleton className="h-10 w-32" />
|
|
<Skeleton className="h-10 w-32" />
|
|
</div>
|
|
</CardContent>
|
|
</Card>
|
|
</TabsContent>
|
|
|
|
<TabsContent value="analytics" className="space-y-6">
|
|
<Card className="border-none shadow-lg bg-white">
|
|
<CardHeader>
|
|
<Skeleton className="h-6 w-40" />
|
|
<Skeleton className="h-4 w-56 mt-2" />
|
|
</CardHeader>
|
|
<CardContent>
|
|
<Skeleton className="h-[300px] w-full rounded-lg" />
|
|
</CardContent>
|
|
</Card>
|
|
|
|
<div className="grid gap-6 md:grid-cols-2">
|
|
<Card className="border-none shadow-lg bg-gradient-to-br from-white to-green-50">
|
|
<CardHeader>
|
|
<Skeleton className="h-6 w-32" />
|
|
</CardHeader>
|
|
<CardContent>
|
|
<Skeleton className="h-[200px] w-full rounded-lg" />
|
|
</CardContent>
|
|
</Card>
|
|
|
|
<Card className="border-none shadow-lg bg-gradient-to-br from-white to-blue-50">
|
|
<CardHeader>
|
|
<Skeleton className="h-6 w-32" />
|
|
</CardHeader>
|
|
<CardContent>
|
|
<Skeleton className="h-[200px] w-full rounded-lg" />
|
|
</CardContent>
|
|
</Card>
|
|
</div>
|
|
</TabsContent>
|
|
</Tabs>
|
|
</DashboardShell>
|
|
)
|
|
}
|