问题定位: - 打卡页实际渲染的是 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, 失败回滚; 打卡点击加拖动余波保护 - 长按路径保留为补充入口 (不可滚场景仍可用)
- 任务列表/看板拖动: 激活后用非 passive touchmove preventDefault 拦截浏览器滚动接管, 修复列表长按抬起后 pointercancel 导致无法真正拖动 - 打卡: 列表按周期分组展示(每天/每周/每月/每年), 长按拖动组内排序(上下落点指示), 新增 POST /checkin/habits/reorder 重写 sortOrder; 新建项排到末尾 - 打卡卡片加 touch-action/user-select 防长按误触; 拖动结束 350ms 内抑制点击余波
1. 回滚键盘遮挡统一方案 (真机测试不通过, 需求搁置): 恢复 TaskDetail/ UserPicker/CopyTaskPopup/ProjectManage 与 useKeyboardInset 到 9fea1a5^, 删除 useKeyboardInsetWatcher / .kb-safe / interactive-widget=resizes-content 2. 任务详情页样式随 1 一并恢复提交前状态 (含底部拷贝/删除按钮) 3. 列表视图换列改为卡片拖动: 新 useRowDrag (长按 400ms 行抬起, 左右 80px/列步进, 行尾徽标显示目标列, 松手落列), 移除长按 ActionSheet —— 旧长按与复选框/行点击互相误触, 抬手合成 click 落在控件上触发状态切换 4. 看板拖动防误触: 任务区禁长按文字选择与系统菜单 (输入框除外); pointercancel 只放弃不提交; 拖动结束 350ms 内抑制 click 误开详情; 状态点/⋯/子任务行 pointerdown 不冒泡, 不发起拖动 5. 看板横滑扩展到整屏: .page-transition 补 height:100% 打通 app-main → page-with-navbar 百分比链, board-wrap 撑满剩余高度 已验证: kb-safe/Watcher/onLongPress 残留引用清零, 逐文件 diff 审阅通过; 本机无 Node 运行时, 未跑 vite build