1
1
<template >
2
2
<div >
3
- <q-drawer v-model =" leftDrawerSync" content-class =" bg-grey-1" elevated show-if-above :width =" drawer_width" >
3
+ <q-drawer v-model =" leftDrawerSync" content-class =" bg-grey-1" elevated
4
+ show-if-above id =" drawer" :width =" drawer_width" >
4
5
<div class =" q-pa-md q-gutter-sm" >
5
6
<div style =" text-align : center " >
6
7
<q-badge :color =" badge.color" :text-color =" badge.text_color" >
15
16
</template >
16
17
</q-input >
17
18
</div >
18
- <div >
19
+ <div id = " drawer_tree " >
19
20
<q-tree ref =" qtree" no-transition v-model:expanded =" tree.expanded"
20
21
:filter =" tree.filter" :nodes =" tree.nodes"
21
22
v-model:selected =" tree.selectedNodeSync" node-key =" nodeKey" @lazy-load =" onLazyLoad"
@@ -164,6 +165,22 @@ export default {
164
165
fail ([])
165
166
})
166
167
},
168
+ highlightNodeInView: function (nodeKey ) {
169
+ const scroll = document .querySelector (" #drawer" )
170
+ const allNodes = Array .from (document .querySelectorAll (' #drawer_tree .q-tree__node .row' )).filter (_ => _ .id )
171
+ let nodes = allNodes .map (_ => ({id: parseInt (_ .id ), top: _ .offsetTop , height: _ .offsetHeight , bottom: _ .offsetBlockEnd }))
172
+ // 标题和输入框高度
173
+ let height = 4 + 21 + 4 + 56 + 4
174
+ for (const node of nodes) {
175
+ // padding + 每个节点高度
176
+ height += node .top + node .height
177
+ if (node .id === nodeKey) {
178
+ break
179
+ }
180
+ }
181
+ this .$log .debug (` scroll drawer to ${ height} ` )
182
+ scroll .scrollTop = height
183
+ },
167
184
update_selected: function (key , autoNext = undefined ) {
168
185
this .$log .debug (key, this .tree .selectedNodeSync )
169
186
if (key !== null ) {
@@ -183,6 +200,7 @@ export default {
183
200
this .tree .expanded = this .nodeKeyMapToExpandNodes (key)
184
201
// update select node
185
202
this .tree .selectedNodeSync = key
203
+ this .highlightNodeInView (key)
186
204
} else {
187
205
// lazy load 情况下 node 为 null, 直接强制加载默认值
188
206
this .$log .debug (' ??? unkown node, redirect to 1' )
@@ -244,6 +262,9 @@ export default {
244
262
this .$log .debug (` expandedNodes: ${ expanded} ` )
245
263
this .tree .expanded = expanded
246
264
})
265
+ .then (_ => {
266
+ this .highlightNodeInView (this .currentNodeKey )
267
+ })
247
268
.catch (e => {
248
269
this .$log .error (' connection_fail' , e)
249
270
this .$q .notify ({
0 commit comments