@namespace TelegramPanel.Web.Components.Dialogs @using Microsoft.AspNetCore.Components @using TelegramPanel.Web.Modules @inject ModuleContributionRegistry Contributions @if (!string.IsNullOrWhiteSpace(error)) { @error } else if (componentType == null) { } else { } 关闭 @code { [CascadingParameter] private MudDialogInstance MudDialog { get; set; } = default!; [Parameter] public string ModuleId { get; set; } = ""; [Parameter] public string PageKey { get; set; } = ""; private string? error; private Type? componentType; private Dictionary parameters = new(); protected override void OnParametersSet() { error = null; componentType = null; parameters = new Dictionary(); var moduleId = (ModuleId ?? "").Trim(); var pageKey = (PageKey ?? "").Trim(); if (moduleId.Length == 0 || pageKey.Length == 0) { error = "参数无效"; return; } var page = Contributions.Pages.FirstOrDefault(p => string.Equals(p.Module.Id, moduleId, StringComparison.OrdinalIgnoreCase) && string.Equals(p.Definition.Key, pageKey, StringComparison.OrdinalIgnoreCase)); if (page == null) { error = $"未找到扩展页面:{moduleId}/{pageKey}"; return; } var typeName = (page.Definition.ComponentType ?? "").Trim(); if (typeName.Length == 0) { error = "模块页面未配置 componentType"; return; } var moduleTypeName = NormalizeModuleTypeName(typeName); componentType = Type.GetType(typeName, throwOnError: false, ignoreCase: false) ?? page.Module.Instance.GetType().Assembly.GetType(moduleTypeName, throwOnError: false, ignoreCase: false); if (componentType == null) { error = $"无法加载组件类型:{typeName}"; return; } parameters = new Dictionary { ["ModuleId"] = moduleId, ["PageKey"] = pageKey }; } private static string NormalizeModuleTypeName(string typeName) { typeName = (typeName ?? "").Trim(); if (typeName.Length == 0) return typeName; var comma = typeName.IndexOf(',', StringComparison.Ordinal); if (comma > 0) return typeName.Substring(0, comma).Trim(); return typeName; } private void Close() => MudDialog.Close(); }