# -*- coding: utf-8 -*- """ @author: yq @time: 2024/12/4 @desc: """ import matplotlib matplotlib.use('Agg') import gradio as gr from webui import f_project_is_exist, f_data_upload, engine, f_download_code, f_code_generate, f_get_sheet_data input_elems = set() elem_dict = {} with gr.Blocks() as demo: gr.HTML('

Strategy-Flow-Simulation

') gr.HTML('

决策流快速仿真工具

') with gr.Tabs(): with gr.TabItem("策略仿真"): with gr.Row(): with gr.Column(): with gr.Row(): project_name = gr.Textbox(label="项目名称", placeholder="请输入不重复的项目名称", info="项目名称将会被作为缓存目录名称,如果重复会导致结果被覆盖") with gr.Row(): file_data = gr.File(label="策略文档", file_types=[".xlsx"], scale=3) sheet_name = gr.Dropdown(choices=["流程"], value="流程", label="策略查看", interactive=True, info="流程及节点信息查看", scale=1) with gr.Row(): data_upload = gr.Dataframe(visible=False, label="当前上传数据", max_height=300) code_generate = gr.Button("生成代码", variant="primary") input_elems.update( {project_name, sheet_name, file_data, data_upload}) elem_dict.update(dict( project_name=project_name, sheet_name=sheet_name, file_data=file_data, data_upload=data_upload, code_generate=code_generate )) with gr.Column(): with gr.Row(): generate_progress = gr.Textbox(label="生成进度", scale=4) download_code = gr.DownloadButton(label="代码下载", variant="primary", visible=False, scale=1) file_report = gr.File(visible=False) with gr.Row(): code_view = gr.Code() input_elems.update( {generate_progress, download_code, file_report}) elem_dict.update(dict( generate_progress=generate_progress, download_report=download_code, file_report=file_report )) engine.add_elems(elem_dict) project_name.change(fn=f_project_is_exist, inputs=input_elems) sheet_name.change(fn=f_get_sheet_data, inputs=input_elems, outputs=[data_upload]) file_data.upload(fn=f_data_upload, inputs=input_elems, outputs=[data_upload, sheet_name]) code_generate.click(fn=f_code_generate, inputs=input_elems, outputs=[generate_progress, code_view, download_code]) download_code.click(fn=f_download_code, inputs=input_elems, outputs=download_code) demo.queue(default_concurrency_limit=5) demo.launch(share=False, show_error=True, server_name="0.0.0.0", server_port=18067) if __name__ == "__main__": pass