feat(V0.2): 克隆卡片跟手浮层 + 列表组内排序 + 把手统一移到最左
Docker Build and Push / build-image (push) Successful in 1m1s
Docker Build and Push / build-image (push) Successful in 1m1s
- 浮层改为激活时克隆原卡片 (DOM clone, 淡化+投影) 挂 body 顶层, 移动直接改 transform —— 替代蓝色信息条, 所见即所拖 - 任务列表支持组内排序: 拖到本组某行上/下半显示插入指示, 松手提交 POST /projects/:id/tasks/reorder (顶层任务按展平顺序重写 sortOrder); 拖到其他分组仍为换列 - ⠿ 把手统一移到卡片最左: 打卡 / 列表任务行 / 看板卡片 (看板新增把手 即按即拖路径, 与列表同款 touchstart preventDefault 双保险) - useColumnDrag onDrop 经 ref 桥接防陈旧闭包
This commit is contained in:
@@ -8,17 +8,24 @@ const statusLabel = (s) => (s === 'done' ? '完成' : s === 'doing' ? '执行中
|
||||
// 复选框 / ⋯ 是独立控件: pointerdown 不冒泡, 不发起拖动,
|
||||
// 避免长按行后抬手时合成的 click 落在控件上误触状态切换
|
||||
export default function TaskRow({
|
||||
task, onToggle, onClick, onMore, bindDrag, bindDragHandle, dragTarget, indent = false, children,
|
||||
task, onToggle, onClick, onMore, bindDrag, bindDragHandle, dragTarget, dragOver, indent = false, children,
|
||||
}) {
|
||||
const done = task.status === 'done'
|
||||
return (
|
||||
<>
|
||||
<div
|
||||
className={`${indent ? 'sub-row' : 'task-row'}${done ? ' done' : ''}${dragTarget ? ' dragging' : ''}`}
|
||||
className={
|
||||
`${indent ? 'sub-row' : 'task-row'}${done ? ' done' : ''}`
|
||||
+ (dragTarget ? ' dragging' : '')
|
||||
+ (dragOver ? ` dragover ${dragOver.after ? 'after' : 'before'}` : '')
|
||||
}
|
||||
data-task-id={indent ? undefined : task.id}
|
||||
onClick={onClick}
|
||||
{...(!indent && bindDrag ? bindDrag(task) : {})}
|
||||
>
|
||||
{!indent && bindDragHandle && (
|
||||
<span className="grip" title="拖动排序 / 换列" {...bindDragHandle(task)}>⠿</span>
|
||||
)}
|
||||
<div
|
||||
className="box"
|
||||
onClick={(e) => { e.stopPropagation(); onToggle?.(task) }}
|
||||
@@ -58,13 +65,6 @@ export default function TaskRow({
|
||||
→ {dragTarget.name}
|
||||
</span>
|
||||
)}
|
||||
{bindDragHandle && (
|
||||
<span
|
||||
className="grip"
|
||||
title="拖动换列"
|
||||
{...bindDragHandle(task)}
|
||||
>⠿</span>
|
||||
)}
|
||||
<span
|
||||
className="more"
|
||||
onClick={(e) => { e.stopPropagation(); onMore?.(task) }}
|
||||
|
||||
Reference in New Issue
Block a user