diff --git a/插件库/Lskj.Main/Hosting/README.md b/插件库/Lskj.Main/Hosting/README.md index 0673a43..934d1d0 100644 --- a/插件库/Lskj.Main/Hosting/README.md +++ b/插件库/Lskj.Main/Hosting/README.md @@ -18,7 +18,9 @@ Program.Main ## 外部宿主路线 -`.NET Framework 4.8` 的独立启动程序通过 `LegacyApplicationHost.Run` 注入 `IExternalMainShell`。旧程序仍负责 CEF、全局异常、配置、数据库、登录和子系统选择,只在 `RunMainForm` 位置回调外部主界面。 +`.NET Framework 4.8` 的独立启动程序通过 `LegacyApplicationHost.Run` 注入 `IExternalMainShell`。旧程序仍负责 CEF、全局异常、配置、数据库和登录;登录成功后自动保留当前有效子系统,或选择第一个有权限且启用的子系统,不再显示 `FrmSubSystem`,随后在 `RunMainForm` 位置回调外部主界面。 + +该跳过逻辑只在 `Manager.ExternalMainShell != null` 时生效。直接运行 `Ls_ERP.exe` 时仍保留原子系统选择页和原有循环。 `IExternalMainShell` 当前承担: diff --git a/插件库/Lskj.Main/Model/Manager.cs b/插件库/Lskj.Main/Model/Manager.cs index f34e07f..3f49a41 100644 --- a/插件库/Lskj.Main/Model/Manager.cs +++ b/插件库/Lskj.Main/Model/Manager.cs @@ -185,7 +185,13 @@ namespace Lskj.Main.Model bool isOpenBs = false; DialogResult result; - if (ERPInfo.Instance.SubMenuCount > 1 && !skipMenu) + if (ExternalMainShell != null) + { + // WPF 主框架已经提供顶部子系统导航,不再打开旧 FrmSubSystem。 + // 优先保留当前仍有权限的子系统,否则选择第一个可用子系统。 + isStart = SelectExternalMainShellSubSystem(); + } + else if (ERPInfo.Instance.SubMenuCount > 1 && !skipMenu) { // 进入子系统界面 result = RunSubSystemForm(); @@ -201,7 +207,13 @@ namespace Lskj.Main.Model StartForm(); return; } - if (ERPInfo.Instance.SubMenuCount > 1) + if (ExternalMainShell != null) + { + // 外部主界面关闭即结束本次 WPF 入口,不返回旧子系统选择页。 + ExitSystem(); + return; + } + else if (ERPInfo.Instance.SubMenuCount > 1) { ReStartMain(); } @@ -684,6 +696,50 @@ namespace Lskj.Main.Model BsUrl = _frmSubSystem.BsUrl; return dialogResult; } + + /// + /// 为外部 WPF 主框架选择登录后的初始子系统。 + /// 旧 WinForms 入口仍由 FrmSubSystem 完成人工选择。 + /// + private static bool SelectExternalMainShellSubSystem() + { + string where = string.IsNullOrEmpty(ERPInfo.Instance.SeriesId) + ? string.Empty + : string.Format("and SeriesId={0}", ERPInfo.Instance.SeriesId); + DataTable subSystems = MainImpl.GetSubSystems(where); + if (subSystems == null || subSystems.Rows.Count == 0) + { + MessageUtil.Show(ResourceKeys.SubSystemUnEnabled); + return false; + } + + DataRow selectedRow = subSystems.AsEnumerable().FirstOrDefault(row => + IsEnabledSubSystem(row) && + string.Equals( + row["SubSysId"] + string.Empty, + ERPInfo.Instance.SubSysId, + StringComparison.OrdinalIgnoreCase)); + if (selectedRow == null) + selectedRow = subSystems.AsEnumerable().FirstOrDefault(IsEnabledSubSystem); + if (selectedRow == null) + { + MessageUtil.Show(ResourceKeys.SubSystemUnEnabled); + return false; + } + + ERPInfo.Instance.SubMenuCount = subSystems.AsEnumerable().Count(IsEnabledSubSystem); + ERPInfo.Instance.SubSysId = selectedRow["SubSysId"] + string.Empty; + ERPInfo.Instance.SubSysName = selectedRow["SubSysName"] + string.Empty; + return true; + } + + private static bool IsEnabledSubSystem(DataRow row) + { + return row != null && + row.Table.Columns.Contains("UseEd") && + row["UseEd"] != DBNull.Value && + Convert.ToBoolean(row["UseEd"]); + } /// /// 说明:打开主程序 /// 创建人:龚宇超