diff --git a/packages/devui-vue/devui/tree/src/composables/use-highlight.ts b/packages/devui-vue/devui/tree/src/composables/use-highlight.ts index 5874f66f0994241ed8da6509f097c693dc97b510..93f20dd56b235a38cb5b81af348ce2d56f3ded9d 100644 --- a/packages/devui-vue/devui/tree/src/composables/use-highlight.ts +++ b/packages/devui-vue/devui/tree/src/composables/use-highlight.ts @@ -13,26 +13,25 @@ const HIGHLIGHT_CLASS = 'active' const IS_DISABLED_FLAG = 'devui-tree_isDisabledNode' const useHighlightNode: TypeUseHighlightNode = () => { const nodeClassNameReflectRef = ref({}) + const prevActiveNodeKey = ref('') const handleInit = (isDisabled = false, ...keys) => { const key = keys.join('-') - nodeClassNameReflectRef.value[key] = isDisabled ? IS_DISABLED_FLAG : (nodeClassNameReflectRef.value[key] || '') + nodeClassNameReflectRef.value[key] = isDisabled + ? IS_DISABLED_FLAG + : nodeClassNameReflectRef.value[key] || '' return key } const handleClick = (key) => { - if (nodeClassNameReflectRef.value[key] === IS_DISABLED_FLAG) { - return - } - nodeClassNameReflectRef.value = - Object.fromEntries( - Object - .entries(nodeClassNameReflectRef.value) - .map(([k]) => [k, k === key ? HIGHLIGHT_CLASS : '']) - ) + if (nodeClassNameReflectRef.value[key] === IS_DISABLED_FLAG) return + if (prevActiveNodeKey.value === key) return + if (prevActiveNodeKey.value) nodeClassNameReflectRef.value[prevActiveNodeKey.value] = '' + nodeClassNameReflectRef.value[key] = HIGHLIGHT_CLASS + prevActiveNodeKey.value = key } return { nodeClassNameReflect: nodeClassNameReflectRef, handleClickOnNode: handleClick, - handleInitNodeClassNameReflect: handleInit, + handleInitNodeClassNameReflect: handleInit } } export default useHighlightNode