import dayjs from 'dayjs'; import { Badge } from '@nice/ui/components/badge'; import { Button } from '@nice/ui/components/button'; import { Checkbox } from '@nice/ui/components/checkbox'; import { TableCell, TableRow } from '@nice/ui/components/table'; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTrigger, } from '@nice/ui/components/dropdown-menu'; import { IconClock, IconEye, IconEyeOff, IconFileText, IconDotsVertical, IconEdit, IconCopy, IconShare, IconArchive, IconRestore, IconTrash, IconExternalLink, } from '@tabler/icons-react'; import { ArticleStatusBadge } from './article-status-badge'; import { formatNumber } from '@/lib/articles/utils'; import { useArticlesContext } from './context'; import type { Article } from '@fenghuo/common'; interface ArticleRowProps { article: Article; } export function ArticleRow({ article }: ArticleRowProps) { const { selectedArticles, handleSelectArticle, setQuickEditId, handleArticleAction, updateVisibility } = useArticlesContext(); const isSelected = selectedArticles.includes(article.id); const onSelect = (checked: boolean) => { handleSelectArticle(article.id, checked); }; const onQuickEdit = () => { setQuickEditId(article.id); }; return (

{article.title}

{article.excerpt && (

{article.excerpt}

)}
{article.status === 'published' && ( )}
{article.terms?.[0]?.name && ( {article.terms?.[0]?.name} )}
{article.author?.username}
{article.organization?.name}
{article.viewCount > 0 && (
{formatNumber(article.viewCount)}
)} {article.commentCount > 0 && (
{formatNumber(article.commentCount)}
)}
{dayjs(article.createdAt).format('YYYY-MM-DD HH:mm')}
{article.publishedAt && (
已发布
)}
{/* 可见性切换 */} {article.visibility === 'public' ? ( ) : ( )} {/* 更多操作 */} handleArticleAction(article.id, 'edit')} className="cursor-pointer"> 编辑 handleArticleAction(article.id, 'duplicate')} className="cursor-pointer"> 复制 {article.status === 'archived' ? ( handleArticleAction(article.id, 'restore')} className="cursor-pointer"> 恢复 ) : ( handleArticleAction(article.id, 'archive')} className="cursor-pointer"> 归档 )} handleArticleAction(article.id, 'delete')} > 删除
); }