diff --git a/src/pages/task/ProjectView.jsx b/src/pages/task/ProjectView.jsx index 679371f..405b5b2 100644 --- a/src/pages/task/ProjectView.jsx +++ b/src/pages/task/ProjectView.jsx @@ -114,8 +114,13 @@ export default function ProjectView({ projectId, onProjectChanged, onProjectExit if (ti < 0) return rest.splice(after ? ti + 1 : ti, 0, task) const flat = groups.map((l) => (l === g ? rest : l)).flat() - const orderOf = new Map(flat.map((t, i) => [t.id, i])) - setTasks((prev) => (prev || []).map((t) => (orderOf.has(t.id) ? { ...t, sortOrder: orderOf.get(t.id) } : t))) + const flatIds = new Set(flat.map((t) => t.id)) + // 乐观更新必须重排数组本身 —— 列表分组渲染按数组顺序, + // 只改 sortOrder 字段界面不会动 (打卡侧即按此口径) + setTasks((prev) => [ + ...flat.map((t, i) => ({ ...t, sortOrder: i })), + ...(prev || []).filter((t) => !flatIds.has(t.id)), + ]) try { await taskApi.reorder(projectId, flat.map((t) => t.id)) } catch (e) {