import { EyeOutlined, LikeOutlined, LikeFilled, UserOutlined, BankOutlined, CalendarOutlined, FileTextOutlined, } from "@ant-design/icons"; import { Button, Typography, Space, Tooltip } from "antd"; import toast from "react-hot-toast"; import { useState } from "react"; import { getBadgeStyle } from "@web/src/app/main/letter/list/utils"; import { PostDto } from "@nice/common"; import dayjs from "dayjs"; const { Title, Paragraph, Text } = Typography; interface LetterCardProps { letter: PostDto; } export function LetterCard({ letter }: LetterCardProps) { const [likes, setLikes] = useState(0); const [liked, setLiked] = useState(false); const [views] = useState(Math.floor(Math.random() * 100)); // 模拟浏览量数据 const handleLike = () => { if (!liked) { setLikes((prev) => prev + 1); setLiked(true); toast.success("已点赞!", { icon: , className: "custom-message", }); } else { setLikes((prev) => prev - 1); setLiked(false); toast("已取消点赞", { className: "custom-message", }); } }; return (
{/* Title & Priority */}
<a href={`/letters/${letter.id}`} target="_blank" className="text-primary transition-all duration-300 relative before:absolute before:bottom-0 before:left-0 before:w-0 before:h-[2px] before:bg-primary-600 group-hover:before:w-full before:transition-all before:duration-300 group-hover:text-primary-600 group-hover:scale-105 group-hover:drop-shadow-md"> {letter.title} </a>
{/* Meta Info */}
{letter.author?.showname || letter?.author?.username} | {letter.author?.department?.name} {dayjs(letter.createdAt).format("YYYY-MM-DD")}
{/* Content Preview */} {letter.content && (
{letter.content}
)} {/* Badges & Interactions */}
{views}
); } export function Badge({ type, value, className = "", }: { type: "priority" | "category" | "status"; value: string; className?: string; }) { return ( value && ( {value?.toUpperCase()} ) ); }