diff --git a/src/pages/task/TaskDetail.jsx b/src/pages/task/TaskDetail.jsx index 208a2ce..8264029 100644 --- a/src/pages/task/TaskDetail.jsx +++ b/src/pages/task/TaskDetail.jsx @@ -128,13 +128,15 @@ export default function TaskDetail({ task, projectCode, columns, members, tasks, * 这里始终按 String() 比对, 不要 Number(): 否则结果变 NaN, 落库列被改成 "NaN" 报「看板列不存在」 */ function pickColumn() { const current = String(task.columnId) - ActionSheet.show({ + const handler = ActionSheet.show({ actions: (columns || []).map((c) => ({ text: c.name + (String(c.id) === current ? ' ✓' : ''), key: String(c.id), })), cancelText: '取消', onAction: async (item) => { + // 选中即收起 sheet (与项目视图 ⋯ 菜单同口径); 否则改完列 sheet 还挂在那 + handler.close?.() const columnId = String(item.key) if (columnId === current) return try { @@ -200,28 +202,35 @@ export default function TaskDetail({ task, projectCode, columns, members, tasks, borderTopLeftRadius: 12, borderTopRightRadius: 12, maxHeight: `calc(88vh - ${kb}px)`, - overflowY: 'auto', - padding: `16px 16px calc(env(safe-area-inset-bottom, 0px) + 20px + ${kb}px)`, + // 三段式: 固定头 / 滚动体 / 固定底 (标题与保存按钮始终可见) + display: 'flex', + flexDirection: 'column', + overflow: 'hidden', + padding: 0, }} > -
{task.title}
- {fullId && ( -
- - {fullId} - {copied ? '已复制' : '复制'} - + {/* 固定头部: 标题 + 看板列/状态 + 编号 */} +
+
{task.title}
+ {/* 看板列 · 状态 与完整任务编号同一行, 编号靠右 (点按复制) */} +
+ {currentCol?.name} · {STATUS_LABEL[task.status]} + {fullId && ( + + {fullId} + {copied ? '已复制' : '复制'} + + )}
- )} -
- {currentCol?.name} · {STATUS_LABEL[task.status]}
+ {/* 可滚动主体: 只有这一段滚动 */} +
+
{/* /.td-body */} -
{saving ? '保存中…' : '保存'}
+ {/* 固定底部: 保存 (键盘弹出时随 kb 上抬) */} +
+
{saving ? '保存中…' : '保存'}
+