// 全局错误浮层:捕获会导致白屏的致命错误并显示在屏幕上, // 便于远程定位(点击浮层空白处关闭,可叠加多条) export function showFatalError(title: string, detail: string): void { try { let el = document.getElementById('fatal-overlay') if (!el) { el = document.createElement('div') el.id = 'fatal-overlay' el.style.cssText = 'position:fixed;inset:0;z-index:99999;background:#FFFFFF;color:#1D2129;padding:20px;overflow:auto;font:13px/1.7 -apple-system,PingFang SC,Microsoft YaHei,sans-serif;' el.addEventListener('click', e => { if (e.target === el && el.parentElement) el.parentElement.removeChild(el) }) document.body.appendChild(el) } const box = document.createElement('div') box.style.cssText = 'border:1px solid #E5484D;border-radius:8px;padding:12px;margin-bottom:12px;word-break:break-all;white-space:pre-wrap;' box.textContent = title + '\n' + detail // 重试入口:纯在线模式下连不上服务器时(如启动失败),一键重载而不是干等着重启应用 const retry = document.createElement('button') retry.textContent = '重新加载' retry.style.cssText = 'margin:-4px 0 12px;padding:6px 16px;border:1px solid #E5484D;border-radius:6px;background:#FFFFFF;color:#E5484D;font-size:13px;cursor:pointer;' retry.addEventListener('click', () => { try { location.reload() } catch { /* 忽略 */ } }) el.appendChild(box) el.appendChild(retry) } catch { /* 浮层失败时保持静默 */ } }