import React, { useMemo } from "react"; import { Image, Button, Row, Col, Tooltip } from "antd"; import { ResourceDto } from "@nice/common"; import { env } from "@web/src/env"; import { getFileIcon } from "./utils"; import { formatFileSize, getCompressedImageUrl } from "@nice/utils"; export default function ResourcesShower({ resources = [], }: { resources: ResourceDto[]; }) { const { resources: dealedResources } = useMemo(() => { if (!resources) return { resources: [] }; const isImage = (url: string) => /\.(png|jpg|jpeg|gif|webp)$/i.test(url); const sortedResources = resources .map((resource) => { const original = `http://${env.SERVER_IP}:${env.FILE_PORT}/uploads/${resource.url}`; const isImg = isImage(resource.url); return { ...resource, url: isImg ? getCompressedImageUrl(original) : original, originalUrl: original, isImage: isImg, }; }) .sort((a, b) => (a.isImage === b.isImage ? 0 : a.isImage ? -1 : 1)); return { resources: sortedResources }; }, [resources]); const imageResources = dealedResources.filter((res) => res.isImage); const fileResources = dealedResources.filter((res) => !res.isImage); return (
{imageResources.length > 0 && ( {imageResources.map((resource) => (
{resource.title} 点击预览
), }} style={{ position: "absolute", inset: 0, width: "100%", height: "100%", objectFit: "cover", }} rootClassName="w-full h-full" />
{resource.title && (
{resource.title}
)}
))} )} {fileResources.length > 0 && (
{fileResources.map((resource) => { return ( {/* 超紧凑卡片容器 */}
{/* 微型文件图标 */}
{getFileIcon(resource.url)}
{/* 压缩信息展示 */}

{resource.title?.slice(0, 12) || "未命名"}

{resource.url .split(".") .pop() ?.slice(0, 4) .toUpperCase()} {resource.meta.size && formatFileSize( resource.meta.size )}
); })}
)} ); }