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"
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
4749import {
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' ;
5659export 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