fix: 优化组件列表多选键盘快捷键监听体验

This commit is contained in:
parisma 2022-11-10 17:46:38 +08:00
parent c7a8552d9b
commit b2702aaa9e
2 changed files with 96 additions and 84 deletions

View File

@ -1,9 +1,6 @@
<template>
<TMagicScrollbar
class="magic-editor-layer-panel"
@mouseenter="addSelectModeListener"
@mouseleave="removeSelectModeListener"
>
<div ref="layerPanel">
<TMagicScrollbar class="magic-editor-layer-panel">
<slot name="layer-panel-header"></slot>
<TMagicInput
@ -63,10 +60,11 @@
<LayerMenu ref="menu" :layer-content-menu="layerContentMenu"></LayerMenu>
</Teleport>
</TMagicScrollbar>
</div>
</template>
<script lang="ts" setup name="MEditorLayerPanel">
import { computed, inject, nextTick, ref, watch } from 'vue';
import { computed, inject, nextTick, onMounted, onUnmounted, ref, watch } from 'vue';
import { Search } from '@element-plus/icons-vue';
import KeyController from 'keycon';
import { throttle } from 'lodash-es';
@ -264,32 +262,47 @@ watch([selectedIds, tree], async () => {
setTreeKeyStatus();
});
const keycon = ref<KeyController>();
//
const addSelectModeListener = () => {
const isMac = /mac os x/.test(navigator.userAgent.toLowerCase());
const ctrl = isMac ? 'meta' : 'ctrl';
keycon.value = new KeyController();
keycon.value.keydown(ctrl, (e) => {
e.inputEvent.preventDefault();
isMultiSelectStatus.value = true;
});
// ctrl+tabfalse
keycon.value.on('blur', () => {
isMultiSelectStatus.value = false;
});
keycon.value.keyup(ctrl, (e) => {
e.inputEvent.preventDefault();
isMultiSelectStatus.value = false;
});
const layerPanel = ref<HTMLDivElement>();
const mouseenterHandler = () => {
layerPanel.value?.focus();
};
//
const removeSelectModeListener = () => {
keycon.value?.destroy();
const mouseleaveHandler = () => {
layerPanel.value?.blur();
// (ctrl)
if (selectedIds.value.length === 1) isMultiSelectStatus.value = false;
};
let keycon: KeyController;
onMounted(() => {
layerPanel.value?.addEventListener('mouseenter', mouseenterHandler);
layerPanel.value?.addEventListener('mouseleave', mouseleaveHandler);
keycon = new KeyController(layerPanel.value);
const isMac = /mac os x/.test(navigator.userAgent.toLowerCase());
const ctrl = isMac ? 'meta' : 'ctrl';
keycon
.keydown(ctrl, (e) => {
e.inputEvent.preventDefault();
isMultiSelectStatus.value = true;
})
.on('blur', () => {
isMultiSelectStatus.value = false;
})
.keyup(ctrl, (e) => {
e.inputEvent.preventDefault();
isMultiSelectStatus.value = false;
});
});
onUnmounted(() => {
layerPanel.value?.removeEventListener('mouseenter', mouseenterHandler);
layerPanel.value?.removeEventListener('mouseleave', mouseleaveHandler);
keycon.destroy();
});
//
const clicked = ref(false);
//

View File

@ -461,7 +461,6 @@ class Editor extends BaseService {
newConfig = mergeWith(cloneDeep(node), newConfig, (objValue, srcValue) => {
if (isObject(srcValue) && Array.isArray(objValue)) {
// 原来的配置是数组,新的配置是对象,则直接使用新的值
console.log('--srcValue-', srcValue);
return srcValue;
}
if (Array.isArray(srcValue)) {