2023-07-17 04:10:14 +08:00
|
|
|
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;
|
|
|
|
|
2023-07-18 20:57:02 +08:00
|
|
|
|
|
|
|
|
2023-07-17 04:10:14 +08:00
|
|
|
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<Control>();
|
|
|
|
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;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|