From d8c1097b9da230e00454cfd319995424866a67cb Mon Sep 17 00:00:00 2001 From: Rick Ye Date: Fri, 11 Sep 2026 16:41:22 +0800 Subject: [PATCH] =?UTF-8?q?fix(sidepanel):=20=E6=8B=96=E6=8B=BD=E5=AE=BD?= =?UTF-8?q?=E5=BA=A6=E6=8A=8A=E6=89=8B=E6=97=B6=E4=B8=8D=E5=86=8D=E9=80=89?= =?UTF-8?q?=E4=B8=AD=E5=85=B6=E4=BB=96=E5=8C=BA=E5=9F=9F=E6=96=87=E5=AD=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/desktop/src/renderer/src/components/SidePanel.tsx | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/apps/desktop/src/renderer/src/components/SidePanel.tsx b/apps/desktop/src/renderer/src/components/SidePanel.tsx index 043ac04..8013d40 100644 --- a/apps/desktop/src/renderer/src/components/SidePanel.tsx +++ b/apps/desktop/src/renderer/src/components/SidePanel.tsx @@ -70,18 +70,26 @@ export function SidePanel({ onWidthChange(Math.min(PANEL_MAX_WIDTH, Math.max(PANEL_MIN_WIDTH, dragRef.current.startWidth + delta))) } const onUp = (): void => { + if (!dragRef.current) return dragRef.current = null + document.body.style.userSelect = '' } window.addEventListener('pointermove', onMove) window.addEventListener('pointerup', onUp) return () => { window.removeEventListener('pointermove', onMove) window.removeEventListener('pointerup', onUp) + document.body.style.userSelect = '' } }, [onWidthChange]) const startResize = (e: React.PointerEvent): void => { + // preventDefault 必须在 pointerdown 上:否则 Chromium 会把它当作文本选择 + // 手势的锚点,拖动经过聊天区/面板文字时把沿途内容选中;拖拽期间再对 + // body 全局禁选(双保险,覆盖手势未被拦截的边缘情况),松手恢复 + e.preventDefault() dragRef.current = { startX: e.clientX, startWidth: width } + document.body.style.userSelect = 'none' } // 菜单打开时 Esc 关闭