Skip to content

Commit 893c576

Browse files
author
283591387@qq.com
committed
增加vue3版本顶部菜单选项卡切换时联动左侧菜单
1 parent c03ce85 commit 893c576

File tree

4 files changed

+660
-396
lines changed

4 files changed

+660
-396
lines changed

Vol.Vue3版本/src/components/basic/VolElementMenu.vue

Lines changed: 46 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
<div class="vol-el-menu">
33
<el-menu
44
close="vol-el-menu--vertical"
5+
:default-openeds="openedIds"
6+
:default-active="defaultActive"
57
:unique-opened="true"
68
@select="select"
79
:collapse="isCollapse"
@@ -41,48 +43,53 @@
4143
</template>
4244

4345
<script>
44-
import VolElementMenuChild from "./VolElementMenuChild";
45-
import { useRouter } from "vue-router";
46+
import VolElementMenuChild from './VolElementMenuChild';
47+
import { useRouter } from 'vue-router';
4648
4749
import {
4850
defineComponent,
49-
// reactive,
50-
// watch,
51-
// ref,
52-
// toRef,
53-
// toRefs,
51+
reactive,
52+
watch,
53+
ref,
54+
toRef,
55+
toRefs,
56+
getCurrentInstance
5457
// onMounted,
55-
} from "vue";
58+
} from 'vue';
5659
export default defineComponent({
5760
components: {
58-
"vol-element-menu-child": VolElementMenuChild,
61+
'vol-element-menu-child': VolElementMenuChild
5962
},
6063
props: {
6164
enable: {
6265
type: Boolean,
63-
default: false, //是否判断enable=1
66+
default: false //是否判断enable=1
6467
},
6568
isCollapse: {
6669
type: Boolean,
67-
default: false,
70+
default: false
6871
},
6972
onSelect: {
7073
type: Function,
71-
default: (x) => {},
74+
default: (x) => {}
7275
},
7376
openSelect: {
7477
//打开的时候是否触发选中事件
7578
type: Boolean,
76-
default: true,
79+
default: true
7780
},
7881
list: {
7982
type: Array,
80-
default: [],
83+
default: []
8184
},
8285
rootId: {
8386
type: String,
84-
default: "0",
87+
default: '0'
8588
},
89+
currentMenuId: {
90+
type: Number,
91+
default: 0
92+
}
8693
},
8794
setup(props) {
8895
// const { list } = toRefs(props);
@@ -100,8 +107,8 @@ export default defineComponent({
100107
};
101108
let rootTreeId = !isNaN(props.rootId) ? ~~props.rootId : props.rootId;
102109
props.list.forEach((x) => {
103-
if (!x.icon || x.icon.substring(0, 3) != "el-") {
104-
x.icon = "el-icon-menu";
110+
if (!x.icon || x.icon.substring(0, 3) != 'el-') {
111+
x.icon = 'el-icon-menu';
105112
}
106113
x.children = [];
107114
x.isRoot = x.parentId === rootTreeId;
@@ -110,31 +117,35 @@ export default defineComponent({
110117
var root_data = [];
111118
data.forEach((x) => {
112119
if (x.parentId === rootTreeId) {
113-
if (!x.hasOwnProperty("enable")) x.enable = 1;
120+
if (!x.hasOwnProperty('enable')) x.enable = 1;
114121
root_data.push(x);
115122
getTree(x.id, x, data);
116123
}
117124
});
118125
return root_data;
119126
};
120-
// watch(
121-
// () => props.list,
122-
// (newVal, oldVal) => {
123-
// treeList.value = convertTree(JSON.parse(JSON.stringify(newVal)));
124-
// }
125-
// // ,
126-
// // {
127-
// // deep: true,
128-
// // }
129-
// );
130-
// treeList.value = convertTree(JSON.parse(JSON.stringify(props.list)));
127+
const openedIds = reactive([props.currentMenuId]);
128+
const defaultActive = ref(props.currentMenuId + '');
129+
let _base = getCurrentInstance().appContext.config.globalProperties.base;
130+
watch(
131+
() => props.currentMenuId,
132+
(newVal, oldVal) => {
133+
defaultActive.value=newVal+'';
134+
openedIds.splice(0);
135+
openedIds.push(
136+
..._base.getTreeAllParent(newVal, props.list).map((c) => {
137+
return c.id;
138+
})
139+
);
140+
}
141+
);
131142
const router = useRouter();
132143
const select = (index, path) => {
133144
let _item = props.list.find((x) => {
134145
return x.id == index;
135146
});
136147
props.onSelect(index, _item);
137-
router.push({ path: _item.path || "" });
148+
router.push({ path: _item.path || '' });
138149
};
139150
140151
const handleOpen = (index, path) => {
@@ -149,8 +160,7 @@ export default defineComponent({
149160
* @param {*} enable 是否启用右键事件[true:启用;false:禁用;]
150161
*/
151162
const bindRightClickMenu = (enable) => {
152-
if(!enable)
153-
return;
163+
if (!enable) return;
154164
};
155165
156166
return {
@@ -160,9 +170,11 @@ export default defineComponent({
160170
convertTree,
161171
handleOpen,
162172
handleClose,
163-
bindRightClickMenu
173+
bindRightClickMenu,
174+
openedIds,
175+
defaultActive
164176
};
165-
},
177+
}
166178
});
167179
</script>
168180
<style scoped>
@@ -171,4 +183,3 @@ export default defineComponent({
171183
width: 100%;
172184
}
173185
</style>
174-

0 commit comments

Comments
 (0)