From 7e527228c28b0fda128a494624da6d81aef9ea69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=99=B4=E5=A4=A9?= Date: Mon, 13 Apr 2026 11:14:33 +0800 Subject: [PATCH] fix: show loading skeleton during engine switch and initial boot MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 引擎切换和初始启动时 boot() 是异步的,期间内容区完全空白。 现在在 boot() 开始前立即显示骨架屏动画,消除空白等待期。 - sidebar.js: 引擎切换点击时立即在 content 区注入骨架屏 - main.js: 初始启动 boot() 前也显示骨架屏 --- src/components/sidebar.js | 11 +++++++++++ src/main.js | 11 +++++++++++ 2 files changed, 22 insertions(+) diff --git a/src/components/sidebar.js b/src/components/sidebar.js index 6c6c284..bde764f 100644 --- a/src/components/sidebar.js +++ b/src/components/sidebar.js @@ -303,6 +303,17 @@ export function renderSidebar(el) { _closeEngineDropdown() if (eid !== getActiveEngineId()) { engineOpt.style.opacity = '0.5' + // 立即在内容区显示加载骨架,避免切换期间空白 + const contentEl = document.getElementById('content') + if (contentEl) { + contentEl.innerHTML = `
+
+
+ ${[1,2,3].map(() => '
').join('')} +
+
+
` + } switchEngine(eid).then(() => { toast(t('engine.switchedTo', { name: getActiveEngine()?.name || eid }), 'success') renderSidebar(el) diff --git a/src/main.js b/src/main.js index 0c58857..4d363c3 100644 --- a/src/main.js +++ b/src/main.js @@ -396,6 +396,17 @@ async function boot() { const engine = getActiveEngine() if (!engine) return + // 立即显示骨架屏,避免 boot() 期间内容区空白 + if (!content.querySelector('.page')) { + content.innerHTML = `
+
+
+ ${[1,2,3].map(() => '
').join('')} +
+
+
` + } + // 引擎启动(检测安装状态 + 初始化轮询等) await engine.boot()