import StatusDot from './StatusDot.jsx' import Avatar from './Avatar.jsx' import { kindColor } from '../../pages/task/kind.js' import { taskShortId } from '../../pages/task/date.js' // 看板卡片 (T-UI-02): 轻量化 // - 标题 + 状态点 (T-ST-09) // - 负责人 12px/600 突出 (T-AS-01); 任务成员 10.5px 弱化置于下方 (T-AS-02) // - 子任务内嵌简洁展示 + 可直接勾选 (T-ST-06/07) const MAX_SUB = 3 export default function TaskCard({ task, bindDrag, onClick, onToggleSub, onToggle, onMore, dragging = false, highlight = false, }) { const children = task.children || [] const shown = children.slice(0, MAX_SUB) const rest = children.length - shown.length // 编号只显示 `#序号`; 完整编号 (项目编号-序号) 放详情页 (见 TaskDetail) const shortId = taskShortId(task) return (
{/* 左侧竖排: 状态点 + ⋯ */}
{ e.stopPropagation(); onToggle?.(task) }} onPointerDown={(e) => e.stopPropagation()} title="点按切换完成" > {onMore && ( { e.stopPropagation(); onMore(task) }} onPointerDown={(e) => e.stopPropagation()} >⋯ )}
{task.title}
{shortId && {shortId}} {task.markDate && ( {task.markDate.slice(5, 10).replace('-', '/')} )} {task.kind && ( {task.kind} )} {task.members?.length > 0 && ( + {task.members.map((m) => m.name).join('、')} )}
{shown.map((c) => (
{ e.stopPropagation(); onToggleSub?.(c) }} onPointerDown={(e) => e.stopPropagation()} > {c.title}
))} {rest > 0 &&
+{rest} 个子任务
}
) }