|
|
@@ -18,9 +18,11 @@
|
|
|
<i v-if="node.icon" :class="node.icon" class="node-icon"></i>
|
|
|
|
|
|
<span class="node-label">
|
|
|
- <slot name="label" :node="node">
|
|
|
- {{ node.label }}
|
|
|
- </slot>
|
|
|
+ <span @click.stop="handleLabelClick" class="node-label-span">
|
|
|
+ <slot name="label" :node="node">
|
|
|
+ {{ node.label }}
|
|
|
+ </slot>
|
|
|
+ </span>
|
|
|
</span>
|
|
|
|
|
|
<span
|
|
|
@@ -39,7 +41,8 @@
|
|
|
:node="child"
|
|
|
:level="level + 1"
|
|
|
:theme="theme"
|
|
|
- @node-click="passEventUp"
|
|
|
+ @node-click="passEventUp"
|
|
|
+ @folder-click="passFolderClickUp"
|
|
|
>
|
|
|
<template #label="{ node: innerNode }">
|
|
|
<slot name="label" :node="innerNode"></slot>
|
|
|
@@ -80,9 +83,21 @@ export default {
|
|
|
methods: {
|
|
|
handleClick() {
|
|
|
if (this.hasChildren) {
|
|
|
- this.isOpen = !this.isOpen;
|
|
|
- }
|
|
|
- this.$emit('node-click', this.node);
|
|
|
+ this.isOpen = !this.isOpen; // 只做展开/折叠
|
|
|
+ } else {
|
|
|
+ this.$emit('node-click', this.node); // 叶子节点点击事件
|
|
|
+ }
|
|
|
+ },
|
|
|
+ // 点击标题文字
|
|
|
+ handleLabelClick() {
|
|
|
+ if (this.hasChildren) {
|
|
|
+ this.$emit('folder-click', this.node);
|
|
|
+ } else {
|
|
|
+ this.$emit('node-click', this.node);
|
|
|
+ }
|
|
|
+ },
|
|
|
+ passFolderClickUp(nodeData) {
|
|
|
+ this.$emit('folder-click', nodeData);
|
|
|
},
|
|
|
passEventUp(nodeData) {
|
|
|
this.$emit('node-click', nodeData);
|
|
|
@@ -206,4 +221,10 @@ export default {
|
|
|
color: #00e5ff;
|
|
|
}
|
|
|
.theme-dark .menu-row.is-leaf:hover { color: #ffffff; }
|
|
|
+
|
|
|
+.node-label-span:hover {
|
|
|
+ cursor: pointer;
|
|
|
+ user-select: none;
|
|
|
+ color: #00e5ff;
|
|
|
+}
|
|
|
</style>
|