(endpoint, { method: 'DELETE' }),
onSuccess: (data) => {
qc.setQueryData(queryKey, data)
+ base.current = null
+ setStale(false)
setEnabled(false)
setStructure(defaultStructure())
toast.success('测试计划已删除')
@@ -278,11 +361,33 @@ export function VmTestSchedule({
scope,
...(scope === 'ids' ? { vm_ids: [vm.id] } : {}),
schedule: structure,
+ // "All slots" copies the whole scheduled test, switch included.
+ ...(scope === 'all'
+ ? {
+ test: {
+ enabled,
+ model: selectedModel,
+ prompt: prompt.trim(),
+ ...(codex
+ ? { reasoning_effort: reasoningEffort }
+ : { max_tokens: maxTokens }),
+ },
+ }
+ : {}),
}),
}),
- onSuccess: (data) => {
- toast.success(`已覆盖 ${data.updated.length} 个槽的调度时间`)
- void scheduleQuery.refetch()
+ onSuccess: (data, scope) => {
+ toast.success(
+ scope === 'all'
+ ? `已把定时测试同步到 ${data.updated.length} 个槽`
+ : `已覆盖 ${data.updated.length} 个槽的调度时间`
+ )
+ void qc.invalidateQueries({
+ predicate: (query) =>
+ query.queryKey[0] === 'panel' &&
+ query.queryKey[1] === 'vm' &&
+ query.queryKey[3] === 'test-schedule',
+ })
},
onError: (error: Error) => toast.error(error.message),
onSettled: () => {
@@ -325,6 +430,24 @@ export function VmTestSchedule({
+ {stale ? (
+
+ 此槽的计划已在别处修改,保存会覆盖它。
+
+
+ ) : null}
+
{scheduleQuery.isPending ? (
正在读取计划…
) : scheduleQuery.isError ? (
@@ -490,7 +613,7 @@ export function VmTestSchedule({