import { isMac, addEventListener, removeEventListener } from '@/utils' import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore' import { MenuEnum } from '@/enums/editPageEnum' const chartEditStore = useChartEditStore() export const keyboardValue = { [MenuEnum.ARROW_UP]: 'arrowup', [MenuEnum.ARROW_RIGHT]: 'arrowright', [MenuEnum.ARROW_DOWN]: 'arrowdown', [MenuEnum.ARROW_LEFT]: 'arrowleft', [MenuEnum.COPY]: 'c', [MenuEnum.CUT]: 'x', [MenuEnum.PARSE]: 'v', [MenuEnum.DELETE]: 'delete', back: 'z', } const KeyboardHandle = (e: KeyboardEvent) => { const isMacRes = isMac() // 暂不支持mac,因为我没有😤👻 if (isMacRes) return const key = e.key.toLowerCase() // 删除(单纯的delete会和其他位置冲突) // if (key === keyboardValue.delete) { // chartEditStore.removeComponentList() // return // } // 前进 if (e.altKey && e.shiftKey && key == keyboardValue.back) { chartEditStore.setForward() return } if (e.altKey) { switch (key) { // ↑ case keyboardValue.up: chartEditStore.setMove(MenuEnum.ARROW_UP) break; // → case keyboardValue.right: chartEditStore.setMove(MenuEnum.ARROW_RIGHT) break; // ↓ case keyboardValue.down: chartEditStore.setMove(MenuEnum.ARROW_DOWN) break; // ← case keyboardValue.left: chartEditStore.setMove(MenuEnum.ARROW_LEFT) break; // 删除 case keyboardValue.delete: chartEditStore.removeComponentList() break; // 复制 case keyboardValue.copy: chartEditStore.setCopy() break; // 剪切 case keyboardValue.cut: chartEditStore.setCut() break; // 粘贴 case keyboardValue.parse: chartEditStore.setParse() break; // 撤回 case keyboardValue.back: chartEditStore.setBack() break; } e.preventDefault() } } export const useAddKeyboard = () => { addEventListener(document, 'keyup', KeyboardHandle, 20) } export const useRemoveKeyboard = () => { removeEventListener(document, 'keyup', KeyboardHandle) }