33import uuid
44import json
55from dash import html , dcc
6- from dash .dependencies import Input , Output , State
6+ from dash .dependencies import Input , Output , State , ALL
77import feffery_antd_components as fac
88import feffery_utils_components as fuc
99
@@ -138,19 +138,41 @@ def hidden_job_search_form(hidden_click, hidden_status):
138138
139139
140140@app .callback (
141- [Output ('job-edit' , 'disabled' ),
142- Output ('job-delete' , 'disabled' )],
141+ Output ({'type' : 'job-operation-button' , 'index' : 'edit' }, 'disabled' ),
143142 Input ('job-list-table' , 'selectedRowKeys' ),
144143 prevent_initial_call = True
145144)
146- def change_job_edit_delete_button_status (table_rows_selected ):
147- if table_rows_selected :
148- if len (table_rows_selected ) > 1 :
149- return [True , False ]
145+ def change_job_edit_button_status (table_rows_selected ):
146+ outputs_list = dash .ctx .outputs_list
147+ if outputs_list :
148+ if table_rows_selected :
149+ if len (table_rows_selected ) > 1 :
150+ return True
150151
151- return [ False , False ]
152+ return False
152153
153- return [True , True ]
154+ return True
155+
156+ return dash .no_update
157+
158+
159+ @app .callback (
160+ Output ({'type' : 'job-operation-button' , 'index' : 'delete' }, 'disabled' ),
161+ Input ('job-list-table' , 'selectedRowKeys' ),
162+ prevent_initial_call = True
163+ )
164+ def change_job_delete_button_status (table_rows_selected ):
165+ outputs_list = dash .ctx .outputs_list
166+ if outputs_list :
167+ if table_rows_selected :
168+ if len (table_rows_selected ) > 1 :
169+ return False
170+
171+ return False
172+
173+ return True
174+
175+ return dash .no_update
154176
155177
156178@app .callback (
@@ -166,22 +188,22 @@ def change_job_edit_delete_button_status(table_rows_selected):
166188 Output ('job-concurrent' , 'value' ),
167189 Output ('job-status' , 'value' ),
168190 Output ('api-check-token' , 'data' , allow_duplicate = True ),
169- Output ('job-add' , 'nClicks' ),
170- Output ('job-edit' , 'nClicks' ),
171191 Output ('job-edit-id-store' , 'data' ),
172192 Output ('job-operations-store-bk' , 'data' )],
173- [Input ('job-add' , 'nClicks' ),
174- Input ('job-edit' , 'nClicks' ),
193+ [Input ({'type' : 'job-operation-button' , 'index' : ALL }, 'nClicks' ),
175194 Input ('job-list-table' , 'nClicksDropdownItem' )],
176195 [State ('job-list-table' , 'selectedRowKeys' ),
177196 State ('job-list-table' , 'recentlyClickedDropdownItemTitle' ),
178197 State ('job-list-table' , 'recentlyDropdownItemClickedRow' )],
179198 prevent_initial_call = True
180199)
181- def add_edit_job_modal (add_click , edit_click , dropdown_click , selected_row_keys , recently_clicked_dropdown_item_title ,
200+ def add_edit_job_modal (operation_click , dropdown_click , selected_row_keys , recently_clicked_dropdown_item_title ,
182201 recently_dropdown_item_clicked_row ):
183- if add_click or edit_click or dropdown_click :
184- if add_click :
202+ trigger_id = dash .ctx .triggered_id
203+ if trigger_id == {'index' : 'add' , 'type' : 'job-operation-button' } \
204+ or trigger_id == {'index' : 'edit' , 'type' : 'job-operation-button' } \
205+ or (trigger_id == 'job-list-table' and recently_clicked_dropdown_item_title == '修改' ):
206+ if trigger_id == {'index' : 'add' , 'type' : 'job-operation-button' }:
185207 return [
186208 True ,
187209 '新增任务' ,
@@ -196,12 +218,10 @@ def add_edit_job_modal(add_click, edit_click, dropdown_click, selected_row_keys,
196218 '0' ,
197219 dash .no_update ,
198220 None ,
199- None ,
200- None ,
201221 {'type' : 'add' }
202222 ]
203- elif edit_click or (dropdown_click and recently_clicked_dropdown_item_title == '修改' ):
204- if edit_click :
223+ elif trigger_id == { 'index' : 'edit' , 'type' : 'job-operation-button' } or (trigger_id == 'job-list-table' and recently_clicked_dropdown_item_title == '修改' ):
224+ if trigger_id == { 'index' : 'edit' , 'type' : 'job-operation-button' } :
205225 job_id = int (',' .join (selected_row_keys ))
206226 else :
207227 job_id = int (recently_dropdown_item_clicked_row ['key' ])
@@ -221,15 +241,13 @@ def add_edit_job_modal(add_click, edit_click, dropdown_click, selected_row_keys,
221241 job_info .get ('concurrent' ),
222242 job_info .get ('status' ),
223243 {'timestamp' : time .time ()},
224- None ,
225- None ,
226244 job_info if job_info else None ,
227245 {'type' : 'edit' }
228246 ]
229247
230- return [dash .no_update ] * 11 + [{'timestamp' : time .time ()}, None , None , None , None ]
248+ return [dash .no_update ] * 11 + [{'timestamp' : time .time ()}, None , None ]
231249
232- return [dash .no_update ] * 12 + [None , None , None , None ]
250+ return [dash .no_update ] * 12 + [None , None ]
233251
234252
235253@app .callback (
@@ -465,19 +483,20 @@ def get_job_detail_modal(dropdown_click, recently_clicked_dropdown_item_title, r
465483 [Output ('job-delete-text' , 'children' ),
466484 Output ('job-delete-confirm-modal' , 'visible' ),
467485 Output ('job-delete-ids-store' , 'data' )],
468- [Input (' job-delete' , 'nClicks' ),
486+ [Input ({ 'type' : ' job-operation-button' , 'index' : ALL } , 'nClicks' ),
469487 Input ('job-list-table' , 'nClicksDropdownItem' )],
470488 [State ('job-list-table' , 'selectedRowKeys' ),
471489 State ('job-list-table' , 'recentlyClickedDropdownItemTitle' ),
472490 State ('job-list-table' , 'recentlyDropdownItemClickedRow' )],
473491 prevent_initial_call = True
474492)
475- def job_delete_modal (delete_click , dropdown_click ,
493+ def job_delete_modal (operation_click , dropdown_click ,
476494 selected_row_keys , recently_clicked_dropdown_item_title , recently_dropdown_item_clicked_row ):
477- if delete_click or dropdown_click :
478- trigger_id = dash .ctx .triggered_id
495+ trigger_id = dash .ctx .triggered_id
496+ if trigger_id == {'index' : 'delete' , 'type' : 'job-operation-button' } or (
497+ trigger_id == 'job-list-table' and recently_clicked_dropdown_item_title == '删除' ):
479498
480- if trigger_id == ' job-delete' :
499+ if trigger_id == { 'index' : 'delete' , 'type' : ' job-operation-button' } :
481500 job_ids = ',' .join (selected_row_keys )
482501 else :
483502 if recently_clicked_dropdown_item_title == '删除' :
@@ -528,32 +547,31 @@ def job_delete_confirm(delete_confirm, job_ids_data):
528547 Output ('job_to_job_log-modal' , 'title' ),
529548 Output ('job_log-job_name-input' , 'value' , allow_duplicate = True ),
530549 Output ('job_log-job_group-select' , 'options' ),
531- Output ('job-log' , 'nClicks' ),
532550 Output ('job_log-search' , 'nClicks' ),
533551 Output ('api-check-token' , 'data' , allow_duplicate = True )],
534- [Input (' job-log' , 'nClicks' ),
552+ [Input ({ 'type' : ' job-operation- log', 'index' : ALL } , 'nClicks' ),
535553 Input ('job-list-table' , 'nClicksDropdownItem' )],
536554 [State ('job-list-table' , 'recentlyClickedDropdownItemTitle' ),
537555 State ('job-list-table' , 'recentlyDropdownItemClickedRow' ),
538556 State ('job_log-search' , 'nClicks' )],
539557 prevent_initial_call = True
540558)
541- def job_to_job_log_modal (job_log_click , dropdown_click , recently_clicked_dropdown_item_title , recently_dropdown_item_clicked_row , job_log_search_nclick ):
559+ def job_to_job_log_modal (operation_click , dropdown_click , recently_clicked_dropdown_item_title , recently_dropdown_item_clicked_row , job_log_search_nclick ):
542560
543- if job_log_click or (dropdown_click and recently_clicked_dropdown_item_title == '调度日志' ):
561+ trigger_id = dash .ctx .triggered_id
562+ if trigger_id == {'index' : 'log' , 'type' : 'job-operation-log' } or (trigger_id == 'job-list-table' and recently_clicked_dropdown_item_title == '调度日志' ):
544563 option_table = []
545564 info = query_dict_data_list_api (dict_type = 'sys_job_group' )
546565 if info .get ('code' ) == 200 :
547566 data = info .get ('data' )
548567 option_table = [dict (label = item .get ('dict_label' ), value = item .get ('dict_value' )) for item in data ]
549568
550- if dropdown_click and recently_clicked_dropdown_item_title == '调度日志' :
569+ if trigger_id == 'job-list-table' and recently_clicked_dropdown_item_title == '调度日志' :
551570 return [
552571 True ,
553572 '任务调度日志' ,
554573 recently_dropdown_item_clicked_row .get ('job_name' ),
555574 option_table ,
556- None ,
557575 job_log_search_nclick + 1 if job_log_search_nclick else 1 ,
558576 {'timestamp' : time .time ()},
559577 ]
@@ -563,12 +581,11 @@ def job_to_job_log_modal(job_log_click, dropdown_click, recently_clicked_dropdow
563581 '任务调度日志' ,
564582 None ,
565583 option_table ,
566- None ,
567584 job_log_search_nclick + 1 if job_log_search_nclick else 1 ,
568585 {'timestamp' : time .time ()},
569586 ]
570587
571- return [dash .no_update ] * 7
588+ return [dash .no_update ] * 6
572589
573590
574591@app .callback (
0 commit comments