1
1
<template >
2
- <transition name =" rightPanel-animate" >
2
+ <div ref =" rightPanel" :class =" {show:show}" class =" rightPanel-container" >
3
+ <div class =" rightPanel-background" />
3
4
4
- <div
5
- v-show =" value"
6
- ref =" rightPanel"
7
- class =" vs-content-sidebar" >
8
- <div class =" rightPanel-background" />
9
- <div
10
- :class =" [`vs-sidebar-${color}`]"
11
- class =" vs-sidebar" >
12
- <div class =" vs-sidebar-items" >
13
- <slot />
14
- </div >
5
+ <div :class =" [`rightPanel-${color}`]" class =" rightPanel" >
6
+ <div class =" handle-button" type =" primary" circle @click =" show=!show" >
7
+ <i :class =" show?'el-icon-close':'el-icon-setting'" />
8
+ </div >
9
+ <div class =" rightPanel-items" >
10
+ <slot />
15
11
</div >
16
12
</div >
17
- <!-- <el-button type="primary" icon="el-icon-setting" circle/> -- >
13
+ </ div >
18
14
19
- </transition >
20
15
</template >
21
16
22
17
<script >
18
+ import { addClass , removeClass } from ' @/utils'
19
+
23
20
export default {
24
21
name: ' RightPanel' ,
25
22
props: {
@@ -36,11 +33,21 @@ export default {
36
33
type: Boolean
37
34
}
38
35
},
36
+ data () {
37
+ return {
38
+ show: false
39
+ }
40
+ },
39
41
watch: {
40
- value ( ) {
41
- if (this . value && ! this .clickNotClose ) {
42
+ show ( value ) {
43
+ if (value && ! this .clickNotClose ) {
42
44
this .addEventClick ()
43
45
}
46
+ if (value) {
47
+ addClass (document .body , ' showRightPanel' )
48
+ } else {
49
+ removeClass (document .body , ' showRightPanel' )
50
+ }
44
51
}
45
52
},
46
53
mounted () {
@@ -51,9 +58,10 @@ export default {
51
58
window .addEventListener (' click' , this .closeSidebar )
52
59
},
53
60
closeSidebar (evt ) {
54
- const parent = evt .target .closest (' .vs-sidebar' )
61
+ const parent = evt .target .closest (' .rightPanel' )
62
+ console .log (parent)
55
63
if (! parent) {
56
- this .$emit ( ' input ' , false )
64
+ this .show = false
57
65
window .removeEventListener (' click' , this .closeSidebar )
58
66
}
59
67
},
@@ -66,54 +74,73 @@ export default {
66
74
}
67
75
</script >
68
76
69
- <style rel="stylesheet/scss" lang="scss" >
77
+ <style rel="stylesheet/scss" lang="scss" scoped>
78
+ body {
79
+ overflow : hidden ;
80
+ position : relative ;
81
+ width : calc (100% - 15px );
82
+
83
+ }
84
+
70
85
.rightPanel-background {
86
+ opacity : 0 ;
87
+ transition : opacity .3s ease ;
71
88
background : rgba (0 , 0 , 0 , .2 );
72
- width : 100 % ;
73
- height : 100 % ;
89
+ width : 0 ;
90
+ height : 0 ;
74
91
position : fixed ;
75
- z-index : 20000 ;
76
- transition : all .3s ease ;
77
- opacity : 1 ;
92
+ z-index : -1 ;
78
93
}
79
94
80
- .vs-sidebar {
81
- background : rgb (255 ,255 ,255 );
82
- z-index : 3000 ;
95
+ .rightPanel {
96
+ background : rgb (255 , 255 , 255 );
97
+ z-index : 3000 ;
83
98
position : fixed ;
84
99
height : 100vh ;
85
100
width : 100% ;
86
101
max-width : 260px ;
87
102
top : 0px ;
88
- display : flex ;
89
- flex-direction : column ;
90
- box-shadow : 0px 0px 15px 0px rgba (0 ,0 ,0 ,.05 );
103
+ box-shadow : 0px 0px 15px 0px rgba (0 , 0 , 0 , .05 );
91
104
left : 0px ;
92
105
transition : all .25s ease ;
106
+ transform : translate (100% );
93
107
z-index : 40000 ;
94
- left : auto ;
95
- right : 0px ;
96
-
108
+ left : auto ;
109
+ right : 0px ;
97
110
}
98
111
99
- // animations
100
- .rightPanel-animate-enter-active ,
101
- .rightPanel-animate-leave-active {
102
- transition : all .25s ease ;
103
- .vs-sidebar {
104
- transition : all .25s ease ;
112
+ .show {
105
113
114
+ // transition: all .25s ease;
115
+ .rightPanel-background {
116
+ z-index : 20000 ;
117
+ opacity : 1 ;
118
+ width : 100% ;
119
+ height : 100% ;
106
120
}
107
- }
108
121
109
- .rightPanel-animate-enter ,
110
- .rightPanel-animate-leave-to {
111
- .vs-sidebar-background {
112
- opacity : 0 !important ;
113
- }
114
- .vs-sidebar {
115
- transform : translate (100% );
122
+ .rightPanel {
123
+ transform : translate (0 );
116
124
}
117
125
}
118
126
127
+ .handle-button {
128
+ position : absolute ;
129
+ left : -48px ;
130
+ border-radius : 4px 0 0 4px !important ;
131
+ top : 240px ;
132
+ width : 48px ;
133
+ height : 48px ;
134
+ background : #1890ff ;
135
+ cursor : pointer ;
136
+ pointer-events : auto ;
137
+ z-index : 0 ;
138
+ text-align : center ;
139
+ color : #fff ;
140
+ line-height : 48px ;
141
+
142
+ i {
143
+ font-size : 20px ;
144
+ }
145
+ }
119
146
</style >
0 commit comments