From b3ce87ca2bc8484061ff3e3fdf20a7c2809a1794 Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 20 Feb 2026 18:10:00 +0800 Subject: [PATCH] fix: keep latest image quality params in canvas send payload --- components/canvas/CanvasChatPanel.tsx | 28 +++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/components/canvas/CanvasChatPanel.tsx b/components/canvas/CanvasChatPanel.tsx index 59371d04f..a1c32187a 100644 --- a/components/canvas/CanvasChatPanel.tsx +++ b/components/canvas/CanvasChatPanel.tsx @@ -808,10 +808,13 @@ export function CanvasChatPanel({ chatId, initialMessages = [], onClose, onOpenF const [videoSlotUploading, setVideoSlotUploading] = useState(null); const [lastImageModelId, setLastImageModelId] = useState(null); const [lastVideoModelId, setLastVideoModelId] = useState(null); + const imageParamsRef = useRef(imageParams); + const videoParamsRef = useRef(videoParams); // 🆕 保存图片参数到 localStorage const handleImageParamsChange = (params: ImageGenerationParams) => { setImageParams(params); + imageParamsRef.current = params; try { localStorage.setItem("canvas-image-params", JSON.stringify(params)); } catch (e) { @@ -825,7 +828,11 @@ export function CanvasChatPanel({ chatId, initialMessages = [], onClose, onOpenF const saved = localStorage.getItem("canvas-image-params"); if (saved) { const parsed = JSON.parse(saved); - setImageParams(prev => ({ ...prev, ...parsed })); + setImageParams((prev) => { + const next = { ...prev, ...parsed }; + imageParamsRef.current = next; + return next; + }); } } catch (e) { console.error("Failed to load image params:", e); @@ -834,6 +841,7 @@ export function CanvasChatPanel({ chatId, initialMessages = [], onClose, onOpenF const handleVideoParamsChange = (params: VideoGenerationParams) => { setVideoParams(params); + videoParamsRef.current = params; try { localStorage.setItem("canvas-video-params", JSON.stringify(params)); } catch (e) { @@ -845,7 +853,9 @@ export function CanvasChatPanel({ chatId, initialMessages = [], onClose, onOpenF try { const saved = localStorage.getItem("canvas-video-params"); if (saved) { - setVideoParams(JSON.parse(saved)); + const parsed = JSON.parse(saved); + setVideoParams(parsed); + videoParamsRef.current = parsed; } } catch (e) { console.error("Failed to load video params:", e); @@ -1103,10 +1113,14 @@ export function CanvasChatPanel({ chatId, initialMessages = [], onClose, onOpenF } if (parsed.imageParams && typeof parsed.imageParams === "object") { - setImageParams((prev) => ({ - ...prev, - ...parsed.imageParams, - })); + setImageParams((prev) => { + const next = { + ...prev, + ...parsed.imageParams, + }; + imageParamsRef.current = next; + return next; + }); } setTimeout(() => { @@ -1584,8 +1598,6 @@ export function CanvasChatPanel({ chatId, initialMessages = [], onClose, onOpenF }, [isDetailGenerationMode]); const currentModelIdRef = useRef(selectedModelId); - const imageParamsRef = useRef(imageParams); - const videoParamsRef = useRef(videoParams); const isVideoModelRef = useRef(isVideoModel); useEffect(() => {