4
4
<i class =" el-icon-arrow-left" ></i >
5
5
</div >
6
6
7
- <div class =" app-process__scroller" >
7
+ <div class =" app-process__scroller" ref = " scroller " >
8
8
<div
9
- class =" block "
9
+ class =" app-process__item "
10
10
v-for =" (item, index) in processList"
11
11
:key =" index"
12
+ :ref =" `item-${index}`"
12
13
:class =" { active: item.active }"
13
14
:data-index =" index"
14
- @click =" onTap(item)"
15
+ @click =" onTap(item, index )"
15
16
@contextmenu.stop.prevent =" openCM($event, item)"
16
17
>
17
18
<span >{{ item.label }}</span >
18
19
19
- <i
20
- class =" el-icon-close"
21
- v-if =" index > 0"
22
- :class =" { active: index > 0 }"
23
- @click.stop =" onDel(index)"
24
- ></i >
20
+ <i class =" el-icon-close" v-if =" index > 0" @click.stop =" onDel(index)" ></i >
25
21
</div >
26
22
</div >
27
23
@@ -43,10 +39,17 @@ export default {
43
39
... mapGetters ([" processList" ])
44
40
},
45
41
42
+ watch: {
43
+ " $route.path" (val) {
44
+ this .adScroll (this .processList .findIndex (e => e .value === val) || 0 );
45
+ }
46
+ },
47
+
46
48
methods: {
47
49
... mapMutations ([" ADD_PROCESS" , " DEL_PROCESS" , " SET_PROCESS" ]),
48
50
49
- onTap (item ) {
51
+ onTap (item , index ) {
52
+ this .adScroll (index);
50
53
this .$router .push (item .value );
51
54
},
52
55
@@ -100,9 +103,23 @@ export default {
100
103
}
101
104
},
102
105
106
+ adScroll (index ) {
107
+ const el = this .$refs [` item-${ index} ` ][0 ];
108
+
109
+ if (el) {
110
+ this .scrollTo (el .offsetLeft + el .clientWidth - this .$refs [" scroller" ].clientWidth );
111
+ }
112
+ },
113
+
103
114
toScroll (f ) {
104
- const scroller = this .$el .querySelector (" .app-process__scroller" );
105
- scroller .scrollTo (scroller .scrollLeft + (f ? - 100 : 100 ), 0 );
115
+ this .scrollTo (this .$refs [" scroller" ].scrollLeft + (f ? - 100 : 100 ));
116
+ },
117
+
118
+ scrollTo (left ) {
119
+ this .$refs [" scroller" ].scrollTo ({
120
+ left,
121
+ behavior: " smooth"
122
+ });
106
123
}
107
124
}
108
125
};
@@ -149,7 +166,7 @@ export default {
149
166
}
150
167
}
151
168
152
- .block {
169
+ & __item {
153
170
display : inline-flex ;
154
171
align-items : center ;
155
172
border-radius : 3px ;
0 commit comments