feat:三个窗口接口联调版本

This commit is contained in:
liailing1026
2026-01-09 13:54:32 +08:00
parent 5847365eee
commit 920588b063
26 changed files with 4133 additions and 1856 deletions

View File

@@ -222,7 +222,113 @@ export const useAgentsStore = defineStore('agents', () => {
// 当前的展示的任务流程
const currentTask = ref<IRawStepTask>()
function setCurrentTask(task: IRawStepTask) {
currentTask.value = task
const existingTask = currentTask.value
// 🆕 智能判断如果是同一个任务保留用户修改过的数据AgentSelection、TaskProcess、Collaboration_Brief_frontEnd
if (existingTask && existingTask.Id === task.Id) {
currentTask.value = {
...task,
AgentSelection: existingTask.AgentSelection || task.AgentSelection,
TaskProcess: existingTask.TaskProcess || task.TaskProcess,
Collaboration_Brief_frontEnd:
existingTask.Collaboration_Brief_frontEnd || task.Collaboration_Brief_frontEnd,
}
// 🆕 同步更新主流程数据(让执行结果卡片和任务大纲都能联动)
syncCurrentTaskToMainProcess(currentTask.value)
console.log('🔄 setCurrentTask: 保留同一任务的分支数据', {
taskId: task.Id,
taskName: task.StepName,
preservedAgentSelection: currentTask.value.AgentSelection,
preservedTaskProcessLength: currentTask.value.TaskProcess?.length || 0,
})
} else {
// 不同任务:使用新任务数据
currentTask.value = task
console.log('🔄 setCurrentTask: 切换到不同任务', {
taskId: task.Id,
taskName: task.StepName,
agentSelection: task.AgentSelection,
taskProcessLength: task.TaskProcess?.length || 0,
})
}
}
// 🆕 同步 currentTask 到主流程数据
function syncCurrentTaskToMainProcess(updatedTask: IRawStepTask) {
const collaborationProcess = agentRawPlan.value.data?.['Collaboration Process']
if (!collaborationProcess) {
console.warn('⚠️ syncCurrentTaskToMainProcess: collaborationProcess 不存在')
return
}
const taskIndex = collaborationProcess.findIndex((t) => t.Id === updatedTask.Id)
if (taskIndex === -1) {
console.warn('⚠️ syncCurrentTaskToMainProcess: 未找到对应任务', updatedTask.Id)
return
}
// 使用 splice 确保 Vue 响应式更新
collaborationProcess.splice(taskIndex, 1, {
...collaborationProcess[taskIndex]!,
AgentSelection: updatedTask.AgentSelection || [],
TaskProcess: updatedTask.TaskProcess || [],
Collaboration_Brief_frontEnd: updatedTask.Collaboration_Brief_frontEnd,
})
console.log('✅ syncCurrentTaskToMainProcess: 已同步到主流程', {
taskName: collaborationProcess[taskIndex]!.StepName,
agentSelection: collaborationProcess[taskIndex]!.AgentSelection,
taskProcessLength: collaborationProcess[taskIndex]!.TaskProcess?.length || 0,
})
}
// 🆕 设置当前任务的 TaskProcess 数据(用于切换分支时更新显示)
function setCurrentTaskProcess(taskProcess: TaskProcess[]) {
if (currentTask.value) {
// 创建新的对象引用,确保响应式更新
currentTask.value = {
...currentTask.value,
TaskProcess: JSON.parse(JSON.stringify(taskProcess)),
}
// 🆕 同步到主流程数据(让执行结果卡片和任务大纲都能联动)
syncCurrentTaskToMainProcess(currentTask.value)
console.log('✅ 已更新 currentTask.TaskProcess 并同步到主流程:', {
taskId: currentTask.value.Id,
agent数量: taskProcess.length,
})
}
}
// 🆕 更新当前任务的 AgentSelection 和 TaskProcess用于在 AgentAllocation 中切换 agent 组合)
// 此函数专门用于强制更新,不会被 setCurrentTask 的"智能保留"逻辑阻止
function updateCurrentAgentSelection(
agentSelection: string[],
taskProcess: TaskProcess[],
collaborationBrief: any,
) {
if (currentTask.value) {
// 直接更新 currentTask不保留旧数据
currentTask.value = {
...currentTask.value,
AgentSelection: agentSelection,
TaskProcess: taskProcess,
Collaboration_Brief_frontEnd: collaborationBrief,
}
// 同步到主流程数据
syncCurrentTaskToMainProcess(currentTask.value)
console.log('✅ 已强制更新 currentTask 的 AgentSelection 并同步到主流程:', {
taskId: currentTask.value.Id,
taskName: currentTask.value.StepName,
newAgentSelection: agentSelection,
taskProcessLength: taskProcess.length,
})
}
}
const agentRawPlan = ref<{ data?: IRawPlanResponse; loading?: boolean }>({ loading: false })
@@ -315,6 +421,9 @@ export const useAgentsStore = defineStore('agents', () => {
setSearchValue,
currentTask,
setCurrentTask,
setCurrentTaskProcess, // 🆕 设置当前任务的 TaskProcess
updateCurrentAgentSelection, // 🆕 强制更新 AgentSelection用于 AgentAllocation 切换组合)
syncCurrentTaskToMainProcess, // 🆕 同步 currentTask 到主流程
agentRawPlan,
setAgentRawPlan,
executePlan,

View File

@@ -207,11 +207,50 @@ export const useSelectionStore = defineStore('selection', () => {
console.log('🗑️ 清除所有任务的 agent 组合 TaskProcess 数据')
}
// ==================== 当前生效的任务过程分支 ====================
// 记录每个任务步骤当前生效的分支 ID持久化选中状态
// 结构: Map<taskStepId, branchId>
const activeTaskProcessBranchMap = ref<Map<string, string>>(new Map())
// 🆕 当前生效的 TaskProcess 数据(用于外部组件显示职责分配)
// 结构: Map<taskStepId, TaskProcess[]>
const activeTaskProcessDataMap = ref<Map<string, any[]>>(new Map())
// 设置当前生效的分支
function setActiveTaskProcessBranch(taskStepId: string, branchId: string) {
activeTaskProcessBranchMap.value.set(taskStepId, branchId)
console.log('✅ 设置当前生效分支:', { taskStepId, branchId })
}
// 🆕 设置当前生效的 TaskProcess 数据
function setActiveTaskProcessData(taskStepId: string, taskProcess: any[]) {
activeTaskProcessDataMap.value.set(taskStepId, taskProcess)
console.log('✅ 设置当前生效的 TaskProcess 数据:', { taskStepId, taskProcess })
}
// 获取当前生效的分支 ID
function getActiveTaskProcessBranch(taskStepId: string): string | undefined {
return activeTaskProcessBranchMap.value.get(taskStepId)
}
// 🆕 获取当前生效的 TaskProcess 数据
function getActiveTaskProcessData(taskStepId: string): any[] | undefined {
return activeTaskProcessDataMap.value.get(taskStepId)
}
// 清除生效分支
function clearActiveTaskProcessBranch(taskStepId: string) {
activeTaskProcessBranchMap.value.delete(taskStepId)
activeTaskProcessDataMap.value.delete(taskStepId)
}
return {
// 状态
flowBranches,
taskProcessBranchesMap,
agentTaskProcessMap,
activeTaskProcessBranchMap,
activeTaskProcessDataMap, // 🆕 新增
// 任务大纲分支管理方法
addFlowBranch,
@@ -229,6 +268,13 @@ export const useSelectionStore = defineStore('selection', () => {
removeTaskProcessBranch,
clearTaskProcessBranches,
// 🆕 任务过程分支生效状态管理方法
setActiveTaskProcessBranch,
setActiveTaskProcessData, // 🆕 新增
getActiveTaskProcessBranch,
getActiveTaskProcessData, // 🆕 新增
clearActiveTaskProcessBranch,
// Agent 组合 TaskProcess 数据管理方法
getAgentGroupKey,
setAgentTaskProcess,