diff --git a/web/src/pages/settings/prompt-preferences-pane.tsx b/web/src/pages/settings/prompt-preferences-pane.tsx index ed0fc43b3..11d5077b4 100644 --- a/web/src/pages/settings/prompt-preferences-pane.tsx +++ b/web/src/pages/settings/prompt-preferences-pane.tsx @@ -1,6 +1,6 @@ import { Alert, App, Button, Input, Segmented, Select, Skeleton, Tabs, Tag } from "antd"; import { RotateCcw, Save, ShieldCheck, Undo2 } from "lucide-react"; -import { useEffect, useMemo, useState } from "react"; +import { useEffect, useMemo, useRef, useState } from "react"; import { PromptCodeEditor } from "@/components/prompt/prompt-code-editor"; import { @@ -28,17 +28,27 @@ export function PromptPreferencesPane() { const [rewriteContent, setRewriteContent] = useState(""); const [loading, setLoading] = useState(true); const [saving, setSaving] = useState(false); + const [loadError, setLoadError] = useState(""); + const requestIdRef = useRef(0); const reload = async (preferredOperation?: string) => { + const reqId = ++requestIdRef.current; setLoading(true); + setLoadError(""); try { const result = await listUserPromptPreferences(); + if (reqId !== requestIdRef.current) return; setPreferences(result.preferences); setSelectedOperation((current) => preferredOperation || current || result.preferences[0]?.definition.operation || ""); } catch (error) { - message.error(error instanceof Error ? error.message : "读取提示词偏好失败"); + if (reqId !== requestIdRef.current) return; + const msg = error instanceof Error ? error.message : "读取提示词偏好失败"; + setLoadError(msg); + message.error(msg); } finally { - setLoading(false); + if (reqId === requestIdRef.current) { + setLoading(false); + } } }; @@ -123,6 +133,14 @@ export function PromptPreferencesPane() { }; if (loading && preferences.length === 0) return ; + if (loadError && preferences.length === 0) { + return ( +
+ + +
+ ); + } if (!selected) return
暂无可配置的提示词模板
; const templateContent = selected.template?.content || "当前没有启用的平台模板";