You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

475 lines
20 KiB

6 months ago
import dash
import time
import uuid
from dash import dcc
from dash.dependencies import Input, Output, State, ALL
from dash.exceptions import PreventUpdate
import feffery_utils_components as fuc
#
from server import app
from utils.common import validate_data_not_empty
from api.modmak import get_modmak_list_api, get_modmak_detail_api, add_modmak_api, edit_modmak_api, delete_modmak_api, export_modmak_list_api
# @app.callback(
# output=dict(
# modmak_table_data=Output('modmak-list-table', 'data', allow_duplicate=True),
# modmak_table_pagination=Output('modmak-list-table', 'pagination', allow_duplicate=True),
# modmak_table_key=Output('modmak-list-table', 'key'),
# modmak_table_selectedrowkeys=Output('modmak-list-table', 'selectedRowKeys'),
# api_check_token_trigger=Output('api-check-token', 'data', allow_duplicate=True)
# ),
# inputs=dict(
# search_click=Input('modmak-search', 'nClicks'),
# refresh_click=Input('modmak-refresh', 'nClicks'),
# pagination=Input('modmak-list-table', 'pagination'),
# operations=Input('modmak-operations-store', 'data')
# ),
# state=dict(
# model_oneid=State('modmak-model_oneid-input', 'value'),
# model_name_en=State('modmak-model_name_en-input', 'value'),
# model_name_cn=State('modmak-model_name_cn-input', 'value'),
# model_status_select=State('modmak-model_status-select', 'value'),
# button_perms=State('modmak-button-perms-container', 'data')
# ),
# prevent_initial_call=True
# )
# def get_modmak_table_data(search_click, refresh_click, pagination, operations, model_oneid, model_name_en, model_name_cn, model_status_select, button_perms):
# """
# 获取新测试表格数据回调(进行表格相关增删查改操作后均会触发此回调)
# """
# query_params = dict(
# model_oneid=model_oneid,
# model_name_en=model_name_en,
# model_name_cn=model_name_cn,
# model_status=model_status_select,
# page_num=1,
# page_size=10
# )
# triggered_id = dash.ctx.triggered_id
# if triggered_id == 'modmak-list-table':
# query_params = dict(
# model_oneid=model_oneid,
# model_name_en=model_name_en,
# model_name_cn=model_name_cn,
# model_status=model_status_select,
# page_num=pagination['current'],
# page_size=pagination['pageSize']
# )
# if search_click or refresh_click or pagination or operations:
# table_info = get_modmak_list_api(query_params)
# if table_info['code'] == 200:
# table_data = table_info['data']['rows']
# table_pagination = dict(
# pageSize=table_info['data']['page_size'],
# current=table_info['data']['page_num'],
# showSizeChanger=True,
# pageSizeOptions=[10, 30, 50, 100],
# showQuickJumper=True,
# total=table_info['data']['total']
# )
# for item in table_data:
# if item['model_status'] == '0':
# item['model_status'] = dict(tag='正常', color='blue')
# else:
# item['model_status'] = dict(tag='停用', color='volcano')
# item['key'] = str(item['model_oneid'])
# item['operation'] = [
# {
# 'content': '修改',
# 'type': 'link',
# 'icon': 'antd-edit'
# } if 'system:modmak:edit' in button_perms else {},
# {
# 'content': '删除',
# 'type': 'link',
# 'icon': 'antd-delete'
# } if 'system:modmak:remove' in button_perms else {},
# ]
# return dict(
# modmak_table_data=table_data,
# modmak_table_pagination=table_pagination,
# modmak_table_key=str(uuid.uuid4()),
# modmak_table_selectedrowkeys=None,
# api_check_token_trigger={'timestamp': time.time()}
# )
# return dict(
# modmak_table_data=dash.no_update,
# modmak_table_pagination=dash.no_update,
# modmak_table_key=dash.no_update,
# modmak_table_selectedrowkeys=dash.no_update,
# api_check_token_trigger={'timestamp': time.time()}
# )
# raise PreventUpdate
# # 重置测试搜索表单数据回调
# app.clientside_callback(
# '''
# (reset_click) => {
# if (reset_click) {
# return [null, null, null, {'type': 'reset'}]
# }
# return window.dash_clientside.no_update;
# }
# ''',
# [Output('modmak-model_oneid-input', 'value'),
# Output('modmak-model_name_en-input', 'value'),
# Output('modmak-model_name_cn-input', 'value'),
# Output('modmak-model_status-select', 'value'),
# Output('modmak-operations-store', 'data')],
# Input('modmak-reset', 'nClicks'),
# prevent_initial_call=True
# )
# # 隐藏/显示测试搜索表单回调
# app.clientside_callback(
# '''
# (hidden_click, hidden_status) => {
# if (hidden_click) {
# return [
# !hidden_status,
# hidden_status ? '隐藏搜索' : '显示搜索'
# ]
# }
# return window.dash_clientside.no_update;
# }
# ''',
# [Output('modmak-search-form-container', 'hidden'),
# Output('modmak-hidden-tooltip', 'title')],
# Input('modmak-hidden', 'nClicks'),
# State('modmak-search-form-container', 'hidden'),
# prevent_initial_call=True
# )
# @app.callback(
# Output({'type': 'modmak-operation-button', 'index': 'edit'}, 'disabled'),
# Input('modmak-list-table', 'selectedRowKeys'),
# prevent_initial_call=True
# )
# def change_modmak_edit_button_status(table_rows_selected):
# """
# 根据选择的表格数据行数控制编辑按钮状态回调
# """
# outputs_list = dash.ctx.outputs_list
# print(11111111111,table_rows_selected)
# if outputs_list:
# if table_rows_selected:
# if len(table_rows_selected) > 1:
# return True
# return False
# return True
# raise PreventUpdate
# @app.callback(
# Output({'type': 'modmak-operation-button', 'index': 'delete'}, 'disabled'),
# Input('modmak-list-table', 'selectedRowKeys'),
# prevent_initial_call=True
# )
# def change_modmak_delete_button_status(table_rows_selected):
# """
# 根据选择的表格数据行数控制删除按钮状态回调
# """
# outputs_list = dash.ctx.outputs_list
# if outputs_list:
# if table_rows_selected:
# return False
# return True
# raise PreventUpdate
# @app.callback(
# output=dict(
# modal_visible=Output('modmak-modal', 'visible', allow_duplicate=True),
# modal_title=Output('modmak-modal', 'title'),
# form_value=Output({'type': 'modmak-form-value', 'index': ALL}, 'value'),
# form_label_validate_status=Output({'type': 'modmak-form-label', 'index': ALL, 'required': True}, 'validateStatus', allow_duplicate=True),
# form_label_validate_info=Output({'type': 'modmak-form-label', 'index': ALL, 'required': True}, 'help', allow_duplicate=True),
# api_check_token_trigger=Output('api-check-token', 'data', allow_duplicate=True),
# edit_row_info=Output('modmak-edit-id-store', 'data'),
# modal_type=Output('modmak-operations-store-bk', 'data')
# ),
# inputs=dict(
# operation_click=Input({'type': 'modmak-operation-button', 'index': ALL}, 'nClicks'),
# button_click=Input('modmak-list-table', 'nClicksButton')
# ),
# state=dict(
# selected_row_keys=State('modmak-list-table', 'selectedRowKeys'),
# clicked_content=State('modmak-list-table', 'clickedContent'),
# recently_button_clicked_row=State('modmak-list-table', 'recentlyButtonClickedRow')
# ),
# prevent_initial_call=True
# )
# def add_edit_modmak_modal(operation_click, button_click, selected_row_keys, clicked_content, recently_button_clicked_row):
# """
# 显示新增或编辑测试弹窗回调
# """
# #print('modmak11111111111111111111modmak')
# trigger_id = dash.ctx.triggered_id
# if trigger_id == {'index': 'add', 'type': 'modmak-operation-button'} \
# or trigger_id == {'index': 'edit', 'type': 'modmak-operation-button'} \
# or (trigger_id == 'modmak-list-table' and clicked_content == '修改'):
# # 获取所有输出表单项对应value的index
# form_value_list = [x['id']['index'] for x in dash.ctx.outputs_list[2]]
# # 获取所有输出表单项对应label的index
# form_label_list = [x['id']['index'] for x in dash.ctx.outputs_list[3]]
# if trigger_id == {'index': 'add', 'type': 'modmak-operation-button'}:
# modmak_info = dict(model_name_en=None,model_name_cn=None, model_oneid=None, model_status='0', remark=None)
# return dict(
# modal_visible=True,
# modal_title='新增测试',
# form_value=[modmak_info.get(k) for k in form_value_list],
# form_label_validate_status=[None] * len(form_label_list),
# form_label_validate_info=[None] * len(form_label_list),
# api_check_token_trigger=dash.no_update,
# edit_row_info=None,
# modal_type={'type': 'add'}
# )
# elif trigger_id == {'index': 'edit', 'type': 'modmak-operation-button'} or (trigger_id == 'modmak-list-table' and clicked_content == '修改'):
# if trigger_id == {'index': 'edit', 'type': 'modmak-operation-button'}:
# model_oneid = int(','.join(selected_row_keys))
# else:
# model_oneid = int(recently_button_clicked_row['key'])
# modmak_info_res = get_modmak_detail_api(model_oneid=model_oneid)
# if modmak_info_res['code'] == 200:
# modmak_info = modmak_info_res['data']
# return dict(
# modal_visible=True,
# modal_title='编辑测试',
# form_value=[modmak_info.get(k) for k in form_value_list],
# form_label_validate_status=[None] * len(form_label_list),
# form_label_validate_info=[None] * len(form_label_list),
# api_check_token_trigger={'timestamp': time.time()},
# edit_row_info=modmak_info if modmak_info else None,
# modal_type={'type': 'edit'}
# )
# return dict(
# modal_visible=dash.no_update,
# modal_title=dash.no_update,
# form_value=[dash.no_update] * len(form_value_list),
# form_label_validate_status=[dash.no_update] * len(form_label_list),
# form_label_validate_info=[dash.no_update] * len(form_label_list),
# api_check_token_trigger={'timestamp': time.time()},
# edit_row_info=None,
# modal_type=None
# )
# raise PreventUpdate
# @app.callback(
# output=dict(
# form_label_validate_status=Output({'type': 'modmak-form-label', 'index': ALL, 'required': True}, 'validateStatus',
# allow_duplicate=True),
# form_label_validate_info=Output({'type': 'modmak-form-label', 'index': ALL, 'required': True}, 'help',
# allow_duplicate=True),
# modal_visible=Output('modmak-modal', 'visible'),
# operations=Output('modmak-operations-store', 'data', allow_duplicate=True),
# api_check_token_trigger=Output('api-check-token', 'data', allow_duplicate=True),
# global_message_container=Output('global-message-container', 'children', allow_duplicate=True)
# ),
# inputs=dict(
# confirm_trigger=Input('modmak-modal', 'okCounts')
# ),
# state=dict(
# modal_type=State('modmak-operations-store-bk', 'data'),
# edit_row_info=State('modmak-edit-id-store', 'data'),
# form_value=State({'type': 'modmak-form-value', 'index': ALL}, 'value'),
# form_label=State({'type': 'modmak-form-label', 'index': ALL, 'required': True}, 'label')
# ),
# prevent_initial_call=True
# )
# def modmak_confirm(confirm_trigger, modal_type, edit_row_info, form_value, form_label):
# """
# 新增或编辑测试弹窗确认回调,实现新增或编辑操作
# """
# if confirm_trigger:
# # 获取所有输出表单项对应label的index
# form_label_output_list = [x['id']['index'] for x in dash.ctx.outputs_list[0]]
# # 获取所有输入表单项对应的value及label
# form_value_state = {x['id']['index']: x.get('value') for x in dash.ctx.states_list[-2]}
# form_label_state = {x['id']['index']: x.get('value') for x in dash.ctx.states_list[-1]}
# if all(validate_data_not_empty(item) for item in [form_value_state.get(k) for k in form_label_output_list]):
# params_add = form_value_state
# params_edit = params_add.copy()
# params_edit['model_oneid'] = edit_row_info.get('model_oneid') if edit_row_info else None
# api_res = {}
# modal_type = modal_type.get('type')
# if modal_type == 'add':
# api_res = add_modmak_api(params_add)
# if modal_type == 'edit':
# api_res = edit_modmak_api(params_edit)
# if api_res.get('code') == 200:
# if modal_type == 'add':
# return dict(
# form_label_validate_status=[None] * len(form_label_output_list),
# form_label_validate_info=[None] * len(form_label_output_list),
# modal_visible=False,
# operations={'type': 'add'},
# api_check_token_trigger={'timestamp': time.time()},
# global_message_container=fuc.FefferyFancyMessage('新增成功', type='success')
# )
# if modal_type == 'edit':
# return dict(
# form_label_validate_status=[None] * len(form_label_output_list),
# form_label_validate_info=[None] * len(form_label_output_list),
# modal_visible=False,
# operations={'type': 'edit'},
# api_check_token_trigger={'timestamp': time.time()},
# global_message_container=fuc.FefferyFancyMessage('编辑成功', type='success')
# )
# return dict(
# form_label_validate_status=[None] * len(form_label_output_list),
# form_label_validate_info=[None] * len(form_label_output_list),
# modal_visible=dash.no_update,
# operations=dash.no_update,
# api_check_token_trigger={'timestamp': time.time()},
# global_message_container=fuc.FefferyFancyMessage('处理失败', type='error')
# )
# return dict(
# form_label_validate_status=[None if validate_data_not_empty(form_value_state.get(k)) else 'error' for k in form_label_output_list],
# form_label_validate_info=[None if validate_data_not_empty(form_value_state.get(k)) else f'{form_label_state.get(k)}不能为空!' for k in form_label_output_list],
# modal_visible=dash.no_update,
# operations=dash.no_update,
# api_check_token_trigger=dash.no_update,
# global_message_container=fuc.FefferyFancyMessage('处理失败', type='error')
# )
# raise PreventUpdate
# @app.callback(
# [Output('modmak-delete-text', 'children'),
# Output('modmak-delete-confirm-modal', 'visible'),
# Output('modmak-delete-ids-store', 'data')],
# [Input({'type': 'modmak-operation-button', 'index': ALL}, 'nClicks'),
# Input('modmak-list-table', 'nClicksButton')],
# [State('modmak-list-table', 'selectedRowKeys'),
# State('modmak-list-table', 'clickedContent'),
# State('modmak-list-table', 'recentlyButtonClickedRow')],
# prevent_initial_call=True
# )
# def modmak_delete_modal(operation_click, button_click,
# selected_row_keys, clicked_content, recently_button_clicked_row):
# """
# 显示删除测试二次确认弹窗回调
# """
# trigger_id = dash.ctx.triggered_id
# if trigger_id == {'index': 'delete', 'type': 'modmak-operation-button'} or (trigger_id == 'modmak-list-table' and clicked_content == '删除'):
# if trigger_id == {'index': 'delete', 'type': 'modmak-operation-button'}:
# model_oneids = ','.join(selected_row_keys)
# else:
# if clicked_content == '删除':
# model_oneids = recently_button_clicked_row['key']
# else:
# raise PreventUpdate
# return [
# f'是否确认删除测试编号为{model_oneids}的测试?',
# True,
# {'model_oneids': model_oneids}
# ]
# raise PreventUpdate
# @app.callback(
# [Output('modmak-operations-store', 'data', allow_duplicate=True),
# Output('api-check-token', 'data', allow_duplicate=True),
# Output('global-message-container', 'children', allow_duplicate=True)],
# Input('modmak-delete-confirm-modal', 'okCounts'),
# State('modmak-delete-ids-store', 'data'),
# prevent_initial_call=True
# )
# def modmak_delete_confirm(delete_confirm, model_oneids_data):
# """
# 删除测试弹窗确认回调,实现删除操作
# """
# if delete_confirm:
# params = model_oneids_data
# delete_button_info = delete_modmak_api(params)
# if delete_button_info['code'] == 200:
# return [
# {'type': 'delete'},
# {'timestamp': time.time()},
# fuc.FefferyFancyMessage('删除成功', type='success')
# ]
# return [
# dash.no_update,
# {'timestamp': time.time()},
# fuc.FefferyFancyMessage('删除失败', type='error')
# ]
# raise PreventUpdate
# @app.callback(
# [Output('modmak-export-container', 'data', allow_duplicate=True),
# Output('modmak-export-complete-judge-container', 'data'),
# Output('api-check-token', 'data', allow_duplicate=True),
# Output('global-message-container', 'children', allow_duplicate=True)],
# Input('modmak-export', 'nClicks'),
# prevent_initial_call=True
# )
# def export_modmak_list(export_click):
# """
# 导出测试信息回调
# """
# if export_click:
# export_modmak_res = export_modmak_list_api({})
# if export_modmak_res.status_code == 200:
# export_modmak = export_modmak_res.content
# return [
# dcc.send_bytes(export_modmak, f'测试信息_{time.strftime("%Y%m%d%H%M%S", time.localtime())}.xlsx'),
# {'timestamp': time.time()},
# {'timestamp': time.time()},
# fuc.FefferyFancyMessage('导出成功', type='success')
# ]
# return [
# dash.no_update,
# dash.no_update,
# {'timestamp': time.time()},
# fuc.FefferyFancyMessage('导出失败', type='error')
# ]
# raise PreventUpdate
# @app.callback(
# Output('modmak-export-container', 'data', allow_duplicate=True),
# Input('modmak-export-complete-judge-container', 'data'),
# prevent_initial_call=True
# )
# def reset_modmak_export_status(data):
# """
# 导出完成后重置下载组件数据回调,防止重复下载文件
# """
# time.sleep(0.5)
# if data:
# return None
# raise PreventUpdate