import { useState } from 'react' import { Toast } from 'antd-mobile' import TaskCard from '../../components/task/TaskCard.jsx' import useLongPressDrag from '../../components/task/useLongPressDrag.js' // 看板视图 (T-BD-01, T-UI-07, T-ST-06/12) // 列横向滚动; 长按卡片拖拽换列 / 降为子任务 export default function BoardView({ tasks, columns, onMoveColumn, onMakeSubtask, onOpen, onToggleSub, onToggle, onQuickAdd, }) { const [overCol, setOverCol] = useState(null) const drag = useLongPressDrag({ onDropColumn: (task, columnId) => { setOverCol(null); onMoveColumn?.(task, columnId) }, onDropTask: (task, parentId) => { setOverCol(null); onMakeSubtask?.(task, parentId) }, onReject: (msg) => { setOverCol(null); Toast.show({ content: msg }) }, }) const ordered = [...(columns || [])].sort((a, b) => a.sortOrder - b.sortOrder) return ( <>
{ordered.map((col) => { const list = (tasks || []).filter((t) => t.columnId === col.id) return (
setOverCol(col.id)} onDragLeave={() => setOverCol((c) => (c === col.id ? null : c))} >
{col.name} {list.length} {col.boundStatus ? ( ↔ {col.boundStatus === 'done' ? '完成' : col.boundStatus === 'doing' ? '执行中' : '未开始'} ) : ( 未绑定 )}
{list.map((t) => ( { if (!drag.dragging) onOpen?.(t) }} onToggleSub={onToggleSub} onToggle={onToggle} /> ))} {list.length === 0 &&
暂无任务
}
onQuickAdd?.(col.id)}>+ 添加任务
) })}
{drag.dragging && (
{drag.dragging.task.title}
)} ) }