import { EyeOutlined, LikeOutlined, LikeFilled, UserOutlined, BankOutlined, CalendarOutlined, FileTextOutlined, SendOutlined, } 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"; import PostLikeButton from "./detail/PostHeader/PostLikeButton"; const { Title, Paragraph, Text } = Typography; interface LetterCardProps { letter: PostDto; } export function LetterCard({ letter }: LetterCardProps) { return (
{/* Title & Priority */}
<a href={`/${letter.id}/detail`} 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.receivers.map(item => item.department?.name).toString()} {letter.receivers.map(item => item.showname).toString()} {dayjs(letter.createdAt).format("YYYY-MM-DD")}
{/* Content Preview */} {letter.content && (
{letter.content}
)} {/* Badges & Interactions */}
{letter.views}
); } export function Badge({ type, value, className = "", }: { type: "priority" | "category" | "status"; value: string; className?: string; }) { return ( value && ( {value?.toUpperCase()} ) ); }