@@ -92,29 +92,90 @@ export default class RoleMenu extends PureComponent {
9292 }
9393 } ;
9494
95- handleSelectedRow = ( _ , rows ) => {
96- const { dataSource } = this . state ;
97- const list = [ ] ;
95+ expandAllChild = data => {
96+ let child = [ ] ;
97+ for ( let i = 0 ; i < data . length ; i += 1 ) {
98+ child . push ( data [ i ] ) ;
99+ if ( data [ i ] . children ) {
100+ child = [ ...child , ...this . expandAllChild ( data [ i ] . children ) ] ;
101+ }
102+ }
103+ return child ;
104+ } ;
105+
106+ checkAndAdd = ( data , addData ) => {
107+ const list = [ ...data ] ;
98108
99- for ( let i = 0 ; i < rows . length ; i += 1 ) {
109+ for ( let i = 0 ; i < addData . length ; i += 1 ) {
100110 let exists = false ;
101- for ( let j = 0 ; j < dataSource . length ; j += 1 ) {
102- if ( dataSource [ j ] . menu_id === rows [ i ] . record_id ) {
111+ for ( let j = 0 ; j < list . length ; j += 1 ) {
112+ if ( list [ j ] . menu_id === addData [ i ] . record_id ) {
103113 exists = true ;
104- list . push ( { ...dataSource [ j ] } ) ;
105114 break ;
106115 }
107116 }
108117
109118 if ( ! exists ) {
110- list . push ( {
111- menu_id : rows [ i ] . record_id ,
112- actions : rows [ i ] . actions ? rows [ i ] . actions . map ( v => v . code ) : [ ] ,
113- resources : rows [ i ] . resources ? rows [ i ] . resources . map ( v => v . code ) : [ ] ,
114- } ) ;
119+ const item = {
120+ menu_id : addData [ i ] . record_id ,
121+ actions : addData [ i ] . actions ? addData [ i ] . actions . map ( v => v . code ) : [ ] ,
122+ resources : addData [ i ] . resources ? addData [ i ] . resources . map ( v => v . code ) : [ ] ,
123+ } ;
124+ list . push ( item ) ;
115125 }
116126 }
117127
128+ return list ;
129+ } ;
130+
131+ cancelSelected = ( data , selectedRows ) => {
132+ const list = [ ] ;
133+ for ( let i = 0 ; i < data . length ; i += 1 ) {
134+ let exists = false ;
135+ for ( let j = 0 ; j < selectedRows . length ; j += 1 ) {
136+ if ( data [ i ] . menu_id === selectedRows [ j ] . record_id ) {
137+ exists = true ;
138+ break ;
139+ }
140+ }
141+ if ( ! exists ) {
142+ list . push ( data [ i ] ) ;
143+ }
144+ }
145+ return list ;
146+ } ;
147+
148+ handleSelectedRow = ( record , selected ) => {
149+ let selectedRows = [ record ] ;
150+ if ( record . children ) {
151+ selectedRows = [ ...selectedRows , ...this . expandAllChild ( record . children ) ] ;
152+ }
153+
154+ const { dataSource } = this . state ;
155+ let list = [ ] ;
156+ if ( selected ) {
157+ list = this . checkAndAdd ( dataSource , selectedRows ) ;
158+ } else {
159+ list = this . cancelSelected ( dataSource , selectedRows ) ;
160+ }
161+
162+ this . setState ( { dataSource : list } , ( ) => {
163+ this . triggerChange ( list ) ;
164+ } ) ;
165+ } ;
166+
167+ handleSelectAll = ( selected , selectRows ) => {
168+ let list = [ ] ;
169+ if ( selected ) {
170+ list = selectRows . map ( vv => {
171+ const item = {
172+ menu_id : vv . record_id ,
173+ actions : vv . actions ? vv . actions . map ( v => v . code ) : [ ] ,
174+ resources : vv . resources ? vv . resources . map ( v => v . code ) : [ ] ,
175+ } ;
176+ return item ;
177+ } ) ;
178+ }
118179 this . setState ( { dataSource : list } , ( ) => {
119180 this . triggerChange ( list ) ;
120181 } ) ;
@@ -149,10 +210,8 @@ export default class RoleMenu extends PureComponent {
149210 defaultExpandAllRows
150211 rowSelection = { {
151212 selectedRowKeys : dataSource . map ( v => v . menu_id ) ,
152- onChange : this . handleSelectedRow ,
153- getCheckboxProps : record => ( {
154- disabled : record . hasChild ,
155- } ) ,
213+ onSelect : this . handleSelectedRow ,
214+ onSelectAll : this . handleSelectAll ,
156215 } }
157216 rowKey = { record => record . record_id }
158217 components = { components }
0 commit comments