diff --git a/app/(admin)/settings/agent-workflow/agent-workflow-settings-client.tsx b/app/(admin)/settings/agent-workflow/agent-workflow-settings-client.tsx index 85bb360cc..f82f6a248 100644 --- a/app/(admin)/settings/agent-workflow/agent-workflow-settings-client.tsx +++ b/app/(admin)/settings/agent-workflow/agent-workflow-settings-client.tsx @@ -1860,6 +1860,29 @@ export function AgentWorkflowSettingsClient({ }); }; + const handleMoveTopLevelStep = (stepKey: string, direction: "up" | "down") => { + setConfig((prev) => { + const sortedRootSteps = [...prev.steps].sort((left, right) => left.sortOrder - right.sortOrder); + const currentIndex = sortedRootSteps.findIndex((step) => step.key === stepKey); + if (currentIndex < 0) { + return prev; + } + + const targetIndex = direction === "up" ? currentIndex - 1 : currentIndex + 1; + if (targetIndex < 0 || targetIndex >= sortedRootSteps.length) { + return prev; + } + + return normalizeConfigOrdering({ + ...prev, + steps: moveArrayItem(sortedRootSteps, currentIndex, targetIndex).map((step, index) => ({ + ...step, + sortOrder: index, + })), + }); + }); + }; + const handleUploadPreview = async (stepKey: string, optionKey: string, file: File) => { if (!file.type.startsWith("image/")) { toast.error("请上传图片文件"); @@ -2665,12 +2688,16 @@ export function AgentWorkflowSettingsClient({ const renderWorkflowStepCard = ( step: AgentWorkflowStepUiConfig, depth: number, - indexPath: number[] + indexPath: number[], + siblingCount = 0 ) => { const stepLabel = indexPath.join("."); const levelLabel = getWorkflowLevelLabel(depth, "模块"); const rootOptions = [...(step.options || [])].sort((left, right) => left.sortOrder - right.sortOrder); const optionCardCount = countAgentWorkflowOptionTree(step.options || []); + const isTopLevelStep = depth === 1; + const canMoveTopLevelStepUp = isTopLevelStep && indexPath[0] > 1; + const canMoveTopLevelStepDown = isTopLevelStep && indexPath[0] < siblingCount; return ( {optionCardCount} 张卡片 卡片树结构 + {isTopLevelStep ? ( + <> + + + + ) : null} @@ -4355,7 +4406,7 @@ export function AgentWorkflowSettingsClient({ {sortedSteps.length > 0 ? ( sortedSteps.map((step, stepIndex) => - renderWorkflowStepCard(step, 1, [stepIndex + 1]) + renderWorkflowStepCard(step, 1, [stepIndex + 1], sortedSteps.length) ) ) : (