110 lines
3.4 KiB
JavaScript
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
|
|
}
|
|
}
|
|
},
|
|
},
|
|
}
|