From 5acf6ee84c82869d62ae1179984d0a272cf8aa86 Mon Sep 17 00:00:00 2001 From: InfinityPacer <160988576+InfinityPacer@users.noreply.github.com> Date: Fri, 31 Jul 2026 19:43:25 +0800 Subject: [PATCH] test(filebrowser): cover shell workflows (#618) --- eslint-suppressions.json | 21 -- src/components/filebrowser/FileBrowser.vue | 34 +- src/components/filebrowser/FileToolbar.vue | 55 ++-- .../filebrowser/__tests__/FileBrowser.spec.ts | 296 ++++++++++++++++++ .../__tests__/FileNavigator.spec.ts | 166 ++++++++++ .../filebrowser/__tests__/FileToolbar.spec.ts | 232 ++++++++++++++ src/views/reorganize/FileBrowserView.vue | 20 +- .../__tests__/FileBrowserView.spec.ts | 184 +++++++++++ vite.config.ts | 28 ++ 9 files changed, 978 insertions(+), 58 deletions(-) create mode 100644 src/components/filebrowser/__tests__/FileBrowser.spec.ts create mode 100644 src/components/filebrowser/__tests__/FileNavigator.spec.ts create mode 100644 src/components/filebrowser/__tests__/FileToolbar.spec.ts create mode 100644 src/views/reorganize/__tests__/FileBrowserView.spec.ts diff --git a/eslint-suppressions.json b/eslint-suppressions.json index bc1a8c1f..d84f6366 100644 --- a/eslint-suppressions.json +++ b/eslint-suppressions.json @@ -438,11 +438,6 @@ "count": 1 } }, - "src/components/filebrowser/FileBrowser.vue": { - "@typescript-eslint/no-explicit-any": { - "count": 4 - } - }, "src/components/filebrowser/FileList.vue": { "@typescript-eslint/no-explicit-any": { "count": 6 @@ -457,14 +452,6 @@ "count": 2 } }, - "src/components/filebrowser/FileToolbar.vue": { - "@typescript-eslint/no-explicit-any": { - "count": 1 - }, - "@typescript-eslint/no-unused-vars": { - "count": 1 - } - }, "src/components/input/PathInput.vue": { "@typescript-eslint/no-explicit-any": { "count": 3 @@ -979,14 +966,6 @@ "count": 4 } }, - "src/views/reorganize/FileBrowserView.vue": { - "@typescript-eslint/no-explicit-any": { - "count": 2 - }, - "prefer-const": { - "count": 1 - } - }, "src/views/reorganize/TransferHistoryView.vue": { "@typescript-eslint/no-explicit-any": { "count": 11 diff --git a/src/components/filebrowser/FileBrowser.vue b/src/components/filebrowser/FileBrowser.vue index ec96138d..835f48e3 100644 --- a/src/components/filebrowser/FileBrowser.vue +++ b/src/components/filebrowser/FileBrowser.vue @@ -230,6 +230,21 @@ function preventSelect(event: Event) { return false } +interface DocumentDragStyle extends CSSStyleDeclaration { + MozUserSelect: string + webkitUserSelect: string +} + +/** 拖动期间写入 document 全局样式,停止拖动或卸载时必须成对恢复。 */ +function setDocumentDragStyles(active: boolean) { + const value = active ? 'none' : '' + const style = document.body.style as DocumentDragStyle + style.cursor = active ? 'col-resize' : '' + style.userSelect = value + style.webkitUserSelect = value + style.MozUserSelect = value +} + // 拖动分隔条相关方法 function startDrag(event: MouseEvent) { event.preventDefault() // 阻止默认行为 @@ -243,10 +258,7 @@ function startDrag(event: MouseEvent) { document.addEventListener('mouseup', stopDrag, { passive: false }) document.addEventListener('selectstart', preventSelect) // 阻止选择开始 - document.body.style.cursor = 'col-resize' - document.body.style.userSelect = 'none' - ;(document.body.style as any).webkitUserSelect = 'none' // Safari兼容 - ;(document.body.style as any).mozUserSelect = 'none' // Firefox兼容 + setDocumentDragStyles(true) } function handleDrag(event: MouseEvent) { @@ -270,11 +282,17 @@ function stopDrag() { document.removeEventListener('mouseup', stopDrag) document.removeEventListener('selectstart', preventSelect) - document.body.style.cursor = '' - document.body.style.userSelect = '' - ;(document.body.style as any).webkitUserSelect = '' - ;(document.body.style as any).mozUserSelect = '' + setDocumentDragStyles(false) } + +function cleanupDrag() { + if (isDragging.value) { + stopDrag() + } +} + +onDeactivated(cleanupDrag) +onUnmounted(cleanupDrag)