"use client"; import Link from "next/link"; import { useEffect, useState } from "react"; import vipStyles from "@/app/vip/components/vip.module.css"; import styles from "./NetdiskDownloadsSection.module.css"; import { Copyable } from "@/app/vip/components/Copyable"; import { NETDISK_RESOURCES, type NetdiskLink, type NetdiskResource } from "@/app/config/netdisk-downloads"; type Variant = "vip" | "guest"; type ModalState = { resource: NetdiskResource; link: NetdiskLink; } | null; function DownloadIcon() { return ( ); } function buildCopyText(resource: NetdiskResource, link: NetdiskLink) { if (link.copyText?.trim()) return link.copyText.trim(); const url = link.url?.trim() || ""; const code = link.code?.trim() || ""; const codeLabel = link.codeLabel || "提取码"; // 复制内容尽量“无歧义”,不写百度/夸克字样(避免用户认为需要转发“带品牌”) return [resource.title, url, code ? `${codeLabel}: ${code}` : ""].filter(Boolean).join("\n"); } function getResourceEmoji(resource: NetdiskResource) { if (resource.id === "system-firmware") return "🧱"; if (resource.id === "software-tools") return "🛠️"; return "📦"; } export function NetdiskDownloadsSection({ variant, onRequireVip }: { variant: Variant; onRequireVip?: () => void }) { const [open, setOpen] = useState>({}); const [modal, setModal] = useState(null); const locked = variant === "guest"; useEffect(() => { if (!modal) return; const onKeyDown = (e: KeyboardEvent) => { if (e.key === "Escape") setModal(null); }; window.addEventListener("keydown", onKeyDown); return () => window.removeEventListener("keydown", onKeyDown); }, [modal]); const getLinkByProvider = (resource: NetdiskResource, provider: NetdiskLink["provider"]) => { return resource.links.find((l) => l.provider === provider) || null; }; return (

网盘下载

{NETDISK_RESOURCES.map((r) => { const isOpen = !!open[r.id]; const emoji = getResourceEmoji(r); return (
{ if (locked) { onRequireVip?.(); return; } setOpen((m) => ({ ...m, [r.id]: !m[r.id] })); }} onKeyDown={(e) => { if (e.key === "Enter" || e.key === " ") { e.preventDefault(); if (locked) onRequireVip?.(); else setOpen((m) => ({ ...m, [r.id]: !m[r.id] })); } }} aria-expanded={variant === "vip" ? isOpen : undefined} style={{ textAlign: "center", cursor: "pointer", opacity: locked ? 0.98 : 1 }} > {locked && 🔒} {r.title} {variant === "vip" && isOpen && (
{(() => { const quark = getLinkByProvider(r, "quark"); const quarkUrl = quark?.url?.trim() || ""; return (
); })()}
)}
); })}
{modal && (
{ if (e.target === e.currentTarget) setModal(null); }} >
{modal.resource.title}
{buildCopyText(modal.resource, modal.link)}
复制 {modal.link.url ? ( ) : ( )}
)}
); }