Files
u-desk/frontend/src/components/FileSystem/composables/useFileClipboard.ts
T
lxy e7a2c5148e 新增: 文件操作增强与预览扩展
- 文件剪贴板复制剪切粘贴,重名自动副本
- SFTP下载到本机与外部文件拖入,目录递归
- 传输进度浮动面板,transfer-progress事件链
- Drawio预览,Excel工作线程,冻结看门狗
- cmd与bat自写batch语法高亮,psm1等映射补齐
2026-09-15 22:26:12 +08:00

42 lines
1.1 KiB
TypeScript

/**
* 文件剪贴板 Composable(应用内内存态单例)
* 复制/剪切 → 粘贴到其他目录;粘贴动作由 index.vue 执行
*/
import { ref, computed } from 'vue'
import type { FileItem } from '@/types/file-system'
export type ClipboardMode = 'copy' | 'cut'
interface FileClipboardState {
mode: ClipboardMode
items: FileItem[]
fromDir: string
}
// 模块级单例状态(跨组件共享)
const state = ref<FileClipboardState | null>(null)
export function useFileClipboard() {
const clipboard = computed(() => state.value)
const clipboardEmpty = computed(() => !state.value || state.value.items.length === 0)
/** 设置复制项 */
const setCopy = (items: FileItem[], fromDir: string) => {
state.value = { mode: 'copy', items: [...items], fromDir }
}
/** 设置剪切项 */
const setCut = (items: FileItem[], fromDir: string) => {
state.value = { mode: 'cut', items: [...items], fromDir }
}
/** 清空剪贴板 */
const clear = () => {
state.value = null
}
return { clipboard, clipboardEmpty, setCopy, setCut, clear }
}