新增: 资源管理器文件粘贴到文件列表

- 后端 ReadClipboardFiles 读系统剪贴板 CF_HDROP 拿路径列表
- Ctrl+V 优先粘贴系统剪贴板文件,复用拖入导入链路(SFTP 上传/本机复制/目录递归)
- 补齐设计文档记录的历史缺口(Wails 限制未做)
This commit is contained in:
lxy
2026-09-29 18:47:09 +08:00
parent 4746f8cac2
commit b9c0786c02
3 changed files with 94 additions and 0 deletions
+11
View File
@@ -491,6 +491,16 @@ export function PickDirectory(): $CancellablePromise<string> {
return $Call.ByID(1347829059);
}
/**
* ReadClipboardFiles 读取系统剪贴板中的文件/文件夹路径列表。
* 剪贴板为文本/截图等非文件内容时返回空列表,前端据此回落图片粘贴等原有链路。
*/
export function ReadClipboardFiles(): $CancellablePromise<string[]> {
return $Call.ByID(2636780132).then(($result: any) => {
return $$createType7($result);
});
}
/**
* ReadFile 读取文件
*/
@@ -797,3 +807,4 @@ const $$createType3 = filesystem$0.FileOperationResult.createFrom;
const $$createType4 = $Create.Nullable($$createType3);
const $$createType5 = $Create.Array($$createType2);
const $$createType6 = $Create.Map($Create.Any, $Create.Any);
const $$createType7 = $Create.Array($Create.Any);
@@ -129,6 +129,7 @@ import { ref, computed, onMounted, onUnmounted, watch, nextTick } from 'vue'
import { getPathSeparator } from '@/utils/fileUtils'
import { Message, Modal } from '@arco-design/web-vue'
import { On, Off } from '@wailsio/events'
import { ReadClipboardFiles } from '@bindings/u-desk/app'
import { renderMarkdown, parseMarkdown, isMarkedReady, preloadMarked, renderMermaidDiagrams, rerenderMermaidDiagrams, setCurrentFileDir, setFileServerBase } from '@/utils/markedExtensions'
import { useThemeStore } from '@/stores/theme'
import { useTransferStore } from '@/stores/transfer'
@@ -2023,6 +2024,17 @@ const handlePaste = async (event: ClipboardEvent) => {
const target = event.target as HTMLElement
if (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.isContentEditable) return
// 系统剪贴板文件(资源管理器复制,文件+文件夹)优先:
// 后端读 CF_HDROP 拿真实路径(DOM paste 拿不到文件夹),复用拖入导入链路
try {
const sysPaths = await ReadClipboardFiles()
if (sysPaths && sysPaths.length > 0) {
event.preventDefault()
await handleExternalDrop(sysPaths)
return
}
} catch { /* 剪贴板被占用等,回落图片粘贴 */ }
const items = event.clipboardData?.items
if (!items) return