2025-06-22 21:53:37 +08:00
|
|
|
|
using Serein.Library;
|
|
|
|
|
|
using Serein.Library.Api;
|
2025-07-06 14:34:49 +08:00
|
|
|
|
using Serein.Library.Utils;
|
2025-06-22 21:53:37 +08:00
|
|
|
|
using Serein.NodeFlow.Services;
|
|
|
|
|
|
using System;
|
2025-06-02 19:17:30 +08:00
|
|
|
|
using System.Collections.Generic;
|
2025-06-22 21:53:37 +08:00
|
|
|
|
using System.Diagnostics;
|
2025-06-02 19:17:30 +08:00
|
|
|
|
using System.Linq;
|
|
|
|
|
|
using System.Text;
|
|
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
|
|
|
|
|
|
|
namespace Serein.NodeFlow.Model.Operation
|
|
|
|
|
|
{
|
2025-06-22 21:53:37 +08:00
|
|
|
|
internal interface IOperation
|
|
|
|
|
|
{
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 用于判断是否可以撤销
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
bool IsCanUndo { get; }
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 执行操作前验证数据
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
bool ValidationParameter();
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 执行操作
|
|
|
|
|
|
/// </summary>
|
2025-07-06 14:34:49 +08:00
|
|
|
|
Task<bool> ExecuteAsync();
|
2025-06-22 21:53:37 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 撤销操作
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
bool Undo();
|
|
|
|
|
|
}
|
2025-06-02 19:17:30 +08:00
|
|
|
|
|
2025-06-22 21:53:37 +08:00
|
|
|
|
internal abstract class OperationBase : IOperation
|
|
|
|
|
|
{
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 运行环境
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
[AutoInjection]
|
|
|
|
|
|
protected IFlowEnvironment flowEnvironment;
|
2025-06-02 19:17:30 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
2025-06-22 21:53:37 +08:00
|
|
|
|
/// 节点管理服务
|
2025-06-02 19:17:30 +08:00
|
|
|
|
/// </summary>
|
2025-06-22 21:53:37 +08:00
|
|
|
|
[AutoInjection]
|
|
|
|
|
|
protected FlowModelService flowModelService;
|
|
|
|
|
|
|
2025-07-06 14:34:49 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 节点管理服务
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
[AutoInjection]
|
|
|
|
|
|
protected UIContextOperation uiContextOperation;
|
|
|
|
|
|
|
2025-06-02 19:17:30 +08:00
|
|
|
|
/// <summary>
|
2025-06-22 21:53:37 +08:00
|
|
|
|
/// 流程依赖服务
|
2025-06-02 19:17:30 +08:00
|
|
|
|
/// </summary>
|
2025-06-22 21:53:37 +08:00
|
|
|
|
[AutoInjection]
|
2025-07-04 15:46:29 +08:00
|
|
|
|
protected FlowLibraryService flowLibraryManagement;
|
2025-06-02 19:17:30 +08:00
|
|
|
|
|
2025-06-22 21:53:37 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 流程事件服务
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
[AutoInjection]
|
|
|
|
|
|
protected IFlowEnvironmentEvent flowEnvironmentEvent;
|
2025-06-02 19:17:30 +08:00
|
|
|
|
|
2025-06-22 21:53:37 +08:00
|
|
|
|
public abstract string Theme { get;}
|
2025-06-02 19:17:30 +08:00
|
|
|
|
|
2025-06-22 21:53:37 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 是否支持特效
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public virtual bool IsCanUndo => true;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 验证参数
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
public abstract bool ValidationParameter();
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 执行
|
|
|
|
|
|
/// </summary>
|
2025-07-06 14:34:49 +08:00
|
|
|
|
public abstract Task<bool> ExecuteAsync();
|
2025-06-02 19:17:30 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 撤销
|
|
|
|
|
|
/// </summary>
|
2025-06-22 21:53:37 +08:00
|
|
|
|
public virtual bool Undo()
|
2025-06-02 19:17:30 +08:00
|
|
|
|
{
|
2025-06-22 21:53:37 +08:00
|
|
|
|
if (!IsCanUndo)
|
2025-06-02 19:17:30 +08:00
|
|
|
|
{
|
2025-06-22 21:53:37 +08:00
|
|
|
|
Debug.WriteLine($"该操作暂未提供撤销功能[{Theme}]");
|
|
|
|
|
|
return false;
|
2025-06-02 19:17:30 +08:00
|
|
|
|
}
|
2025-06-22 21:53:37 +08:00
|
|
|
|
return true;
|
2025-06-02 19:17:30 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
2025-06-22 21:53:37 +08:00
|
|
|
|
/// 导出操作信息
|
2025-06-02 19:17:30 +08:00
|
|
|
|
/// </summary>
|
2025-06-22 21:53:37 +08:00
|
|
|
|
public abstract void ToInfo();
|
|
|
|
|
|
|
2025-06-02 19:17:30 +08:00
|
|
|
|
|
2025-07-06 14:34:49 +08:00
|
|
|
|
protected async Task TriggerEvent(Action action)
|
|
|
|
|
|
{
|
|
|
|
|
|
/* if (OperatingSystem.IsWindows())
|
|
|
|
|
|
{
|
|
|
|
|
|
}*/
|
|
|
|
|
|
if (uiContextOperation is null)
|
|
|
|
|
|
{
|
|
|
|
|
|
action?.Invoke();
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
await uiContextOperation.InvokeAsync(() =>
|
|
|
|
|
|
{
|
|
|
|
|
|
action?.Invoke();
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2025-06-02 19:17:30 +08:00
|
|
|
|
|
2025-06-22 21:53:37 +08:00
|
|
|
|
}
|
2025-06-02 19:17:30 +08:00
|
|
|
|
|
|
|
|
|
|
internal class OperationInfo
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-06-22 21:53:37 +08:00
|
|
|
|
class Test {
|
2025-06-02 19:17:30 +08:00
|
|
|
|
|
2025-06-22 21:53:37 +08:00
|
|
|
|
|
2025-06-02 19:17:30 +08:00
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-06-22 21:53:37 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-06-02 19:17:30 +08:00
|
|
|
|
}
|