fix(V0.2): 拖动可靠性重做 —— 把手入口 + 打卡排序接入实际渲染视图
Docker Build and Push / build-image (push) Successful in 1m1s
Docker Build and Push / build-image (push) Successful in 1m1s
问题定位: - 打卡页实际渲染的是 MergedView (CheckinPage 路由), 上次改的 HabitView 是未使用的旧组件, 打包时被 tree-shake, 线上自然无任何效果 - 任务列表长按抬起后一动即脱手: touch-action:pan-y 下手指出现纵向分量, WebView/渲染器直接把触摸判给滚动并 pointercancel, touchmove preventDefault 拦不住已决定的滚动 (看板可用只因该模式下页面无纵向可滚祖先) 修复: - 新增 ⠿ 拖动把手 (touch-action:none): 浏览器按规范完全不接管该触摸, 按下立即拖动, CDP 触摸仿真验证: 垂直拖动穿过可滚列表正常落点, 跨组(每天/每周/每月)正确拒绝; 任务行把手拖动换列, 打卡卡片把手组内排序 - useRowDrag/useHabitDrag 抽出 armListeners, 新增 bindHandle 立即激活路径 - MergedView: 组内排序改按 sortOrder (服务端已返回), 拖动落位乐观更新 + POST /checkin/habits/reorder, 失败回滚; 打卡点击加拖动余波保护 - 长按路径保留为补充入口 (不可滚场景仍可用)
This commit is contained in:
@@ -8,7 +8,7 @@ const statusLabel = (s) => (s === 'done' ? '完成' : s === 'doing' ? '执行中
|
||||
// 复选框 / ⋯ 是独立控件: pointerdown 不冒泡, 不发起拖动,
|
||||
// 避免长按行后抬手时合成的 click 落在控件上误触状态切换
|
||||
export default function TaskRow({
|
||||
task, onToggle, onClick, onMore, bindDrag, dragTarget, indent = false, children,
|
||||
task, onToggle, onClick, onMore, bindDrag, bindDragHandle, dragTarget, indent = false, children,
|
||||
}) {
|
||||
const done = task.status === 'done'
|
||||
return (
|
||||
@@ -58,6 +58,13 @@ 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