fix(V0.2): 二轮评审 6 项 —— BUILD_ID 格式 / 菜单与详情精简 / 拖动重做 / 键盘统一方案
Docker Build and Push / build-image (push) Successful in 4m5s
Docker Build and Push / build-image (push) Successful in 4m5s
1. BUILD_ID 改为 yyyyMMddHHmmss (去掉中间点), 仍 UTC+8
2. 任务 ⋯ 菜单去掉顶部任务名标题
3. 任务详情去掉底部「拷贝到其他项目」「删除任务」按钮 (⋯ 菜单已有)
4+6. 键盘遮挡统一方案 (重点设计 §7.2):
- index.html 加 interactive-widget=resizes-content
- App 级 useKeyboardInsetWatcher 写 --kb-inset (visualViewport+window 双源)
- 底部弹层统一 .kb-safe 类 (安全区+20px+键盘插入量, dvh 收缩+内部滚动)
- TaskDetail/UserPicker/CopyTaskPopup/信息块弹层全部迁移, 删除 per-component hook
- 信息块 textarea 补 focus scrollIntoView 兜底
5. 拖动方案重做 (重点设计 §7.1):
- 新 useColumnDrag: Pointer Events + setPointerCapture, 长按400ms原位抬起,
elementFromPoint 高亮目标列, 边缘 rAF 自动横滚; 移除手指跟随浮层(任务名)
- 列表行长按 500ms → 「移动到列」ActionSheet (不做自由拖动)
- 移除「拖到卡片转子任务」误触路径, 统一走详情页层级区
- 删除旧 useLongPressDrag
已验证: 99 文件语法 0 错误、导入 0 缺失
This commit is contained in:
@@ -114,17 +114,6 @@ export default function ProjectView({ projectId, onProjectChanged, onProjectExit
|
||||
} catch { /* ignore */ }
|
||||
}
|
||||
|
||||
/** 拖拽降为子任务 (T-ST-12) */
|
||||
const makeSubtask = async (task, parentId) => {
|
||||
try {
|
||||
await updateTask(task.id, { parentId })
|
||||
// 成为子任务后不再作为顶层卡片出现
|
||||
setTasks((prev) => (prev || []).filter((t) => t.id !== task.id))
|
||||
Toast.show({ content: '已转为子任务' })
|
||||
load()
|
||||
} catch { /* 错误已提示 */ }
|
||||
}
|
||||
|
||||
/** 新建任务 */
|
||||
async function createTask(title, parentId = null) {
|
||||
const t = String(title || '').trim()
|
||||
@@ -138,14 +127,24 @@ export default function ProjectView({ projectId, onProjectChanged, onProjectExit
|
||||
}
|
||||
}
|
||||
|
||||
/** 长按任务 → 移动到列 (重点设计 §7.1: 列表页不做自由拖动, 菜单可靠) */
|
||||
function openMoveMenu(task) {
|
||||
ActionSheet.show({
|
||||
actions: (columns || []).map((c) => ({
|
||||
text: c.name + (c.id === task.columnId ? ' ✓' : ''),
|
||||
key: String(c.id),
|
||||
})),
|
||||
cancelText: '取消',
|
||||
onAction: (item) => {
|
||||
const columnId = Number(item.key)
|
||||
if (columnId !== task.columnId) moveToColumn(task, columnId)
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
/** 任务 ⋯ 菜单: 编辑 / 拷贝到其他项目 / 删除 */
|
||||
function openTaskMenu(task) {
|
||||
ActionSheet.show({
|
||||
extra: (
|
||||
<div className="as-extra">
|
||||
<div className="as-title">{task.title}</div>
|
||||
</div>
|
||||
),
|
||||
actions: [
|
||||
{ text: '编辑', key: 'edit' },
|
||||
{ text: '拷贝到其他项目', key: 'copy' },
|
||||
@@ -237,13 +236,13 @@ export default function ProjectView({ projectId, onProjectChanged, onProjectExit
|
||||
onToggle={toggleDone}
|
||||
onOpen={(t) => setOpenTask(t)}
|
||||
onMore={openTaskMenu}
|
||||
onLongPress={openMoveMenu}
|
||||
/>
|
||||
) : (
|
||||
<BoardView
|
||||
tasks={visibleTasks}
|
||||
columns={columns}
|
||||
onMoveColumn={moveToColumn}
|
||||
onMakeSubtask={makeSubtask}
|
||||
onOpen={(t) => setOpenTask(t)}
|
||||
onToggleSub={(c) => toggleDone(c)}
|
||||
onToggle={(t) => toggleDone(t)}
|
||||
|
||||
Reference in New Issue
Block a user