// Ansible Playbook 卡片(复选框 + 名称 + 分类徽章 + 描述 + 标签 + 元信息 + 5 行操作按钮) // Logan.Li import React from 'react'; import { FileCode, Eye, Edit, Copy, Trash2, Play, Loader2 } from 'lucide-react'; import { Button } from '@/components/ui/button'; import { Badge } from '@/components/ui/badge'; import { Checkbox } from '@/components/ui/checkbox'; import { Card, CardContent, CardHeader, CardTitle, CardDescription } from '@/components/ui/card'; import { categories, type Playbook } from './ansible-helpers'; interface AnsiblePlaybookCardProps { playbook: Playbook; selected: boolean; executing: boolean; onToggleSelect: (id: number) => void; onView: (pb: Playbook) => void; onExecute: (pb: Playbook) => void; onEdit: (pb: Playbook) => void; onClone: (pb: Playbook) => void; onDelete: (pb: Playbook) => void; } const AnsiblePlaybookCard: React.FC = ({ playbook, selected, executing, onToggleSelect, onView, onExecute, onEdit, onClone, onDelete, }) => { return (
onToggleSelect(playbook.id)} className="shrink-0" /> {playbook.name}
{categories.find(c => c.value === playbook.category)?.label || playbook.category}
{playbook.description || '暂无描述'}
{playbook.tags.length > 0 && (
{playbook.tags.map((tag, idx) => ( {tag} ))}
)}
执行 {playbook.run_count} 次 超时 {playbook.timeout}s
); }; export default AnsiblePlaybookCard;