列表分组渲染按 tasks 数组顺序, reorderTask 此前只给任务打新 sortOrder 字段而保持原数组顺序 —— 松手后界面无任何变化, 看起来 就是组内无法排序 (数据其实已提交)。改为直接按新顺序重建数组, 不在分组内的任务 (孤儿) 追加在尾部。
This commit is contained in:
@@ -114,8 +114,13 @@ export default function ProjectView({ projectId, onProjectChanged, onProjectExit
|
|||||||
if (ti < 0) return
|
if (ti < 0) return
|
||||||
rest.splice(after ? ti + 1 : ti, 0, task)
|
rest.splice(after ? ti + 1 : ti, 0, task)
|
||||||
const flat = groups.map((l) => (l === g ? rest : l)).flat()
|
const flat = groups.map((l) => (l === g ? rest : l)).flat()
|
||||||
const orderOf = new Map(flat.map((t, i) => [t.id, i]))
|
const flatIds = new Set(flat.map((t) => t.id))
|
||||||
setTasks((prev) => (prev || []).map((t) => (orderOf.has(t.id) ? { ...t, sortOrder: orderOf.get(t.id) } : t)))
|
// 乐观更新必须重排数组本身 —— 列表分组渲染按数组顺序,
|
||||||
|
// 只改 sortOrder 字段界面不会动 (打卡侧即按此口径)
|
||||||
|
setTasks((prev) => [
|
||||||
|
...flat.map((t, i) => ({ ...t, sortOrder: i })),
|
||||||
|
...(prev || []).filter((t) => !flatIds.has(t.id)),
|
||||||
|
])
|
||||||
try {
|
try {
|
||||||
await taskApi.reorder(projectId, flat.map((t) => t.id))
|
await taskApi.reorder(projectId, flat.map((t) => t.id))
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
|||||||
Reference in New Issue
Block a user