using Godot; using System; using System.Collections.Generic; using System.Net.Http; // ReSharper disable MemberCanBePrivate.Global namespace BITKit; public partial class FormBuilder : Node { [ExportCategory(Constant.Header.Providers)] [Export] private FormWeaverResource formWeaver; [Export] private FormDBProvider formDBProvider; [ExportCategory("UI 绑定")] [Export] private NodeBuilder nodeBuilder; [Export] private Button submitButton; [Export] private RichTextLabel logLabel; public override void _Ready() { try { nodeBuilder.Clear(); if (submitButton is not null && formDBProvider is not null) submitButton.Pressed += Submit; } catch (Exception) { GD.PushWarning(GetPath()); throw; } } public override void _EnterTree() { formWeaver.formBuilder = this; formWeaver.OnStart(); } public override void _ExitTree() { formWeaver.OnStop(); } public void Build(FormResource formProvider) { nodeBuilder.Clear(); formWeaver.Clear(); foreach (var formField in formProvider.Fields) { var container = nodeBuilder.Build(); formWeaver.Weaver(container, formField); } } private void Submit() { try { var data = formWeaver.GetContent(); formDBProvider.Submit(data); logLabel.Text = "提交成功:" + DateTime.Now; } catch (Exception e) { logLabel.Text = e.Message + DateTime.Now; } } }