diff --git a/local-tool/frontend/src/components/devices/flash-dialog.tsx b/local-tool/frontend/src/components/devices/flash-dialog.tsx index 0a57a12..39e6834 100644 --- a/local-tool/frontend/src/components/devices/flash-dialog.tsx +++ b/local-tool/frontend/src/components/devices/flash-dialog.tsx @@ -39,6 +39,7 @@ export function FlashDialog({ deviceId }: FlashDialogProps) { const device = devices.find((d) => d.id === deviceId); const selectedModel = models.find((m) => m.id === selectedModelId); + // S2: 資料載入前預設 compatible=true,避免在 model/device 還沒載入時就顯示不相容警告 const compatible = useMemo(() => { if (!selectedModel || !device) return true; return isModelCompatible(selectedModel.supportedHardware, device.type); @@ -56,30 +57,38 @@ export function FlashDialog({ deviceId }: FlashDialogProps) { const handleFlash = async () => { if (!selectedModelId) return; - // 1. Create WebSocket and wait for it to open - await connectAndWait(); - // 2. Then start flash (POST) — now WS is listening + try { + await connectAndWait(); + } catch (e) { + const msg = e instanceof Error ? e.message : String(e); + reset(); + useFlashStore.getState().setError(msg); + return; + } await startFlash(deviceId, selectedModelId); }; + // m2 fix: 進度尚未完成時(不管 isFlashing 狀態如何)都阻止關閉 + const isInProgress = (isFlashing || (progress !== null && progress.percent < 100)) && !error; + return ( { - if (!v && isFlashing && !error) return; + if (!v && isInProgress) return; setOpen(v); }}> - + - Flash Model to Device + 載入模型到裝置
{!isFlashing && !progress && !error ? ( <>