From 12e4672478a30c3bd9828e5958dccf60949c6479 Mon Sep 17 00:00:00 2001 From: duorameng <2997944583@qq.com> Date: Mon, 6 Jul 2026 16:05:08 +0800 Subject: [PATCH] feat(tasks): support setting a default view for task list --- web/src/views/tasks/Tasks.vue | 73 +++++++++++++++++++++++++++++------ 1 file changed, 61 insertions(+), 12 deletions(-) diff --git a/web/src/views/tasks/Tasks.vue b/web/src/views/tasks/Tasks.vue index 1d26e3e..ddb135b 100644 --- a/web/src/views/tasks/Tasks.vue +++ b/web/src/views/tasks/Tasks.vue @@ -427,6 +427,12 @@ async function loadViewsFromSettings() { const val = res['task_views'] if (val) { taskViews.value = JSON.parse(val) + if (!route.query.agent_id) { + const defaultView = taskViews.value.find((v: any) => v.isDefault) + if (defaultView) { + applyViewWithoutSearch(defaultView) + } + } } } catch (e) { console.error('Failed to load views', e) @@ -446,7 +452,8 @@ async function saveView() { tags: filterTags.value, agent_id: filterAgentId.value, type: filterType.value - } + }, + isDefault: false } const updatedViews = [...taskViews.value, newView] @@ -465,11 +472,15 @@ async function saveView() { } } -function applyView(view: any) { +function applyViewWithoutSearch(view: any) { filterName.value = view.query.name || '' filterTags.value = view.query.tags || '' filterAgentId.value = view.query.agent_id || null filterType.value = view.query.type || TASK_TYPE.NORMAL +} + +function applyView(view: any) { + applyViewWithoutSearch(view) handleSearch() } @@ -486,6 +497,27 @@ async function deleteView(index: number) { } } +async function toggleDefaultView(index: number) { + const isCurrentlyDefault = !!taskViews.value[index].isDefault + const updatedViews = taskViews.value.map((v, i) => ({ + ...v, + isDefault: i === index ? !isCurrentlyDefault : false + })) + try { + await api.settings.setSection('task_qviews', { + 'task_views': JSON.stringify(updatedViews) + }) + taskViews.value = updatedViews + if (!isCurrentlyDefault) { + toast.success('已设为默认视图') + } else { + toast.success('已取消默认视图') + } + } catch (e) { + toast.error('设置失败') + } +} + function getTaskTypeTitle(type: string) { return type === TASK_TYPE.REPO ? '仓库同步' : '普通任务' } @@ -500,8 +532,10 @@ onMounted(async () => { filterAgentId.value = String(agentIdParam) } + // 先加载视图配置,若有默认视图且无 URL 显式参数则在此阶段应用 + await loadViewsFromSettings() + loadTasks() - loadViewsFromSettings() }) // 订阅任务状态实时更新 @@ -547,7 +581,7 @@ watch(() => route.query.agent_id, (newVal: any) => { - +
@@ -556,21 +590,36 @@ watch(() => route.query.agent_id, (newVal: any) => {
暂无保存的视图
-
+
- {{ view.name }} - +
+ + {{ view.name }} +
+
+ +
-

保存当前过滤为新视图

+

保存当前过滤为新视图