From a9ae017504679e63532a18006a45fffad050af8d Mon Sep 17 00:00:00 2001 From: liailing1026 <1815388873@qq.com> Date: Fri, 13 Mar 2026 11:10:42 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E4=BF=AE=E5=A4=8D=E5=88=86=E6=94=AF?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=8A=A8=E6=80=81=E5=AD=98=E5=82=A8=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=BA=93bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/layout/components/Main/Task.vue | 15 +++++++ .../TaskSyllabus/Branch/PlanModification.vue | 26 +++++++++++- frontend/src/stores/modules/selection.ts | 40 +++++++++++++++++++ 3 files changed, 79 insertions(+), 2 deletions(-) diff --git a/frontend/src/layout/components/Main/Task.vue b/frontend/src/layout/components/Main/Task.vue index 9e65b61..5a06500 100644 --- a/frontend/src/layout/components/Main/Task.vue +++ b/frontend/src/layout/components/Main/Task.vue @@ -309,6 +309,21 @@ async function handleSearch() { } ) } + + // 填充完成后,重新保存分支数据(同步最新的大纲数据) + // 只有在没有停止且成功完成时才执行 + if (isFillingSteps.value && !agentsStore.isStopping && fillTaskTaskID) { + try { + // 先从主大纲同步最新数据到分支 + const mainOutlineTasks = agentsStore.agentRawPlan.data?.['Collaboration Process'] || [] + selectionStore.syncBranchTasksFromMainOutline(mainOutlineTasks) + // 再保存到数据库 + await selectionStore.saveBranchesToDB(fillTaskTaskID) + console.log('✅ 步骤填充完成,分支数据已同步更新') + } catch (error) { + console.error('同步分支数据失败:', error) + } + } } finally { // 重置状态(确保即使出错也会执行) triggerOnFocus.value = true diff --git a/frontend/src/layout/components/Main/TaskTemplate/TaskSyllabus/Branch/PlanModification.vue b/frontend/src/layout/components/Main/TaskTemplate/TaskSyllabus/Branch/PlanModification.vue index 6404c4a..eb97292 100644 --- a/frontend/src/layout/components/Main/TaskTemplate/TaskSyllabus/Branch/PlanModification.vue +++ b/frontend/src/layout/components/Main/TaskTemplate/TaskSyllabus/Branch/PlanModification.vue @@ -555,6 +555,26 @@ onMounted(() => { isMounted.value = true initializeFlow() + // 如果没有选中任何节点,根据当前显示的任务步骤来高亮 + if (selectedNodeIds.value.size === 0) { + const currentTasks = agentsStore.agentRawPlan.data?.['Collaboration Process'] || [] + + if (currentTasks.length > 0) { + // 找到当前任务对应的节点 ID + const currentTaskIds = currentTasks.map((task: any) => task.Id) + const nodesToHighlight = nodes.value + .filter(node => { + const nodeTaskId = node.data?.task?.Id || '' + return currentTaskIds.includes(nodeTaskId) + }) + .map(node => node.id) + + if (nodesToHighlight.length > 0) { + selectedNodeIds.value = new Set(nodesToHighlight) + } + } + } + // 同步 currentTask 数据 if (agentsStore.currentTask && agentsStore.currentTask.StepName) { const matchedNodes = nodes.value.filter(node => { @@ -1199,7 +1219,8 @@ const handleAddBranch = async (taskId: string, branchContent: string) => { try { const filledTask = await api.fillStepTask({ goal: generalGoal, - stepTask: task + stepTask: task, + TaskID: (window as any).__CURRENT_TASK_ID__ || '' }) // 更新任务的 AgentSelection 和 TaskProcess @@ -1466,7 +1487,8 @@ const handleAddBranch = async (taskId: string, branchContent: string) => { try { const filledTask = await api.fillStepTask({ goal: generalGoal, - stepTask: task + stepTask: task, + TaskID: (window as any).__CURRENT_TASK_ID__ || '' }) // 更新任务的 AgentSelection 和 TaskProcess diff --git a/frontend/src/stores/modules/selection.ts b/frontend/src/stores/modules/selection.ts index f6a9630..03fabb5 100644 --- a/frontend/src/stores/modules/selection.ts +++ b/frontend/src/stores/modules/selection.ts @@ -71,6 +71,45 @@ export const useSelectionStore = defineStore('selection', () => { return flowBranches.value } + /** + * 从主大纲同步最新的任务数据到分支的 tasks 中 + * @param mainOutlineTasks 主大纲中的 Collaboration Process 任务列表 + * @description 遍历所有分支,根据节点 ID 匹配主大纲中的任务,更新 tasks 数组 + */ + function syncBranchTasksFromMainOutline(mainOutlineTasks: any[]): void { + if (!mainOutlineTasks || !Array.isArray(mainOutlineTasks)) return + + for (const branch of flowBranches.value) { + if (!branch.nodes || !Array.isArray(branch.nodes)) continue + + // 构建节点 ID 到任务详情的映射 + const nodeIdToTaskMap = new Map() + for (const node of branch.nodes) { + if (node.data?.task) { + nodeIdToTaskMap.set(node.id, node.data.task) + } + } + + // 根据主大纲更新 tasks 数组 + const updatedTasks: any[] = [] + for (const node of branch.nodes) { + const task = nodeIdToTaskMap.get(node.id) + if (task) { + // 从主大纲中找到对应 ID 的任务,使用主大纲中的最新数据 + const mainTask = mainOutlineTasks.find( + (t: any) => t.Id === task.Id || t.StepName === task.StepName + ) + if (mainTask) { + updatedTasks.push(mainTask) + } else { + updatedTasks.push(task) + } + } + } + branch.tasks = updatedTasks + } + } + /** * 根据父节点 ID 获取流程图分支 * @param parentNodeId 父节点 ID @@ -745,6 +784,7 @@ export const useSelectionStore = defineStore('selection', () => { removeFlowBranch, clearFlowBranches, clearFlowBranchesByParent, + syncBranchTasksFromMainOutline, // ==================== 任务过程分支管理方法 ==================== addTaskProcessBranch,