diff --git a/frontend/src/App.vue b/frontend/src/App.vue index 95ce25a..04e55c8 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -143,6 +143,13 @@ const markTaskJustCompleted = createCompletionPulse( (id) => { justCompletedTaskIds.value = new Set(justCompletedTaskIds.value).add(id) }, (id) => { const next = new Set(justCompletedTaskIds.value); next.delete(id); justCompletedTaskIds.value = next }, ) +const justAddedTaskIds = ref(new Set()) +const markTaskJustAdded = createCompletionPulse( + (id) => { justAddedTaskIds.value = new Set(justAddedTaskIds.value).add(id) }, + (id) => { const next = new Set(justAddedTaskIds.value); next.delete(id); justAddedTaskIds.value = next }, +) +const viewSwap = ref(false) +const listSwap = ref(false) const navigationLoaded = ref(false) const taskSwipeStart = ref<{ id: string; x: number; y: number } | null>(null) const taskPointerStart = ref<{ id: string; x: number; y: number } | null>(null) @@ -325,9 +332,10 @@ async function submitTaskCompose() { description: composeDescription.value, ...recurrencePayload, }) }) as Promise, - () => { + (created) => { if (taskComposeGeneration.value === composeGeneration) taskComposeOpen.value = false toast('任务已添加') + markTaskJustAdded(created.id) }, (reason) => { if (taskComposeGeneration.value !== composeGeneration) return @@ -1658,11 +1666,17 @@ async function scrollToTaskPageStart() { await nextTick() taskListElement.value?.scrollIntoView({ block: 'start' }) } +async function swapListResults() { + listSwap.value = false + await nextTick() + listSwap.value = true +} async function previousPage() { if (page.value <= 1 || loading.value) return page.value -= 1 if (activeView.value === 'trash') await loadTrash() else if (isTaskView(activeView.value)) await loadAll() + await swapListResults() await scrollToTaskPageStart() } async function nextPage() { @@ -1670,6 +1684,7 @@ async function nextPage() { page.value += 1 if (activeView.value === 'trash') await loadTrash() else if (isTaskView(activeView.value)) await loadAll() + await swapListResults() await scrollToTaskPageStart() } @@ -1682,6 +1697,12 @@ function reconcileDesktopPaneWidths() { } watch([selectedTask, habitDetailOpen, calendarDetailOpen, sidebarCollapsed], reconcileDesktopPaneWidths) +watch(activeView, async () => { + listSwap.value = false + viewSwap.value = false + await nextTick() + viewSwap.value = true +}) function handlePaneResizeBlur() { stopPaneResize() } @@ -1802,7 +1823,7 @@ onUnmounted(() => {