auto-sync: 2026-05-19 13:43:25

This commit is contained in:
cfdaily
2026-05-19 13:43:25 +08:00
parent da8757554c
commit 9872eb97d2
+13 -4
View File
@@ -153,8 +153,8 @@ function StatusPipeline({ status }: { status: string }) {
} }
// ── 任务卡片 ── // ── 任务卡片 ──
function TaskCard({ task, subtaskCount, subtaskDone, activeStage, onOpen }: { function TaskCard({ task, subtaskCount, subtaskDone, activeStage, onOpen, onAction }: {
task: V2Task; subtaskCount: number; subtaskDone: number; activeStage: string | null; onOpen: () => void; task: V2Task; subtaskCount: number; subtaskDone: number; activeStage: string | null; onOpen: () => void; onAction: (action: string) => void;
}) { }) {
const sm = STATUS_META[task.status] || STATUS_META.pending; const sm = STATUS_META[task.status] || STATUS_META.pending;
const pm = getPriorityLabel(task.priority); const pm = getPriorityLabel(task.priority);
@@ -212,13 +212,22 @@ function TaskCard({ task, subtaskCount, subtaskDone, activeStage, onOpen }: {
<span style={{ fontSize: 10, padding: '1px 5px', borderRadius: 3, background: `${rm.color}22`, color: rm.color }}>{rm.label}</span> <span style={{ fontSize: 10, padding: '1px 5px', borderRadius: 3, background: `${rm.color}22`, color: rm.color }}>{rm.label}</span>
{task.retry_count > 0 && <span style={{ fontSize: 10, color: '#f59e0b' }}>🔄 x{task.retry_count}</span>} {task.retry_count > 0 && <span style={{ fontSize: 10, color: '#f59e0b' }}>🔄 x{task.retry_count}</span>}
</div> </div>
<div style={{ display: 'flex', gap: 6 }}> <div style={{ display: 'flex', gap: 4, alignItems: 'center' }}>
{/* 快捷动作按钮 */}
{(CARD_ACTIONS[task.status] || []).map((btn, i) => (
<button key={i} onClick={(e) => { e.stopPropagation(); onAction(btn.action); }} style={{
padding: '2px 8px', borderRadius: 4, fontSize: 10, cursor: 'pointer',
background: btn.bg, color: btn.color, border: `1px solid ${btn.border}`, fontWeight: 600,
transition: 'opacity .15s', opacity: 0.9,
}} onMouseEnter={e => (e.currentTarget.style.opacity = '1')} onMouseLeave={e => (e.currentTarget.style.opacity = '0.9')}>
{btn.icon} {btn.label}
</button>
))}
{task.deadline && ( {task.deadline && (
<span style={{ fontSize: 10, color: new Date(task.deadline).getTime() - Date.now() < 3600000 ? '#ff5270' : 'var(--muted)' }}> <span style={{ fontSize: 10, color: new Date(task.deadline).getTime() - Date.now() < 3600000 ? '#ff5270' : 'var(--muted)' }}>
📅 {formatDeadline(task.deadline)} 📅 {formatDeadline(task.deadline)}
</span> </span>
)} )}
<span style={{ fontSize: 10, padding: '2px 8px', borderRadius: 4, background: 'var(--acc)11', color: 'var(--acc)', border: '1px solid var(--acc)33', cursor: 'pointer' }}> </span>
</div> </div>
</div> </div>
</div> </div>