2025-08-06 17:57:04 +08:00

110 lines
3.4 KiB
JavaScript

// 快捷键处理
export default {
data() {
return {
drawer: false,
drawerShowTime: 0,
}
},
mounted() {
// 获取键盘事件
window.addEventListener('keydown', this.keydown)
window.addEventListener('keyup', this.keyup)
},
beforeDestroy() {
// 移除事件监听
window.removeEventListener('keydown', this.keydown, false)
window.removeEventListener('keyup', this.keyup, false)
},
computed: {
cmdKey() {
return navigator.platform.startsWith('Mac') ? '⌘' : 'Ctrl'
},
},
methods: {
checkCmdKey(event) {
const isMac = navigator.platform.startsWith('Mac')
const { ctrlKey, metaKey } = event
return (isMac && metaKey) || (!isMac && ctrlKey)
},
keydown(event) {
const { keyCode } = event
const isCmd = this.checkCmdKey(event)
const checkPreviewVisible = this.checkPreviewVisible()
// space
if (keyCode === 32 && this.selectRowData.length > 0 && !checkPreviewVisible) {
if (!this.drawer) {
this.drawer = true
this.drawerShowTime = Date.now()
} else {
this.drawer = false
}
event.preventDefault()
event.stopPropagation()
}
// F2
if (keyCode === 113 && this.selectRowData.length > 0 && !checkPreviewVisible) {
this.renameFileName = this.rowContextData.name
this.editingIndex = this.rowContextData.index
event.preventDefault()
event.stopPropagation()
}
// Del
if (keyCode === 8 && !this.inputting && this.selectRowData.length > 0 && !checkPreviewVisible) {
this.removeOperation()
event.preventDefault()
event.stopPropagation()
}
// ctrl + A / cmd + A
if (isCmd && keyCode === 65 && !checkPreviewVisible) {
if (this.inputting || this.editingIndex !== -1) {
event.target.select()
} else {
this.$nextTick(() => {
if (this.$refs.fileListTable) {
this.$refs.fileListTable.toggleAllSelection()
}
})
event.preventDefault()
event.stopPropagation()
}
}
// ctrl + C / cmd + C
if (isCmd && keyCode === 67 && !checkPreviewVisible && !this.inputting && this.selectRowData.length > 0) {
this.copyOperation()
event.preventDefault()
event.stopPropagation()
}
// ctrl + V / cmd + V
if (isCmd && keyCode === 86 && !checkPreviewVisible && !this.inputting && this.fileClipboard.length > 0) {
// copy
this.onCopy(this.getClipboardFileIdList, this.path, this.currentFolder)
event.preventDefault()
event.stopPropagation()
}
// ctrl + X / cmd + X
if (isCmd && keyCode === 88 && !checkPreviewVisible && !this.inputting && this.fileClipboard.length > 0) {
// move
this.onMove(this.getClipboardFileIdList, this.path, this.currentFolder)
event.preventDefault()
event.stopPropagation()
}
// ctrl + P / cmd + P
if (isCmd && keyCode === 80 && !checkPreviewVisible) {
this.$refs.searchInput.focus()
event.preventDefault()
event.stopPropagation()
}
},
keyup(event) {
const { keyCode } = event
// space
if (keyCode === 32) {
if (this.drawer && Date.now() - this.drawerShowTime >= 500) {
this.drawer = false
}
}
},
},
}