diff --git a/frontend/src/components/TaskEditorModal.tsx b/frontend/src/components/TaskEditorModal.tsx index 1d38891..d3bf386 100644 --- a/frontend/src/components/TaskEditorModal.tsx +++ b/frontend/src/components/TaskEditorModal.tsx @@ -1,5 +1,10 @@ import { zodResolver } from '@hookform/resolvers/zod' -import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query' +import { + keepPreviousData, + useMutation, + useQuery, + useQueryClient, +} from '@tanstack/react-query' import { Button, Checkbox, @@ -209,6 +214,7 @@ export function TaskEditorModal({ actionType === 'script' && isPythonScript && Boolean(debouncedWorkingDir.trim()), + placeholderData: keepPreviousData, retry: false, staleTime: 15_000, }) @@ -230,7 +236,9 @@ export function TaskEditorModal({ onError: (error) => toast.error(error.message), }) const linkedVenv = - isPythonScript && venvProbe.data?.status === 'linked' + isPythonScript && + !venvProbe.isPlaceholderData && + venvProbe.data?.status === 'linked' ? venvProbe.data : null const previewVirtualEnv = isPythonScript @@ -270,7 +278,7 @@ export function TaskEditorModal({ // 探测到虚拟环境就自动填进「虚拟环境目录」,但用户自己改过就保留用户的值。 useEffect(() => { - if (!open || !isPythonScript) { + if (!open || !isPythonScript || venvProbe.isPlaceholderData) { return } const probe = venvProbe.data @@ -295,7 +303,7 @@ export function TaskEditorModal({ shouldDirty: true, shouldValidate: true, }) - }, [debouncedVenv, debouncedWorkingDir, getValues, isPythonScript, open, setValue, venvProbe.data]) + }, [debouncedVenv, debouncedWorkingDir, getValues, isPythonScript, open, setValue, venvProbe.data, venvProbe.isPlaceholderData]) // 打开后把焦点给第一个可编辑字段:新建时是任务标识,编辑时 ID 已锁定,跳名称。 // 原生 dialog 默认聚焦关闭按钮,不符合编辑表单的节奏。 @@ -595,7 +603,7 @@ export function TaskEditorModal({ - - ● 请输入有效的工作目录以探测环境 - + 填写工作目录后自动检测环境 ) } - if (pending) { + if (!probe) { + if (pending) { + return ( +
+ ⏳ 正在检测环境... +
+ ) + } + if (failed) { + return ( +
+ ● 环境探测失败,可稍后重试 +
+ ) + } return (
- ⏳ 正在探测解释器... -
- ) - } - - if (failed || !probe) { - return ( -
- ● 环境探测失败,可稍后重试 + 正在检测环境...
) }