diff --git a/frontend/src/App.vue b/frontend/src/App.vue index 0aa8e9a..d95bad3 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -27,7 +27,6 @@ const trash = ref([]) const activeList = ref('') const activeView = ref('tasks') const selectedTask = ref(null) -const selectedIds = ref(new Set()) const title = ref('') const query = ref('') const error = ref('') @@ -64,8 +63,6 @@ const visibleTasks = computed(() => { }) const filteredTaskTree = computed(() => groupTaskTree(visibleTasks.value)) const taskTree = computed(() => filteredTaskTree.value) -const selectedCount = computed(() => selectedIds.value.size) -const parentTasks = computed(() => tasks.value.filter((task) => !task.parent_id)) let searchTimer: number | undefined watch(query, () => { if (searchTimer) window.clearTimeout(searchTimer) @@ -177,7 +174,7 @@ async function switchView(view: View, listId?: string) { activeView.value = view if (listId) activeList.value = listId page.value = 1 - selectedTask.value = null; selectedIds.value = new Set(); mobileSidebar.value = false; mobileDetail.value = false + selectedTask.value = null; mobileSidebar.value = false; mobileDetail.value = false if (view === 'trash') await loadTrash() else await loadAll() } @@ -227,22 +224,6 @@ function selectTask(task: Task) { selectedTask.value = { ...task, tags: task.tags ? [...task.tags] : [] } markdownPreview.value = false; mobileDetail.value = true } -function toggleSelect(id: string) { - const next = new Set(selectedIds.value); next.has(id) ? next.delete(id) : next.add(id); selectedIds.value = next -} -async function batch(action: 'complete' | 'move' | 'delete') { - if (!selectedIds.value.size) return - const payload: Record = { task_ids: [...selectedIds.value] } - if (action === 'complete') payload.completed = true - if (action === 'move') { - const listId = window.prompt('输入目标清单 ID', activeList.value)?.trim(); if (!listId) return; payload.list_id = listId - } - try { - if (action === 'delete') payload.soft_delete = true - await api('/tasks/batch', { method: 'POST', body: JSON.stringify(payload) }) - selectedIds.value = new Set(); await loadAll(); toast(action === 'delete' ? '已批量移到回收站' : '批量操作完成') - } catch (reason) { fail(reason) } -} async function createFolder() { const name = window.prompt('文件夹名称')?.trim(); if (!name) return try { folders.value.push(await api('/folders', { method: 'POST', body: JSON.stringify({ name }) })); toast('文件夹已创建') } catch (reason) { fail(reason) } @@ -333,11 +314,9 @@ onMounted(bootstrap)
第 {{page}} / {{totalPages}} 页 · 共 {{totalTasks}} 项
{{page}} / {{totalPages}}
-
已选 {{selectedCount}} 项