app.py 3.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. # -*- coding: utf-8 -*-
  2. """
  3. @author: yq
  4. @time: 2024/12/4
  5. @desc:
  6. """
  7. import matplotlib
  8. matplotlib.use('Agg')
  9. import gradio as gr
  10. from webui import f_project_is_exist, f_data_upload, engine, f_download_code, f_code_generate, f_get_sheet_data
  11. input_elems = set()
  12. elem_dict = {}
  13. with gr.Blocks() as demo:
  14. gr.HTML('<h1 ><center><font size="5">Strategy-Flow-Simulation</font></center></h1>')
  15. gr.HTML('<h2 ><center><font size="2">决策流快速仿真工具</font></center></h2>')
  16. with gr.Tabs():
  17. with gr.TabItem("策略仿真"):
  18. with gr.Row():
  19. with gr.Column():
  20. with gr.Row():
  21. project_name = gr.Textbox(label="项目名称", placeholder="请输入不重复的项目名称",
  22. info="项目名称将会被作为缓存目录名称,如果重复会导致结果被覆盖")
  23. with gr.Row():
  24. file_data = gr.File(label="策略文档", file_types=[".xlsx"], scale=3)
  25. sheet_name = gr.Dropdown(choices=["流程"], value="流程", label="策略查看", interactive=True,
  26. info="流程及节点信息查看", scale=1)
  27. with gr.Row():
  28. data_upload = gr.Dataframe(visible=False, label="当前上传数据", max_height=300)
  29. code_generate = gr.Button("生成代码", variant="primary")
  30. input_elems.update(
  31. {project_name, sheet_name, file_data, data_upload})
  32. elem_dict.update(dict(
  33. project_name=project_name,
  34. sheet_name=sheet_name,
  35. file_data=file_data,
  36. data_upload=data_upload,
  37. code_generate=code_generate
  38. ))
  39. with gr.Column():
  40. with gr.Row():
  41. generate_progress = gr.Textbox(label="生成进度", scale=4)
  42. download_code = gr.DownloadButton(label="代码下载", variant="primary",
  43. visible=False, scale=1)
  44. file_report = gr.File(visible=False)
  45. with gr.Row():
  46. code_view = gr.Code()
  47. input_elems.update(
  48. {generate_progress, download_code, file_report})
  49. elem_dict.update(dict(
  50. generate_progress=generate_progress,
  51. download_report=download_code,
  52. file_report=file_report
  53. ))
  54. engine.add_elems(elem_dict)
  55. project_name.change(fn=f_project_is_exist, inputs=input_elems)
  56. sheet_name.change(fn=f_get_sheet_data, inputs=input_elems, outputs=[data_upload])
  57. file_data.upload(fn=f_data_upload, inputs=input_elems, outputs=[data_upload, sheet_name])
  58. code_generate.click(fn=f_code_generate, inputs=input_elems,
  59. outputs=[generate_progress, code_view, download_code])
  60. download_code.click(fn=f_download_code, inputs=input_elems, outputs=download_code)
  61. demo.queue(default_concurrency_limit=5)
  62. demo.launch(share=False, show_error=True, server_name="0.0.0.0", server_port=18067)
  63. if __name__ == "__main__":
  64. pass