using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.ComponentModel; using System.Runtime.CompilerServices; namespace AI.Models.SpecialMessages { /// /// 网格化参数卡片的执行阶段 /// public enum GriddingParamCardPhase { /// 正在从业务层加载参数 Loading = 0, /// 参数已加载,等待用户编辑并点击生成 Ready = 1, /// 正在执行成图 Generating = 2, /// 成图完成 Done = 3, /// 出错(加载失败或成图失败) Error = 4, } /// /// 网格化参数设置综合卡片:将「获取参数」「编辑参数」「执行成图」合并到一张卡片。 /// 整个业务流程由卡片本身驱动,AI 只需调用一次展示此卡片; /// 用户确认参数后点击"生成"按钮,卡片自动完成参数设置和成图,最终摘要发回 AI。 /// public class GriddingParamCardMessage : ISpecialMessage, INotifyPropertyChanged { private GriddingParamCardPhase _phase = GriddingParamCardPhase.Loading; private string _statusMessage = string.Empty; private string _generateButtonLabel = "生成"; public string Id { get; set; } = Guid.NewGuid().ToString(); public string TypeName => "GriddingParamCard"; public bool IsLive => false; // ── 阶段控制 ────────────────────────────────────────────────────────── public GriddingParamCardPhase Phase { get => _phase; set { if (SetProperty(ref _phase, value)) { OnPropertyChanged(nameof(IsLoading)); OnPropertyChanged(nameof(ShowItems)); OnPropertyChanged(nameof(ShowGenerateButton)); OnPropertyChanged(nameof(IsGenerating)); OnPropertyChanged(nameof(IsDone)); OnPropertyChanged(nameof(IsError)); OnPropertyChanged(nameof(ShowDoneBadge)); OnPropertyChanged(nameof(ShowErrorMessage)); } } } // ── 状态派生属性 ───────────────────────────────────────────────────── /// 是否正在加载参数(显示 loading 占位) public bool IsLoading => _phase == GriddingParamCardPhase.Loading; /// 是否显示参数列表(非 Loading 阶段) public bool ShowItems => _phase != GriddingParamCardPhase.Loading; /// 是否显示"生成"按钮(Ready 阶段) public bool ShowGenerateButton => _phase == GriddingParamCardPhase.Ready; /// 是否正在执行成图 public bool IsGenerating => _phase == GriddingParamCardPhase.Generating; /// 成图是否已完成 public bool IsDone => _phase == GriddingParamCardPhase.Done; /// 是否处于错误状态 public bool IsError => _phase == GriddingParamCardPhase.Error; /// 是否显示"成图完成"标记 public bool ShowDoneBadge => _phase == GriddingParamCardPhase.Done; /// 是否显示错误信息 public bool ShowErrorMessage => _phase == GriddingParamCardPhase.Error && !string.IsNullOrEmpty(_statusMessage); // ── 状态文案 ────────────────────────────────────────────────────────── /// 状态提示文案(加载中、错误信息、成功提示等) public string StatusMessage { get => _statusMessage; set { SetProperty(ref _statusMessage, value ?? string.Empty); OnPropertyChanged(nameof(ShowErrorMessage)); OnPropertyChanged(nameof(HasStatusMessage)); } } /// 是否有状态信息 public bool HasStatusMessage => !string.IsNullOrEmpty(_statusMessage); /// "生成"按钮文案(执行中可切换为"生成中...") public string GenerateButtonLabel { get => _generateButtonLabel; set => SetProperty(ref _generateButtonLabel, value ?? "生成"); } // ── 参数项列表 ──────────────────────────────────────────────────────── /// 参数项列表(从业务层加载后填充,用户可编辑) public ObservableCollection Items { get; } = new ObservableCollection(); // ── INotifyPropertyChanged ─────────────────────────────────────────── public event PropertyChangedEventHandler? PropertyChanged; protected void OnPropertyChanged([CallerMemberName] string? propertyName = null) => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); protected bool SetProperty(ref T field, T value, [CallerMemberName] string? propertyName = null) { if (EqualityComparer.Default.Equals(field, value)) return false; field = value; OnPropertyChanged(propertyName); return true; } } }