@@ -10,40 +10,56 @@ export default defineComponent({
1010 const keys = Object . keys ( Store . state ( ) ) ;
1111 const key = keys . pop ( ) ;
1212 const isCollapsed = ref ( Store . state ( ) [ key ] ) ;
13+ // 当beforeToggle为fals时
14+ // 最好cursor是default 而不是 pointer;
15+ // pointer一般用于可点击的
16+ // 用changeFlag
17+ let changeFlag = ref ( ) ;
18+ let header = null ;
19+
1320
1421 const canToggle = ( ) : Promise < boolean > => {
15- let changeResult = Promise . resolve ( true ) ;
16- if ( beforeToggle ) {
17- const result = beforeToggle ( isCollapsed ) ;
18- if ( typeof result !== undefined ) {
19- if ( result instanceof Promise ) {
20- changeResult = result ;
21- } else {
22- changeResult = Promise . resolve ( result ) ;
23- }
22+ let changeResult = Promise . resolve ( true ) ;
23+ if ( beforeToggle ) {
24+ const result = beforeToggle ( isCollapsed ) ;
25+ if ( typeof result !== undefined ) {
26+ if ( result instanceof Promise ) {
27+ changeResult = result ;
28+ } else {
29+ changeResult = Promise . resolve ( result ) ;
2430 }
2531 }
26- return changeResult ;
2732 }
28-
29- const toggleBody = ( ) : void => {
30- canToggle ( ) . then ( ( val ) => {
31- if ( ! val ) {
32- return ;
33- }
34- if ( isCollapsed . value !== undefined ) {
33+ return changeResult ;
34+ }
35+
36+ // 需要执行一次才能生效;
37+ canToggle ( ) . then ( ( val ) => changeFlag . value = val )
38+
39+ const toggleBody = ( ) : void => {
40+ canToggle ( ) . then ( ( val ) => {
41+ changeFlag . value = val ;
42+ if ( ! val ) {
43+ // 禁止折叠不影响展开
44+ if ( ! isCollapsed . value ) {
3545 Store . setData ( `${ key } ` , ! isCollapsed . value ) ;
3646 isCollapsed . value = ! isCollapsed . value ;
3747 props . toggle ?.( isCollapsed . value ) ;
3848 }
39- } )
40-
41- } ;
49+ return ;
50+ }
51+ if ( isCollapsed . value !== undefined ) {
52+ Store . setData ( `${ key } ` , ! isCollapsed . value ) ;
53+ isCollapsed . value = ! isCollapsed . value ;
54+ props . toggle ?.( isCollapsed . value ) ;
55+ }
56+ } )
57+
58+ } ;
4259 return ( ) => {
43- let header = null ;
4460 if ( ctx . slots . default ) {
4561 header = (
46- < div class = "devui-panel-heading" onClick = { toggleBody } style = { { 'cursor' : isCollapsed . value !== undefined ? 'pointer' : 'auto' } } >
62+ < div class = "devui-panel-heading" onClick = { toggleBody } style = { { 'cursor' : changeFlag . value ? 'pointer' : 'auto' } } >
4763 { ctx . slots . default ?.( ) }
4864 </ div >
4965 )
0 commit comments