- 文件剪贴板复制剪切粘贴,重名自动副本 - SFTP下载到本机与外部文件拖入,目录递归 - 传输进度浮动面板,transfer-progress事件链 - Drawio预览,Excel工作线程,冻结看门狗 - cmd与bat自写batch语法高亮,psm1等映射补齐
42 lines
1.1 KiB
TypeScript
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 }
|
|
}
|